Организация и структура виртуальной памяти в операционных системах . Концепция виртуализации

Автор работы: Пользователь скрыл имя, 03 Января 2012 в 16:11, контрольная работа

Описание работы

Разработчикам программного обеспечения часто приходится решать проблему размещения в памяти больших программ, размер которых превышает объем доступной оперативной памяти. Развитие архитектуры компьютеров и расширение возможностей операционной системы по управлению памятью позволило решить эту задачу. Одним из главных достижений стало появление виртуальной памяти (virtual memory). Впервые она была реализована в 1959 г. на компьютере «Атлас», разработанном в Манчестерском университете.

Файлы: 1 файл

реферат.docx

— 146.85 Кб (Скачать файл)

САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ  ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ 
 

Кафедра «Программное обеспечение  вычислительной техники  и автоматизированных систем» 
 
 
 
 

Отчет по дисциплине «Операционные  системы» 
 
 

    Организация и структура виртуальной памяти в операционных системах . Концепция виртуализации. 
     
     
     
     
     
     

Выполнил: Климов А.С.

ФЭТиП ПВС-31 з\о 
 

Проверил:  
 
 
 
 
 
 
 

Саратов 2011

Понятие виртуальной памяти

     Разработчикам программного обеспечения часто  приходится решать проблему размещения в памяти больших программ, размер которых превышает объем доступной  оперативной памяти. Развитие архитектуры  компьютеров и расширение возможностей операционной системы по управлению памятью позволило решить эту задачу. Одним из главных достижений стало появление виртуальной памяти (virtual memory). Впервые она была реализована в 1959 г. на компьютере «Атлас», разработанном в Манчестерском университете.

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

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

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

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

   Таким образом, возможность обеспечения (при  поддержке операционной системы) для  программы «видимости» практически  неограниченной (характерный размер для 32-разрядных архитектур 232 = 4 Гбайт) адресуемой пользовательской памяти (логическое адресное пространство) при наличии основной памяти существенно меньших размеров (физическое адресное пространство) – очень важный аспект.

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

   Например, 16-разрядный компьютер PDP-11/70 с 64 Кбайт  логической памяти мог иметь до 2 Мбайт оперативной памяти. Операционная система этого компьютера тем не менее поддерживала виртуальную память, которая обеспечивала защиту и перераспределение основной памяти между пользовательскими процессами.

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

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

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

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

Рис. 8.2. Структура виртуальной памяти

 

      Сегментный  способ организации  виртуальной памяти 

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

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

      Преобразование  имени сегмента в его порядковый номер осуществит система программирования, а операционная система будет  размещать сегменты в память и  для каждого сегмента получит  информацию о его начале. Таким  образом, виртуальный адрес для  этого способа будет состоять из двух полей - номер сегмента и смещение относительно начала сегмента. Соответствующая иллюстрация приведена на рис.2.7. На этом рисунке изображен случай обращения к ячейке, виртуальный адрес которой равен сегменту с номером 11 и смещением от начала этого сегмента, равным 612. Как мы видим, операционная система разместила данный сегмент в памяти, начиная с ячейки с номером 19 700.

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

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

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

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

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

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

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

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

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

  • правило FIFO (first in - first out, что означает: «первый пришедший первым и выбывает»);
  • правило LRU (least recently used, что означает «последний из недавно использованных» или, иначе говоря, «дольше всего неиспользуемый»);
  • правило LFU (least frequently used, что означает: «используемый реже всех остальных»);

      ♦ случайный (random) выбор сегмента.

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

Информация о работе Организация и структура виртуальной памяти в операционных системах . Концепция виртуализации