Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
646 Кб
Скачать

3.5. Синхронизация процессов и потоков

предложил использовать переменные, которые могут принимать целые неотрицательные значения. Такие переменные, используемые для синхронизации, получили название семафоров.

Для работы с семафорами вводятся два примитива P и V. Пусть переменная S представляет собой семафор, тогда действия V(S) и P(S) определяются так:

1.V(S): переменная S увеличивается на 1. Отметим, что инкремент и сохранение не могут быть прерваны. К переменной S нет доступа другим потокам во время выполнения этой операции.

2.P(S): уменьшениеS, если это возможно. ЕслиS равно 0, то поток, вызывающийоперациюP,блокируетсядотехпор,покадекрементнестанетвозможным.Проверкаиуменьшениеявляютсянеделимойоперацией.

В частном случае, когда семафор может принимать только значения 0 и 1, он превращается в блокирующую переменную, которую часто называют двоичным семафором.

РассмотримприменениесемафоровДейкстрыдляреализациимо-

дели «писатели-читатели».

Рассмотримвзаимодействиедвухпотоков,одинизкоторыхпишет данные в буферный пул, а другой считывает их из пула. Буферный пул состоит из N буферов, каждый содержит одну запись. В общем случае поток-писатель и поток-читатель имеют разные скорости и обращаются

кпулу с переменной интенсивностью. Для правильной работы потокписатель приостанавливается, когда все буферы заняты, и активизируется при наличии хотя бы одного свободного буфера. Поток-читатель приостанавливается, когда все буферы пусты, и активизируется при появлении хотя бы одной записи.

Введем два семафора: E – число пустых буферов и F – число заполненных буферов. Изначально E = N, а F = 0.

Писатель, прежде всего, выполняет операцию P(E), проверяя, есть ли в пуле незаполненные буферы. Если E = 0, т. е. свободных буферов нет, то писатель блокируется. Если E > 0, то он уменьшает число свободных буферов, записывает данные в очередной свободный буфер и после этого наращивает число занятых буферов операцией V(F). Читатель действует аналогично, с той разницей, что он начинает работу с проверки наличия заполненных буферов, а после чтения данных наращивает количество свободных буферов.

51

3.Управление процессами и потоками

Вэтом примере с буферным пулом могут работать максимум N потоков, часть из них – писатели, часть – читатели. Таким образом можно решить задачу синхронизации доступа к ресурсным пулам типа модемов, принтеров, портов, областей памяти одинаковой длины или информационных структур.

3.6. Тупики

Процесс находится в состоянии тупика (дедлок, клинч, взаимная блокировка), если он ожидает некоторого события, которое никогда не произойдет. Системная тупиковая ситуация, или «зависание» системы, – ситуация, когда один или более процессов оказываются в состоянии тупика.

Существуютчетыренеобходимыхусловиявозникновениятупика.

1.Условие взаимного исключения. Каждый ресурс в данный момент или отдан ровно одному процессу, или доступен.

2.Условие удерживания и ожидания. Процессы, в данный момент удерживающие полученные ранее ресурсы, могут запрашивать новые ресурсы.

3. Условие отсутствия принудительной выгрузки ресурсов. У процесса нельзя забрать принудительно ранее полученные ресурсы. Процесс, владеющий ими, должен сам освободить ресурсы.

4. Условие циклического ожидания. Должна существовать круговая последовательность из двух и более процессов, каждый из которых ждет доступа к ресурсу, удерживаемому следующим членом последовательности.

Для того чтобы произошла взаимоблокировка, должны выполняться все эти четыре условия. Если хотя бы одно отсутствует, тупиковая ситуация невозможна.

Существуют четыре основных направления решения проблемы тупиков:

1)пренебрежение проблемой в целом, если тупики возникают

редко;

2)обнаружение и восстановление. Нужно позволить взаимоблокировке произойти, обнаружить ее и предпринять какие-либо действия;

52

3.7.Синхронизирующие объекты ОС

3)избегание тупиковых ситуаций с помощью аккуратного распределения ресурсов;

4)предотвращение с помощью структурного опровержения одного из четырех условий, необходимых для взаимоблокировки.

3.7.Синхронизирующие объекты ОС

Блокирующие переменные и семафоры Дейкстры не подходят для синхронизации потоков разных процессов. ОС должна предоставлять потокам системные объекты синхронизации, которые были бы видны для всех потоков, даже если они принадлежат разным процессам и работают в разных адресных пространствах. Набор таких объектов зависит от конкретной ОС, которая создает их по запросам пользователей. Примерами синхронизирующих объектов являются системные семафоры, мьютексы, события, таймеры и др. Работа с синхронизирующими объектами подобна работе с файлами. Их можно создавать, открывать, закрывать, уничтожать. Кроме того, для синхронизации могут использоваться и файлы, процессы и потоки. Все объекты синхронизации могут находиться в двух состояниях: сигнальном и несигнальном – свободном. Для каждого объекта смысл сигнального состояния зависит от типа объекта.

