Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 26
Текст из файла (страница 26)
Однако это очень недорогая реализация,которая позволяет отказаться от многих функций операционной системы. В частности, такая сложная проблема, как защита памяти, здесь почти не стоит. Единственное, что желательно защищать — это программные модули и области памятисамой операционной системы.Если есть необходимость создать программу, логическое адресное пространствокоторой должно быть больше, чем свободная область памяти, или даже больше,чем весь возможный объем оперативной памяти, то используется распределениесперекрытием — так называемые оверлейные структуры (от overlay — перекрытие, расположение поверх чего-то).
Этот метод распределения предполагает, чтовся программа может быть разбита на части — сегменты. Каждая оверлейная программа имеет одну главную (main) часть и несколько сегментов (segments), причем в памяти машины одновременно могут находиться только ее главная часть и°Дин или несколько не перекрывающихся сегментов." о к а в оперативной памяти располагаются выполняющиеся сегменты, остальныенаходятся во внешней памяти. После того как текущий (выполняющийся) сегментзавершит свое выполнение, возможны два варианта: либо он сам (если данный сег-96Глава 3. Управление памятью в операционных системахДля абсолютного большинства современных операционных систем характернадисциплина замещения страниц LRU как самая эффективная.
Так, именно этадисциплина используется в OS/2 и в Linux. Однако в операционных системахWindows NT/2000/XP разработчики, желая сделать их максимально независимыми от аппаратных возможностей процессора, отказались от этой дисциплины и применили правило FIFO. А для того чтобы хоть как-то компенсировать неэффективность правила FIFO, была введена «буферизация» тех страниц, которые должны1быть записаны в файл подкачки на диск или просто расформированы. Принципбуферизации прост.
Прежде чем замещаемая страница действительно окажется вовнешней памяти или просто расформированной, она помечается как кандидат навыгрузку. Если в следующий раз произойдет обращение к странице, находящейсяв таком «буфере», то страница никуда не выгружается и уходит в конец спискаFIFO. В противном случае страница действительно выгружается, а на ее местов «буфер» попадает следующий «кандидат».
Величина такого «буфера» не можетбыть большой, поэтому эффективность страничной реализации памяти в Windows NT/2000/XP намного ниже, чем в других операционных системах, и явлениепробуксовки начинается даже при существенно большем объеме оперативной памяти.В ряде операционных систем с пакетным режимом работы для борьбы с пробуксовкой используется метод «рабочего множества». Рабочее множество —- это множество «активных» страниц задачи за некоторый интервал Т, то есть тех страниц,к которым было обращение за этот интервал времени. Реально количество активных страниц задачи (за интервал Т) все время изменяется, и это естественно, но,тем не менее, для каждой задачи можно определить среднее количество ее активных страниц.
Это количество и есть рабочее множество задачи. Наблюдения заисполнением множества различных программ показали [11,17, 22], что даже еслиинтервал Т равен времени выполнения всей работы, то размер рабочего множества часто существенно меньше, чем общее число страниц программы. Таким образом, если операционная система может определить рабочие множества исполняющихся задач, то для предотвращения пробуксовки достаточно планировать навыполнение только такое количество задач, чтобы сумма их рабочих множеств непревышала возможности системы.Как и в случае с сегментным способом организации виртуальной памяти, страничный механизм приводит к тому, что без специальных аппаратных средств он существенно замедляет работу вычислительной системы.
Поэтому обычно используется кэширование страничных дескрипторов. Наиболее эффективным механизмомкэширования является ассоциативный кэш. Именно такой ассоциативный кэши создан в 32-разрядных микропроцессорах i80x86. Начиная с i80386, который поддерживает страничный способ распределения памяти, в этих микропроцессорахимеется кэш на 32 страничных дескриптора.
Поскольку размер страницы в этих1В системе Windows NT файл с выгруженными виртуальными страницами носит название PageFile.sys.Таких файлов может быть несколько. Их совокупный размер должен быть не менее, чем объем физической памяти компьютера плюс 11 Мбайт, необходимых для самой Windows NT.
В системахWindows 2000 размер файла PageFile.sys намного превышает объем установленной физической памяти и часто достигает многих сотен мегабайтов.микропроцессорах равен 4 Кбайт, возможно быстрое обращение к памяти размером 128 Кбайт.Итак, основным достоинством страничного способа распределения памяти является минимальная фрагментация.
Поскольку на каждую задачу может приходиться по одной незаполненной странице, очевидно, что память можно использоватьдостаточно эффективно; этот метод организации виртуальной памяти был бы одним из самых лучших, если бы не два следующих обстоятельства.Первое — это то, что страничная трансляция виртуальной памяти требует существенных накладных расходов. В самом деле, таблицы страниц нужно тоже размещать в памяти. Кроме того, эти таблицы нужно обрабатывать; именно с ними работает диспетчер памяти.Второй существенный недостаток страничной адресации заключается в том, чтопрограммы разбиваются на страницы случайно, без учета логических взаимосвязей, имеющихся в коде.
Это приводит к тому, что межстраничные переходы, какправило, осуществляются чаще, нежели межсегментные, и к тому, что становитсятрудно организовать разделение программных модулей между выполняющимисяпроцессами.Для того чтобы избежать второго недостатка, постаравшись сохранить достоинства страничного способа распределения памяти, был предложен еще один способ — сегментно-страиичный. Правда, за счет увеличения накладных расходов наего реализацию.Сегментно-страничный способ организациивиртуальной памятиКак и в сегментном способе распределения памяти, программа разбивается налогически законченные части — сегменты — и виртуальный адрес содержит указание на номер соответствующего сегмента.
Вторая составляющая виртуального адреса — смещение относительно начала сегмента — в свою очередь может быть представлено состоящим из двух полей: виртуальной страницы ииндекса. Другими словами, получается, что виртуальный адрес теперь состоитиз трех компонентов: сегмента, страницы и индекса. Получение физическогоадреса и извлечение из памяти необходимого элемента для этого способа иллюстрирует рис.
3.6.Из рисунка сразу видно, что этот способ организации виртуальной памяти вноситеще большую задержку доступа к памяти. Необходимо сначала вычислить адресДескриптора сегмента и прочитать его, затем определить адрес элемента таблицыстраниц этого сегмента и извлечь из памяти необходимый элемент и уже толькопосле этого можно к номеру физической страницы приписать номер ячейки в странице (индекс).
Задержка доступа к искомой ячейке получается, по крайней мере, вТРИ раза больше, чем при простой прямой адресации. Чтобы избежать этой неприятности, вводится кэширование, причем кэш, как правило, строится по ассоциативному принципу. Другими словами, просмотры двух таблиц в памяти могут бытьзаменены одним обращением к ассоциативной памяти.98Гл ава 3. Управление памятью в операционных систем ахРегистр таблицы сегментов(таблицы дескрипторовсегментов)Виртуальный адрес320001711S (Segment) P (Page)612i (index)+ иТаблица сегментов текущей задачиРАдрес началасегментаДлинасегментаПравадоступа1100020R-X1320177J//'Таблица страниц сегмента задачиРНомерфизическойстраницы1/1101123ПравадоступаR-X//2_//23000г -Страница 2323612Рис. 3.6.
Сегментно-страничный способ организации виртуальной памятиНапомним, что принцип действия ассоциативного запоминающего устройствепредполагает, что каждой ячейке памяти такого устройства ставится в соответ-|/пнтсюльные вопросы и задачи99твие ячейка, в которой записывается некий ключ (признак, адрес), позволяющийоднозначно идентифицировать содержимое ячейки памяти. Сопутствующую ячей<у с информацией, позволяющей идентифицировать основные данные, обычноназывают полем тега. Просмотр полей тега всех ячеек ассоциативного устройствапамяти осуществляется одновременно, то есть в каждой ячейке тега есть необходимая логика, позволяющая посредством побитовой конъюнкции найти данныепо их признаку за одно обращение к памяти (если они там, конечно, присутствуют).
Часто поле тегов называют аргументом, а поле с данными — функцией. В данном случае в качестве аргумента при доступе к ассоциативной памяти выступаютномер сегмента и номер виртуальной страницы, а в качестве функции от этих аргументов получаем номер физической страницы. Остается приписать номер ячейки в странице к полученному номеру, и мы получаем адрес искомой команды илиоперанда.Оценим достоинства сегментно-страничного способа.
Разбиение программы насегменты позволяет размещать сегменты в памяти целиком. Сегменты разбиты настраницы, все страницы сегмента загружаются в память. Это позволяет сократитьчисло обращений к отсутствующим страницам, поскольку вероятность выхода запределы сегмента меньше вероятности выхода за пределы страницы. Страницыисполняемого сегмента находятся в памяти, но при этом они могут находиться нерядом друг с другом, а «россыпью», поскольку диспетчер памяти манипулируетстраницами. Наличие сегментов облегчает разделение программных модулей между параллельными процессами.
Возможна и динамическая компоновка задачи.А выделение памяти страницами позволяет минимизировать фрагментацию.Однако поскольку этот способ распределения памяти требует очень значительных затрат вычислительных ресурсов и его не так просто реализовать, используется он редко, причем в дорогих мощных вычислительных системах. Возможностьреализовать сегментно-страничное распределение памяти заложена и в семействомикропроцессоров i80x86, однако вследствие слабой аппаратной поддержки, трудностей при создании систем программирования и операционной системы практически в персональных компьютерах эта возможность не используется.Контрольные вопросы и задачи1. Что такое «виртуальный адрес», «виртуальное адресное пространство»? Чем(в общем случае) определяется максимально возможный объем виртуальногоадресного пространства программы?*• Имеются ли виртуальные адреса в программах, написанных для работы в средеDOS? Приведите примеры абсолютной двоичной программы для таких операционных систем, как MS DOS и Windows NT/2000/XP.• Изложите способ распределения памяти в MS DOS.• Что дает использование оверлеев при разработке DOS-приложений?• ^оъясните и сравните алгоритмы «первый подходящий», «самый подходящий»и «самый неподходящий», используемые при поиске и выделении фрагментапамяти.100Глава 3.
Управление памятью в операционных системах6. Что такое «фрагментация памяти»? Какой метод распределения памяти позволяет добиться минимальной фрагментации и почему?7. Что такое «уплотнение памяти»? Когда оно применяется?8.