- •Оглавление
- •7.1. Основные понятия 37
- •8.1. Основные понятия 47
- •14.1. Основные понятия 77
- •Введение
- •Раздел 1. Основные сведения об операционных системах Тема 1. Функции и классификация операционных систем
- •1.1. Функции ос
- •1.1. История ос
- •1.3. Классификация ос
- •По назначению
- •По режиму обработки задач
- •По способу взаимодействия с пользователем
- •По принципу построения
- •Вопросы для самоконтроля
- •Тема 2. Структура операционных систем. Системные вызовы
- •2.1. Структура ос
- •Монолитная структура (структура макроядра)
- •Иерархическая структура (многослойное ядро)
- •Структура микроядра
- •2.2. Выполнение системных вызовов
- •2.3. Понятие операционной и программной среды
- •Вопросы для самоконтроля
- •Раздел 2. Процессы и потоки Тема 3. Процессы
- •3.1. Основные сведения о процессах
- •Создание процессов
- •Завершение процессов
- •Иерархия процессов
- •3.2. Модели процесса Модель с двумя состояниями
- •Модель с пятью состояниями
- •3.3. Описание процессов
- •3.4. Управление процессами Создание процессов
- •Переключение процессов
- •3.5. Выполнение кода ос по отношению к процессам
- •Ядро вне процессов (автономное ядро)
- •Ядро в составе пользовательских процессов
- •Ос на основе процессов
- •Вопросы для самоконтроля
- •Тема 4. Системные вызовы управления процессами в ос unix
- •4.1. Создание процесса
- •4.2. Завершение процесса
- •4.3. Изменение образа памяти процесса
- •4.4. Синхронизация между родительским и дочерним процессами
- •4.5. Состояние "зомби"
- •Вопросы для самоконтроля
- •Тема 5. Сигналы в ос unix
- •5.1. Назначение сигналов
- •5.2. Обработка сигналов
- •5.3. Посылка сигнала процессу
- •Вопросы для самоконтроля
- •Тема 6. Потоки
- •6.1. Основные понятия
- •6.2. Основные операции с потоками
- •6.3. Способы реализации потоков в пространстве пользователя
- •В пространстве ядра
- •Смешанная реализация
- •Вопросы для самоконтроля
- •Тема 7. Взаимоблокировки
- •7.1. Основные понятия
- •Типы доступа к ресурсу
- •Условия возникновения взаимоблокировок
- •7.2. Моделирование взаимоблокировок
- •7.3. Обнаружение взаимоблокировок Обнаружение взаимоблокировок при наличии одного ресурса каждого типа
- •Обнаружение взаимоблокировок при наличии нескольких ресурсов каждого типа
- •7.4. Избежание взаимоблокировок Безопасные и небезопасные состояния
- •Алгоритм банкира для одного вида ресурса
- •Алгоритм банкира для нескольких видов ресурсов
- •Вопросы для самоконтроля
- •Раздел 3. Взаимодействие процессов Тема 8. Проблема взаимного исключения и способы ее решения
- •8.1. Основные понятия
- •8.2. Аппаратные способы достижения взаимного исключения Запрещение прерываний
- •Специальные команды, выполняющиеся атомарно
- •8.3. Программные способы достижения взаимного исключения Переменные блокировки.
- •Алгоритм Деккера
- •Алгоритм Петерсона
- •Вопросы для самоконтроля
- •Тема 9. Примитивы синхронизации
- •9.1. Семафоры Определение семафора
- •Применение семафоров
- •9.2. Мьютексы
- •9.3. Мониторы
- •Структура монитора
- •Вопросы для самоконтроля
- •Тема 10. Классические проблемы межпроцессного взаимодействия
- •10.1. Проблема производителя и потребителя
- •10.2. Задача о читателях и писателях
- •10.3. Задача об обедающих философах
- •10.4. Задача о спящем парикмахере
- •10.5. Задача о железнодорожном перегоне
- •Вопросы для самоконтроля
- •Тема 11. Межпроцессное взаимодействие в ос unix
- •11.1. Неименованные каналы
- •Синхронизирующие свойства неименованного канала
- •Системные вызовы для работы с неименованными каналами
- •Шаги в установлении связи через неименованный канал
- •Ограничения неименованных каналов
- •11.2. Именованные каналы
- •Использование именованных каналов
- •Синхронизирующие свойства именованных каналов
- •Системные вызовы для работы с именованными каналами
- •11.3. Очереди сообщений
- •11.4. Разделяемая память
- •Вопросы для самоконтроля
- •Тема 12. Передача сообщений
- •12.1. Характеристика систем передачи сообщений
- •12.2. Модель клиент-сервер
- •Вопросы для самоконтроля
- •Тема 13. Api сокетов ос unix
- •13.1. Межпроцессное взаимодействие при помощи сокетов
- •13.2. Системные вызовы работы с сокетами в ос unix Структура адреса сокета
- •Получить дескриптор сокета (создать сокет)
- •Указать адрес локальной оконечной точки
- •Перевод сокета в пассивный режим
- •Принять соединение с сокетом
- •Установить соединение с сервером.
- •Чтение данных из сокета и запись данных в сокет
- •Операции клиента и сервера
- •14.2. Критерии краткосрочного планирования.
- •14.3. Стратегии краткосрочного планирования. Первым поступил – первым обслужен
- •Кратчайшая задача – первая
- •Наименьшее оставшееся время выполнения
- •Циклическое планирование
- •Приоритетное планирование
- •Вопросы для самоконтроля
- •Раздел 5. Управление памятью Тема 15. Технологии распределения памяти
- •15.1. Фиксированное распределение
- •15.2. Динамическое распределение
- •15.3. Система двойников
- •15.4. Простая страничная организация
- •15.5. Простая сегментная организация
- •Вопросы для самоконтроля
- •Тема 16. Виртуальная память
- •16.1. Предпосылки для организации виртуальной памяти
- •16.2. Страничная организация виртуальной памяти
- •Структура таблицы страниц
- •16.3. Сегментация
- •16.4. Комбинация сегментации и страничной организации
- •16.5. Алгоритмы управления виртуальной памятью
- •Стратегия выборки
- •Стратегия размещения.
- •Стратегия замещения
- •Вопросы для самоконтроля
- •Раздел 6. Ввод-вывод и файловая система Тема 17. Ввод-вывод
- •17.1. Принципы программного обеспечения ввода-вывода
- •Способы осуществления ввода-вывода
- •17.2. Программные уровни ввода-вывода
- •Обработчики прерываний
- •Драйверы устройств
- •Независимое от устройств программное обеспечение ввода-вывода
- •Программное обеспечение ввода-вывода пространства пользователя
- •Вопросы для самоконтроля
- •Тема 18. Физическая организация файловой системы
- •18.1. Цели и задачи файловой системы
- •18.2. Устройство диска
- •18.3. Физическая организация и адресация файла
- •Вопросы для самоконтроля
- •Тема 19. Логическая организация файловой системы
- •19.1. Типы файлов
- •19.2. Иерархическая структура файловой системы
- •Имена файлов
- •Монтирование
- •19.3. Атрибуты файлов
- •Вопросы для самоконтроля
- •Литература
- •Перечень сокращений
Раздел 2. Процессы и потоки Тема 3. Процессы
3.1. Основные сведения о процессах
ЭВМ может одновременно выполнять несколько работ. Для этого ОС должна поддерживать мультипрограммный режим работы.
Преимущества мультипрограммного режима:
увеличение пропускной способности за счет лучшей загрузки устройств;
возможность совмещать длительные операции (например, печать) с другой полезной работой;
новые средства декомпозиции при разработке сложных систем, обрабатывающих различные асинхронные события.
В мультипрограммных ОС вводится понятие процесса. Процесс – это программа в момент выполнения и выделенные ей ресурсы. Часть ОС, осуществляющая управление процессами, называется диспетчер, или планировщик.
Создание процессов
Ниже перечислены причины создания процессов.
Инициализация системы. Обычно при запуске ОС создаются несколько процессов. Некоторые из них – высокоприоритетные, они обеспечивают взаимодействие с пользователем. Остальные – фоновые, они не связаны с конкретными пользователями и выполняют особые функции (обработка приходящей почты, вывод на печать и т.п.). Они называются демонами (daemon, Disk And Execution MONitor).
Создание процесса другим работающим процессом. При этом созданный процесс называется дочерним, а создавший его процесс – родительским.
Запрос пользователя на создание процесса.
Инициирование пакетного задания (на больших ЭВМ).
Независимо от причины создания процесса он всегда создается одинаково – при помощи системного вызова для создания нового процесса.
Завершение процессов
Ниже перечислены причины завершения процессов:
Обычное завершение.
Выход по неустранимой ошибке.
Уничтожение другим процессом.
Иерархия процессов
В некоторых операционных системах родительские и дочерние процессы остаются связанными между собой определенным образом. Дочерний процесс также может создать другие процессы, формируя дерево процессов. В UNIX процесс, все его "дети" и дальнейшие потомки образуют группу процессов.
3.2. Модели процесса Модель с двумя состояниями
На рис. 3.1, а представлена модель процесса с двумя состояниями, а на рис. 3.1, б – диаграмма использования очереди. Состояния процесса на рисунке изображены в виде эллипсов, дугами обозначены переходы между состояниями, надписи над дугами обозначают действие, вызвавшее переход между состояниями.
Создав новый процесс, ОС вводит его в систему в состоянии не выполняющегося. Созданный процесс ждет, пока он сможет быть запущен. Время от времени выполняющиеся процессы будут прерываться, и диспетчер будет выбирать для выполнения другой процесс.
Не выполняющиеся процессы следует организовать в очередь, где они ожидали бы своего выполнения. Элементы такой очереди – указатели на процессы. Процесс, работа которого прервана, переходит в очередь процессов, ожидающих выполнения. Если процесс завершен, он выводится из системы. Для выполнения диспетчер выбирает из очереди следующий процесс.
Модель с пятью состояниями
Модель с двумя состояниями неадекватно отражает реальность. Возможны две разные ситуации, когда процесс не выполняется:
ОС решила предоставить процессор на время другому процессу;
2) процесс блокируется, т.к. с точки зрения своей внутренней логики он не может выполняться далее (например, ожидает входные данные).
Поэтому в диаграмме состояний на рис. 3.2, а представлены три состояния процесса: выполняющийся (использует процессор); готовый к выполнению (процесс временно приостановлен, чтобы позволить выполняться другому процессу); блокированный (процесс не может быть запущен прежде, чем произойдет некоторое внешнее событие). Также добавлены еще два состояния: новый (только что созданный процесс, который не помещен операционной системой в очередь выполнимых процессов; это новый процесс, который еще не загружен в ОП); завершенный (процесс, удаленный из пула выполнимых процессов).
Возможны следующие переходы между состояниями:
Нулевое состояние -> Новый. Причины перехода между этими состояниями совпадают с причинами создания процессов.
Новый -> Готовый к выполнению. Этот переход произойдет, когда ОС будет готова к обработке дополнительного процесса, т.к. в большинстве ОС есть ограничение на количество процессов или на объем выделенной для процессов виртуальной памяти.
Готовый -> Выполняющийся. Этот переход происходит в момент выбора нового процесса для запуска.
Выполняющийся -> Завершающийся. Причины перехода между этими состояниями совпадают с причинами завершения процессов.
Выполняющийся -> Готовый к выполнению. Этот переход происходит чаще всего по истечении кванта времени, выделенного процессу. В некоторых ОС может произойти вытеснение процесса до истечения кванта (например, при появлении процесса с более высоким приоритетом).
Вытеснение (Preemtion) – ситуация, когда процесс лишается некоторого ресурса до того, как он завершит работу с ним.
Выполняющийся -> блокированный. Данный переход происходит, если для продолжения работы требуется наступление некоторого события (например, ожидание освобождения занятого ресурса; ожидание окончания операции ввода-вывода; ожидание сообщения от другого процесса).
Блокированный -> Готовый к выполнению. Данный переход происходит, когда наступает ожидаемое процессом событие.
На рис. 3.2, б показан один из способов реализации порядка очередности. Имеется две очереди: очередь готовых к выполнению и очередь заблокированных процессов. Каждый процесс, поступающий в систему для обработки, помещается в очередь готовых к выполнению процессов. ОС выбирает для выполнения процесс из этой очереди. Если схема приоритетов отсутствует, то очередь имеет тип FIFO. Когда выполнение процесса прерывается, то он, в зависимости от обстоятельств, может либо завершиться, либо попасть в одну из двух очередей. После того, как произойдет какое-либо событие, все ожидающие его процессы из очереди заблокированных перемещаются в очередь готовых процессов.
Недостатком такой схемы является то, что после любого события ОС должна просматривать всю очередь блокированных процессов, отыскивая среди них те, которые ожидают именно этого события. Поэтому эффективнее организовать несколько очередей, для каждого события – свою. Тогда при наступлении какого-либо события все процессы из соответствующей очереди могут быть переведены в очередь готовых к выполнению процессов. Если диспетчеризация осуществляется с использованием приоритетов, то можно организовать несколько очередей готовых процессов, по одной очереди на каждый уровень приоритета.