Потоки с помощью специального системного вызова сообщают ОС, что они хотят синхронизировать свое выполнение с состоянием некоторого объекта (например, sleep в UNIX или WaitForSingleObject

вWindows NT). Другой системный вызов может переводить объект

всигнальное состояние (например, SetEvent в Windows NT или wakeup

вUNIX).

Поток может ожидать установки сигнального состояния не одного объекта, а нескольких (WaitForMultipleObjects). При этом он может попросить ОС активизировать его при установке либо одного указанного объекта, либо всех. Поток может в качестве аргумента системного вызова ожидания указать также максимальное время, которое он будет ожидать перехода объекта в сигнальное состояние, после чего ОС должна активизировать его в любом случае. Установки некоторого объекта в сигнальное состояние могут ожидать сразу несколько потоков. В за-

53

3. Управление процессами и потоками

висимости от объекта в состояние готовности могут переводиться либо все ожидающие это событие потоки, либо один из них.

В числе других в ОС можно встретить такие объекты, как событие, мьютекс, системный семафор, таймер.

Объект-событиеиспользуется для того, чтобы оповестить другие потоки о том, что некоторые действия завершены. События обычно используют в том случае, когда какой-то поток выполняет инициализации, а затемсигнализируетдругому потоку, чтоон можетпродолжить работу. Инициализирующий поток переводит «событие» в несигнальное состояние и приступает к своим операциям. Закончив, он сбрасывает «событие» в сигнальное состояние. Тогда другой поток, ждавший перехода события в сигнальное состояние, переводится в состояние готовности.

Ожидаемый таймер – это объект, который самостоятельно переходит в сигнальное состояние в определенное время или через регулярные промежутки времени.

Объект ядра «мьютекс» гарантирует потокам взаимоисключающий доступ к единственному ресурсу. Отсюда и пошло название объекта. Поток, пытаясь получить доступ к критическим данным, выполнил соответствующий системный вызов. Мьютекс находится в сигнальном состоянии, в этом случае поток тут же становится его владельцем, устанавливая его в несигнальное состояние, и входит в критическую секцию. После того, как поток выполнил работы с критическими данными, он отдает мьютекс, устанавливая его в сигнальное состояние. В этот момент мьютекс свободен и не принадлежит ни одному потоку. Если какой-либо поток ожидает его освобождения, то он становится следующим владельцем этого мьютекса, одновременно мьютекс переходит в несигнальное состояние.

Сигнал дает возможность задаче реагировать на событие, источником которого может быть ОС или другая задача. Сигналы вызывают прерывание задачи и выполнение заранее предусмотренных действий. Сигналы могут вырабатываться синхронно или асинхронно. Синхронные сигналы чаще всего приходят от системы прерываний процессора и свидетельствуют о действиях процесса, блокируемых аппаратурой (например, нарушение защиты памяти).

Примером асинхронного сигнала является сигнал с терминала. Во многих ОС предусмотрено оперативное снятие процесса с выполне-

54

Контрольные вопросы и задания

ния. Для этого пользователь нажимает некоторую комбинацию клавиш (Ctrl-Break), в результате чего ОС вырабатывает сигнал и направляет его активному процессу. Сигнал может поступить в любой момент выполнения процесса, требуя от него немедленного завершения, что является

вданном случае реакцией на сигнал.

Всистеме может быть определен набор сигналов. Программный код процесса, получившего сигнал, может проигнорировать его, либо прореагировать стандартно (например, завершиться), либо выполнить действия, определенные программистом. В последнем случае необходимо предусмотреть системные вызовы, с помощью которых ОС информируется о том, какую процедуру надо выполнить в ответ на определенный сигнал.

Посылка сигнала предусматривает знание идентификатора процесса, а значит взаимодействие посредством сигналов возможно только между родственными процессами, которые могут получить данные об идентификаторах друг друга.

Другим средством взаимодействия процессов является канал – псевдофайл, который может использоваться для связи двух процессов. Когда процесс А хочет отправить данные процессу В, он пишет их канал, как если бы это был выходной файл. Процесс В читает данные из канала, как если бы он был входным файлом. Подобное средство взаимодействия используется в операционной системе UNIX.

