Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Система управления памятью






 

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

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

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

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

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

Система управления памятью выполняет следующие основные функции [2]:

учет состояния свободных и уже распределенных областей памяти и модернизация этой информации всякий раз, когда в распределении памяти производятся изменения;

распределение памяти для выполнения задач (определение, какой задаче, когда и в каком количестве выделить оперативную память);

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

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

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

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

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

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

Проиллюстрируем это простым примером.

Пусть ОП имеет объем 10 МБ, а для выполнения программ A, B, C, D требуются следующие объемы памяти: A – 2МБ, B – 1МБ, C – 4МБ, D – 4МБ. Начальное распределение памяти и распределение памяти после выполнения некоторых программ представлено на рис.5.16.

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

A   свободно   свободно   D
     
B   B    
C   C   C  
      свободно
     
     
свободно   свободно   свободно  
     
     
a)   б)   в)   г)

Рис.5.16. Статическое распределения памяти:

a – начальное распределение; б – после завершения программы A;

в – после завершения программы B; г – после завершения программы C

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

Современные системы распределения памяти опираются на две концепции: динамического использования ресурсов и виртуализации.

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

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

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

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

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

LRU (least recently used) – наиболее давно не использовавшийся;

FIFO – самый давний по пребыванию в ОЗУ;

Random – случайным образом.

Динамическое распределение памяти тесно переплетается с понятием виртуальной памяти.

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

V вирт > > V физ,

V вирт = 2Lша.

Для персональной ЭВМ на основе 32-разрядных микропроцессоров

V вирт = 232 = 4Г байт.

При этом, естественно, в ЭВМ должен быть обеспечен достаточный объем внешней памяти для хранения всех программ, обрабатываемых на компьютере.

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

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

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

Для преобразования виртуальных адресов в физические физическая и виртуальная память разбиваются на блоки фиксированной длины, называемые страницами. Объемы виртуальной и физической страниц совпадают. Страницы виртуальной и физической памяти нумеруются.

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

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

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

Схема перевода виртуальных адресов в физические проиллюстрирована на рис.5.17.

Рассмотрим пример преобразования адреса виртуальной страницы в адрес физической страницы. Пусть компьютер имеет оперативную память V ОЗУ=3 и адресное пространство, предполагающее разбиение на страницы объемом V стр=1. Пусть коэффициент мультипрограммирования данной ЭВМ равен четырем, то есть на компьютере могут одновременно выполняться до четырех программ. Каждая программа, в свою очередь, разбивается на виртуальные страницы того же объема. Переключение между программами происходит через t k = 1. Время выполнения каждой страницы любой программы составляет t = 2 t k. Полагаем, что страницы программ загружаются в оперативную память по мере их необходимости и, по возможности, в свободные области ОЗУ. Если вся память занята, то новая страница замещает ту, к которой дольше всего не было обращений (механизм замещения LRU). Пусть выполняемые программы имеют следующее количество страниц: V A=2, V B=1, V C=3, V D=2. Тогда таблица загрузки оперативной памяти и таблицы страничного преобразования для каждой программы будут иметь вид, представленный в табл.5.4.

 

 
 

В таблице распределения оперативной памяти жирным шрифтом выделены номера активных в данном такте страниц.

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

Если каждая страница имеет объем 1000 адресуемых ячеек, то, например, в такте 9 обращение по виртуальному адресу 1100 программы A (виртуальная страница 1, смещение в странице равно 100) приведет к обращению по физическому адресу 2100 (физическая страница 2, смещение в физической странице такое же, как и в виртуальной – 100).

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

 


 

 

Таблица 5.4

Страница Такты
                               
Динамическое распределение оперативной памяти
ОЗУ 0 А 0 А 0 А 0 D 0 D 0 D 0 C 0 C 0 C 0 C 1 C 1 C 1 C 1 C 1 C 1 C 1
    B 0 B 0 B 0 A 0 А 0 А 0 D 0 D 0 D 0 D 1 D 1 D 1 D 1 D 1 D 1
      C 0 C 0 C 0 B 0 B 0 B 0 A 1 А 1 А 1 A 1 А 1 А 1 C 2 C 2
  Таблица страничного преобразования для программы A
A 0     - -       - - - - - - - - -
  - - - - - - - -             - -
  Таблица страничного преобразования для программы B
