Чт апр 21, 2022 19:02:43
Чт апр 21, 2022 19:21:48
Чт апр 21, 2022 19:42:07
Чт апр 21, 2022 23:27:06
Например, вытесняющая RTOS разбивает длинные блоки на временнЫе слоты
Пт апр 22, 2022 05:12:38
Пт апр 22, 2022 07:59:26
Просто надо выбирать подход в зависимости от задачи, а не пытаться впихнуть задачу в рамки того, что умеешь делать.
Пт апр 22, 2022 08:34:49
Пт апр 22, 2022 09:15:38
Пт апр 22, 2022 11:50:52
А что делать, если вас так удивляют подобные вещи? Приходится их объяснять.Господин, и это вы мне объясняете, что является "старейшим подходом"?
Именно что одним из. И прерывания по таймеру являются обязательными только для вытесняющей многозадачности, когда ядро силой отбирает выполнение у потока. Но ведь есть еще кооперативная многозадачность, когда поток отдает управление добровольно.Ващета, прерывания являются одним из вариантов этой вашей многозадачности.
Можете придумать способ лучше? Без прерываний, естественно. Сам по себе вызов функции обозначает, что часть регистров не будет сохранена."встраивать в библиотеки код, определяющий достаточно ли времени прошло" - эт, извините, что-то с чем-то
Пт апр 22, 2022 13:32:06
while(1)
{
if(f0_ready)
{
f0_ready = 0;
Funct0();
}
if(f1_ready)
{
f1_ready = 0;
Funct1();
}
if(f2_ready)
{
f2_ready = 0;
Funct2();
}
}
Сам по себе вызов функции обозначает, что часть регистров не будет сохранена.
В частности, можно не сохранять половину регистров.
Пт апр 22, 2022 18:25:42
Ну хорошо, и как вы представляете себе это, как должен этот встраиваемый код определять, достаточно ли времени прошло, с какой периодичностью он должен проверять это, на что опираться, на чем основываться, а что он должен делать, если прошло недостаточно времени, а как быть с переносимостью кода, а что делать с уже скомпилированными и закрытыми библиотеками? Вот подумайте и ответьте на эти вопросы. Только конкретно.
Вы опять описываете вытесняющую многозадачность.Если хотите принудительно ограничить максимальную длительность каждой ф-ции, вы вовсе не должны встраивать внутрь этой функций никакого кода! Наоборот, вы должны запустить системный таймер, который бы по истечении выделенного интервала вызывал прерывание, а в прерывании происходила бы принудительная передача исполнения на следующую ожидающую исполнения ф-цию.
Если выполнение прервано "снаружи", надо сохранять все регистры, включая временные. Если "изнутри" - только обязательные для сохранения. Согласно большинству конвенций, часть регистров вызываемая функция имеет право не восстанавливать после завершения. Помимо РОНов, это могут быть регистры для FPU, флаги и т.п. Соответственно, при вытесняющей многозадачности ядро обязано сохранить вообще все регистры, а при кооперативной - небольшую кучку, помеченную обязательными.С чего бы это вдруг? Во-первых, никто не запрещает дописать сохранение нужных регистров (да оно так и делается, только для сишного текста незаметно).
Вам не мешает подробнее ознакомиться с внутрянкой ОС и её внутренней работой.
А две трети можно? А четыре пятых? А шесть вторых?
Что конкретно мне там посмотреть?Посмотрите подробнее тему касательно работы стека вызовов, работы указателя стека, различия между Main Stack Pointer и Process Stack Pointer, места хранения локальных переменных, посмотрите генерируемый ассемблерный код при вызовах и возвратах ф-ций.
Пт апр 22, 2022 18:31:51
strlen, помимо своей основной задачи смотрит системный таймер - прошло ли достаточно времени с предыдущего переключения.
Что конкретно мне там посмотреть?
Зависит от конвенции. Обычно сохраняемые это примерно половина от РОН.
Временные регистры не сохраняются, флаговые не сохраняются,
Вы опять описываете вытесняющую многозадачность.
Пт апр 22, 2022 19:55:47
То есть аргументов нет, и подтвердить свое высказывание вы не в силах.ТА НУУУ???? Ну что тут еще скажешь. Вы не правы, господин. С вами тут больше не о чем разговаривать.
Зачем вы предлагаете что-то там распиливать и вклеивать?! При чем здесь закрытые библиотеки?Потому как вы предлагаете распилить скомпилированные закрытые библиотеки (а что делать с лицензионными аналитическими библами??) и вклеить в них какой-то самопридуманный кусок кода.
Да как-то и не пытался, это вы начали какую-то ересь нести, а потом ее же пугаться.Извините, но подобную ересь можете мне не рассказывать.
Повторяю вопрос: что конкретно мне для вас посмотреть? "из чего состоит FreeRTOS" это слишком размытая тема.То, из чего состоит FreeRTOS, как она сделана, как работает.
Да, примерно то, что вы описали. Правда, я сталкивался больше чем с одним семейством контроллеров (хотя как раз с ARM немного), поэтому и сказал в общем виде.Автоматически сохраняются r0-r3, r12, psr и адрес возврата. Остальное сохраняется программно, это генерируется компилятором и незаметно на языке Си, но видно на ассемблере.
Что значит "встраивать"? В той ОС, в которой это использовалось, библиотеки изначально были написаны с расчетом на кооперативную многозадачность.Так это же вы её сами описали, написав, что "встраивать в библиотеки код, определяющий достаточно ли времени прошло". Если вы путаетесь в терминах и не понимаете разницы - ну это ваша проблема.
Пт апр 22, 2022 20:06:18
Зачем вы предлагаете что-то там распиливать и вклеивать?
при вытесняющей многозадачности надо сохранить вообще все регистры. А при кооперативной - только часть.
поток сам отдает управление тогда, когда сочтет нужным, прервать его невозможно.
ОС прерывает потоки тогда, когда хочется ей, помешать поток не может
Сб апр 23, 2022 09:21:23
Сб апр 23, 2022 11:51:43
Аргументов привел уже столько, что даже совсем упоротый дундук бы понял...
Это предложили ВЫ сами.
Лучше расскажите, что делать с текущими результатами работы С хранением стека задачи, с тем, где его хранить...
Слово "многозадачность" вам, как я понимаю, не говорит ни о чем.что делает невозможным распараллеливание работы.
Ну и зачем было придуриваться, если понимаете о чем речь?Хотя и есть системы на кооперативной многозадачности. Однако, в чистом виде она не дает больших преимуществ.
У вас на компе Винда то как работает?
Не "когда захочется", а по границам тайм-слотов. И "помешать" ей можно просто установкой более высокого приоритета по отношению к остальным задачам.
если что, никого не хотел обидеть
просто озвучил как эти терки выглядят со стороны
Сб апр 23, 2022 12:18:00
Цитату в студию!
Это ядро устанавливает свои таймеры и другие прерывания.
Задача может только попросить дать ей побольше времени.
Основные преимущества - чуть проще в реализации и чуть меньше накладных расходов.
Сб апр 23, 2022 13:40:31
Сб апр 23, 2022 15:38:25
Ну так учитесь читать длинные осмысленные посты. Если все же найдете в себе силы осваивать операционные системы, пригодится: там текста гораздо больше и он сложнее, чем мои объяснения на пальцах. Хотя если вы даже их понять не можете, у меня для вас плохие новости...COKPOWEHEU, многа букав пишите
Цитату в студию!та нивапрос!
Повторяю: мне неинтересно слушать ваши голословные обвинения и фантазии.Меня вы ничем не убедили, вы неправы, и точка. Пока не осознаете, в чем вы неправы и пока не разберетесь
У ядра есть один таймер - системный, отсчитывающий системные тики.
Задача, она что, человек чтоль, что "просит побольше времени"?
А до этого вы утверждали, что дескать "кооперативная многозадачность выгоднее"
Сб апр 23, 2022 16:10:05
Работа с железом - задача ОС, а не юзерспейса.
сли все же найдете в себе силы осваивать операционные системы,