памяти. Затем ядро настраивает карту памяти нового потока и загру-
жает его регистры, после чего новый поток готов к работе.
Программа планирования потоков также располагается в ядре.
Когда наступает пора проверить, не готов ли к работе новый поток,
например, после того, как истечет выделенный потоку квант времени
или по завершении процедуры обработки прерываний ввода-вывода,
ядро выбирает поток и выполняет переключение контекста,
необходимое, чтобы запустить этот поток. С точки зрения остальной
операционной системы переключение потоков автоматически
осуществляется более низкими уровнями, так что для более высоких
уровней не остается никакой работы. Сам алгоритм планирования
будет обсуждаться далее в разделе, посвященном процессам и
потокам.
Помимо предоставления абстрактной модели аппаратуры более
высоким уровням и управления переключениями потоков, ядро также
выполняет еще одну ключевую функцию: предоставляет низко-
уровневую поддержку двум классам объектов – управляющим
объектам и объектам диспетчеризации. Эти объекты не являются
объектами, к которым пользовательские процессы получают дескрип-
торы, но представляют собой внутренние объекты, на основе которых
исполняющая система строит объекты пользователя.
Управляющие объекты – это объекты, управляющие системой,
включая примитивные объекты процессов, объекты прерываний и два
объекта, называемых DPC и АРС. Объект DPC (Deferred Procedure
Call – отложенный вызов процедуры) используется, чтобы отделить
часть процедуры обработки прерываний, для которой время является
критичным, от той ее части, для которой время некритично. Как
правило, процедура обработки прерываний сохраняет несколько
аппаратных регистров, связанных с прерывающим устройством
ввода-вывода, чтобы их можно было потом восстановить, и разрешает
аппаратуре продолжать работу, но оставляет большую часть
обработки на потом. Например, когда пользователь нажимает на
клавишу, процедура обработки прерываний от клавиатуры считывает
из регистра код нажатой клавиши и разрешает прерывания от
клавиатуры. Но эта процедура не должна немедленно обрабатывать
введенный символ, особенно если в данный момент происходит нечто
более важное (то есть нечто с более высоким приоритетом). Пока
обработка клавиши занимает не более 100 мс, пользователь ничего не
Пример практической реализации
операционной системы: Windows 2000