Автор работы: Пользователь скрыл имя, 15 Октября 2011 в 10:24, доклад
Первые (1945-1955г.г.) компьютеры работали без операционных систем, как правило, на них работала одна программа.
Когда скорость выполнения программ и их количество стало увеличиваться, простои компьютера между запусками программ стали составлять значительное время.
Недостатки случая А:
Мультиплексирование потоков пользователя в потоках ядра
Поток ядра может содержать несколько несколько потоков пользователя.
2.2.5 Особенности реализации Windows
Используется четыре понятия:
Потоки
работают в режиме пользователя, но
при системных вызовах
Лекция 3
Взаимодействие
между процессами.
3.1 Взаимодействие между процессами
Ситуации, когда приходится процессам взаимодействовать:
Два
вторых случая относятся и к потокам.
В первом случае у потоков нет
проблем, т.к. они используют общее
адресное пространство.
3.1.1 Передача информации от одного процесса другому
Передача может осуществляться несколькими способами:
Схема
для канала
Схема
для сокетов
3.1.2 Состояние состязания
Состояние состязания - ситуация когда несколько процессов считывают или записывают данные (в память или файл) одновременно.
Рассмотрим пример, когда два процесса пытаются распечатать файл. Для этого им нужно поместить имя файла в спулер печати, в свободный сегмент.
in - переменная указывающая на следующий свободный сегмент
out
- переменная указывающая на следующее
имя файла для печати
Пример состязания
Распишем события по пунктам.
Как
видно из этой ситуации, файл процесса
В не будет напечатан.
3.1.3 Критические области
Критическая
область - часть программы, в которой
есть обращение к совместно
Условия избегания состязания и эффективной работы процессов:
Пример:
Взаимное
исключение с использованием критических
областей
3.1.4 Взаимное исключение с активным ожиданием
Рассмотрим методы взаимного исключения
Запрещение прерываний
Заключается в запрещении всех прерываний при входе процесса в критическую область.
Недостаток этого метода в том, что если произойдет сбой процесса, то он не сможет снять запрет на прерывания.
Переменные блокировки
Вводится понятие переменной блокировки, т.е. если значение этой переменной равно, например 1, то ресурс занят другим процессом, и второй процесс переходит в режим ожидания (блокируется) до тех пор, пока переменная не примет значение 0.
метод блокирующих переменных
Проблема, как и с процессом печати, после того как первый процесс считает 0, второй может занять процессор и тоже считать 0. Заблокированный процесс находится в режиме активного ожидания, постоянно проверяя, не изменилась ли переменная блокировки.
Строгое чередование
В этой модели, процессы могут выполняться строго по очереди, используя переменную.
Строгое
чередование
Недостатки метода:
Существуют
еще алгоритмы с активным ожиданием
(алгоритм Петерсона,
команда TSL), но у всех них есть общий
недостаток - расходуется бесцельно время
процессора на циклы проверки изменения
переменной.
3.1.5 Примитивы взаимодействия процессов
Вводится понятия двух примитивов.
sleep - системный запрос, в результате которого вызывающий процесс блокируется, пока его не запустит другой процесс.
wakeup
- системный запрос, в результате которого
блокированный процесс будет запущен.
Применение
примитивов
Основное преимущество - это отсутствие активного ожидания..
Проблема
заключается в следующем, если спулер
пуст, то wakeup срабатывает в пустую.
Проблема переполненного буфера (проблема производителя и потребителя)
Рассмотрим два процесса, которые совместно используют буфер ограниченного размера, один процесс пишет в буфер, другой считывает данные.
Чтобы первый процесс не писал, когда буфер полный, а второй не считывал, когда он пуст, вводится переменная count для подсчета количества элементов в буфере.
Проблема
переполненного буфера
В этой ситуации оба процесса могут попасть в состояние ожидания, если пропадет сигнал активации.
Алгоритм такой ситуации:
3.1.6 Семафоры
Семафоры - переменные для подсчета сигналов запуска, сохраненных на будущее.
Были предложены две операции down и up (аналоги sleep и wakeup).
Прежде чем заблокировать процесс, down проверяет семафор, если он равен нулю, то он блокирует процесс, если нет, то процесс снова становится активным, и уменьшает семафор на единицу.
up увеличит значение семафора на 1 или разблокирует процесс находящийся в ожидании..
down уменьшает значение семафора на 1 или блокирует процесс, если семафор =0.
down и up выполняются как элементарное действие, т.е. процесс не может быть блокирован во время выполнения этих операций. Значит, у операционной системы должен быть запрет на все прерывания, и перевод процесса в режим ожидания.
Решение проблемы переполненного буфера с помощью семафора
Применим три семафора:
full - подсчет заполненных сегментов (в начале = 0)
empty - подсчет пустых сегментов (в начале = количеству сегментов)
mutex - для исключения одновременного доступа к буферу двух процессов. (в начале = 1)
Мьютекс
упрощенная версия семафора, он управляет
доступом к ресурсу. Показывает, блокирован
или нет ресурс.
Решение
проблемы переполненного буфера с помощью
семафора
Применение семафоров для устройств ввода/вывода
Для
устройств ввода/вывода семафор выставляется
равный нулю. После запуска управляющего
процесса выполняется down, и т.к. семафор
равен нулю, процесс блокируется. Когда
нужно активизировать процесс управления,
выполняется up.
Информация о работе История. Назначение. Системные вызовы. Структура операционных систем