Skip to content

kernel_ru

Serge Vakulenko edited this page Aug 26, 2015 · 2 revisions

Ядро системы

Ядро системы оперирует объектами двух основных типов: 'задача' и 'мутекс'.

Задача представляет собой поток управления (thread). Каждая задача имеет отдельный стек.

В процессе выполнения задача может захватывать необходимые мутексы. При попытке захватить мутекс, занятый другой задачей, задача блокируется до момента освобождения мутекса. Таким образом, каждая задача может находиться в одном из двух состояний: выполняемом или заблокированном.

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

Для облегчения отладки каждая задача имеет также имя - текстовую строку.

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

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

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

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

You can’t perform that action at this time.