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

Shpori_na_ekzamen_OS

.pdf
Скачиваний:
38
Добавлен:
17.03.2016
Размер:
5.45 Mб
Скачать

21

4.4.Способы реализации взаимных исключений

1)Запрещение прерываний

Воднопроцессорных системах простейшим решением является запрещение всех

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

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

2)Блокирующие переменные

Используется одна общая (блокирующая) переменная, исходное значение которой равно нулю. Когда процессу требуется войти в свою критическую область, сначала он проверяет значение блокирующей переменной. Если оно равно 0, процесс устанавливает его в 1 и входит в критическую область. Если значение уже равно 1, процесс просто ждет, пока оно не станет равно нулю. Таким образом, нулевое значение означает, что ни один из процессов не находится в своей критической области, а единица означает, что какой-то процесс находится в своей критической области. Но для нескольких процессов также плохо, возникнет состязание или два сразу окажутся в своих критических областях.

3)Строгое чередование

Рис. 5.1. Предлагаемое решение проблемы критической области; процесс 0 (а); процесс 1 (б). В обоих случаях следует убедиться, что в коде присутствует точка с запятой, завершающая оператор while

Изначально целочисленная переменная turn, показанная на рис. 2.17, равна нулю и отслеживает, чья очередь настала входить в критическую область и проверять или обновлять общую память. Сначала процесс 0 проверяет значение turn, определяет, что оно равно нулю, и входит в критическую область. Процесс 1 также определяет, что значение этой переменной равно нулю, из-за чего находится в коротком цикле, постоянно проверяя, когда turn получит значение 1. Постоянная проверка значения переменной, пока она не приобретет какое-нибудь значение, называется активным ожиданием. Как правило, этого ожидания следует избегать, поскольку оно тратит впустую время центрального процессора. Активное ожидание используется только в том случае, если есть основание полагать, что ожидание будет недолгим. Блокировка, использующая активное ожидание,

называется спин-блокировкой.

4)Флаги готовности

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

shared int ready[2] = {0, 0};

22

Когда i-й процесс готов войти в критическую секцию, он присваивает элементу массива ready[i] значение равное 1. После выхода из критической секции он, естественно, сбрасывает это значение в 0. Процесс не входит в критическую секцию, если другой процесс уже готов к входу в критическую секцию или находится в ней.

while (some condition) {

Полученный

алгоритм

ready[i] = 1;

обеспечивает

взаимоисключение,

while(ready[1-i]);

позволяет процессу,

готовому к входу

critical section

в критический участок, войти в него сразу

ready[i] = 0;

после завершения эпилога в другом

remainder section

процессе, но все равно нарушает условие

}

прогресса.

 

Пусть процессы практически одновременно подошли к выполнению пролога. После выполнения присваивания ready[0]=1 планировщик передал процессор от процесса 0 процессу 1, который также выполнил присваивание ready[1]=1. После этого оба процесса бесконечно долго ждут друг друга на входе в критическую секцию. Возникает ситуация, которую принято называть тупиковой (deadlock).

5)Алгоритм Петерсона

Изначально ни один из процессов не находится в критической области. Затем процесс 0 вызывает функцию enter_region. Он демонстрирует свою заинтересованность, устанавливая свой элемент массива и присваивая переменной turn значение 0. Поскольку процесс 1 заинтересованности во входе в критическую область не проявил, функция enter _region тотчас же возвращает управление. Теперь, если процесс 1 вызовет функцию enter _region, он зависнет до тех пор, пока interested[0] не получит значение FALSE, а это произойдет только в том случае, если процесс 0 вызовет функцию leave _region, чтобы выйти из критической области.

6)Алгоритм булочной (Bakery algorithm)

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

shared enum {false, true} choosing[n]; shared int number[n];

Изначально элементы этих массивов инициируются значениями false и 0 соответственно. Структура процесса Pi для алгоритма булочной приведена ниже

