Всякий раз, когда загрузчик загружает операционную систему, по-видимому, только один поток программы активен, правильно? Это означало бы, что один процессор содержит указатель инструкции и выполняет команды, которые он обнаружил, в позиции, на которую указывает регистр EIP. В какой момент и как система начинает использовать больше процессов и/или потоков (без потоков пользователя, но потоки cpu)?
Низкоуровневое программирование: как ОС запускает новый поток/процесс?
Ответ 1
ОС будет загружаться (после завершения BIOS и загрузчика) в особую роль - поскольку первая программа для ее запуска будет иметь прямой доступ ко всем командам ЦП.
Таким образом, он настроит различные части системы - например, настройку Обработчики прерываний (или Процедуры обслуживания прерываний). Сделав это, у него есть возможность создать "планировщик".
Фактическая обработка процесса/потока будет выполняться этим планировщиком. Он решает, какие потоки будут запущены. Также он управляет всеми активными потоками. ЦП не знает обо всех этих вещах.
Как только главный администратор планировщика решает выполнить Thread (или "Process" ), он копирует данные процессов в регистры (и сохраняет регистры в недавно запущенный поток InfoBlock). Он сообщит CPU/таймеру, чтобы вызвать прерывание в n микросекундах (или другом тайм-ауте). Затем он скажет процессору запустить "программу" (о чем знает ЦП) в режиме без ОС (чтобы он не мог изменять критические данные или регистрировать собственные обработчики прерываний без разрешения).
Пока выполняется поток A, таймер аппаратного обеспечения будет работать. Как только он достигнет желаемого смещения по времени, он вызовет прерывание. Аппаратное обеспечение остановит выполнение текущей программы и вызовет зарегистрированный Interrupt Handler
, а затем. Этот обработчик будет методом планировщика (главным исполнителем, если быть точным).
Этот метод снова переоценит, какой поток должен быть запланирован, и поэтому планирование продолжается.
Ответ 2
Правильно, во время процесса загрузки есть только один поток выполнения. Обычно это происходит до тех пор, пока ОС не будет инициализирована до тех пор, пока не будут функционировать низкоуровневое управление памятью, планировщик и т.д.
Это даже в случае многопроцессорных систем - одно ядро - это "главный процессор", обрабатывающий ранний запуск до тех пор, пока инфраструктура не начнет запускать другие ядра.
В конце концов, он очень специфичен для ОС; Руководства разработчика программного обеспечения Intel Architecture содержат подробную информацию о технических характеристиках оборудования. (Предполагая, что вы говорите об архитектуре Intel, другие архитектуры могут сильно отличаться.)
Ответ 3
Одной из первых вещей, с которой должна запускаться (многопотоковая) ОС, является планировщик, который отвечает за управление несколькими процессами (и, следовательно, также управляет несколькими потоками ЦП, например, на многоядерных машинах).
Первый процесс, запущенный этим планировщиком, обычно является своего рода "init" процессом, который в свою очередь отвечает за загрузку других программ/процессов впоследствии.