
- •Вопросы для подготовки к экзамену по дисциплине «Операционные системы»
- •Тематический план
- •Лекция 1 (2/2) введение
- •В будущем:
- •Раздел 1. Основы теории операционных систем
- •Тема 1.1 Общие сведения об операционных системах
- •1. Системы пакетной обработки,
- •2.Системы разделения времени
- •3. Системы реального времени.
- •2. Мультипрограммирование в системах разделения времени
- •3. Мультипрограммирование в системах реального времени
- •Требования к ос
- •Тема 1.1 Общие сведения об операционных системах (продолжение)
- •Тема 1.2 Интерфейс пользователя
- •Тема 1.3 Операционное окружение
- •1. Основная ф-ция ос: ос как виртуальная машина
- •Раздел 2. Машинно-зависимые свойства
- •Тема 2.1 Архитектурные особенности модели микропроцессорной системы семейства Pentium.
- •С истемная магистраль данных (шина)
- •Оперативная память
- •5.1.1.2. Контроллеры.
- •5.1.1.3. Жесткий диск.
- •Центральный процессор
- •Характеристики процессора.
- •Тема 2.2 Обработка прерываний
- •Тема 2.3 Планирование процессов
- •Планировщик!!!!!!! Понятие вычислительного процесса и ресурса.
- •2. Основная ф-ция ос: Повышение эффективности использования компьютера за счет рационального управления его ресурсами.
- •Дисциплины диспетчеризации и алгоритмы планирования процессов
- •Алгоритмы планирования процессов
- •Тема 2.4 Обслуживание ввода-вывода
- •Основные понятия и концепции организации ввода/вывода в ос
- •Основные системные таблицы ввода/вывода
- •2. Таблица описания виртуальных логических устройств.
- •3. Таблица прерываний.
- •Очередь запросов ввода-вывода. Алгоритм обработки прерываний по вводу-выводу.
- •Тема 2.5 Управление памятью
- •Функции ос по управлению памятью.
- •Типы адресов.
- •Алгоритмы распределения реальной памяти.
- •Свопинг и виртуальная память. Методы распределения памяти с использованием дискового пространства
- •Свопинг
- •Страничное распределение
- •Сегментное распределение
- •Сегментно-страничное распределение
- •Раздел 3. Машинно-независимые свойства операционных систем
- •Тема 3.1 Работа с файлами
- •Тема 3.2 Планирование заданий
- •Тема 3.3 Распределение ресурсов
- •Средства синхронизации и взаимодействия процессов
- •Синхронизация процессов на основе семафорных операций
- •1. Двоичный семафор
- •2. Универсальный семафор (считающий семафор)
- •Тупики и методы борьбы с ними
- •1. Граф распределения ресурсов
- •3. Вычислительные схемы
- •Тема 3.4 Защищенность и отказоустойчивость операционных систем
- •Раздел 4. Работа в операционных системах dos и windows 2000
- •Тема 4.1 Структура операционной системы
- •Практическая работа №1 Изучение структуры операционной системы Windows 2000.
- •Тема 4.2 Интерфейс пользователя
- •Тема 4.3 Организация хранения данных
- •Тема 4.4 Средства управления и обслуживания
- •Тема 4.5 Утилиты операционной системы
- •Тема 4.6 Поддержка приложений других операционных систем
- •Раздел 5. Инсталляция и конфигурирование ос. Восстановление
- •Тема 5.1. Инсталляция и настройка ос.
- •Практическая работа №19 «Конфигурирование системы. Подключение новых устройств.»
- •Тема 5.2. Восстановление системы.
- •Практическая работа №20 «Работа с программами резервного копирования»
Средства синхронизации и взаимодействия процессов
Проблемная ситуация: Представим себе двух студентов, которым нужно поработать с одной и той же книгой, имеющейся в библиотеке в единственном экземпляре. Они одновременно пришли в библиотеку, но один из них сначала пошел в читальный зал и, заняв единственное свободное место, отправился в книжное хранилище, а другой — наоборот, начал с того, что получил книгу, а потом пошел в читальный зал искать место. В результате ни один из них не может выполнить работу, так как для этого им не хватает необходимого ресурса. Можно ли считать, что в данном случае произошла взаимная блокировка, или, другими словами, клинч? Ответ: Нет, в данном случае мы имеем дело не с клинчем, а с очередью. Действительно, студент, ожидающий в читальном зале, может быть «разблокирован» в результате освобождения какого-либо другого места в читальном зале, а затем он, выполнив свою работу и сдав книгу, «разблокирует» другого студента, ожидающего в книжном хранилище. Для того чтобы ситуация могла быть названа клинчем, следует дополнить задачу еще одним условием—в читальном зале имеется только одно рабочее место. |
Процессы называются параллельными, если они существуют одновременно. Параллельные процессы можно разделить на следующие две группы:
независимые (не нуждающиеся во взаимодействии друг с другом) процессы;
асинхронные (взаимодействующие и нуждающиеся в периодической синхронизации) процессы.
Синхронизация процессов — использование специальных атомических операций для осуществления взаимодействия между процессами.
Процессам часто нужно взаимодействовать друг с другом, например, один процесс может передавать данные другому процессу, или несколько процессов могут обрабатывать данные из общего файла. Во всех этих случаях возникает проблема синхронизации процессов, которая может решаться приостановкой и активизацией процессов, организацией очередей, блокированием и освобождением ресурсов.
Пренебрежение вопросами синхронизации процессов, выполняющихся в режиме мультипрограммирования, может привести к их неправильной работе или даже к краху системы. Рассмотрим, например (рисунок 1), программу печати файлов (принт-сервер). Эта программа печатает по очереди все файлы, имена которых последовательно в порядке поступления записывают в специальный общедоступный файл "заказов" другие программы. Особая переменная NEXT, также доступная всем процессам-клиентам, содержит номер первой свободной для записи имени файла позиции файла "заказов". Процессы-клиенты читают эту переменную, записывают в соответствующую позицию файла "заказов" имя своего файла и наращивают значение NEXT на единицу. Предположим, что в некоторый момент процесс R решил распечатать свой файл, для этого он прочитал значение переменной NEXT, значение которой для определенности предположим равным 4. Процесс запомнил это значение, но поместить имя файла не успел, так как его выполнение было прервано (например, в следствие исчерпания кванта). Очередной процесс S, желающий распечатать файл, прочитал то же самое значение переменной NEXT, поместил в четвертую позицию имя своего файла и нарастил значение переменной на единицу. Когда в очередной раз управление будет передано процессу R, то он, продолжая свое выполнение, в полном соответствии со значением текущей свободной позиции, полученным во время предыдущей итерации, запишет имя файла также в позицию 4, поверх имени файла процесса S.
Таким образом, процесс S никогда не увидит свой файл распечатанным. Сложность проблемы синхронизации состоит в нерегулярности возникающих ситуаций: в предыдущем примере можно представить и другое развитие событий: были потеряны файлы нескольких процессов или, напротив, не был потерян ни один файл. В данном случае все определяется взаимными скоростями процессов и моментами их прерывания. Поэтому отладка взаимодействующих процессов является сложной задачей.
Ситуации подобные той, когда два или более процессов обрабатывают разделяемые данные, и конечный результат зависит от соотношения скоростей процессов, называются гонками.
Критический ресурс — ресурс, допускающий обслуживание только одного процесса за один раз. Если несколько процессов хотят использовать критический ресурс в режиме разделения, то им следует синхронизировать свои действия, чтобы ресурс всегда находился в распоряжении не более чем одного из них.
Критические участки — участки процесса, где происходит обращение к критическому ресурсу. Критические участки должны быть взаимоисключаемыми, т. е. в каждый момент времени не более чем один процесс может быть занят выполнением своего критического относительно некоторого ресурса участка. Обеспечение (поддержка механизма) взаимоисключения — ключевая задача параллельного программирования.
Блокировка — предотвращение выполнения кем-либо чего-либо. Процесс должен устанавливать блокировку перед входом в критический участок и снимать ее после выхода. Естественно, если участок заблокирован, то другой процесс должен ждать снятия блокировки.
Рис.1. Пример необходимости синхронизации
Вход взаимоисключения и выход взаимоисключения — участки процесса, обрамляющие критический участок и служащие для обеспечения взаимоисключения. Примером входа взаимоисключения может служить блокирование, а выхода — разблокирование.
Типичным примером критического ресурса является разделяемая переменная, суммирующая некоторую величину (назовем ее счетчик). Критические участки процессов тогда могут содержать следующий код:
счетчик := счетчик + 1.
Гонки — ситуация, когда два или более процессов обрабатывают разделяемые данные и конечный результат зависит от соотношения скоростей их исполнения.
Важным понятием синхронизации процессов является понятие "критическая секция" программы (CS).
Критическая секция - это часть программы, в которой осуществляется доступ к разделяемым данным.
Чтобы исключить эффект гонок по отношению к некоторому ресурсу, необходимо обеспечить, чтобы в каждый момент в критической секции, связанной с этим ресурсом, находился максимум один процесс. Этот прием называют взаимным исключением. Простейший способ обеспечить взаимное исключение - позволить процессу, находящемуся в критической секции, запрещать все прерывания. Однако этот способ непригоден, так как опасно доверять управление системой пользовательскому процессу; он может надолго занять процессор, а при крахе процесса в критической области крах потерпит вся система, потому что прерывания никогда не будут разрешены.
Д
Рисунок 1 Реализация
критических секций с использованием
блокирующих переменных
Если все процессы написаны с использованием вышеописанных соглашений, то взаимное исключение гарантируется. Следует заметить, что операция проверки и установки блокирующей переменной должна быть неделимой. Поясним это. Пусть в результате проверки переменной процесс определил, что ресурс свободен, но сразу после этого, не успев установить переменную в 0, был прерван. За время его приостановки другой процесс занял ресурс, вошел в свою критическую секцию, но также был прерван, не завершив работы с разделяемым ресурсом.
К
огда
управление было возвращено первому
процессу, он, считая ресурс свободным,
установил признак занятости и начал
выполнять свою критическую секцию.
Таким образом был нарушен принцип
взаимного исключения, что потенциально
может привести к нежелаемым последствиям.
Во избежание таких ситуаций в системе
команд машины желательно иметь единую
команду "проверка-установка", или
же реализовывать системными средствами
соответствующие программные примитивы,
которые бы запрещали прерывания на
протяжении всей операции проверки и
установки.
Реализация критических секций с использованием блокирующих переменных имеет существенный недостаток: в течение времени, когда один процесс находится в критической секции, другой процесс, которому требуется тот же ресурс, будет выполнять рутинные действия по опросу блокирующей переменной, бесполезно тратя процессорное время.
На рисунке 3 приведена временная диаграмма исполнения команды "Проверить и установить".