
- •Раздел 3. Параллельное выполнение программ
- •3.1. Концепция процесса
- •3.2. Средства описания параллелизма
- •3.2.1. Графические средства
- •3.2.3. Описание процессов средствами uml
- •3.2.4. Языковые средства описания параллелизма
- •3.3. Организация ядра ос
- •3.3.1. Ядро как средство организации виртуальной машины
- •3.3.2. Состояния процесса и структура ядра
- •3.3.3. Дескрипторы процессов
- •3.3.4. Очереди процессов в ядре
- •3.4. Общая характеристика примитивов ядра
- •3.5. Примитивы создания и уничтожения процессов
- •3.6. Примитивы синхронизации процессов
- •3.6.1. Простейшие примитивы, не учтенные в классификации
- •3.6.2. Примитивы временной синхронизации
- •3.6.3. Примитивы событийной синхронизации процессов
- •3.7. Общий семафор как средство событийной синхронизации
- •3.8. Средства синхронизации в существующих операционных системах
- •3.9. Монитор как средство реализации взаимного исключения
- •3.10. Примитивы ядра для обмена сообщениями
- •3.10.1. Буфер как средство коммуникации между процессами
- •3.10.2. Почтовый ящик с очередью сообщений
- •3.10.3. Средства коммуникаций в существующих ос
- •3.11. Проблема тупиков при взаимодействии процессов
- •3.12. Планирование загрузки процессора в ядре
- •3.12.1. Классификация алгоритмов планирования
- •3.12.2. Тесты планируемости задач и классификация задач
- •3.12.3. Динамическое планирование
- •3.12.3.1. Планирование независимых задач
- •1. Алгоритм монотонной скорости.
- •2. Алгоритм “задача с минимальным предельным сроком завершения - первая”
- •3. Алгоритм минимальной неопределенности
- •3.12.3.2. Планирование зависимых задач
- •3.12.4. Статическое планирование
3.3.3. Дескрипторы процессов
Для управления процессами ЯДРО создает специальную структуру данных, описывающую процесс.
Эта структура данных обычно называется управляющим блоком или дескриптором.
Дескриптор является представителем процесса в ядре и содержит всю информацию, необходимую для управления процессом. Конкретная реализация дескриптора зависит от реализации ядра.
Например, мы в лабораторных работах создаем процессы, дескрипторы которых могут иметь следующее описание:
Type
Process = ^Descriptor;
Descriptor = Object
ssreg : Word;
spreg : Word;
StackAddr : Pointer;
StackSize : Word;
Priority : Word;
Next : Process;
Queue : Process;
Constructor Init(...);
Destructor Done; Virtual;
End {Descriptor};
Var
P : Process;
Begin
P := New(Process, Init(...));
...
Dispose(P, Done);
End.
P - Глобальная переменная среды, через которую осуществляется доступ к процессу для управления им.
Пример 2. Сегмент состояния задачи в защищенном режиме - TSS, структуру которого мы рассматривали раньше, является дескриптором, или может служить частью его, определенной архитектурой процессора.
Пример 3. Структура типа jmp_buf в СИ, которую мы тоже рассматривали раньше - это тоже дескриптор.
Вопрос (
В общем случае дескриптор процесса содержит следующие данные:
имя - уникальный идентификатор;
состояние виртуальной и реальной машины: 1. процессор (регистры, флаги); 2. память; 3. списки созданных ресурсов.
состояние: 1. активный; 2. готовый; 3. блокированный.
родственные связи: 1. родитель; 2. потомки.
данные для планирования: 1. приоритет; 2. указатели на следующий и предыдущий в очереди; 3. указатель на очередь, в которой находится.
)Вопрос
Важно, что структура дескриптора определяется разработчиком ядра, при этом содержание дескриптора усложняется с усложнением алгоритмов функционирования ядра.
3.3.4. Очереди процессов в ядре
Раз процессов в ядре много, а процессор один, то необходимо некоторое средство упорядочения процессов. В качестве такого средства упорядочения в ядре выступает очередь.
Очередь процессов в ядре - это фактически очередь дескрипторов процессов.
Из программирования известны списковые структуры данных. На этих структурах и основаны очереди процессов.
Три варианта построения очереди можно предложить.
Классический вариант, когда в структуру дескриптора включено поле - указатель на следующий процесс:
Более универсальный вариант
Коллекции - объект, который совмещает в себе достоинства списковой структуры - динамическое изменение размеров и массива - индексный доступ.
Объект - отсортированные коллекции позволяет учитывать приоритеты процессов.
Список - как объект может иметь следующее минимальное описание:
Type
PList = ^TList;
TList = Object
First : Process;
Constructor Init;
Destructor Done; Virtual;
Procedure Insert(P : Process);
Procedure Remove(P : Process);
End {TList};
Здесь перечислен минимальный набор методов объекта “список”. При необходимости это набор легко может быть расширен.
Списки процессов используются для организации планирования загрузки процессора.