B 0 -       -       - - - - - - - -
  Таблица страничного преобразования для программы C
C 0 - -       -       - - - - - - -
  - - - - - - - - -              
  - - - - - - - - - - - - - -    
  Таблица страничного преобразования для программы D
D 0 - - -       -       - - - - - -
  - - - - - - - - - -            

 


Организация виртуальной памяти в персональной ЭВМ

В ЭВМ на основе 32-разрядного микропроцессора при работе в так называемом защищенном режиме, поддерживающем мультипрограммирование и обеспечивающем адресацию операндов в максимально возможном для данной архитектуры диапазоне до 232 байт, виртуальная память организуется на основе сегментно-страничного представления памяти. При этом память разбивается на сегменты переменной длины, выделяемые пользователю под размещение своих программ и данных. Сегменты, в свою очередь, делятся на страницы фиксированной длины (4К = 212 байт), используемые системой управления памятью для ее виртуализации [4].

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

Механизм формирования физического адреса при сегментно-страничной организации памяти показан на рис.5.18.

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

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

Селектор размещается в сегментном регистре. Основная его часть представляет собой номер (INDEX), по которому в одной из специальных таблиц дескрипторов можно найти дескриптор (описатель) данного сегмента. Вид используемой таблицы определяется битом TI (table indicator) селектора. Селектор содержит также двухразрядное поле RPL, используемое при организации защиты памяти по привилегиям.



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


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

При преобразовании номера виртуальной страницы в номер физической используются следующие системные таблицы: каталог таблиц страниц (КТС) и таблицы страниц (ТС). Структуры этих таблиц сходны между собой (рис.5.20).

Преобразование проводится в два этапа.

 
 

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

Элемент КТС содержит

адрес начала таблицы страниц,

бит присутствия (P) таблицы страниц в оперативной памяти,

бит разрешения чтения/записи (R/W),

бит защиты страницы (пользователь/супервизор (U/S)) и некоторые другие атрибуты.

После получения начального адреса таблицы страниц из выбранного элемента КТС происходит обращение к ТС. В выбранной таблице страниц ищется элемент, номер которого определяется разрядами А 21­– А 12 линейного адреса. Элемент ТС в соответствующем поле содержит адрес начала требуемой физической страницы и другие атрибуты, аналогичные элементу КТС.

При P =0 возникает прерывание, необходимая страница подкачивается в ОП, ее адрес заносится в ТС и команда выполняется повторно.

 

Сокращение потерь времени при использовании сегментно-страничной организации памяти в персональной ЭВМ

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

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


 
 

При страничном преобразовании номера виртуальной страницы в номер физической страницы используется кэш-буфер ассоциативной трансляции (TLB), содержащий физические адреса 32-х наиболее активно используемых страниц (рис.5.22) и расположенный непосредственно в микропроцессоре.

Номер виртуальной страницы представляет собой старшие 20 разрядов линейного адреса­, полученного при сегментном преобразовании (А 31 – А 12). По младшим разрядам (А 14 – А 12) этого номера выбирается блок в буфере ассоциативной трансляции. Содержимое поля тэгов каждой из четырех строк этого блока ассоциативным образом (одновременно) сравнивается с разрядами линейного адреса. Если значения для одной из строк выбранного блока совпали, значит номер этой виртуальной страницы уже преобразовывался в номер физической страницы, и результат этого преобразования уже находится в найденной строке TLB. Если сравнение не было успешным, то преобразование номера виртуальной страницы в номер физической проходит обычным образом, а полученное значение заносится в TLB. При этом в поле тэгов заносятся старшие 17 разрядов линейного адреса этой страницы (A 31– A 15). Если нет свободной строки в блоке, определяемом разрядами А 14 – А 12 линейного адреса, то из блока вытесняется строка, информация в которой дольше всего не использовалась (механизм LRU).

 

  Тэг (А 31 – А 15) Физический адрес начала страницы Атрибуты страницы  
Блок 0       Строка 0
      Строка 1
      Строка 2
      Строка 3
Блок 1       Строка 0
      Строка 1
      Строка 2
      Строка 3
... ... ... ... ...
Блок 7       Строка 0
      Строка 1
      Строка 2
      Строка 3

Рис.5.22. Формат буфера ассоциативной трансляции адреса страницы

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.013 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал