низкоуровневое программирование: как ОС запускает новый поток / процесс? - PullRequest
11 голосов
/ 12 апреля 2009

Всякий раз, когда загрузчик загружает операционную систему, предположительно активен только ОДИН поток программы, верно? Это будет означать, что один процессор удерживает указатель команд и выполняет команды, которые он находит в позиции, на которую указывает регистр EIP. В какой момент и как система начинает эксплуатировать больше процессов и / или потоков (без потоков пользовательского пространства, но с процессором)?

Ответы [ 3 ]

5 голосов
/ 12 апреля 2009

ОС будет загружаться (после того, как BIOS и загрузчик будут завершены) в специальной роли - первая запущенная программа будет иметь прямой доступ ко всем командам ЦП.

Таким образом, он будет настраивать различные части системы - например, настраивать Обработчики прерываний (или Программы обработки прерываний). Сделав это, он может создать «планировщик».

Фактическая обработка "процесс / поток" будет выполняться этим планировщиком. Он решает, какие потоки будут запущены. Также он управляет всеми активными потоками. Процессор не знает обо всех этих вещах.

Как только главный руководитель планировщика решает выполнить Thread (или «Process») A, он копирует данные процессов в регистры (и сохраняет эти регистры в InfoBlock недавно запущенного потока). Он укажет ЦПУ / таймеру на прерывание за n микросекунд (или другое время). Затем он сообщит процессору «запустить программу» (единственное, что знает процессор) в режиме, не связанном с ОС (чтобы он не мог изменять критические данные или регистрировать собственные обработчики прерываний без разрешения).

Пока выполняется поток A, аппаратный таймер запустится. Как только он достигает желаемого временного смещения, он вызывает прерывание. Аппаратное обеспечение затем остановит выполнение текущей программы и вместо этого вызовет зарегистрированную Interrupt Handler. Этот обработчик будет методом планировщика (если быть точным, главным исполнительным директором).

Этот метод затем повторно оценит, какой поток должен быть запланирован, и планирование продолжится.

4 голосов
/ 12 апреля 2009

Правильно, во время процесса загрузки существует только один поток выполнения. Обычно это происходит до тех пор, пока операционная система не инициализируется до точки, в которой функционируют низкоуровневое управление памятью, планировщик и т. Д.

Это даже в случае многопроцессорных систем - одно ядро ​​является «главным процессором», которое обрабатывает ранний запуск до тех пор, пока не появится инфраструктура для запуска других ядер.

В конце концов, это сильно зависит от ОС; Руководства разработчика программного обеспечения для архитектуры Intel содержат подробности технических характеристик оборудования. (Предположим, вы говорите об архитектуре Intel; другие архитектуры могут сильно отличаться.)

3 голосов
/ 12 апреля 2009

Одной из первых вещей (многопоточных) ОС должна быть запущена планировщик, который отвечает за управление несколькими процессами (и, следовательно, также управляет несколькими потоками ЦП, например, на многоядерных машинах).

Первый процесс, запускаемый этим планировщиком, обычно является своего рода процессом "init", который в свою очередь отвечает за загрузку других программ / процессов впоследствии.

...