
- •Раздел 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.3.1. Ядро как средство организации виртуальной машины
Вопрос (
Мы сказали, что существует средство, которое скрывает от пользователя технику реализации процессов, обеспечивая совместное использование машины несколькими процессами. Это средство называется ЯДРОМ.
Существует множество определений ЯДРА и в принципе может идти речь об уровнях рассмотрения этого понятия. На самом высоком уровне Ядро - это средство предоставления реального физического процессора многим процессам. Само понятие ПРОЦЕСС эквивалентно понятию виртуального процессора, т.к. механизм переназначения процессора изолируется ядром от пользователя.
Т.е. речь здесь идет об организации для каждого пользователя некоторой виртуальной машины, идентичной по своему интерфейсу физической машине.
Ядро - это средство организации виртуальных машин. Каждому процессу предоставляется виртуальная машина с таким же интерфейсом, как если бы на машине выполнялся один единственный процесс.
Но, строго говоря, эквивалентность физической машины и виртуальной машины может быть реализована лишь приблизительно. С этой точки зрения у виртуальных машин есть следующие особенности:
увеличение числа виртуальных машин, реализованных на одной физической машине, ухудшает их качество;
интерфейс виртуальной машины чаще всего является частью интерфейса физической машины, из которого исключен прямой доступ к периферийным устройствам.
Схематично систему виртуальных машин, реализованную на одной физической машине, можно представить следующим образом:
Каждый процесс выполняется так, как будто процессор, память, средства ввода/вывода и файловая система предоставлены только ему одному, хотя на самом деле это не так.
До тех пор пока процессы не пытаются работать с одним и тем же ресурсом, например, с файлом, проблем, в общем-то не возникает. Они возникают при попытке доступа нескольких процессов к одному ресурсу.
Ядро организует и координирует предоставление ресурсов различным процессам. Самый первый из совместно используемых ресурсов - это процессор. Детальный анализ взаимодействия процесса и процессора приводит к появлению понятия СОСТОЯНИЕ ПРОЦЕССА. Рассмотрим это понятие более подробно.
)Вопрос
3.3.2. Состояния процесса и структура ядра
Раз процессор один, а процессов несколько, то реально может выполняться только один процесс в каждый момент времени, а другие процессы приостановлены.
Про выполняющийся процесс говорят, что он находится в активном состоянии.
Про приостановленные процессы говорят, что они находятся в состоянии ожидания или блокированы. Такому описанию соответствует граф состояний процесса:
Ядро переводит процессы из одного состояния в другое.
Вопрос (
Рассмотрим подробнее причины блокирования процессов. Их два класса:
техническая
логическая
)Вопрос
Вопрос (
Техническая причина состоит в том, что процессор один, а процессов много;
)Вопрос
Вопрос (
логические причины.
Логические причины связаны с ожиданием различных событий, связанных с освобождением тех или иных ресурсов, требуемых процессу (кроме процессора).
)Вопрос
Процессы, приостановленные по первой причине, которые могли бы выполняться, но не выполняются только из-за отсутствия процессора, называются готовыми.
Блокированными, строго говоря, называются процессы, приостановленные по второй логической причине.
Вопрос (
Т.е. схема состояний процесса уточняется следующим образом:
)Вопрос
Если процессов много, готовых или блокированных, то необходимо некоторое средство, которое бы их как-то упорядочивало. В качестве такого средства выступает ОЧЕРЕДЬ процессов.
Из готовых процессов создается очередь готовых процессов.
С блокированными процессами дело обстоит сложнее. Из них создается столько очередей, сколько имеется причин блокировки. На каждую причину создается своя очередь.
После проведенных рассуждений станет понятной следующая структура ядра - ядро - это набор очередей процессов и средств перевода процессов из одних очередей в другие и в активное состояние:
Вопрос (
)Вопрос
Средства ядра делятся на два вида:
Д - диспетчер - это обработчик прерываний от таймера, который переводит активный процесс в очередь готовых, а из очереди готовых выбирает новый активный процесс;
Вопрос (
П - планировщик - это набор процедур ядра, которые вызываются активным процессом. Вызовом такой процедуры активный процесс или блокируется сам, переводя себя в одну из очередей блокированных процессов, или переводит другие процессы из одних очередей в другие, чаще всего - это переводы из очереди блокированных в очередь готовых. Процесс блокирует себя, если ему нужен ресурс, который в данный момент занят, а если освобождает ресурс, то разблокирует кого-то другого, ждущего этот ресурс.
)Вопрос
Вопрос (
Вызов процедуры планировщика - это вызов супервизора (процедуры ОС) по нашей классификации способов переключения контекста.
)Вопрос
Вызов процедуры планировщика в ядре рассматривается как событие. Такая процедура, как правило, завершается пересмотром очередей ожидания и выбором нового активного процесса.
Вопрос (
Поэтому в ядре многозадачной среды может существовать два способа переключения задач:
по времени - с помощью диспетчера;
по событию - с помощью планировщика.
)Вопрос
Г
рафически
это может быть представлено следующим
образом:
Использовать только первый способ переключения задач нерационально, т.к. некоторые процессы находятся в очередях блокированных процессов, а диспетчер имеет дело только с очередью готовых процессов.
Использовать только второй способ также нерационально, т.к. если процесс не вызывает процедуру планировщика, то очереди не будут пересмотрены и окажется возможным длительный захват процессора одним процессом.
Деление средств ядра на планировщик и диспетчер можно обобщить и говорить об уровнях планирования загрузки процессора, которые мы рассмотрим после знакомства с понятием ДЕСКРИПТОР ПРОЦЕССА и ОЧЕРЕДИ ПРОЦЕССОВ.