ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
1057379 Топик полностью
fk0, легенда (02.12.2020 13:28, просмотров: 529) ответил Dingo на Первое, что задышало.
Основной примитив -- ожидание множественных событий. У многих нет и это проблема. Но по крайней мере у многих есть event flags из TRON. У кого нет (есть и такие) -- невозможно же программировать, всё упирается в очередь и работает только по очереди... Второй больной момент -- реализация условной переменной (conditional variable). Нужна возможность побудки одновременно всего множества процессов её ожидающих. Последнее -- что-то вроде futex в линуксе и зачатки видны в моём 

примере (os_wait). А множественные события -- select в том же linux.


Планировщик не нужно вызывать из прерывания, нужно насильно вызвать прерывание (у меня в примере было). Хотя на самом деле можно сохранить и восстановить контекст не связанный с прерыванием, и опять же у меня в примере так и получается -- но это уже дефекты линукса, в котором контекст передаваемый в обработчик сигнала нельзя передать в setcontext()... С прерываниями просто проще: они контекст сохраняют, они же и восстанавливают. Если делать сохранение/восстановление контекста вне прерываний, то возникает проблема синхронизации с обработчиком прерываний. Нужно запретить прерывания на время переключения: от начала сохранения контекста, до конца восстановления. Думать над тем, как работать без прерываний, имеет смысл только в системах, где флажок прерывания не взвести.


fork() в МК ты не сделаешь -- там вообще вся память процесса "копируется" же, с помощью механизма copy on write (до того -- разделяется между обоими процессами). Для того страничная адресация нужна и механизм этот -- тяжёлый для мелких задачек (настолько, что изобрели vfork).

[ZX]