while (some condition) {

while(number[j] != 0 && (number[j],j) <

choosing[i] = true;

(number[i],i));

number[i] = max(number[0], ...,

}

number[n-1]) + 1;

critical section

choosing[i] = false;

number[i] = 0;

for(j = 0; j < n; j++){

remainder section }

while(choosing[j]);

 

23

4.5. Классические проблемы межпроцессного взаимодействия

Проблема обедающих философов

Формулировка: пять философов сидят за круглым столом, и у каждого есть тарелка со спагетти. Спагетти настолько скользкие, что каждому философу нужно две вилки, чтобы с ними управиться. Между каждыми двумя тарелками лежит одна вилка. Жизнь философа состоит из чередующихся периодов поглощения пищи и размышлений. Когда философ голоден, он пытается получить две вилки, левую и правую, в любом порядке. Если ему удалось получить две вилки, он некоторое время ест, затем кладет вилки обратно и продолжает размышления. Вопрос: можно ли написать алгоритм, который моделирует эти действия для каждого философа и никогда не застревает?

Здесь используется массив state для отслеживания душевного состояния каждого философа: он либо ест, либо размышляет, либо голодает (пытаясь получить вилки). Философ может начать есть, только если ни один из его соседей не ест. Соседи философа с номером i определяются макросами LEFT n RIGHT (то есть если i = 2, то LEFT- 1 и RIGHT - 3).В программе используется массив семафоров, по одному на философа, чтобы блокировать голодных философов, если их вилки заняты.

Проблема читателей и писателей

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

Первый читающий процесс выполняет операцию down на семафоре db, чтобы получить доступ к базе. Последующие читатели просто увеличивают значение счетчика rс. По мере ухода читателей из базы значение счетчика уменьшается, и последний читающий процесс выполняет на семафоре db операцию up, позволяя блокированному пишущему процессу получить доступ к базе.

Проблема спящего брадобрея

Впарикмахерской есть один брадобрей, его кресло и n стульев для посетителей. Если желающих воспользоваться его услугами нет, брадобрей сидит в своем кресле и спит. Если в парикмахерскую приходит клиент, он должен разбудить брадобрея. Если клиент приходит и видит, что брадобрей занят, он либо садится на стул (если есть место), либо уходит (если места нет). Необходимо запрограммировать брадобрея и посетителей так, чтобы избежать состояния состязания. В решении используются три семафора: customers, для подсчета ожидающих посетителей; barbers, количество брадобреев (0 или 1), простаивающих в ожидании клиента, и mutex для реализации взаимного исключения.

ВКогда брадобрей приходит утром на работу, он выполняет процедуру barber, блокируясь на семафоре customers, поскольку значение семафора равно 0. Затем брадобрей засыпает, и спит, пока не придет первый клиент. Приходя в парикмахерскую, посетитель выполняет процедуру customer, запрашивая доступ к mutex для входа в критическую область. Если вслед за ним появится еще один посетитель, ему не удастся что-либо сделать, пока первый посетитель не освободит доступ к mutex. Затем посетитель проверяет наличие свободных стульев, в случае неудачи освобождает доступ к mutex и уходит. Если свободный стул есть, посетитель увеличивает значение целочисленной переменной waiting. Затем он выполняет процедуру up на семафоре customers, тем самым активизируя поток брадобрея. В этот момент оба — посетитель и брадобрей — активны. Когда посетитель освобождает доступ к mutex, брадобрей захватывает его, проделывает некоторые служебные операции и начинает стричь клиента.

24

5.Планирование процессов

5.1.Цели и критерии планировании

Цели, задачи планирования

1.Справедливость. Ко всем процессам отношение одинаковое, один процесс не страдает от бесконечного откладывания.

2.Обеспечение максимальной пропускной способности системы – обслуживание максимального к-ва процессов.

3.Обеспечение максимального к-ва пользователей, работающих в интерактивном режиме.

4.Минимизация накладных расходов.

