разница между вытеснением и переключением контекста

Небольшое вступление,

В настоящее время я пишу маленькое (крошечное )ядро ​​RTOS, которое должно быть монолитным с большей частью ядра. Однако я не могу найти много информации о нескольких вещах, перечисленных ниже. Это было бы очень полезно, и, кроме того, на самом деле это не какой-то университетский проект, а то, чем я занимаюсь по собственному желанию.

Лучшей альтернативой ответам на все вопросы было бы, если бы вы могли сослаться на свободно доступную RTOS (или даже бесплатную книгу )для рук, предпочтительно , которые реализуют пользовательское пространство и являются вытесняемыми (, но не сложны, как линукс ). У Linux одна из худших документации, которые я когда-либо видел (Я пытался понять что-то из кода Linux, но есть просто тонны определений, разбросанных по миллиону файлов и функциональных хуков со странными именами и прочими вещами, которые переименовываются в каждой версии. тоже иногда шевелится...)

  1. В чем разница между «вытеснением» и «переключением контекста»?

  2. Каковы ключевые различия между вытесняющим и невытесняющим ядром? Какая работа требуется от программиста, чтобы сделать ядро ​​вытесняющим?

  3. Как создать и работать с пользовательским режимом?

    В документах ARM говорится, что в пользовательском режиме любая инструкция, переключающаяся в привилегированный режим, будет рассматриваться как неопределенная инструкция.

  4. Если да, то единственный способ для программы пользовательского пространства использовать код ядра — это системные вызовы?

  5. Как тогда ядро ​​​​отвечает или взаимодействует с пространством пользователя?

  6. Означает ли это, что единственным потоком ядра после загрузки (в простой системе )будет бездействующий поток?

  7. Если страница, на которой находится код ядра и данные, не отображается при переключении на пользовательский процесс,затем при системном вызове или прерывании, как выполняется код ядра без отображения в виртуальном адресном пространстве?

  8. Означает ли «вытесняемое ядро» только то, что ядро ​​было спроектировано таким образом, чтобы было безопасно переключать контекст во время выполнения кода ядра? или это требует дополнительной работы, если таковая имеется?

О, и если такие множественные вопросы здесь не разрешены, извините, ничего не нашел по этому поводу.

8
задан Dan 24 July 2012 в 03:19
поделиться