Ядро - управление процессами
Управление процессами описывает запуск, остановку, возобновление и прекращение работы процессов. Понятия, которые стоят за процессами запуска и прекращения процессов, достаточно просты. Немного сложнее описать то, каким образом процесс использует центральный процессор в нормальном режиме работы.
В любой современной операционной системе несколько процессов функционируют «одновременно». Например, в одно и то же время вы можете запустить на компьютере браузер и открыть электронную таблицу. Тем не менее на самом деле, все обстоит не так, как выглядит: процессы, которые отвечают за эти приложения, как правило, не запускаются в точности в один момент времени.
Рассмотрим систему с одним центральным процессором. Его могут использовать несколько процессов, но в каждый конкретный момент времени
только один процесс может в действительности применять процессор. На практике каждый процесс использует процессор в течение малой доли секунды, а затем приостанавливается;после этого другой процесс применяет процессор в течение малой доли секунды; далее наступает
черед третьего процесса и т. д. Действие, при котором какой-либо процесс передает другому процессу управление процессором, называется переключением контекста.
Каждый отрезок времени – квант времени – предоставляет процессу достаточно времени для выполнения существенных вычислений (и, конечно же, процесс часто завершает свою текущую задачу в течение одного кванта). Поскольку кванты времени настолько малы, человек их не воспринимает и ему кажется, что в системе одновременно выполняется несколько процессов (такая возможность известна под
названием «многозадачность»).
Ядро отвечает за переключение контекста. Чтобы понять, как это работает, представим ситуацию, в которой процесс запущен в режиме пользователя, но его квант времени заканчивается. Вот что при этом происходит:
- Процессор (реальное аппаратное средство) прерывает текущий процесс, опираясь на внутренний таймер, переключается в режим ядра и возвращает ему управление.
- Ядро записывает текущее состояние процессора и памяти, которые будут необходимы для возобновления только что прерванного процесса.
- Ядро выполняет любые задачи, которые могли появиться в течение предыдущего кванта времени (например, сбор данных или операции ввода/вывода).
- Теперь ядро готово к запуску другого процесса. Оно анализирует список процессов, готовых к запуску, и выбирает какой-либо из них.
- Ядро готовит память для нового процесса, а затем подготавливает процессор.
- Ядро сообщает процессору, сколько будет длиться квант времени для нового процесса.
- Ядро переводит процессор в режим пользователя и передает процессору управление.
<callout type=“question” icon=“true”> Переключение контекста дает ответ на важный вопрос: когда работает ядро? Ответ следующий: ядро работает между отведенными для процессов квантами времени, когда происходит переключение контекста.</callout>
В системе с несколькими процессорами дело обстоит немного сложнее, поскольку ядру нет необходимости прекращать управление текущим процессором, чтобы позволить запуск какого-либо процесса на другом процессоре. И тем не менее, чтобы извлечь максимальную пользу из всех доступных процессоров, ядро все же так поступает (и может применить определенные хитрости, чтобы получить дополнительное процессорное время)