Инструменты пользователя

Инструменты сайта


kernel_linux

Ядро

Ядро отвечает за управление задачами в четырех основных областях системы.

  1. Процессы. Ядро отвечает за то, каким процессам разрешен доступ к центральному процессору.
  2. Память. Ядру необходимо отслеживать состояние всей памяти: какая часть в данный момент отведена под определенные процессы, что можно выделить для совместного использования процессами и какая часть свободна.
  3. Драйверы устройств. Ядро выступает в качестве интерфейса между аппаратными средствами (например, жестким диском) и процессами. Как правило, управление аппаратными средствами выполняется ядром.
  4. Системные вызовы и поддержка. Обычно процессы используют системные вызовы для взаимодействия с ядром.

Управление процессами

Управление процессами описывает запуск, остановку, возобновление и прекращение работы процессов.

Действие, при котором какой-либо процесс передает другому процессу управление процессором, называется переключением контекста.

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

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

  1. Процессор (реальное аппаратное средство) прерывает текущий процесс, опираясь на внутренний таймер, переключается в режим ядра и возвращает ему управление.
  2. Ядро записывает текущее состояние процессора и памяти, которые будут необходимы для возобновления только что прерванного процесса.
  3. Ядро выполняет любые задачи, которые могли появиться в течение предыдущего кванта времени (например, сбор данных или операции ввода/вывода).
  4. Теперь ядро готово к запуску другого процесса. Оно анализирует список процессов, готовых к запуску, и выбирает какой-либо из них.
  5. Ядро готовит память для нового процесса, а затем подготавливает процессор.
  6. Ядро сообщает процессору, сколько будет длиться квант времени для нового процесса.
  7. Ядро переводит процессор в режим пользователя и передает процессору управление.

Управление памятью

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

 * ядро должно располагать собственной областью памяти, к которой не могут получить доступ пользовательские процессы;

  • каждому пользовательскому процессу необходима своя область памяти;
  • какой-либо пользовательский процесс не должен иметь доступ к области памяти, предназначенной для другого процесса;
  • пользовательские процессы могут совместно использовать память;
  • некоторые участки памяти для пользовательских процессов могут быть предназначены только для чтения;
  • система может применять больше памяти, чем ее есть в наличии, задействовав в качестве вспомогательного устройства дисковое пространство.

У ядра есть помощник. Современные процессоры содержат модуль управления памятью (MMU), который активизирует схему доступа к памяти под названием «виртуальная память».

Драйверы устройств и управление ими

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

Системные вызовы и поддержка

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

kernel_linux.txt · Последние изменения: 2016/01/19 06:14 — sander