Найти в Дзене

Погружение в Linux #3

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

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

Как ядро управляет процессами. Под управлением будем понимать запуск, остановку, возобновление и прекращение работы процесса. Так вот, допустим у нас есть одноядерный однопоточный процессор. В один момент он может обрабатывать только один процесс, хотя пользователь может работать одновременно с несколькими приложениями. В чем подвох? А фокус в том, что процессору приходится жонглировать несколькими процессами, т.е. в течение одной доли секунды он выполняет приказы одной программы, в течение следующей доли секунды – другой, и так по кругу. Такая передача доступа к ЦП от процесса к процессу называется переключением контекста, а та «доля секунды» - квантом времени. Роль ядра – руководить всей этой свистопляской.

Давайте пошагово рассмотрим, как происходит «передача эстафеты»:

1) Квант времени текущего процесса (в процессоре есть таймер для отслеживания времени) заканчивается и ЦП прерывает его;

2) Ядро записывает текущее состояние процессора и памяти (а я напоминаю, что это всего лишь последовательность битов) для того, чтобы потом возобновить процесс;

3) Затем Ядро выполняет все те задачи, которые могли возникнуть во время уже закончившегося кванта времени (н. сбор данных);

4) Потом оно анализирует список процессов, готовых к запуску, и выбирает какой-то из них;

5) Теперь ядрышко подготавливает память для нового процесса, а затем и сам ЦП, плюс еще сообщает ему сколько времени должен будет длиться квант;

6) Запуск процесса.

В итоге что имеем – ядро работает в промежуток между выполнением задач в процессоре.