4.43. Организация виртуальной памяти

К оглавлению1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 
34 35 36 37 38 39 40 41 42 43 44 45 

Уже достаточно давно пользователи столкнулись с проблемой размеще­ния в основной памяти программ, размер которых превышал имеющуюся в наличии свободную память. Решением этой проблемы было использование внешней памяти (дискового пространства). Программы разбивались на части (оверлеи), которые хранились в ОП и на диске. Перемещение их между ос­новной памятью и диском осуществлялось средствами ОС. Однако разбиением программы на части должен был заниматься программист. Это приводило к увеличению трудоемкости програм­мирования и к неэффективному использованию памяти.

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

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

решает следующие задачи:

- размещает данные в запоминающих устройствах разного типа, на­пример, часть программы в ОП, а часть на диске;

- перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы

с диска в ОП;

- преобразует виртуальные адреса в физические.

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

Наиболее распространенными реализациями виртуальной памяти явля­ются страничное, сегментное и странично-сегментное распределение памяти (рис. 4.10), атаюке свопинг.

Страничное распределение

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

Вся оперативная память машины также делится на части такого же раз­мера, называемые физическими страницами (или блоками).

Размер страницы обычно выбирается равным степени двойки: 512, 1024 и т.д., это позволяет упростить механизм преобразования адресов.

 

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

При загрузке процесса часть его виртуальных страниц помещается в оперативную память, а остальные — на диск. Смежные виртуальные страни­цы необязательно располагаются в смежных физических страницах. При за­грузке операционная система создает для каждого процесса информацион­ную структуру — таблицу страниц, в которой устанавливается соответствие между номерами виртуальных и физических страниц для страниц, загружен­ных в оперативную память, или делается отметка о том, что виртуальная страница выгружена на диск (ВЗУ). Кроме того, в таблице страниц содержит­ся управляющая информация, такая как признак модификации страницы, признак невыгружаемое™ (выгрузка некоторых страниц может быть запре­щена), признак обращения к странице (используется для подсчета числа об­ращений за определенный период времени) и другие данные, формируемые и используемые механизмом виртуальной памяти.

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

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

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

- дольше всего не использовавшаяся страница;

- первая попавшаяся страница;

- страница, к которой в последнее время было меньше всего обраще­ний.

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

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

Рассмотрим механизм преобразования виртуального адреса в физиче­ский при страничной организации памяти (рис. 4.15).

Виртуальный адрес при страничном распределении может быть пред­ставлен в виде пары (р, s), где р — номер виртуальной страницы процесса (нумерация страниц начинается с 0), s — смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени k, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса. Оставшиеся старшие разряды представляют со­бой двоичную запись номера страницы р.

При каждом обращении к оперативной памяти аппаратными средствами

выполняются следующие действия:

На основании начального адреса таблицы страниц (содержимое реги­стра адреса таблицы страниц), номера виртуальной страницы (старшие раз­ряды виртуального адреса) и длины записи в таблице страниц (системная константа) определяется адрес нужной записи в таблице.

Из записи извлекается номер физической страницы.