Сокетыподобны каналам с тем отличием, что они при нормальном использовании соединяют процессы на разных компьютерах. Например, один процесс пишет в сокет, а другой на удаленной машине читает из него. В принципе, сокеты можно использовать для соединения процессов на одной машине, но это связано с большими накладными расходами.

Вызов удаленной процедуры представляет собой способ, которым процесс А просит процесс В вызвать процедуру в адресном пространстве процесса В от имени процесса А и вернуть результат процессу А.

Контрольные вопросы и задания

1. Что понимается под мультипрограммированием и какова его

цель?

2. Дайте определение понятиям «процесс» и «поток».

55

3.Управление процессами и потоками

3.Чем отличается процесс от потока?

4.Для чего предназначены описатели процессов и потоков?

5.Какие сведения содержатся в описателях процессов и потоков?

6.Назовите три основных состояния, в которых могут находиться

потоки.

7.Перечислите задачи, которые решаются при планировании по-

токов.

8.Назовите этапы диспетчеризации.

9.Перечислитеиохарактеризуйтеоперации,которыемогутвыполняться над потоками.

10.Чем отличаются вытесняющие и невытесняющие алгоритмы планирования процессов и потоков?

11.Перечислите и охарактеризуйте алгоритмы планирования, основанные на квантовании.

12.Перечислите и охарактеризуйте алгоритмы планирования, основанные на приоритетах.

13.В чем особенность смешанных алгоритмов планирования процессов и потоков?

14.Назовите основные типы и характеристики прерываний?

15.Опишитепоследовательностьдействийдиспетчерапрерываний.

16.Что такое системный вызов?

17.Почему необходима синхронизация процессов и потоков?

18.Дайте определение понятиям «критические данные» и «критическая секция».

19.Назовите основной недостаток использования блокирующих переменных.

20. Перечислите основные условия существования тупиков

иглавные способы борьбы с ними.

21.Приведите примеры синхронизирующих объектов ОС.

56

4. УПРАВЛЕНИЕ ПАМЯТЬЮ

4.1. Организация памяти

Память – это устройство или среда, которая может сохранять информацию для последующего ее извлечения.

Рассмотрим основные параметры запоминающих устройств (ЗУ).

1.Информационные (т. е. характеризующие ЗУ как средство обработки информации):

а) информационная емкость; б) скорость передачи информации;

в) среднее время доступа к информации и т. д.

2.Конструктивные:

а) габаритные размеры; б) масса; в) потребляемая мощность и т. д. 3. Надежностные:

а) вероятность появления ошибки при обработке информации; б) общее среднее время безотказной работы; в) срок службы и т. д.

4. Эксплуатационные:

а) стоимость (в том числе стоимость эксплуатации); б) предельно допустимые отклонения параметров внешней сре-

ды и т. д.

Из всех параметров наибольшее влияние на производительность оказывают информационные параметры.

Существует множество классификаций запоминающих устройств (ЗУ) по различным характеристикам.

По способу организации доступа к информации ЗУ подразделяются на:

1.ЗУ с последовательным доступом. При этом блоки в памяти считываются в том порядке, в котором они физически записаны, пока не будет найден нужный элемент (например, магнитная лента).

2.ЗУспрямым(произвольным)доступом.Доступкэлементуосу-

ществляется по его физическому адресу (например, магнитный диск).

57

4. Управление памятью

По времени хранения информации ЗУ подразделяются на:

1.Постоянное запоминающее устройство (ПЗУ) – энергонезависимое ЗУ для хранения данных, которые никогда не потребуют изменения. Из ПЗУ информацию можно только считывать, а выборка осуществляется в любом порядке, т. е. к любой ячейке ПЗУ осуществляется произвольный доступ;

2.Программируемое постоянное запоминающее устройство (ППЗУ) – разновидность ПЗУ, которую можно неоднократно перепрограммировать;

3.Оперативное запоминающее устройство (ОЗУ) – в нем хранятся программные коды, данные и результаты вычислений. Энергозависимо. Требует регенерации (освежение содержимого памяти).

4.Внешнее запоминающее устройство (ВЗУ) – предназначено для хранения информации, не участвующей непосредственно в работе программы.

Вследствие большого разнообразия ЗУ они сильно отличаются по временивыборкиизотдельныхячеек,объемуинформации,которыйможет храниться в данном ЗУ, удельной стоимости хранения одинакового объема информации. Для рационального использования ЗУ и достижения максимальной эффективности и экономичности их распределяют по нескольким иерархическим уровням.

В основе иерархии лежат ВЗУ (как правило, это накопитель на жестких магнитных дисках (НЖМД)). Они имеют объем десятки и сотни Гб, скорость доступа невысокая, время доступа измеряется десятками мс.

