В. Столлингс - Операционные системы (1114679), страница 66
Текст из файла (страница 66)
а. Три процесса совместно используют четыре единицы ресурса, которые могут ," б. Взаимоблокировка и голодание зО 'Часть 2: [истинг 6.4, Предлагаемое решение задачи об обедающих философах /~ Количество философов */',;: /* Левь«й сосед 1-го философа /* ()равьБ1 сосед 1-го филосОфа */"** /* Философ размьгзляет */-"" /* Философ пытается Взять вилки */-'',' /* ФилосОф ест +/«,' ое11пе бее1пе бе: 1пе бе«1пе бе .«пе бе11пе М ВЕЕТ В1СКТ ТК1)(К1ЬБ КВАСЕ'«' ЕЛТ169 5 (1 — 1) Я)( (1+1) зЬ' О 1 2 /* Семафор — специальный тип 1пС*/,; /~ Ма "сив длЯ ОтслежиВаниЯ состояний философов */. „ урес(е1 1п~ вегпар).оге; всасе(1)); ел1арпоге шпсех = 1 ' впар)'оге в (М) ' о[б рп11оворпег (1пГ «) /* Комер философа от О до /* Бесконечный ««икл иь «1е (ТВОЕ) СЬ1п);() ' ьа'хе 1огкв (1); /* Философ думает /* Берет две вилки или блокируется /* Философ ест спагетти /* кладет вилки на стОл еа~ (); рп«аког'хв (1) р б. Еще одним критерием может служить эффективность; другиьщ "' какой из методов требует меньших накладных расходов процессо меви? Считая, что взаимоблокировка — весьма редкое событие, перечисленные ранее методы борьбы с взаимоблокировками в ' уменьшения их зффективности и прокомментируйте ваше решена '".
нится ли порядок, если взанмоблокировки будут происходить часто~::" Прокомментируйте следующее решение задачи об обедающих фил голодавшийся философ сперва берет вилку слева от себя. Затем, щц(~):, справа свободна, он берет ее и приступает к еде„в противном случае ~ф ' левую вилку на стол и повторяет цикл. ,15, Данное упражнение демонстрирует тонкости задачи об обедающих и сложность написания корректной программы с использованием се листинге 6.4 приведено решение атой задачи из книги, посвященной.о онным системам ([ТАХЕ97), [ТАИЕ923.
а. Опишите принцип решения задачи словами. б. Хотя автор решения и утверждает, что оно '"корректно и обеспе симальную параллельность для произвольного количества фил самом деле оно обеспечивает отсутствие взаимоблокировок, но не Покажите зто при помощи контрпримера. Уназаяие: рассмотрите '" пятью философами. Пусть это будут обжоры, которые никогда не;= ' ляют и, пообедав, приступают к этому процессу вновь. Рассм цию, когда два философа будут непрерывно обедать, а остальные " сидеть голодными. ':;.Р: О«б ~а)«е 1ог);в (1пь 1) ~а" ь (ям тех ) в(.а(:е (" ) -- КВЬСВх: /* Вход в критический раздел / ВапОмина ему чтО философ ПРОГОЛОДаЛСЯ */ /* Кытаемся взять две вилки /* Выход из критического раздела'/ /" Блокирование, если обе вилки в настояаий момент недоступны / (Ов«' (1) р в1цпа1 (л«паек); ха1г (В(«) ); ров гогов (1пь 1 ) /* Вход в критический раздел /* Философ завео1дил обед */ /* Может ли Обедать сосед слева */ /* Может ли Обедать сосед справа*/ Выход из критического раздела*/ ив 1 в (пш гех) ~ в~а" е(1) = Т((1КК1МС' "е -~ (ВЕЕТ); ",ав~ (В1СКТ); в«9па1 (пньех); /+ Комер философа от 0 до Ы-1 */ К()НБВД 6 ( ! = ейт166 ай — ЕАТ1КС) всасе(1) = ЕРТТМО' В19па1(в [1) ) ' 6.16.
Предположим, что имеется два типа философов — "левые", которые всегда берут первой вилку слева, и "правые", которые начинают с правой вилки. Поведение левых философов показано в листинге 6.2; поведение правых — в приведенном фрагменте кода. оеоьп гарвард гК1п1 ( ); иа1«'. (ГогК [ (1+1) атос( 5) ) ' на 1»„- ( аког К ( 11 ); еа~ () ю' В19па1(йогК(1) ); в19па1 (1огК ( (1+1) гоб 5) ) ' Йогечег Докажите следующие утверждения.
Любое размещение за столом левых и правых философов с присутствием кзк минимум по одному философу каждого типа позволит устранить взаимоблокировку. б. )1юбое размещение за столом левых и правых философов с присутствием как минимум по одному философу каждого типа позволит-иредотвратить голодание. ззз Часть 2. а 6. Взаимоблокироака и голодание Память Одним из наиболее сложных аспектов разработки операционной системы является управление памятью. Хотя стоимость памяти постоянно снижается и в результате растет размер основной памяти на современных машинах, достигая гигабайтового диапазона, ее всегда недостаточно для хранения всех программ и структур данных, необходимых активным процессам и операционной системе в целом.
Соответственно, одной из центральных задач операционной системы является управление памятью, включающее выгрузку и загрузку блоков данных из вторичной памяти. Однако операции ввода-вывода довольно медленные, и их скорость с каждым годом все больше и больше отстает от скорости работы процессора. Для эффективной работы процессора(ов) операционная система должна четко рассчитывать процессы подкачки для минимизации влияния операций ввода-вывода на производительность. Глава 7. Управление памятью В этой главе представлен обзор фундаментальных механизмов, использующихся при управлении памятью.
Сперва вы познакомитесь с основными требованиями схем управления памятью, а затем — с использованием технологии распределения памяти. Распределение памяти используется в основном в специальных случаях, но рассмотрение этих вопросов позволяет осветить множество проблем, возникающих при разработке систем управления памятью. Остальная часть главы посвящена сегментам и страницам памяти, представляющим собой фундамент практически всех современных систем управления памятью.
Глава 8. Виртуальная память Виртуальная память, базирующаяся на использовании страниц либо комбинации страниц и сегментов, представляет почти универсальный подход к управлению памятью в современных машинах. 6 уальная память представляет собой схему, прозрачную для Вирту процес цессов и позволяющую каждому процессу работать так, как аспоряжении был неограниченный объем памяти.
Для достиже '' кта операционная система создает для каждого процесса виртуаль ' ~ростра странство на диске. Часть виртуальной памяти при необходим ~ется в о я в основной памяти. Таким образом, относительно малый памят яти может совместно использоваться многими процессами.
зй работы виртуальной памяти основные Функции работы со .нтами должны быть реализованы аппаратно ~например, трансля ых адресов в реальные и обратна). Данная глава начинается с ратных механизмов; затем вы познакомитесь с вопросами разр онных систем, связанными с использованием виртуальной памяти..; ГЛАВА Управление памятью 7.1.
Требования к управлению памятью 7.2. Распределение памяти 7.3. Страничная организация 7.4. Сегментация 7.5. Резюме, ключевые термины и контролъиые вопросы 7.6. Рекомендуемая литература 7.7. Задачи Приложение. Загрузка и связывание В а* — — Ь протраммь Команда ветвления увел ннение адресов , связанных ~~' и должны уд Ссылка на данные :овместное использование. 1огическая организация. Ризическая организация. Т ~~% вершина стека смещение Рис.
7.1. Требования к адресации процесса Часть 3. однозадачных системах основная память разделяется на две части;.:"' часть — для операпионной системы (резидентный монитор, ядро), „, я для выполняющейся в текущий момент времени программы. ,чцых системах "пользовательская" часть памяти должна быть рас. "' е т размещения нескольких процессов. Эта задача распределения вып ,рациоцной системой динамически и известна под названием упра ью (тпешогу тапяаешеп1). Ф, ~мрективное управление памятью жизненно важно для многозада ;сли в памяти располагается только небольшое число процессов, М~., ' часть времени все эти процессы будут находиться в состоянии о ' ;ценил операций ввода-вывода, и загрузка процессора будет низко$Ь >м, желательно эффективное распределение памяти, позволяющее -:'" ~ цей как можно больше процессов.
'лава начинается с рассмотрения требований, которым должны удо': е разрабатываемые системы управления памятью. Позже мы при атрению различных технологий управления памятью, начав с пр яьких простых схем. Мы будем исходить из того, что для выполнв ы оня должна быть загружена в основную память. . ТРЕБОВАНИИ: К УПРАВЛЯВ ,,ПАМЯТ Ю.,'":: '.*: 1ри рассмотрении различных механизмов и стратегий м памятью, полезно помнить требовании, которым он В 11.1ЯТ931 перечислены пять требований.
1еремещение. 1ящита. 3 многозадачной системе доступная основная память разделяется ссов. Обычно программист не знает заранее„какие программы будут кодиться в основной памяти во время работы разрабатываемой им . 'того, для максимизации загрузки процессора желательно иметь асов, готовых к исполнению, для чего требуется возможность загр з активных процессов из основной памяти. Требование, чтобы выгр и программа была вновь загружена в то же самое место, где нахо ыло бы слишком сильным ограничением. Крайне желательно, чтобь1 гла быть перемещена (ге1оса~е) в другую область памяти.
~яким образом, заранее неизвестно, где именно будет размещена'б кроме того, программа может быть перемещена из одной области '„, ю при свопинге. Эти обстоятельства обуславливают наличие опрз, ческих требований к адресации, проиллюстрированных на рис. 7;.~ ' е представлен образ процесса. Для простоты предположим, что образ просся занимает одну непрерывную область основной памяти. Очевидно, что опе„а донной системе необходимо знать местоположение управляющей информа„ц процесса и стека исполнения, а также точки входа для начала выполнения несся. Поскольку управлением памятью занимается операционная система и и же размещает процесс в основной памяти, соответствующие адреса она по-„яет автоматически. Однако помимо получения операционной системой укаццой информации, процесс должен иметь возможность обращаться к памяти в мой программе.