Программирование на JAVA

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

На рис. 8.14 проиллюстрирована типичная организация виртуальной памяти. Трансляцию виртуальных адресов в физические выполняет специальный аппарат­ный блок, называемый модулем управления памятью или же диспетчером памяти (Memory Management Unit, MMU). Когда нужные данные (или команды) отсут­ствуют в основной памяти, диспетчер перемещает их туда с диска. Для перемеще­ния данных используется механизм ПДП.


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

Преобразование адресов

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

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

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


Рис. 8.15. Преобразование адресов виртуальной памяти

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

Диспетчер памяти, то есть MMU, использует информацию из таблицы стра­ниц для выполнения каждой операции чтения или записи. Поэтому было бы це­лесообразно хранить эту таблицу прямо в нем. Но, к сожалению, она слишком ве­лика, а блок управления памятью обычно интегрирован в микросхему процессора (вместе с кэшем первого уровня), куда невозможно добавить такой большой фрагмент памяти. Поэтому таблица страниц содержится в основной памяти. Дис­петчер памяти может хранить небольшую ее часть, которая включает элементы, соответствующие недавно использовавшимся страницам. Практически это ма­ленький кэш, обычно называемый буфером быстрого преобразования адреса (Translation Lookaside Buffer, TLB). У него то же назначение и такой же принцип действия, как и у любой другой кэш-памяти. Кроме элемента таблицы страниц в TLB должен содержаться виртуальный адрес этого элемента. На рис. 8.16 показан один из вариантов организация TLB на основе ассоциативного отображения. Су­ществуют и TLB с множественно-ассоциативной организацией.

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

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

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

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


Рис. 8.16. Принцип действия TLB с ассоциативным отображением

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

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

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

Требования к управлению памятью

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

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

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

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

Выводы

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

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

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

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

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


<< назад вперед >>