5.Балансировка использования ресурсов, повышение коэффициента использования системных ресурсов.

6.Баланс между временем ответа и коэффициентом использования ресурсов. Наилучший способ – малые времена ответа.

7.Исключение бесконечного откладывания. Используется старение процесса – чем больше ждет, тем больше приоритет.

8.Учитывание приоритетов.

9. Оказывание предпочтения процессам, занимающие ключевые ресурсы.

10.Создание лучших условий для выполнения процессов, отличающихся «примерным поведением»

11.Характеристика постепенностью снижения работоспособности при больших нагрузках.

12.Контроль занятости всех частей системы.

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

14.Достижение соразмерности.

15.Строгое соблюдение всех требований по срокам.

16.Предсказуемость.

Критерии планирования

1.Лимитируется ли процесс вводом-выводом.

2.Лимитируется ли процесс ЦП.

3.Является ли процесс пакетным или диалоговым.

4.Насколько обязательна быстрая реакция.

5.Приоритетность процессов.

6.Насколько часто возникают прерывания по отсутствию нужных страниц.

7.Насколько часто процесс приостанавливается из-за переключения на процесс выше приоритета.

8.Сколько времени получил данный процесс.

9.Сколько времени требуется процессу для завершения.

25

5.2. Модель планирования

Трехуровневое планирование

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

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

Второй уровень планирования определяет, какие процессы можно хранить в памяти, а какие — на диске. Этим занимается планировщик памяти. Для оптимизации эффективности системы планировщик памяти должен решить, сколько и каких процессов может одновременно находиться в памяти. Количество процессов, одновременно находящихся в памяти, называется степенью многозадачности. Если планировщик памяти обладает информацией о том, какие процессы ограничены возможностями процессора, а какие — возможностями устройств ввода-вывода, он может пытаться поддерживать смесь этих процессов в памяти.

Планировщик памяти периодически просматривает процессы, находящиеся на диске, чтобы решить, какой из них переместить в память. Критерии, используемые планировщиком:

1.Сколько времени прошло с тех пор, как процесс был выгружен на диск или загружен с диска?

2.Сколько времени процесс уже использовал процессор?

3.Каков размер процесса (маленькие процессы не мешают)?

4.Какова важность процесса?

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

26

5.3. Дисциплины планирования с одной и несколькими очередями

Приоритетное планирование

Каждому процессу присваивается приоритет, и управление передается готовому к работе процессу с самым высоким приоритетом.

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

Гарантированное планирование

Предоставление пользователям реальных обещаний и затем их выполнение. Например:

если вместе с вами процессором пользуются п пользователей, вам будет предоставлено 1/n мощности процессора.

Чтобы выполнить это обещание, система должна отслеживать распределение процессора между процессами с момента создания каждого процесса. Затем система рассчитывает количество ресурсов процессора, на которое процесс имеет право. Теперь можно сосчитать отношение времени, предоставленного процессу, к времени, на которое он имеет право. Полученное значение 0,5 означает, что процессу выделили только половину положенного, а 2,0 означает, что процессу досталось в два раза больше, чем положено. Затем запускается процесс, у которого это отношение наименьшее, пока оно не станет больше, чем у его ближайшего соседа.

Лотерейное планирование

В основе алгоритма лежит раздача процессам лотерейных билетов на доступ к различным ресурсам, в том числе и к процессору. Когда планировщику необходимо принять решение, выбирается случайным образом лотерейный билет, и его обладатель получает доступ к ресурсу. Что касается доступа к процессору, «лотерея» может происходить 50 раз в секунду, и победитель получает 20 мс времени процессора. Если перефразировать Джорджа Оруэлла: «Все процессы равны, но некоторые равнее других». Более важным процессам можно раздать дополнительные билеты, чтобы увеличить вероятность выигрыша. Каждый процесс получит процент ресурсов, примерно равный проценту имеющихся у него билетов. Лотерейное планирование характеризуется несколькими интересными свойствами: если при создании процессу достается несколько билетов, то уже в следующей лотерее его шансы на выигрыш пропорциональны количеству билетов. Взаимодействующие процессы могут при необходимости обмениваться билетами.

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

