
- •8 Взаимодействие процессов 79
- •9 Синхронизация процессов 87
- •10 Тупиковые ситуации 101
- •11 Управление памятью 114
- •12 Управление виртуальной памятью 132
- •13 Интерфейс файловой системы 138
- •14 Некоторые аспекты Реализации файловой системы 156
- •Литература 166 введение
- •Понятие операционной системы
- •Контрольные вопросы
- •Организация компьютерной системы
- •Архитектура компьютера с общей шиной
- •Структура памяти
- •Структура ввода-вывода
- •Контрольные вопросы
- •Классификация Операционных Систем
- •Поддержка многопользовательского режима.
- •Поддержка многопоточности
- •Многопроцессорная обработка
- •Особенности областей использования
- •Контрольные вопросы
- •Функциональные компоненты операционной системы
- •Управление процессами
- •Управление памятью
- •Управление файлами и внешними устройствами
- •Безопасность и защита данных
- •Интерфейс прикладного программирования
- •Пользовательский интерфейс
- •Контрольные вопросы
- •Структура операционной системы
- •Монолитные системы
- •Многоуровневые системы
- •Виртуальные машины
- •Экзоядро
- •Модель клиент-сервер
- •Контрольные вопросы
- •Процессы и потоки
- •Концепция процесса
- •Состояния процесса
- •Реализация процессов
- •Операции над процессами
- •1Создание процессов
- •2Завершение процессов
- •Контрольные вопросы
- •Планирование процессора
- •Планирование процессов. Очереди
- •Планировщики
- •Моменты перепланировки. Вытеснение
- •Переключение контекста
- •Диспетчеризация
- •Критерии планирования процессора
- •Стратегии планирования процессора
- •3Планирование в порядке поступления
- •Пример.
- •4Стратегия sjf
- •5Приоритетное планирование
- •6Карусельная стратегия планирования
- •7Очереди с обратной связью
- •8Гарантированное планирование
- •9Лотерейное планирование
- •10Планирование в системах реального времени
- •Планирование потоков
- •Оценка алгоритмов планирования
- •11Детерминированное моделирование
- •12Моделирование очередей
- •13Имитация
- •Контрольные вопросы
- •Взаимодействие процессов
- •Разделяемая память. Проблема производителя и потребителя
- •Взаимодействие путем передачи сообщений
- •14Буферизация
- •15Исключительные ситуации
- •Потерянные сообщения
- •Вызов удаленных процедур (rpc)
- •Контрольные вопросы
- •Синхронизация процессов
- •Взаимное исключение и критические участки
- •Синхронизация с помощью элементарных приемов нижнего уровня
- •16Запрещение прерываний
- •17Переменные блокировки
- •18Операция проверки и установки
- •Семафоры
- •19Использование семафоров
- •20Реализация семафоров
- •21Тупики и зависания
- •Классические проблемы синхронизации
- •22Проблема ограниченного буфера
- •23Проблема читателей и писателей
- •24Задача об обедающих философах
- •Двоичные семафоры
- •Сигналы
- •Контрольные вопросы
- •Тупиковые ситуации
- •Необходимые условия возникновения тупиков
- •Граф выделения и закрепления ресурсов
- •Методы решения проблемы тупиков
- •25Предотвращение тупиков
- •Взаимное исключение
- •Захват и ожидание
- •Отсутствие перераспределения
- •Условие кругового ожидания
- •26Обход тупиков
- •27Простейший алгоритм обхода тупика
- •28Алгоритм банкира
- •29Обнаружение тупиков
- •30Восстановление после тупика
- •Контрольные вопросы
- •Управление памятью
- •Функции операционной системы по управлению памятью
- •Типы адресов
- •Физическое и логическое адресное пространство
- •Связывание адресов
- •Динамическая загрузка
- •Динамическое связывание
- •Перекрытие программ в памяти
- •Свопинг
- •Смежное размещение процессов
- •31Простое непрерывное распределение
- •32Распределение с несколькими непрерывными разделами
- •Фрагментация
- •Страничная организация памяти
- •Сегментная организация памяти
- •Защита и совместное использование
- •Фрагментация
- •Сегментация в сочетании со страничной памятью
- •Контрольные вопросы
- •Управление виртуальной памятью
- •Подкачка страниц
- •Алгоритмы вытеснения страниц
- •33Случайный выбор (Random)
- •34«Первым пришел первым ушел» (fifo)
- •35Вытеснение по давности использования (lru)
- •36Вытеснение редко используемых страниц (lfu)
- •37Оптимальный алгоритм (opt)
- •Аномалии в алгоритмах страничной реализации
- •38«Толкотня» в памяти
- •39Аномалия Биледи
- •Эффективность и применимость виртуальной памяти
- •Пример.
- •Контрольные вопросы
- •Интерфейс файловой системы
- •Понятие файла. Атрибуты файла и операции с файлами
- •Операции над файлами
- •Типы файлов
- •Структура файлов
- •Методы доступа
- •40Последовательный метод доступа
- •41 Прямой метод доступа
- •42Другие методы доступа
- •Каталоги
- •Логическая структура каталога
- •43Одноуровневая структура каталога
- •44Двухуровневая структура каталога
- •45 Древовидная структура каталога
- •46Организация каталога в виде графа без циклов
- •47Организация каталога в виде произвольного (простого) графа
- •Проблемы защиты файлов
- •48Типы доступа
- •49Списки прав доступа
- •50Другие подходы к защите
- •Контрольные вопросы
- •Некоторые аспекты Реализации файловой системы
- •Общая структура файловой системы
- •Методы выделения дискового пространства
- •51Выделение непрерывной последовательностью блоков
- •52Связный список
- •53Таблица отображения файлов
- •54Индексные узлы
- •Управление свободным и занятым дисковым пространством
- •55Учет при помощи организации битового вектора
- •56Учет при помощи организации связного списка
- •57Размер блока
- •58Структура файловой системы на диске
- •Контрольные вопросы Литература
Взаимодействие путем передачи сообщений
Понятно, что развитые ОС должны обеспечивать функции взаимодействия процессов автоматически без участия прикладного программиста. Средства операционной системы, реализующие автоматическое взаимодействие процессов, носят наименования средств межпроцессной коммуникации (Inter Process Communication (IPC) facility). IPC предоставляет процессам средства передачи данных между ними и средства синхронизации их работы. Механизм IPC обычно базируется на концепции асинхронного обмена сообщениями.
Передача сообщений позволяет организовать межпроцессное взаимодействие без использования общих участков памяти, что делает ее особенно полезной в распределенных системах, где взаимодействующие процессы могут выполняться на разных компьютерах, соединенных сетью.
Функция системы обмена сообщениями – предоставление процессам возможности обмениваться информацией без использования общих переменных. Система обмена сообщениями предоставляет для этого две операции: Send и Receive.
Сообщения могут иметь как фиксированный, так и переменный размер. В первом случае операционной системе легче организовать обмен, но затрудняется работа прикладного программиста. Во втором случае, наоборот, сложнее организовать передачу, но работа программиста упрощается.
Для организации взаимодействия процессы должны ссылаться друг на друга. Возможны системы непосредственного обмена (direct communication) и системы опосредованного обмена (indirect communication). Система непосредственного обмена сообщениями предполагает, что одновременно в обмене могут участвовать только два процесса. Система опосредованного обмена предполагает, что в обмене могут участвовать более двух процессов.
При непосредственном обмене каждый процесс должен точно указать имя отправителя или получателя сообщения. При этой схеме синтаксис операций отправки и приема может быть следующим:
Send (P, message) – отправить сообщение с именем message процессу с именем Р.
Receive (Q, message) – получить сообщение с именем message от процесса с именем Q.
Приведем решение задачи «Производитель-потребитель» с использованием схемы непосредственного обмена сообщениями:
Процесс-производитель:
repeat .......... [Формируется очередной элемент в nextp] .......... send (Consumer, nextp); .......... until false;
|
Процесс-потребитель
repeat .......... Receive (Producer, nextc); .......... [Потребляется очередной элемент из nextc] .......... until false. |
В данном случае при определении синтаксиса операций send и receive использована симметричная адресация. Возможна и асимметричная адресация. В этом случае операции посылки/приема определяются следующим образом:
Send (P, message) – отправить сообщение с именем message процессу с именем Р.
Receive (id, message) – получить сообщение с именем message от некоторого процесса. Здесь переменная id содержит имя процесса, от которого получено сообщение.
В случае опосредованного обмена сообщения пересылаются и получаются из так называемых почтовых ящиков (mail boxes), часто называемых портами (ports). Каждый почтовый ящик имеет уникальное имя. Несколько процессов могут взаимодействовать друг с другом в том случае, если они имеют общий почтовый ящик. В этом случае примитивы Send и Receive имеют вид
Send (A, message) – пересылать сообщение с именем message в почтовый ящик с именем А.
Receive (A, message) – получить сообщение с именем message из почтового ящика с именем А.
Концепция межпроцессной коммуникации с помощью почтовых ящиков часто используется в операционных системах, управляющих распределенными компьютерными ресурсами локальных сетей. В этом случае сообщения передаются между компьютерами по линиям связи.
В том случае, когда несколько процессов используют один почтовый ящик, могут возникать проблемы. Предположим, что процессы P1, P2 и P3 имеют общий почтовый ящик А. Процесс P1 посылает сообщение в А, а процессы P2 и P3 пытаются получить сообщение из А. Возникает вопрос, какой процесс получит это сообщение. Существует несколько методов решения этой проблемы, например:
Разрешить пользование почтовым ящиком только двум процессам.
Разрешить только одному процессу выполнять операцию приема сообщений.
Разрешить операционной системе решать, какой из процессов получит сообщение. Система может сообщить отправителю имя получателя.