Как ОС управляет запущенными программами

1218
fixer1234

Поскольку Windows является многозадачной ОС, она должна каким-то образом переключаться между процессами. Но как это сделать? Включает ли Windows какие-то точки останова в работающие программы, которые должны переключаться на другой процесс? Поскольку программа выполняется, она берет на себя управление процессором. Поэтому для включения многозадачности ОС должна включить в программу некоторую инструкцию прерывания. Я прав?

2

3 ответа на вопрос

3
Guffa

Нет, программа не получает полный контроль над процессором. Если это так, то есть другие вещи, которые перестали бы работать, такие как клавиатура, мышь, жесткие диски и т. Д ..

К ЦП подключены линии прерывания, которые сообщают ему, когда поступает информация с устройства. Например, нажатие клавиши вызывает сигнал прерывания, который останавливает текущее выполнение и запускает обработчик прерывания.

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

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

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

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

1
Amber

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

1
Andrew McGregor

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

Вы описываете «совместную многозадачность», где написаны приложения для регулярного возврата управления ОС. Хотя существует элемент, когда приложения ожидают завершения ввода данных пользователем, сети или диска, ОС, такая как Windows, также может запускать два приложения, которые ничего не ждут одновременно.

Аппаратное обеспечение имеет прерывания, которые дают контроль над определенным фрагментом кода в ядре, которое было установлено во время загрузки. Затем ядро ​​решает, что передать следующему; это работа планировщика.