Справедливое планирование

До сих пор мы предполагали, что каждый процесс управляется независимо от того, кто его хозяин. Поэтому если пользователь 1 создаст 9 процессов, а пользователь 2 — 1 процесс, то с использованием циклического планирования или в случае равных приоритетов пользователю 1 достанется 90 % процессора, а пользователю 2 всего 10.

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

27

Многоуровневые очереди с обратной связью

Это схема планирования с переключением процессов, которая особенно эффективная для систем, где выполняются смеси разнородных задач. Новые процессы поступают в сеть очередей с очень высоким начальным приоритетом и быстро обслуживаются, если они являются либо интерактивными, либо лимитируемые вводом-выводом. Процессы, лимитирующие ЦП, полностью используют выделенный им квант времени, а затем переходят в конец очереди следующего более низкого приоритета. Чем дольше данный процесс занимает ЦП, тем ниже становится его приоритет, пока процесс не пропускается в очередь самого низкого уровня, которая реализует принцип циклического обслуживания до тех пор, пока процесс не завершится.

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

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

Многоуровневые очереди

Для каждой группы процессов создается своя очередь процессов, находящихся в состоянии готовность. Этим очередям приписываются фиксированные приоритеты. Внутри этих очередей для планирования могут применяться самые разные алгоритмы. Так, например, для больших счетных процессов, не требующих взаимодействия с пользователем (фоновых процессов), может использоваться алгоритм FCFS, а для интерактивных процессов – алгоритм RR. Подобный подход, получивший название многоуровневых очередей, повышает гибкость планирования: для процессов с различными характеристиками применяется наиболее подходящий им алгоритм.

Планирование в системах реального времени

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

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

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

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

28

5.4. Планировщик

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

5.5. Планирование с переключениями и без

Алгоритмы планирования без переключений (неприоритетное планирование)

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

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

5.6. Задачи алгоритмов планирования для различных систем обработки данных;

критерии оценки эффективности работы системы

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

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

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

4.Сетевые рабочие станции и сервера. Здесь планирование снова играет существенную роль, поскольку несколько процессов пытаются получить доступ к процессору.

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

Показатели эффективности системы: пропускная способность, оборотное время и использование процессора. Пропускной способностью называется число выполненных

29

системой задач в час. Оборотное время — статистически усредненное время от момента получения задачи до ее выполнения. Оно характеризует время, которое пользователь должен ждать получения выходных данных. Основным правилом является «чем меньше, тем лучше».

5.7. Алгоритмы планирования, используемые в различных системах обработки

данных

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

Основным преимуществом этого алгоритма является то, что его легко понять и столь же легко программировать.

У этого алгоритма есть существенный недостаток - слишком большим получается среднее время отклика в интерактивных процессах.

SGF «Кратчайшая задача — первая»

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

SRT «Наименьшее оставшееся время выполнения »

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

HRN («по наибольшему относительному времени реакции»)

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

Планирование в интерактивных системах

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

RR (Циклическое планирование)

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

Размер кванта времени к-во времени предоставляемого процессу. Слишком малый квант приведет к частому переключению процессов и небольшой эффективности, но слишком большой квант может привести к медленному реагированию на короткие интерактивные запросы. Значение кванта около 20-50 мс часто является разумным компромиссом.

30

6. Взаимоблокировки

6.1. Понятие «дедлок»

Взаи́мная блокиро́вка (англ. deadlock) — ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, занятых самими этими процессами.

Примеры возникновения тупиков 1) Конкуренция за ресурс.

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

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

6.2.Ресурсы, их типы, получение ресурсов

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

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

последовательность событий:

1.Запрос ресурса.

2.Использование ресурса.

3.Высвобождение ресурса.

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

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