
- •1. Лекция: Понятие операционной системы (ос), цели ее работы. Классификация компьютерных систем
- •Введение
- •Комментарии к списку литературы
- •Краткое содержание курса
- •Почему важно знать операционные системы – мнение эксперта из Microsoft
- •Расцвет ос в 2000-х гг.
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Темы для курсовых работ, рефератов, эссе
- •2. Лекция: История ос. Отечественные ос. Диалекты unix. Режимы пакетной обработки, мультипрограммирования, разделения времени
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Темы для курсовых работ, рефератов, эссе
- •3. Лекция: Особенности ос для различных классов компьютерных систем. Ос реального времени. Ос для облачных вычислений
- •Введение
- •Особенности ос для персональных компьютеров
- •Параллельные компьютерные системы и особенности их ос.
- •Симметричные и асимметричные мультипроцессорные системы
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •4. Лекция: Архитектура компьютерной системы
- •Содержание
- •Введение
- •Архитектура компьютерной системы
- •Аппаратная защита адресов памяти в системах с теговой архитектурой
- •Организация аппаратной защиты памяти и процессора
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •5. Лекция: Архитектура ос. Управление процессами: Основные понятия. Семафоры и мониторы
- •6. Лекция: Обзор функций ос: управление памятью, файлами, процессами, сетями, командными интерпретаторами, сервисы ос, системные вызовы. Уровни абстракции ос. Архитектура unix и ms-dos
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •7. Лекция: Уровни абстракции ос. Ос с архитектурой микроядра. Виртуальные машины. Цели проектирования и разработки ос. Генерация ос
- •Механизмы и политики
- •Реализация операционных систем
- •Генерация операционной системы
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •8. Лекция: Управление процессами. Планирование и диспетчеризация процессов
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •9. Лекция: Методы взаимодействия процессов
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •10. Лекция: Потоки (threads) и многопоточное выполнение программ (multi-threading)
- •Потоки в Windows 2000
- •Потоки в Linux
- •Потоки в Java
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •11. Лекция: Стратегии и критерии диспетчеризации процессов
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •12. Лекция: Методы синхронизации процессов
- •Алгоритм решения проблемы критической секции
- •Алгоритм булочной (bakery algorithm)
- •Синхронизация на основе аппаратной поддержки атомарных операций
- •Синхронизация на основе общих семафоров
- •Реализация семафоров
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •13. Лекция: Тупики (deadlocks), методы предотвращения и обнаружения тупиков
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •14. Лекция: Алгоритм банкира
- •Методы обнаружения тупиков
- •Граф wait-for
- •Обнаружение тупиков для случая ресурсов с множественными экземплярами
- •Алгоритм обнаружения тупиков
- •Пример применения алгоритма обнаружения тупиков
- •Использование алгоритма обнаружения тупиков
- •Восстановление после тупика
- •Комбинированный подход к обработке тупиков
- •Ключевые термины
- •Краткие итоги
- •Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •15. Лекция: Управление памятью
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •16. Лекция: Страничная организация памяти
- •Хешированные таблицы страниц
- •Инвертированные таблицы страниц
- •Разделяемые страницы
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •17. Лекция: Сегментная организация памяти
- •Пример сегментной организации памяти
- •Пример использования разделяемых сегментов
- •Сегментно-страничная организация памяти в системах multics и "Эльбрус"
- •Сегментно-страничная организация памяти в системе Intel 386
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •18. Лекция: Виртуальная память
- •Страничная организация в Solaris
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •19. Лекция: Системы файлов
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •20. Лекция: Виртуальные файловые системы (vfs). Реализации файловых систем. Сетевая файловая система nfs
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •21. Лекция: Системы ввода-вывода
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •22. Лекция: Сети и сетевые структуры
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •23. Лекция: Классические и современные сетевые коммуникационные протоколы
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •24. Лекция: Безопасность операционных систем и сетей. Trustworthy Computing
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •25. Лекция: Обзор архитектуры и возможностей системы Linux: архитектура, ядро, распространение и лицензирование, принципы проектирования, управление процессами
- •Планирование задач ядра и синхронизация в ядре
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •26. Лекция: Обзор архитектуры и возможностей системы Linux: управление памятью, ресурсами, файловые системы, драйверы устройств, сети, безопасность
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •27. Лекция: Обзор архитектуры и возможностей систем Windows 2000/xp/2003/Vista/2008/7
- •Подсистемы окружения в Windows 2000
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •28. Лекция: Системные механизмы Windows
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •29. Лекция: Академическая программа Microsoft Shared Source Initiative. Открытое ядро Windows для изучения и исследований (Windows Research Kernel)
- •Пакет учебных ресурсов crk
- •Исследовательское ядро Windows Research Kernel
- •Проект ProjectOz
- •Контактная информация и ссылки
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •30. Лекция: ос для мобильных устройств. Windows Mobile
- •Перспективы ос для мобильных устройств
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •31. Лекция: ос для облачных вычислений (cloud computing). Windows Azure
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •32. Лекция: Перспективы операционных систем и сетей
- •Ключевые термины
- •Краткие итоги
- •Набор для практики Вопросы
- •Упражнения
- •Темы для курсовых работ, рефератов, эссе
- •Заключение
Темы для курсовых работ, рефератов, эссе
История синхронизации процессов (реферат).
Сравнение возможностей достоинств и недостатков различных средств синхронизации процессов (реферат).
Концепция семафора и ее использование для синхронизации процессов (реферат).
Концепция монитора и ее использование для синхронизации процессов (реферат).
Концепция критической области и ее использование для синхронизации процессов (реферат).
Классические задачи и схемы синхронизации процессов и их решение (реферат).
Средства синхронизации в ОС Solaris (реферат).
Средства синхронизации в ОС Windows 2000 (реферат).
Реализация алгоритмов решения задачи ограниченный буфер со взаимным исключением критических секций (курсовая работа).
Реализация алгоритма булочной (курсовая работа).
Реализация алгоритмов синхронизации процессов с использованием операций TestAndSet и Swap (в предположении, что они атомарны) (курсовая работа).
Реализация общих семафоров и операций над ними (курсовая работа).
Реализация двоичных семафоров и операций над ними (курсовая работа).
Реализация алгоритма синхронизации критических секций с использованием семафоров (курсовая работа).
Реализация общих семафоров с использованием двоичных семафоров (курсовая работа).
Реализация алгоритма решения задачи ограниченный буфер с использованием семафоров (курсовая работа).
Реализация алгоритма решения задачи читатели-писатели с использованием семафоров (курсовая работа).
Реализация алгоритма решения задачи, обедающие философы с использованием семафоров (курсовая работа).
Реализация алгоритма решения задачи читатели-писатели с использованием критических областей (курсовая работа).
Реализация алгоритма решения задачи, обедающие философы с использованием критических областей (курсовая работа).
Реализация критических областей и конструкции region с использованием семафоров (курсовая работа).
Реализация алгоритма решения задачи ограниченный буфер с использованием мониторов (курсовая работа).
Реализация алгоритма решения задачи читатели-писатели с использованием мониторов (курсовая работа).
Реализация мониторов и условных переменных с использованием семафоров (курсовая работа).
13. Лекция: Тупики (deadlocks), методы предотвращения и обнаружения тупиков
В лекции вводится понятие тупика (deadlock), рассматриваются модель системы, граф распределения ресурсов, граф wait-for, методы обработки и предотвращения тупиков.
Содержание
Введение
Проблема тупиков
Модель системы
Граф распределения ресурсов
Поиск тупиков по графу распределения ресурсов
Методы обработки тупиков
Предотвращение тупиков
Избегание тупиков
Ключевые термины
Краткие итоги
Набор для практики
Вопросы
Упражнения
Темы для курсовых работ, рефератов, эссе
Введение
Одна из важных задач операционной системы – распределение ресурсов компьютера между процессами. С данной задачей тесно связано понятие тупика (deadlock). В лекции введены базовые понятия, касающиеся распределения ресурсов и обнаружения тупиков. Рассмотрены следующие вопросы:
Модель системы
Граф распределения ресурсов
Характеристика тупиков
Обработка тупиков
Предотвращение тупиков.
Проблема тупиков
Тупик (deadlock) – множество заблокированных процессов, каждый из которых владеет некоторым ресурсом и ожидает ресурса, которым владеет какой-либо другой процесс из этого множества.
Простой пример тупика легко смоделировать с помощью семафоров (см. "Методы синхронизации процессов"). Пусть в системе есть два внешних устройства A и B, к которым обращаются два процесса P1 и P2. С каждым из внешних устройств с целью синхронизации связан семафор, которые будем обозначать также A и B. Семафоры изначально открыты. Пусть каждому из процессов необходимы оба устройства, но они обращаются к ним в противоположном порядке:
P1: wait(A); wait (B)
P2: wait(B); wait (A).
В данном случае будет иметь место тупик: процесс P1, закрыв семафор A и заблокировав первое устройство, никогда не дождётся, когда откроется семафор B, связанный со вторым устройством, так как его уже успел закрыть процесс P2. Аналогично, процесс P2 никогда не дождется, когда откроется семафор A.
Модель системы
Для описания и исследования подобных ситуаций введем формальную модель системы в общем виде. С помощью модели будем представлять информацию о запросах процессов к ресурсам, о фактическом владении процессов ресурсами и об освобождении ресурсов.
Пусть в системе имеется m видов ресурсов (например, процессор, память, устройства ввода-вывода). Будем обозначать типы ресурсов в системе R1, R2, … Rm. Пусть каждый тип ресурса Ri имеет Wi экземпляров.
Каждый процесс может использовать ресурс одним из следующих способов:
запрос (request)
использование (use)
освобождение (release).
Тупик может возникнуть, если одновременно выполняются следующие четыре условия:
взаимное исключение: только один процесс в каждый момент времени может получить доступ к ресурсу;
удержание и ожидание: процесс, удерживающий один ресурс, ожидает приобретения других ресурсов, которыми обладают другие процессы;
отсутствие прерываний: процесс может освободить ресурс только добровольно, когда завершит свою работу;
циклическое ожидание: существует множество {P0, P1, … P0}, такое, что P0 ожидает ресурса, которым обладает P1; P1 ожидает ресурса, которым обладает P2 … Pn ожидает ресурса, которым обладает P0.
Граф распределения ресурсов
Введем в рассмотрение граф распределения ресурсов, состоящий из множества вершин V и множества дуг E. V подразделяется на два типа вершин: вершина-процесс и вершина-ресурс. Иначе говоря, V подразделяется на вершины типа P = {P1, P2, … ,Pn} множество всех процессов в системе, и вершины типа R = {R1, R2, … ,Rm}
Введем два типа дуг:
дуга типа "запрос" (request edge) – направленная дуга типа Pi -> Rj
дуга типа "присваивание" (assignment edge) – направленная дуга типа Pi -> Rj.
Смысл различных направленностей дуг в следующем. Если процесс претендует на какой-либо ресурс, то дуга проводится из вершины-процесса в вершину-ресурс. Когда же конкретная единица ресурса уже выделена какому-либо конкретному процессу, то дуга, в знак этой принадлежности, и проводится из вершины-ресурса в вершину процесс.
Уточним особенности вводимого графа и его вершин. В современной терминологии, граф данного вида называется reserved graph. Его вершина-процесс имеет обычный вид, а вершина-ресурс, соответствующая ресурсу Rj, состоит из Wj подвершин, каждая из которых обозначает конкретную единицу ресурса. В теории reserved graphs такие вершины иногда называют супервершинами (super-vertices). Таким образом, дуга запроса ведет из вершины-процесса в вершину-ресурс в целом, а дуга присваивания ведет из соответствующей подвершины вершины-ресурса в вершину-процесс.
Пример вершины-процесса приведен на рис. 13.1.
Рис. 13.1. Пример вершины-процесса в графе распределения ресурсов.
Пример (супер)вершины-ресурса с четырьмя экземплярами приведен на рис. 13.2: каждому экземпляру ресурса соответствует своя подвершина.
Рис. 13.2. Пример вершины-ресурса с четырьмя экземплярами.
Пример графа распределения ресурсов приведен на рис. 13.3.
Рис. 13.3. Пример графа распределения ресурсов.
Данный граф изображает систему с тремя процессами и четырьмя видами ресурсов: ресурсы видов 1 и 3 имеют по одному экземпляру, ресурс вида 2 – два экземпляра, ресурс вида 4 – три экземпляра. Процесс 1 претендует на ресурс 1, который занят процессом 2. Процесс 2 претендует на ресурс 3, который занят процессом 3. Две единицы ресурса 2 отданы процессам 1 и 2. Ресурс 4 не распределялся (все три единицы свободны).
Поиск тупиков по графу распределения ресурсов
Очевидно, что цикл в таком графе может означать наличие тупика. На рис. 13.4 приведен пример графа с тупиком. Имеется ситуация циклического ожидания между процессами 1, 2 и 3. Процесс 1 претендует на ресурс, которым владеет процесс 2. Процесс 2 претендует на ресурс, которым владеет процесс 3. Процесс 3 претендует на ресурс, одна единица которого отдана процессу 1, а вторая – процессу 2.
Рис. 13.4. Пример графа распределения ресурсов с тупиком.
Однако не всегда наличие цикла в графе распределения ресурсов означает наличие тупика. На рис. 13.5 приведен пример графа распределения ресурсов с циклом, но без тупика.
Рис. 13.5. Пример графа распределения ресурсов с циклом, но без тупика.
В данном случае (рис. 13.5) имеется четыре процесса и два вида ресурсов. В цикле участвуют вершины-процессы 1 и 3. Однако, благодаря тому, что каждого ресурса имеется по две единицы, тупика удается избежать: процесс 1, ожидающий ресурса 1, сможет его получить, когда завершится процесс 2 (а не процесс 1), обладающий одной единицей данного ресурса и не входящий в цикл ожидания. Аналогично, процесс 3, претендующий на ресурс 2, сможет его получить после его освобождения процессом 4 (а не 1).
Таким образом, можно сформулировать следующие утверждения:
Если граф распределения ресурсов не содержит циклов, то в системе тупиков нет;
Если граф распределения ресурсов содержит цикл, то возможно два случая:
Если ресурсов каждого вида имеется только по одному экземпляру, то имеет место тупик;
Если ресурсов по несколько экземпляров, то тупик возможен.
Методы обработки тупиков
Теоретически возможны следующие методы обработки тупиков:
Убедиться в том, что система никогда не войдет в состояние тупика;
Допустить, чтобы система могла входить в состояние тупика, но предусмотреть возможность восстановления после тупика.
К сожалению, на практике во многих ОС (включая UNIX) используется и третий "метод" борьбы с тупиками: проблема тупиков игнорируется, но авторы ОС без каких-либо обоснований претендуют на то, что в системе тупики невозможны.
Предотвращение тупиков
Проанализируем, какие методы предотвращения тупиков возможны. Основная идея – ограничить методы запросов ресурсов со стороны процессов.
Чтобы ограничить возможность взаимного исключения владения ресурсами (первое условие тупика), необходимо заметить, что оно требуется не для всех ресурсов. Для разделяемых ресурсов (например, массивов констант, кодов, файлов) оно не требуется.
Чтобы ограничить возможность удержания и ожидания (второе условие тупика), можно потребовать, чтобы процесс, запрашивающий некоторый ресурс, не обладал бы больше никакими ресурсами. Альтернативным вариантом является требование, чтобы все процессы приобретали все необходимые им ресурсы до фактического начала их исполнения. К сожалению, реализация обоих этих требований приводит к недостаточности использования ресурсов и возможности "голодания" (starvation).
Более разумной представляется стратегия перераспределения ресурсов при каждом ожидании процессом ресурса. Если процесс обладает некоторым ресурсом A и запрашивает другой ресурс B, который не может быть ему немедленно выделен, то процесс должен ждать. При этом ресурс A, занимаемый процессом, должен быть немедленно освобожден. Ресурс A добавляется к списку ресурсов, которые ожидает процесс. Процесс может быть возобновлен, только если ему могут быть выделены одновременно все старые ресурсы, которыми он обладал, и те новые ресурсы, которых он ожидает.
Для предотвращения ситуации циклического ожидания самое простое решение – ввести упорядочение по номерам всех видов ресурсов и требовать, чтобы процесс запрашивал ресурсы только в порядке возрастания их номеров. На практике подобное решение вряд ли применимо и удобно, так как специфика потребляемых и требуемых типов ресурсов никак не зависит ни от какой возможной нумерации, и потребность в ресурсе с любым номером может возникнуть по мере необходимости.
Избежание тупиков
Методы избегания тупиков требуют, чтобы система обладала дополнительной априорной информацией о процессе и его потребностях в ресурсах с момента ввода каждого процесса в систему.
Наиболее простая и полезная модель требует, чтобы каждый процесс при вводе в систему указывал максимальный объем ресурсов каждого типа, которые могут ему понадобиться. Данный подход был реализован даже в ранних ОС и носит название паспорт задачи – список максимальных потребностей процесса в ресурсах каждого типа – оперативной и внешней памяти, времени выполнения, листах печати и др.
Например, в ОС ДИСПАК для БЭСМ-6 (еще в 1960-х гг.) паспорт задания мог иметь вид:
ЛИСТ 0-37^ТРАК 50^ВРЕМ 240^АЦПУ 10^
где ЛИСТ – диапазон листов (страниц) основной памяти, ТРАК – требуемый объем внешней памяти на магнитном барабане, ВРЕМ – максимальное время выполнения (2 минуты 40 секунд, что соответствовало одному из быстрых классов заданий), АЦПУ – максимальный объем выдачи на печатающее устройство в листах.
При попытке превышения хотя бы одного из указанных ограничений операционная система снимала задачу со счета с соответствующим диагностическим сообщением для пользователя.
Вернемся к избеганию тупиков. Алгоритм избегания тупиков должен анализировать состояние распределения ресурсов, чтобы убедиться, что никогда не может возникнуть ситуация циклического ожидания.
Состояние распределения ресурсов описывается как объем доступных ресурсов, объем распределенных ресурсов и максимальные требования процессов.
В следующей лекции рассмотрены конкретные методы и алгоритмы избегания тупиков и определения безопасности состояния системы, основанные на данных принципах.