На следующем уровне располагаются более быстродействующие (времядоступа10–20 нс)именееобъемные(отдесятковМбдонесколь- ких Гб) ОЗУ на основе модулей DRAM.

Для хранения данных, к которым необходимо обеспечить быстрый доступ, используются компактные быстродействующие ЗУ на основе SRAM, объем которых составляет десятки и сотни Кб, а время доступа не превышает 8 нс. Этот уровень еще называют кэш-памятью (КП). Однако КП не только устройство, но и вообще способ совместного функционирования двух типов ЗУ, отличающихся временем доступа

истоимостью хранения данных, который за счет динамического копирования в быстрое ЗУ наиболее часто использующейся информации из

58

4.1. Организация памяти

медленного ЗУ позволяет уменьшить время доступа к данным и экономить более дорогую быстродействующую память.

Поиск данных осуществляется по запросу источника. Сначала просматривается кэш, а затем, если произошел промах, выполняется обращение к ОП. Возможна и другая схема: поиск в КП и ОП начинается одновременно, а затем, в зависимости от результата просмотра КП, операция в ОП либо продолжается, либо прерывается. При необходимости данные из ОП копируются в КП. Во многих ВС используется двухуровневое кэширование. КП-1 (до 64 Кб) имеет меньший объем и более высокое быстродействие, чем КП-2 (до 2 Мб), которая играет роль ОП по отношению к КП-1. Для распределенных систем обработки информации характерно наличие нескольких КП одного уровня.

Самый верхний уровень образуют внутренние регистры процессора, также использующиеся для промежуточного хранения данных. Общий объем регистров составляет десятки Кб, а время доступа определяется быстродействием процессора и равно примерно 2–3 нс.

Следует отметить, что большое количество задач, необходимое для высокой загрузки процессора, требует большого объема ОП. В условиях, когда для обеспечения приемлемого уровня мультипрограммирования имеющейся памяти недостаточно, был предложен метод организации вычислительного процесса, при котором образы некоторых процессов целиком или частично временно выгружаются на диск.

Очевидно, что имеет смысл временно выгружать неактивные процессы, находящиеся в ожидании каких-либо ресурсов, в том числе очередного кванта времени центрального процессора. К моменту, когда пройдет очередь выполнения выгруженного процесса, его образ возвращается с диска в ОП. Если при этом обнаруживается, что свободного места в ОП не хватает, то на диск выгружается другой процесс.

Такая подмена (виртуализация) оперативной памяти дисковой памятью позволяет повысить уровень мультипрограммирования, поскольку объем ОП теперь не столь жестко ограничивает число одновременно выполняемых процессов. При этом суммарный объем ОП, занимаемой образами процессов, может существенно превосходить имеющийся объем оперативной памяти.

В данном случае в распоряжение прикладного программиста предоставляется виртуальная оперативная память, размер которой намного

59

4. Управление памятью

превосходит реальную память системы и ограничивается только возможностями адресации используемого процесса. Вообще виртуальным называется ресурс, обладающий свойствами, которых в действительности у него нет.

Виртуализация оперативной памяти осуществляется совокупностью аппаратных и программных средств вычислительной системы (схемами процессора и ОС) автоматически без участия программиста

ине сказывается на логике работы приложения. Она включает решение следующих задач, которое осуществляется ОС и аппаратурой процессора автоматически:

1)размещение данных в ЗУ разного типа;

2)выбор образов процессов или их частей для перемещения из ОП на диск и обратно;

3)перемещение по мере необходимости данных между памятью

идиском;

4)преобразование виртуальных адресов в физические адреса.

Виртуализация памяти возможна на основе двух возможных подходов:

1)свопинг – образы процессов выгружаются на диск и возвращаются в ОП целиком;

2)виртуальнаяпамять(ВП)– между ОП и диском перемещаются части образов (сегменты, страницы, блоки и т. п.) процессов.

Свопинг (подкачка) представляет собой частный случай ВП и соответственно более простой в реализации способ совместного использования ОП и диска. Однако подкачке свойственна избыточность, поскольку, как правило, нет необходимости загружать и выгружать образы полностью. Кроме того, системы со свопингом неспособны загружать для выполнения процесс, ВАП которого превышает имеющуюся в наличии свободную память. Этот механизм в современных ОС не используется либо используется как дополнительный к ВП, включающийся только при серьезных перегрузках системы.

На смену свопингу пришел более совершенный механизм ВП. Ключевой проблемой ВП является преобразование виртуальных адресов в физические адреса. Решение этой проблемы зависит от того, какой способ структуризации ВАП принят в данной системе управления

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]