К номеру физической страницы присоединяется смещение (младшие разряды виртуального адреса.

Рис.4.16. Распределение памяти сегментами

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

Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g — номер сегмента, as — смещение в сегменте. Физический адрес получается путем сложения начального физического адре­са сегмента, найденного в таблице сегментов по номеру g, и смещения s.

Недостатком данного метода распределения памяти является фрагмен­тация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.

Странично-сегментное распределение

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

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

Рис.4.17. Схема преобразования виртуального адреса в физический для сегментно-страничной организации памяти

Процесс преобразования адресов посредством таблиц является доста­точно длительным и, естественно, приводит к снижению производительности

 

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

Рис.4.18. Механизм динамического преобразования адресов

Виртуальный адрес страницы VA, составленный из полей g и р, переда­ется в ассоциативную память (буфер быстрой переадресации) в качестве по­искового признака — первое поле ассоциативного ЗУ (АЗУ). Вторым полем АЗУ является физический адрес страницы в ОП. При обнаружении совпаде­ния VAi с содержимым памяти из соответствующей ячейки АЗУ выбирается физический адрес страницы п, позволяющий сформировать полный физиче­ский адрес элемента данных, находящегося в ОП. Если совпадение не про­изошло, то трансляция адресов осуществляется обычными методами через таблицы сегментов и страниц. Эффективность механизма динамического преобразования адресов зависит от коэффициента «попадания», т.е. от того, насколько редко приходится обращаться к табличным методам трансляции адресов. Учитывая принцип локальности программ и данных, можно сказать, что при первом обращении к странице, расположенной в ОП, физический ад­рес определяется с помощью таблиц и загружается в соответствующую ячей­ку АЗУ. Последующие обращения к странице выполняются с использовани­ем АЗУ.

Свопинг

Разновидностью виртуальной памяти является свопинг. На рис. 4.19 показан график зависимости коэффициента загрузки про­цессора в зависимости от числа одновременно выполняемых процессов и до­ли времени, проводимого этими процессами в состоянии ожидания ввода-вывода.

Рис. 4.19. Зависимость загрузки процессора от числа задач и интенсивности ввода-вывода

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

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

4.4.4. Методы повышения пропускной способности оперативной памяти

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

Выборка широким словом

Прямой способ сокращения числа обращений к ОП состоит в организа­ции выборки широким словом. Этот способ основывается на свойстве ло­кальности данных и программ. При выборке широким словом за одно обра­щение к ОП производится одновременная запись или считывание нескольких команд или слов данных из «широкой» ячейки. Широкое слово заносится в буферную память (кэш-память) или регистр, где оно расформировывается на отдельные команды или слова данных, которые могут последовательно ис­пользоваться процессором без дополнительных обращений к ОП.

В системах с кэш-памятью первого уровня ширина шин данных ОП час­то соответствует ширине шин данных кэш-памяти, которая во многих случа­ях имеет физическую ширину шин данных, соответствующую количеству разрядов в слове. Удвоение и учетверение ширины шин кэш-памяти и ОП удваивает или учетверяет соответственно полосу пропускания системы памя­ти.

Реализация выборки широким словом вызывает необходимость мульти­плексирования данных между кэш-памятью и процессором, поскольку ос­новной единицей обработки данных в процессоре все еще остается слово. Эти мультиплексоры оказываются на критическом пути поступления инфор­мации в процессор. Кэш-память второго уровня несколько смягчает эту про­блему, т.к. в этом случае мультиплексоры могут располагаться между двумя уровнями кэш-памяти, т.е. вносимая ими задержка не столь критична. Другая проблема, связанная с увеличением разрядности памяти, заключается в необ­ходимости определения минимального объема (инкремента) памяти для по­этапного её расширения, которое часто выполняется самими пользователями во время эксплуатации системы. Удвоение или учетверение ширины памяти приводит к удвоению или учетверению этого минимального инкремента. Кроме того, имеются проблемы и с организацией коррекции ошибок в систе­мах с широкой памятью.

Примером организации широкой ОП является система Alpha AXP21064, в которой кэш второго уровня, шина памяти и сама ОП имеют разрядность 256 бит.

Расслоение обращений

Другой способ повышения пропускной способности ОП связан с по­строением памяти, состоящей на физическом уровне из нескольких модулей (банков) с автономными схемами адресации, записи и чтения. При этом на логическом уровне управления памятью организуются последовательные об­ращения к различным физическим модулям. Обращения к различным моду­лям могут перекрываться, и таким образом образуется своеобразный конвей­ер. Эта процедура носит название расслоения памяти. Целью данного мето­да является увеличение скорости доступа к памяти посредством совмещения фаз обращений ко многим модулям памяти. Известно несколько вариантов организации расслоения. Наиболее часто используется способ расслоения обращений за счет расслоения адресов. Этот способ основывается на свой­стве локальности программ и данных, предполагающем, что адрес следую­щей команды программы на единицу больше адреса предыдущей (линей­ность программ нарушается только командами перехода). Аналогичная по­следовательность адресов генерируется процессором при чтении и записи слов данных. Таким образом, типичным случаем распределения адресов об­ращений к памяти является последовательность вида а, а+ 1, а + 2,... Из этого следует, что расслоение обращений возможно, если ячейки с адресами а, а+ 1, а + 2,... будут размещаться в блоках 0, 1,2,... Такое распределение яче­ек по модулям (банкам) обеспечивается за счет использования адресов вида

где В - к-разрядный адрес модуля (младшая часть адреса) и С - п-разрядный адрес ячейки в модуле В (старшая часть адреса).

Принцип расслоения обращений иллюстрируется на рис. 4.20,а. Все про­граммы и данные «размещаются» в адресном пространстве последовательно. Однако ячейки памяти, имеющие смежные адреса, находятся в различных физических модулях памяти. Если ОП состоит из 4-х модулей, то номер мо­дуля кодируется двумя младшими разрядами адреса. При этом полные т-разрядные адреса 0, 4, 8,... будут относиться к блоку 0, адреса 1, 5, 9, ... - к блоку 1, адреса 2, 6, 10,... — к блоку 2 и адреса 3, 7, 11,... - к блоку 3. В ре­зультате этого последовательность обращений к адресам 0, 1, 2, 3, 4, 5, ... будет расслоена между модулями 0,1,2,3,0,1,....

Поскольку каждый физический модуль памяти имеет собственные схе­мы управления выборкой, можно обращение к следующему модулю произ­водить, не дожидаясь ответа от предыдущего. Так на временной диаграмме (рис. 4.20,6) показано, что время доступа к каждому модулю составляет т = 4Т, где Т = ti+1-ti - длительность такта. В каждом такте следуют непре­рывно обращения к модулям памяти в моменты времени t1, t2, t3 ... .

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

Задержка в выдаче кванта информации относительно момента обраще­ния также составляет 4Т, однако задержка в выдаче каждого последующего кванта относительно момента выдачи предыдущего составит Т.

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

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

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

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

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

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

Прямое уменьшение числа конфликтов за счет организации чередую­щихся обращений к различным модулям памяти может быть достигнуто пу­тем размещения программ и данных в разных модулях. Доля команд в программе, требующих ссылок к находящимся в ОП данным, зависит от класса решаемой задачи и от архитектурных особенностей компьютера. Для большинства ЭВМ с традиционной архитектурой и задач научно-технического характера эта доля превышает 50 %. Поскольку обращения к командам и элементам данных чередуются, то разделение памяти на память команд и память данных повышает быстродействие машины подобно рас­смотренному выше механизму расслоения. Разделение памяти на память ко­манд и память данных широко используется в системах управления или об­работки сигналов. В подобного рода системах в качестве памяти команд не­редко используются постоянные запоминающие устройства (ПЗУ), цикл ко­торых меньше цикла устройств, допускающих запись, это делает разделение программ и данных весьма эффективным. Следует отметить, что обращения процессоров ввода-вывода в режиме прямого доступа в память логически реализуются как обращения к памяти данных.

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

Уже достаточно давно пользователи столкнулись с проблемой размеще­ния в основной памяти программ, размер которых превышал имеющуюся в наличии свободную память. Решением этой проблемы было использование внешней памяти (дискового пространства). Программы разбивались на части (оверлеи), которые хранились в ОП и на диске. Перемещение их между ос­новной памятью и диском осуществлялось средствами ОС. Однако разбиением программы на части должен был заниматься программист. Это приводило к увеличению трудоемкости програм­мирования и к неэффективному использованию памяти.

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

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

решает следующие задачи:

- размещает данные в запоминающих устройствах разного типа, на­пример, часть программы в ОП, а часть на диске;

- перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы

с диска в ОП;

- преобразует виртуальные адреса в физические.

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

Наиболее распространенными реализациями виртуальной памяти явля­ются страничное, сегментное и странично-сегментное распределение памяти (рис. 4.10), атаюке свопинг.

Страничное распределение

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

Вся оперативная память машины также делится на части такого же раз­мера, называемые физическими страницами (или блоками).

Размер страницы обычно выбирается равным степени двойки: 512, 1024 и т.д., это позволяет упростить механизм преобразования адресов.

 

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

При загрузке процесса часть его виртуальных страниц помещается в оперативную память, а остальные — на диск. Смежные виртуальные страни­цы необязательно располагаются в смежных физических страницах. При за­грузке операционная система создает для каждого процесса информацион­ную структуру — таблицу страниц, в которой устанавливается соответствие между номерами виртуальных и физических страниц для страниц, загружен­ных в оперативную память, или делается отметка о том, что виртуальная страница выгружена на диск (ВЗУ). Кроме того, в таблице страниц содержит­ся управляющая информация, такая как признак модификации страницы, признак невыгружаемое™ (выгрузка некоторых страниц может быть запре­щена), признак обращения к странице (используется для подсчета числа об­ращений за определенный период времени) и другие данные, формируемые и используемые механизмом виртуальной памяти.

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

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

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

- дольше всего не использовавшаяся страница;

- первая попавшаяся страница;

- страница, к которой в последнее время было меньше всего обраще­ний.

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

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

Рассмотрим механизм преобразования виртуального адреса в физиче­ский при страничной организации памяти (рис. 4.15).

Виртуальный адрес при страничном распределении может быть пред­ставлен в виде пары (р, s), где р — номер виртуальной страницы процесса (нумерация страниц начинается с 0), s — смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени k, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса. Оставшиеся старшие разряды представляют со­бой двоичную запись номера страницы р.

При каждом обращении к оперативной памяти аппаратными средствами

выполняются следующие действия:

На основании начального адреса таблицы страниц (содержимое реги­стра адреса таблицы страниц), номера виртуальной страницы (старшие раз­ряды виртуального адреса) и длины записи в таблице страниц (системная константа) определяется адрес нужной записи в таблице.

Из записи извлекается номер физической страницы.

К номеру физической страницы присоединяется смещение (младшие разряды виртуального адреса.

Рис.4.16. Распределение памяти сегментами

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

Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g — номер сегмента, as — смещение в сегменте. Физический адрес получается путем сложения начального физического адре­са сегмента, найденного в таблице сегментов по номеру g, и смещения s.

Недостатком данного метода распределения памяти является фрагмен­тация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.

Странично-сегментное распределение

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

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

Рис.4.17. Схема преобразования виртуального адреса в физический для сегментно-страничной организации памяти

Процесс преобразования адресов посредством таблиц является доста­точно длительным и, естественно, приводит к снижению производительности

 

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

Рис.4.18. Механизм динамического преобразования адресов

Виртуальный адрес страницы VA, составленный из полей g и р, переда­ется в ассоциативную память (буфер быстрой переадресации) в качестве по­искового признака — первое поле ассоциативного ЗУ (АЗУ). Вторым полем АЗУ является физический адрес страницы в ОП. При обнаружении совпаде­ния VAi с содержимым памяти из соответствующей ячейки АЗУ выбирается физический адрес страницы п, позволяющий сформировать полный физиче­ский адрес элемента данных, находящегося в ОП. Если совпадение не про­изошло, то трансляция адресов осуществляется обычными методами через таблицы сегментов и страниц. Эффективность механизма динамического преобразования адресов зависит от коэффициента «попадания», т.е. от того, насколько редко приходится обращаться к табличным методам трансляции адресов. Учитывая принцип локальности программ и данных, можно сказать, что при первом обращении к странице, расположенной в ОП, физический ад­рес определяется с помощью таблиц и загружается в соответствующую ячей­ку АЗУ. Последующие обращения к странице выполняются с использовани­ем АЗУ.

Свопинг

Разновидностью виртуальной памяти является свопинг. На рис. 4.19 показан график зависимости коэффициента загрузки про­цессора в зависимости от числа одновременно выполняемых процессов и до­ли времени, проводимого этими процессами в состоянии ожидания ввода-вывода.

Рис. 4.19. Зависимость загрузки процессора от числа задач и интенсивности ввода-вывода

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

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

4.4.4. Методы повышения пропускной способности оперативной памяти

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

Выборка широким словом

Прямой способ сокращения числа обращений к ОП состоит в организа­ции выборки широким словом. Этот способ основывается на свойстве ло­кальности данных и программ. При выборке широким словом за одно обра­щение к ОП производится одновременная запись или считывание нескольких команд или слов данных из «широкой» ячейки. Широкое слово заносится в буферную память (кэш-память) или регистр, где оно расформировывается на отдельные команды или слова данных, которые могут последовательно ис­пользоваться процессором без дополнительных обращений к ОП.

В системах с кэш-памятью первого уровня ширина шин данных ОП час­то соответствует ширине шин данных кэш-памяти, которая во многих случа­ях имеет физическую ширину шин данных, соответствующую количеству разрядов в слове. Удвоение и учетверение ширины шин кэш-памяти и ОП удваивает или учетверяет соответственно полосу пропускания системы памя­ти.

Реализация выборки широким словом вызывает необходимость мульти­плексирования данных между кэш-памятью и процессором, поскольку ос­новной единицей обработки данных в процессоре все еще остается слово. Эти мультиплексоры оказываются на критическом пути поступления инфор­мации в процессор. Кэш-память второго уровня несколько смягчает эту про­блему, т.к. в этом случае мультиплексоры могут располагаться между двумя уровнями кэш-памяти, т.е. вносимая ими задержка не столь критична. Другая проблема, связанная с увеличением разрядности памяти, заключается в необ­ходимости определения минимального объема (инкремента) памяти для по­этапного её расширения, которое часто выполняется самими пользователями во время эксплуатации системы. Удвоение или учетверение ширины памяти приводит к удвоению или учетверению этого минимального инкремента. Кроме того, имеются проблемы и с организацией коррекции ошибок в систе­мах с широкой памятью.

Примером организации широкой ОП является система Alpha AXP21064, в которой кэш второго уровня, шина памяти и сама ОП имеют разрядность 256 бит.

Расслоение обращений

Другой способ повышения пропускной способности ОП связан с по­строением памяти, состоящей на физическом уровне из нескольких модулей (банков) с автономными схемами адресации, записи и чтения. При этом на логическом уровне управления памятью организуются последовательные об­ращения к различным физическим модулям. Обращения к различным моду­лям могут перекрываться, и таким образом образуется своеобразный конвей­ер. Эта процедура носит название расслоения памяти. Целью данного мето­да является увеличение скорости доступа к памяти посредством совмещения фаз обращений ко многим модулям памяти. Известно несколько вариантов организации расслоения. Наиболее часто используется способ расслоения обращений за счет расслоения адресов. Этот способ основывается на свой­стве локальности программ и данных, предполагающем, что адрес следую­щей команды программы на единицу больше адреса предыдущей (линей­ность программ нарушается только командами перехода). Аналогичная по­следовательность адресов генерируется процессором при чтении и записи слов данных. Таким образом, типичным случаем распределения адресов об­ращений к памяти является последовательность вида а, а+ 1, а + 2,... Из этого следует, что расслоение обращений возможно, если ячейки с адресами а, а+ 1, а + 2,... будут размещаться в блоках 0, 1,2,... Такое распределение яче­ек по модулям (банкам) обеспечивается за счет использования адресов вида

где В - к-разрядный адрес модуля (младшая часть адреса) и С - п-разрядный адрес ячейки в модуле В (старшая часть адреса).

Принцип расслоения обращений иллюстрируется на рис. 4.20,а. Все про­граммы и данные «размещаются» в адресном пространстве последовательно. Однако ячейки памяти, имеющие смежные адреса, находятся в различных физических модулях памяти. Если ОП состоит из 4-х модулей, то номер мо­дуля кодируется двумя младшими разрядами адреса. При этом полные т-разрядные адреса 0, 4, 8,... будут относиться к блоку 0, адреса 1, 5, 9, ... - к блоку 1, адреса 2, 6, 10,... — к блоку 2 и адреса 3, 7, 11,... - к блоку 3. В ре­зультате этого последовательность обращений к адресам 0, 1, 2, 3, 4, 5, ... будет расслоена между модулями 0,1,2,3,0,1,....

Поскольку каждый физический модуль памяти имеет собственные схе­мы управления выборкой, можно обращение к следующему модулю произ­водить, не дожидаясь ответа от предыдущего. Так на временной диаграмме (рис. 4.20,6) показано, что время доступа к каждому модулю составляет т = 4Т, где Т = ti+1-ti - длительность такта. В каждом такте следуют непре­рывно обращения к модулям памяти в моменты времени t1, t2, t3 ... .

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

Задержка в выдаче кванта информации относительно момента обраще­ния также составляет 4Т, однако задержка в выдаче каждого последующего кванта относительно момента выдачи предыдущего составит Т.

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

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

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

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

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

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

Прямое уменьшение числа конфликтов за счет организации чередую­щихся обращений к различным модулям памяти может быть достигнуто пу­тем размещения программ и данных в разных модулях. Доля команд в программе, требующих ссылок к находящимся в ОП данным, зависит от класса решаемой задачи и от архитектурных особенностей компьютера. Для большинства ЭВМ с традиционной архитектурой и задач научно-технического характера эта доля превышает 50 %. Поскольку обращения к командам и элементам данных чередуются, то разделение памяти на память команд и память данных повышает быстродействие машины подобно рас­смотренному выше механизму расслоения. Разделение памяти на память ко­манд и память данных широко используется в системах управления или об­работки сигналов. В подобного рода системах в качестве памяти команд не­редко используются постоянные запоминающие устройства (ПЗУ), цикл ко­торых меньше цикла устройств, допускающих запись, это делает разделение программ и данных весьма эффективным. Следует отметить, что обращения процессоров ввода-вывода в режиме прямого доступа в память логически реализуются как обращения к памяти данных.

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