- •Основы построения операционных систем
- •Введение
- •1. Основные аспекты операционных систем
- •1.1. Программные системы
- •1.2. Ресурсы вычислительных систем
- •1.3. Функции операционных систем
- •1.3.1. Упрощение доступа к компьютеру
- •1.3.2. Повышение эффективности использования ресурсов
- •1.4. Классификация операционных систем
- •2. Управление файлами
- •2.1. Файлы
- •2.1.1. Имя файла
- •2.1.2. Типы файлов
- •2.1.3. Атрибуты файла
- •2.2. Функции системы управления файлами
- •2.3. Способы организации файлов
- •2.3.1. Последовательное размещение
- •2.3.2. Размещение с помощью сцепленных блоков
- •2.3.3. Организация файлов на основе таблиц размещения
- •2.3.4. Размещение с использованием таблицы индексов
- •2.3.5. Индексно-последовательное размещение
- •2.3.6. Библиотечная структура данных
- •2.4. Методы доступа к содержимому файлов
- •2.4.1. Последовательный доступ
- •2.4.2. Прямой доступ
- •2.4.3. Другие методы доступа
- •2.5. Способы организации файловой структуры
- •2.6. Манипулирование файловой структурой
- •3. Управление памятью
- •3.1. Простое непрерывное распределение
- •3.2. Распределение с несколькими непрерывными разделами
- •3.2.1. Мультипрограммирование и разбиение на разделы
- •3.2.2. Разделы с фиксированными границами
- •3.2.3. Разделы с подвижными границами
- •3.2.4. Своппинг
- •3.3. Организация виртуальной памяти
- •3.3.1. Основные концепции виртуальной памяти
- •3.3.2. Страничная организация памяти
- •3.3.3. Сегментная организация памяти
- •3.3.4. Сегментно-страничная организация памяти
- •3.4. Управление виртуальной памятью
- •3.4.1. Алгоритмы выталкивания страниц
- •3.4.2. Подкачка страниц по запросу
- •3.4.3. Подкачка страниц с опережением
- •3.4.4. Освобождение страниц
- •3.4.5. Размер страниц
- •4. Управление процессами
- •4.1. Концепции процесса
- •4.1.1. Понятие последовательного процесса
- •4.1.2. Состояния процесса
- •4.1.3. Блок управления процессом
- •4.1.4. Планирование процессов
- •4.1.5. Обработка прерываний
- •4.2. Синхронизация параллельных процессов
- •4.2.1. Параллельная обработка
- •4.2.2. Взаимное исключение
- •4.2.3. Алгоритм Деккера
- •4.2.4. Аппаратная реализация взаимного исключения
- •4.2.5. Семафоры
- •4.2.6. Мониторы
- •4.2.7. Передача сообщений
- •4.3. Тупиковые ситуации
- •4.3.1. Условия возникновения дедлоков
- •4.3.2. Основные направления исследований по проблеме тупиков
- •4.3.3. Предотвращение тупиков
- •4.3.4. Обход дедлоков
- •4.3.5. Алгоритм банкира
- •4.3.6. Распознавание дедлоков
- •4.3.7. Восстановление после тупиков
- •5. Управление процессором
- •5.1. Диспетчеризация процессов
- •5.2. Приоритеты
- •5.3. Алгоритмы диспетчеризации с одной очередью
- •5.3.1. Алгоритм fcfs (первый пришедший обслуживается первым)
- •5.3.2. Алгоритм spn (кратчайший процесс - следующий)
- •5.3.3. Алгоритм srt (по наименьшему остающемуся времени)
- •5.3.4. Алгоритм hrrn (по наибольшему относительному времени ответа)
- •5.3.5. Алгоритм циклической диспетчеризации rr
- •5.3.6. Сравнение алгоритмов диспетчеризации с одной очередью
- •5.4. Многоуровневые очереди с обратными связями
- •6. Управление устройствами
- •6.1. Общая организация ввода-вывода
- •6.2. Методы управления периферийными устройствами
- •6.3. Действия по вводу-выводу
- •6.3.1. Буферизация : прочитать и записать
- •6.3.2. Блокирование : получить и поместить
- •6.3.3. Подготовка : открыть и закрыть
- •6.4. Управление магнитными дисками
- •6.4.1. Физическая структура магнитного диска
- •6.4.2. Физическая структура формата данных дискеты
- •6.4.3. Логическая структура магнитного диска
- •6.4.4. Планирование работы с магнитными дисками
- •Заключение
- •Список используемых источников
- •Оглавление
4.2.7. Передача сообщений
Взаимодействие между процессами при реализации взаимного исключения и семафоров осуществляется посредством обмена временными сигналами. Более тесное взаимодействие требует специальных средств связи, которые обеспечивают передачу и получение произвольных данных. Примерами последних служат данные, предназначенные для вывода на устройства построчной печати, запросы состояний (особенно устройств ввода-вывода) и даже почта от одного интерактивного пользователя к другому. В контексте связи между процессами все это называется сообщениями. В системе с одним процессором посылающий и получающий процессы не могут работать одновременно. В мультипроцессорных системах также нет никакой гарантии их одновременного исполнения. Следовательно, для хранения посланного, но еще не полученного сообщения необходимо место. Формально оно называется буфером сообщений, неформально - почтовым ящиком. Если объем передаваемых данных велик, то эффективнее не передавать их непосредственно, а отправлять в почтовый ящик сообщение, информирующее процесс-получатель о том, где можно их найти.
Почтовый ящик может быть связан с парой процессов, только с отправителем, только с получателем, или его можно получить из множества почтовых ящиков, которые используют все или несколько процессов. Если почтовый ящик не связан с процессами, то сообщение должно содержать идентификаторы и процесса-отправителя, и процесса-получателя. Почтовый ящик, связанный с процессом-получателем, облегчает посылку сообщений от нескольких процессов в фиксированный пункт назначения. Если используется множество почтовых ящиков, то каждый из них хранит либо сообщение, либо подтверждение. Чтобы гарантировать передачу подтверждений, когда все почтовые ящики заняты, подтверждение на сообщение помещается в тот же почтовый ящик, который был использован для сообщения, и он уже не используется для другого сообщения до тех пор, пока подтверждение не будет получено. Из-за того, что некоторые процессы не забрали свои сообщения, связь может быть приостановлена. Если каждое сообщение снабдить пометкой времени, то управляющая программа может периодически уничтожать старые сообщения. Процессы могут быть также остановлены в связи с тем, что другие процессы не смогли послать им сообщения. Если время поступления каждого остановленного процесса в очередь заблокированных процессов регистрируется, то управляющая программа может периодически посылать им пустые сообщения, чтобы они не ждали чересчур долго.
Реализация почтовых ящиков требует использования примитивных операторов низкого уровня, таких как Р и V, но пользователям можно дать средства более высокого уровня. Для организации связи между процессами используется множество 8-словных буферов для сообщений, очередь сообщений для каждого процесса, управляемая по дисциплине FIFO (первый пришел - первый обслужен), и следующие четыре операции, которые выполняются в непрерывном режиме:
1. Послать сообщение (получатель, сообщение, буфер)
2. Ждать сообщение (отправитель, сообщение, буфер)
3. Послать ответ (результат, ответ, буфер)
4. Ждать ответ (результат, ответ, буфер).
Послать сообщение переписывает сообщение в некоторый буфер, помещает его адрес в переменную буфер и добавляет буфер к очереди получатель. Процесс, выдавший операцию, продолжает исполнение.
Ждать сообщение блокирует процесс, выдавший операцию, до тех пор, пока в его очереди не появится какое-либо сообщение. Когда процесс устанавливается на процессор, он получает имя отправителя в переменной отправитель, текст сообщения - в сообщение и адрес буфера - в буфер. Затем буфер удаляется из очереди и процесс может записать в него ответ отправителю.
Послать ответ записывает ответ в тот буфер, из которого было получено сообщение, и добавляет буфер к очереди отправителя. Если отправитель ждет ответ, то он деблокируется.
Ждать ответ блокирует процесс, выдавший операцию, до тех пор, пока в буфер не поступит ответ. После того как ответ поступил и процесс установлен на процессор, ответ переписывается в память процессу, а буфер освобождается. Результат указывает, является ли ответ пустым, т. е. выданным операционной системой, так как сообщение было адресовано несуществующему процессу.
Описанные операции требуют, чтобы процесс обслуживал свою очередь в порядке FIFO и блокировал себя, пока другие процессы обрабатывают его запросы. Чтобы снять эти ограничения, вводятся следующие две операции:
5. Ждать событие (последний буфер, следующий буфер, результат)
6. Получить событие (буфер)
Ждать событие блокирует обратившийся процесс, пока событие (сообщение или ответ) не поступит в очередь за переменной последний буфер. После установки процесса на процессор адрес буфера, в который оно поступило, записывается в переменную следующий буфер, а результат сообщает, является событие сообщением или ответом.
Получить событие удаляет буфер из очереди обратившегося процесса. Если оно содержит сообщение, то буфер переводится в состояние, при котором он готов принять ответ. Если оно содержит ответ, то буфер освобождается. Обратившийся процесс должен сам переписать сообщение или ответ к себе в память прежде, чем обращаться к системе.
Основные достоинства использования буферов сообщений состоят в следующем:
1. Процессу не нужно знать о существовании других процессов до тех пор, пока он не получит сообщения от них.
2. Два процесса могут обмениваться более чем одним сообщением за один раз.
3. Операционная система может гарантировать, что никакой процесс не вмешается в беседу других процессов.
4. Очереди буферов позволяют процессу-отправителю продолжать работу, не обращая внимания на получателя.
Основным недостатком буферизации сообщений является появление еще одного ресурса, которым нужно управлять, а именно - множества буферов.