Все современные операционные системы поддерживают многозадачность. Это означает, что система может выполнять несколько процессов одновременно; либо в псевдопараллельной (когда доступен только один ЦП), либо в настоящее время с многоядерными ЦП, распространенными параллельно (одна задача / ядро).
Давайте рассмотрим более простой случай, когда доступен только один процессор. Это означает, что если вы одновременно выполняете два разных процесса (скажем, веб-браузер и музыкальный проигрыватель), система не сможет выполнить их одновременно. Что происходит, так это то, что процессор все время переключается с одного процесса на другой; но это происходит очень быстро, поэтому вы никогда не замечаете этого.
Теперь давайте предположим, что пока эти два процесса выполняются, вы нажимаете кнопку сброса (плохой парень). Процессор немедленно остановит все, что делает, и перезагрузит систему. Поздравляем: вы сгенерировали прерывание.
Аналогичный случай, когда вы программируете и хотите запросить услугу у CPU. Разница в том, что в этом случае вы выполняете программный код - обычно библиотечные процедуры, которые выполняют системные вызовы (например, fopen
для открытия файла).
Таким образом, 1 описывает два разных способа привлечения внимания от процессора.
Большинство современных операционных систем поддерживают два режима выполнения: режим пользователя и режим ядра. По умолчанию операционная система работает в пользовательском режиме. Пользовательский режим очень ограничен. Например, все операции ввода / вывода запрещены; Таким образом, вы не можете открыть файл с вашего жесткого диска. Конечно, в реальности этого не происходит, потому что при открытии файла операционная система прозрачно переключается из режима пользователя в режим ядра. В режиме ядра у вас есть полный контроль над оборудованием.
Если вам интересно, почему существуют эти два режима, самый простой ответ - для защиты. Операционные системы на основе микроядра (например, MINIX 3) имеют большинство своих служб, работающих в пользовательском режиме, что делает их менее вредными. Монолитные ядра (такие как Linux) имеют почти все свои службы, работающие в режиме ядра. Таким образом, драйвер, который падает в MINIX 3, вряд ли разрушит всю систему, хотя в Linux это не является чем-то необычным.
Системные вызовы - это примитив, используемый в монолитных ядрах (совместно используемая модель данных) для переключения из режима пользователя в режим ядра. Передача сообщений - это примитив, используемый в микроядрах (модель клиент / сервер). Чтобы быть более точным, в системе передачи сообщений системные программисты также используют системные вызовы, чтобы привлечь внимание процессора. Передача сообщений видна только разработчикам операционной системы. Монолитные ядра, использующие системные вызовы, работают быстрее, но менее надежны, в то время как микроядра, использующие передачу сообщений, работают медленнее, но имеют лучшую изоляцию отказов.
Таким образом, 2 упоминает два разных способа переключения из режима пользователя в режим ядра.
Чтобы пересмотреть, наиболее распространенный способ создания программного прерывания, или ловушки, является выполнение системного вызова. С другой стороны, прерывания генерируются исключительно аппаратными средствами.
Когда мы прерываем процессор (программным или аппаратным), ему необходимо где-то сохранить его текущее состояние - процесс, который он выполняет и в какой момент он остановился, - иначе он не сможет возобновить процесс при переключении обратно. , Это называется переключением контекста, и это имеет смысл: перед тем, как выключить компьютер, чтобы сделать что-то еще, сначала необходимо убедиться, что вы сохранили все свои программы / документы и т. Д., Чтобы вы могли возобновить работу с того места, где вы остановили в следующий раз включишь :)
Таким образом, 3 объясняет, что нужно сделать после выполнения прерывания или прерывания и насколько похожи эти два случая.