The design of the unix operating system by Maurice J
Вид материала | Реферат |
9.3 Система смешанного типа со свопингом и подкачкой Подсистема управления |
- Лекция 10. Файловые системы Unix, 116.79kb.
- Уровни рассмотрения, 314.07kb.
- Курс по операционным системам (на примере ос windows) Основан на учебном курсе Windows, 29.21kb.
- Выполнил ученик 11 «А» класса, 443.51kb.
- Ос лекция 1 (2-й семестр – временно), 101.4kb.
- Operating System, 7686.97kb.
- Unix-подобные операционные системы, характеристики, особенности, разновидности, 40.63kb.
- 1. ms sql server. Общие сведения, 66.03kb.
- Shanti ananda maurice, 89.84kb.
- Методические материалы, 3002.45kb.
9.27.
Запись таблицы страниц - Процесс A
------------------------------------------------┐
│ Страница 828: доступна, копируется при записи +-┐
L------------------------------------------------ │
│
Запись таблицы страниц - Процесс B │ ------------┐
------------------------------------------------┐ L->│ Страничный│
│ Страница 828: доступна, копируется при записи +--->│ блок 828 │
L------------------------------------------------ -->│ Счетчик │
│ │ ссылок 3 │
Запись таблицы страниц - Процесс C │ L------------
------------------------------------------------┐ │
│ Страница 828: доступна, копируется при записи +--
L------------------------------------------------
(а) Перед тем, как процесс B получил отказ системы защиты
Запись таблицы страниц - Процесс A
------------------------------------------------┐ ------------┐
│ Страница 828: доступна, копируется при записи +-┐ │ Страничный│
L------------------------------------------------ │ │ блок 828 │
L->│ Счетчик │
Запись таблицы страниц - Процесс B -->│ ссылок 2 │
------------------------------------------------┐ │ L------------
│ Страница 828: доступна +┐│
L------------------------------------------------││ ------------┐
L│->│ Страничный│
Запись таблицы страниц - Процесс C │ │ блок 786 │
------------------------------------------------┐ │ │ Счетчик │
│ Страница 828: доступна, копируется при записи +-- │ ссылок 1 │
L------------------------------------------------ L------------
(б) После запуска программы обработки отказа системы защиты
для процесса B
Рисунок 9.26. Отказ системы защиты из-за установки бита копи-
рования при записи
Перед завершением программа обработки отказа системы защиты
устанавливает биты модификации и защиты, но сбрасывает бит копи-
рования при записи. Она пересчитывает приоритет процесса и прове-
ряет, не поступали ли за время ее работы сигналы, предназначенные
процессу, в точности повторяя то, что делается по завершении об-
работки отказа из-за недопустимости данных.
Процесс, получающий отказы при
обращении к странице "Сборщик" страниц
-------------------------------------------------------------
│
│
│ Блокирует область
│
│
│ Отказ системы защиты
│ Приостанов - область
│ заблокирована
│
│ Выгрузка страницы - бит
│ допустимости сброшен
│
│
│
│ Выводит из приостанова
│ процессы, ожидающие
│ снятия с области
│ блокировки
│ Выход из приостанова
│
│
│
│ Проверка бита доступ-
│ ности - сброшен
│ Выход из программы обра-
│ ботки отказа системы за-
│ щиты
│
│
│
│ Отказ из-за недоступ-
│ ности данных
v
Время
Рисунок 9.27. Взаимодействие отказа системы защиты и отказа
из-за недоступности данных
9.2.4 Замещение страниц на менее сложной технической базе
Наибольшая действенность алгоритмов замещения страниц по зап-
росу (обращению) достигается в том случае, если биты упоминания и
модификации устанавливаются аппаратным путем и тем же путем вызы-
вается отказ системы защиты при попытке записи в страницу, имею-
щую признак "копирования при записи". Тем не менее, указанные ал-
горитмы вполне применимы даже тогда, когда аппаратура распознает
только бит доступности и код защиты. Если бит доступности, уста-
навливаемый аппаратно, дублируется программно-устанавливаемым би-
том, показывающим, действительно ли страница доступна или нет,
ядро могло бы отключить аппаратно-устанавливаемый бит и проимити-
ровать установку остальных битов программным путем. Так, напри-
мер, в машине VAX-11 бит упоминания отсутствует (см. [Levy 82]).
Ядро может отключить аппаратно-устанавливаемый бит доступности
для страницы и дальше работать по следующему плану. Если процесс
ссылается на страницу, он получает отказ, поскольку бит доступ-
ности сброшен, и в игру вступает программа обработки отказа, исс-
ледующая страницу. Поскольку "программный" бит доступности уста-
новлен, ядро знает, что страница действительно доступна и
находится в памяти; оно устанавливает "программный" бит упомина-
ния и "аппаратный" бит доступности, но ему еще предстоит узнать о
том, что на страницу была сделана ссылка. Последующие ссылки на
страницу уже не встретят отказ, ибо "аппаратный" бит доступности
установлен. Когда с ней будет работать "сборщик" страниц, он
вновь сбросит "аппаратный" бит доступности, вызывая тем самым от-
Аппарат- Программ- Программ- Аппарат- Программ- Программ-
ный бит ный бит ный бит ный бит ный бит ный бит
доступ- доступ- упомина- доступ- доступ- упомина-
ности ности ния ности ности ния
----------T----------T---------┐ ----------T----------T---------┐
│ Нет │ Да │ Нет │ │ Да │ Да │ Да │
L---------+----------+---------- L---------+----------+----------
(а) До модифицирования (б) После модифицирования
страницы страницы
Рисунок 9.28. Имитация установки "аппаратного" бита модифика-
ции программными средствами
казы на все последующие обращения к странице и возвращая систему
к началу цикла. Этот случай показан на Рисунке 9.28.
9.3 СИСТЕМА СМЕШАННОГО ТИПА СО СВОПИНГОМ И ПОДКАЧКОЙ
ПО ЗАПРОСУ
Несмотря на то, что в системах с замещением страниц по запро-
су обращение с памятью отличается большей гибкостью по сравнению
с системами подкачки процессов, возможно возникновение ситуаций,
в которых "сборщик" страниц и программа обработки отказов из-за
недоступности данных начинают мешать друг другу из-за нехватки
памяти. Если сумма рабочих множеств всех процессов превышает объ-
ем физической памяти в машине, программа обработки отказов обычно
приостанавливается, поскольку выделять процессам страницы памяти
дальше становится невозможным. "Сборщик" страниц не сможет доста-
точно быстро освободить место в памяти, ибо все страницы принад-
лежат рабочему множеству. Производительность системы падает, пос-
кольку ядро тратит слишком много времени на верхнем уровне, с
безумной скоростью перестраивая память.
Ядро в версии V манипулирует алгоритмами подкачки процессов и
замещения страниц так, что проблемы соперничества перестают быть
неизбежными. Когда ядро не может выделить процессу страницы памя-
ти, оно возобновляет работу процесса подкачки и переводит пользо-
вательский процесс в состояние, эквивалентное состоянию "готов-
ности к запуску, будучи зарезервированным". В этом состоянии
одновременно могут находиться несколько процессов. Процесс под-
качки выгружает один за другим целые процессы, пока объем доступ-
ной памяти в системе не превысит верхнюю отметку. На каждый выг-
руженный процесс приходится один процесс, загруженный в память из
состояния "готовности к выполнению, будучи зарезервированным".
Ядро загружает эти процессы не с помощью обычного алгоритма под-
качки, а путем обработки отказов при обращении к соответствующим
страницам. На последующих итерациях процесса подкачки при условии
наличия в системе достаточного объема свободной памяти будут об-
работаны отказы, полученные другими пользовательскими процессами.
Применение такого метода ведет к снижению частоты возникновения
системных отказов и устранению соперничества: по идеологии он
близок к методам, используемым в операционной системе VAX/VMS
([Levy 82]).
9.4 ВЫВОДЫ
Прочитанная глава была посвящена рассмотрению алгоритмов под-
качки процессов и замещения страниц, используемых в версии V сис-
темы UNIX. Алгоритм подкачки процессов реализует перемещение про-
цессов целиком между основной памятью и устройством выгрузки.
Ядро выгружает процессы из памяти, если их размер поглощает всю
свободную память в системе (в результате выполнения функций fork,
exec и sbrk или в результате естественного увеличения стека), или
в том случае, если требуется освободить память для загрузки про-
цесса. Загрузку процессов выполняет специальный процесс подкачки
(процесс 0), который запускается всякий раз, как на устройстве
выгрузки появляются процессы, готовые к выполнению. Процесс под-
качки не прекращает своей работы до тех пор, пока на устройстве
выгрузки не останется ни одного такого процесса или пока в основ-
ной памяти не останется свободного места. В последнем случае про-
цесс подкачки пытается выгрузить что-нибудь из основной памяти,
но в его обязанности входит также слежение за соблюдением требо-
вания минимальной продолжительности пребывания выгружаемых про-
цессов в памяти (в целях предотвращения холостой перекачки); по
этой причине процесс подкачки не всегда достигает успеха в своей
работе. Возобновление процесса подкачки в случае возникновения
необходимости в нем производит с интервалом в одну секунду прог-
рамма обработки прерываний по таймеру.
В системе с замещением страниц по запросу процессы могут ис-
полняться, даже если их виртуальное адресное пространство загру-
жено в память не полностью; поэтому виртуальный размер процесса
может превышать объем доступной физической памяти в системе. Ког-
да ядро испытывает потребность в свободных страницах, "сборщик"
страниц просматривает все активные страницы в каждой области, по-
мечая для выгрузки те из них, которые достаточно "созрели" для
этого, и в конечном итоге откачивает их на устройство выгрузки.
Когда процесс обращается к виртуальной странице, которая в насто-
ящий момент выгружена из памяти, он получает отказ из-за недос-
тупности данных. Ядро запускает программу обработки отказа, кото-
рая назначает области новую физическую страницу памяти и копирует
в нее содержимое виртуальной страницы.
Повысить производительность системы при использовании алго-
ритма замещения страниц по запросу можно несколькими способами.
Во-первых, если процесс вызывает функцию fork, ядро использует
бит копирования при записи, тем самым в большинстве случаев сни-
мая необходимость в физическом копировании страниц. Во-вторых,
ядро может запросить содержимое страницы исполняемого файла прямо
из файловой системы, устраняя потребность в вызове функции exec
для незамедлительного считывания файла в память. Это способствует
повышению производительности, поскольку не исключена возможность
того, что подобные страницы так никогда и не потребуются процес-
су, и устраняет излишнюю холостую перекачку, имеющую место в том
случае, если "сборщик" страниц выгружает эти страницы из памяти
до того, как в них возникает потребность.
9.5 УПРАЖНЕНИЯ
1. Набросайте схему реализации алгоритма mfree, который осво-
бождает пространство памяти и возвращает его таблице свобод-
ного пространства.
2. В разделе 9.1.2 утверждается, что система блокирует переме-
щаемый процесс, чтобы другие процессы не могли его трогать с
места до момента окончания операции. Что произошло бы, если
бы система не делала этого ?
3. Предположим, что в адресном пространстве процесса располага-
ются таблицы используемых процессом сегментов и страниц. Ка-
ким образом ядро может выгрузить это пространство из памяти?
4. Если стек ядра находится внутри адресного пространства про-
цесса, почему процесс не может выгружать себя сам ? Какой на
Ваш взгляд должна быть системная программа выгрузки процес-
сов, как она должна запускаться ?
*5. Предположим, что ядро пытается выгрузить процесс, чтобы ос-
вободить место в памяти для других процессов, загружаемых с
устройства выгрузки. Если ни на одном из устройств выгрузки
для данного процесса нет места, процесс подкачки приостанав-
ливает свою работу до тех пор, пока место не появится. Воз-
можна ли ситуация, при которой все процессы, находящиеся в
памяти, приостановлены, а все готовые к выполнению процессы
находятся на устройстве выгрузки ? Что нужно предпринять яд-
ру для того, чтобы исправить это положение ?
6. Рассмотрите еще раз пример, приведенный на Рисунке 9.10, при
условии, что в памяти есть место только для 1 процесса.
7. Обратимся к примеру, приведенному на Рисунке 9.11. Составьте
подобный пример, в котором процессу постоянно требуется для
работы центральный процессор. Существует ли какой-нибудь
способ снятия подобной напряженности ?
-----------------------------------┐
│ main() │
│ { │
│ f(); │
│ g(); │
│ } │
│ │
│ f() │
│ { │
│ vfork(); │
│ } │
│ │
│ g() │
│ { │
│ int blast[100],i; │
│ for (i = 0; i < 100; i++) │
│ blast[i] = i; │
│ } │
L-----------------------------------
Рисунок 9.29
8. Что произойдет в результате выполнения программы, приведен-
ной на Рисунке 9.29, в системе BSD 4.2 ? Каким будет стек
процесса-родителя ?
9. Почему после выполнения функции fork процесса-потомка пред-
почтительнее запускать впереди процесса-родителя, если на
разделяемых страницах биты копирования при записи установле-
ны ? Каким образом ядро может заставить потомка запуститься
первым ?
*10. Алгоритм обработки отказа из-за недоступности данных, изло-
женный в тексте, загружает страницы поодиночке. Его эффек-
тивность можно повысить, если подготовить к загрузке помимо
страницы, вызвавшей отказ, и все соседние с ней страницы.
Переработайте исходный алгоритм с учетом указанной операции.
11. В алгоритмах работы "сборщика" страниц и программы обработки
отказов из-за недоступности данных предполагается, что раз-
мер страницы равен размеру дискового блока. Что нужно изме-
нить в этих алгоритмах для того, чтобы они работали и в тех
случаях, когда указанное равенство не соблюдается ?
*12. Когда процесс вызывает функцию fork (ветвится), значение
счетчика ссылок на каждую разделяемую страницу (в таблице
pfdata) увеличивается. Предположим, что "сборщик" страниц
выгружает разделяемую страницу на устройство выгрузки, и
один из процессов (скажем, родитель) впоследствии получает
отказ при обращении к ней. Содержимое виртуальной страницы
теперь располагается на физической странице. Объясните, по-
чему процесс-потомок всегда имеет возможность получить вер-
ную копию страницы, даже после того, как процесс-родитель
что-то запишет на нее. Почему, когда процесс-родитель ведет
запись на страницу, он должен немедленно порвать связь с ее
дисковой копией ?
13. Что следует предпринять программе обработки отказов в том
случае, если в системе исчерпаны страницы памяти ?
*14. Составьте алгоритм выгрузки редко используемых компонент яд-
ра. Какие из компонент нельзя выгружать и как их в таком
случае следует обозначить ?
15. Придумайте алгоритм, отслеживающий выделение пространства на
устройстве выгрузки, используя вместо карт памяти, описанных
в настоящей главе, битовый массив. Сравните эффективность
обоих методов.
16. Предположим, что в машине нет аппаратно-устанавливаемого би-
та доступности, но есть код защиты, устанавливающий права
доступа на чтение, запись и "исполнение" содержимого страни-
цы. Смоделируйте работу с помощью программно-устанавливаемо-
го бита доступности.
17. В машине VAX-11 перед проверкой наличия отказов из-за недос-
тупности данных выполняется аппаратная проверка наличия
отказов системы защиты. Как это отражается на алгоритмах об-
работки отказов ?
18. Системная функция plock дает суперпользователю возможность
устанавливать и снимать блокировку (в памяти) на областях
команд и данных вызывающего процесса. Процесс подкачки и
"сборщик" страниц не могут выгружать заблокированные страни-
цы из памяти. Процессам, использующим эту системную функцию,
не приходится дожидаться загрузки страниц, поэтому им гаран-
тирован более быстрый ответ по сравнению с другими процесса-
ми. Следует ли иметь также возможность блокировки в памяти и
области стека ? Что произойдет в том случае, если суммарный
объем заблокированных областей превысит размер доступной па-
мяти в машине ?
19. Что делает программа, приведенная на Рисунке 9.30 ? Подумай-
те над альтернативной стратегией замещения страниц, в соот-
ветствии с которой в рабочее множество каждого процесса
включается максимально-возможное число страниц.
-------------------------------------------------------------┐
│ struct fourmeg │
│ { │
│ int page[512]; /* пусть int занимает 4 байта */ │
│ } fourmeg[2048]; │
│ │
│ main() │
│ { │
│ for (;;) │
│ { │
│ switch(fork()) │
│ { │
│ case -1: /* процесс-родитель не может выполнить │
│ * fork --- слишком много потомков */ │
│ case 0: /* потомок */ │
│ func(); │
│ default: │
│ continue; │
│ } │
│ } │
│ } │
│ │
│ func() │
│ { │
│ int i; │
│ │
│ for (;;) │
│ { │
│ printf("процесс %d повторяет цикл\n",getpid()); │
│ for (i = 0; i < 2048; i++) │
│ fourmeg[i].page[0] = i; │
│ } │
│ } │
L-------------------------------------------------------------
Рисунок 9.30
ПОДСИСТЕМА УПРАВЛЕНИЯ
ВВОДОМ-ВЫВОДОМ
Подсистема управления вводом-выводом позволяет процессам под-
держивать связь с периферийными устройствами, такими как накопи-
тели на магнитных дисках и лентах, терминалы, принтеры и сети, с
одной стороны, и с модулями ядра, которые управляют устройствами
и именуются драйверами устройств, с другой. Между драйверами уст-
ройств и типами устройств обычно существует однозначное соответс-
твие: в системе может быть один дисковый драйвер для управления
всеми дисководами, один терминальный драйвер для управления всеми
терминалами и один ленточный драйвер для управления всеми ленточ-
ными накопителями. Если в системе имеются однотипные устройства,
полученные от разных изготовителей - например, две марки ленточ-
ных накопителей, - в этом случае можно трактовать однотипные уст-
ройства как устройства двух различных типов и иметь для них два
отдельных драйвера, поскольку таким устройствам для выполнения
одних и тех же операций могут потребоваться разные последователь-
ности команд. Один драйвер управляет множеством физических уст-
ройств данного типа. Например, один терминальный драйвер может
управлять всеми терминалами, подключенными к системе. Драйвер
различает устройства, которыми управляет: выходные данные, пред-
назначенные для одного терминала, не должны быть посланы на дру-
гой.
Система поддерживает "программные устройства", с каждым из
которых не связано ни одно конкретное физическое устройство. Нап-
ример, как устройство трактуется физическая память, чтобы позво-
лить процессу обращаться к ней извне, пусть даже память не явля-
ется периферийным устройством. Команда ps обращается к
информационным структурам ядра в физической памяти, чтобы сооб-