Понятие виртуальной памяти 2 6 3
В качестве единицы пересылки может выступать сектор, несколько секторов, а также одна или несколько дорожек диска. Кроме того, иногда применяется пере­сылка информации, начиная с выбранного сектора на дорожке до ее конца. В слу­чае пересылки секторов кэш-память заполняется не только требуемым сектором, но секторами, непосредственно следующими за ним, так как известно, что в боль­шинстве случаев взаимосвязанные данные хранятся в соседних секторах. Этот метод известен также как опережающее чтение (read ahead).
В дисковых кэшах обычно используется алгоритм сквозной записи. Специфи­ка состоит в том, что далеко не всю информацию, перемещаемую между дисками и основной памятью, выгодно помещать в дисковый кэш. В ряде случаев определен­ные данные и команды целесообразно пересылать напрямую между ОП и диском По этой причине в системах с дисковым кэшем предусматривают специальный динамический механизм, позволяющий переключать тракт пересылки информа­ции: через кэш или минуя его.
Одна из привлекательных сторон дискового кэша в том, что связанные с ним преимущества могут быть получены без изменений в имеющемся аппаратном и про­граммном обеспечении. Многие серийно выпускаемые дисковые кэши интегриро­ваны в состав дисковых ЗУ. В качестве примера можно привести модель 23 систе­мы IBM 3880, в состав которой входят дисковые ЗУ со встроенным контроллером кэш-памяти и кэш-памятью емкостью от 8 до 64 Мбайт. Дисковая кэш-память при­меняется и в персональных ВМ.
Дисковая кэш-память обычно включает в себя средства для обнаружения и ис­правления ошибок. Так, в уже упоминавшейся модели 23 системы IBM 3880 име­ются средства для обнаружения тройных ошибок (одновременного появления ошибок в трех разрядах) и исправления одиночных, двойных и большинства трой­ных ошибок. Более ранняя модель 13 той же системы имела кэш-память емкостью 4-8 Мбайт и умела обнаруживать двойные и исправлять одиночные ошибки. В обеих моделях замещение информации в кэше производится в соответствии с алгоритмом минимального предыдущего использования (LRU).
Примечательно, что архитектура кэш-памяти современных магнитных дисков типа «винчестер» реализует полностью ассоциативное отображение.
Понятие виртуальной памяти
Для большинства типичных применений ВМ характерна ситуация, когда разме­щение всей программы в ОП невозможно из-за ее большого размера. В этом, одна­ко, и нет принципиальной необходимости, поскольку в каждый Момент, времени «внимание» машины концентрируется на определенных сравнительно небольших участках программы. Таким образом, в ОП достаточно хранить только используе­мые в данный период части программ, а остальные части могут располагаться на внешних ЗУ (В ЗУ). Сложность подобного подхода в том, что процессы обраще­ния к ОП и В ЗУ существенно различаются, и это усложняет задачу программиста. Выходом из такой ситуации было появление в 1959 году идеи виртуализации па­мяти [88], под которой понимается метод автоматического управления иерархи­ческой памятью, при котором программисту кажется, что он имеет дело с единой
2 6 4 Глава 5. Память
памятью большой емкости и высокого быстродействия. Эту память называют вир­туальной (кажущейся) памятью. По своей сути виртуализация памяти представ­ляет собой способ аппаратной и программной реализации концепции иерархичес­кой памяти.
В рамках идеи виртуализации памяти ОП рассматривается как линейное про­странство N адресов, называемое физическим пространством памяти. Для задач, где требуется более чем N ячеек, предоставляется значительно большее простран­ство адресов (обычно равное общей емкости всех видов памяти), называемое виртуальным пространством, в общем случае не обязательно линейное. Адреса виртуального пространства называют виртуальными, а адреса физического про­странства — физическими. Программа пишется в виртуальных адресах, но поскольку для её выполнения нужно, чтобы обрабатываемые команды и данные находились в ОП, требуется, чтобы каждому виртуальному адресу соответствовал физичес­кий. Таким образом, в процессе вычислений необходимо, прежде всего, перепи­сать из ВЗУ в ОП ту часть информации, на которую указывает виртуальный адрес (отобразить виртуальное пространство на физическое), после чего преобразовать виртуальный адрес в физический (рис. 5.30).
Рис. 5.30. Отображение виртуального адреса на физический
Среди систем виртуальной памяти можно выделить два класса: системы с фик­сированным размером блоков (страничная организация) и системы с переменным размером блоков (сегментная организация). Оба варианта обычно совмещают (сег-ментно-страничная организация).
Страничная организация памяти
Целям преобразования виртуальных адресов в физические служит страничная организация памяти. Ее идея состоит в разбиении программы на части равной ве­личины, называемые страницами. Размер страницы обычно выбирают в пределах 4- 8 Кбайт, но так, чтобы он был кратен емкости одного сектора магнитного диска. Виртуальное и физическое адресные пространства разбиваются на блоки разме­ром в страницу. Блок основной памяти, соответствующий странице, часто называют страничным кадром или фреймом (page frame). Страницам виртуальной и физи­ческой памяти присваивают номера. Процесс доступа к данным по их виртуально­му адресу иллюстрирует рис .5.31.
Понятие виртуальной памяти 2 6 5
Рис. 5.31. Страничная организация виртуальной памяти
Центральный процессор обращается к ячейке, указав ее виртуальный адрес ф, состоящий из номера виртуальной страницы и смещения относительно ее начала. Этот адрес поступает в систему преобразования адресов 2, с целью получения из него физического адреса ячейки в основной памяти 3. Поскольку смещение в вир­туальном и физическом адресе одинаковое, преобразованию подвергается лишь номер страницы. Если преобразователь обнаруживает, что нужная физическая стра­ница отсутствует в основной памяти (произошел промах или страничный сбой), то нужная страница считывается из внешней памяти и заносится в ОП (4, 5).
Преобразователь адресов — это часть операционной системы, транслирующая номер виртуальной страницы в номер физической страницы, расположенной в ос­новной памяти, а также аппаратура, обеспечивающая этот процесс и позволяющая ускорить его. Преобразование осуществляется с помощью так называемой стра­ничной таблицы. При отсутствии нужной страницы в ОП преобразователь адре­сов вырабатывает признак страничного сбоя, по которому операционная система приостанавливает вычисления, пока нужная страница не будет считана из вторич­ной памяти и помещена в основную.
Виртуальное пространство полностью описывается двумя таблицами (рис. 5.32): страничной таблицей и картой диска (будем считать, что вторичная память реали­зована на магнитных дисках). Таблица страниц определяет, какие виртуальные страницы находятся в основной памяти и в каких физических фреймах, а карта диска содержит информацию о секторах диска, где хранятся виртуальные страни­цы на диске.                                                                                             '"
Число записей в страничной таблице (СТ) в общем случае равно количеству виртуальных страниц. Каждая запись содержит поле номера физической страни­цы (НФС) и четыре признака: V, R, М и А.
Признак присутствия Vостанавливается в единицу, если виртуальная страни­ца в данный момент находится в основной памяти. В этом случае в поле номера физической страницы находится соответствующий номер. Если V = 0, то при по­пытке обратиться к данной виртуальной странице преобразователь адреса генери-
266 Глава5. Память
рует сигнал страничного сбоя (page fault), и операционная система предпринима­ет действия по загрузке страницы с диска в ОП, обращаясь для этого к карте диска. В карте указано, на какой дорожке и в каком секторе диска расположена каждая из виртуальных страниц1. Загрузка страницы с диска в ОП сопровождается записью в соответствующую строку страничной таблицы (указывается номер физической страницы, куда была загружена виртуальная страница).
В принципе карта диска может быть совмещена со страничной таблицей путем добавления к последней еще одного поля. Другим вариантом может быть увеличе­ние разрядности поля номера физической страницы и хранение в нем номеров до­рожек и секторов для виртуальных страниц, отсутствующих в основной памяти. В этом случае вид хранимой информации будет определять признак V.
Признак использования страницы R устанавливается при обращении к данной станице. Эта информация используется в алгоритме замещения страниц для вы­бора той из них, которую можно наиболее безболезненно удалить из ОП, чтобы освободить место для новой. Проблемы замещения информации в ОП решаются также, как и для кэш-памяти.
Поскольку в ОП находятся лишь копии страниц, а их оригиналы хранятся на диске, необходимо обеспечить идентичность подлинников и копий. В ходе вычис­лений содержимое отдельных страниц может изменяться, что фиксируется путем установки в единицу признака модификации М. При удалении страницы из ОП проверяется состояние признака М. Если М = 1, то перед удалением страницы из основной памяти ее необходимо переписать на диск, а при М =0 этого можно не делать.
Признак прав доступа А служит целям защиты информации и определяет, ка­кой вид доступа к странице разрешен: только для чтения, только для записи, для чтения и для записи.
Когда программа загружается в ОП, она может быть направлена в любые сво­бодные в данный момент страничные кадры, независимо от того, расположены ли они подряд или нет. Страничная организация позволяет сократить объем пересы­лок информации между внешней памятью и ОП, так как страницу не нужно загру­жать до тех пор, пока она действительно не понадобится.
Способ реализации СТ жизненно важен для эффективности техники вирту­альной адресации, поскольку каждое обращение к памяти предполагает обраще-
Множество страниц присутствующих в данный момент в основной памяти, является подмножеством всех виртуальных страниц, хранящихся на магнитном диске.
Понятие виртуальной памяти 267
ние к страничной таблице. Наиболее быстрый способ — хранение таблицы в спе­циально выделенных для этого регистрах, но от него приходится отказываться при большом объеме СТ. Остается практически один вариант — выделение странич­ной таблице области основной памяти, несмотря на то что это приводит к двух­кратному увеличению времени доступа к информации. Чтобы сократить это вре­мя, в состав ВМ включают дополнительное ЗУ, называемое буфером быстрого преобразования адреса (TLB — Translation Look-aside Buffer), или буфером ассо­циативной трансляции, или буфером опережающей выборки и представляющее собой кэш-память. При каждом преобразовании номера виртуальной страницы в номер физической страницы результат заносится в TLB: номер физической стра­ницы в память данных, а виртуальной — в память тегов. Таким образом, в TLB попадают результаты нескольких последних операций трансляции адресов. При каждом обращении к ОП преобразователь адресов сначала производит поиск в па­мяти тегов TLB номера требуемой виртуальной страницы. При попадании адрес соответствующей физической страницы берется из памяти данных TLB. Если в TLB зафиксирован промах, то процедура преобразования адресов производится с помощью страничной таблицы, после чего осуществляется запись новой пары «номер виртуальной страницы — номер физический страницы» в TLB. Структура TLB показана на рис. 5.33.
Номер виртуальной страницы
V
R
М
А
Номер физической страницы
1 1 1 1
Память тегов                                                           Память данных
Рис. 5.3 3. Структура буфера быстрого преобразования адресов
Буфер преобразования адресов обычно реализуется в виде полностью ассоциа­тивной или множественно-ассоциативной кэш-памяти с высокой степенью ассо­циативности и временем доступа, сопоставимым с аналогичным показателем для кэш-памяти первого уровня (L1). Число входов у типовых TLB невелико (64-256). Так, TLB микропроцессора Pentium III имеет 64 входа при размере страницы 4 Кбайт, что позволяет получить быстрый доступ к адресному пространству в 256 Кбайт.
Серьезной проблемой в системе виртуальной памяти является большой объем страничных таблиц, который пропорционален числу виртуальных страниц. Таб­лица занимает значительную часть ОП, а на поиск уходит много времени, что край­не нежелательно.
Один из способов сокращения длины таблиц основан на введении многоуровг невой организации таблиц. В этом варианте информация оформляется в виде не­скольких страничных таблиц сравнительно небольшого объема, которые образу­ют второй уровень. Первый уровень представлен таблицей с каталогом, где указано местоположение каждой из страничных таблиц (адрес начала таблицы в памяти) второго уровня. Сначала в каталоге определяется расположение нужной странич-
268 Глава 5. Память
ной таблицы и лишь затем производится обращение к нужной таблице. О достига­емом эффекте можно судить из следующего примера. Пусть адресная шина ВМ имеет ширину 32 бита, а размер страницы равен 4 Кбайт. Тогда количество вирту­альных страниц, а следовательно, и число входов в единой страничной таблице составит 220. При двухуровневой организации можно обойтись одной страницей первого уровня на 1024 (210) входов и 1024 страничными таблицами на такое же число входов.
Другой подход называют способом обращенных или инвертированных странш ных таблиц. Такую таблицу в каком-то смысле можно рассматривать как увели­ченный эквивалент TLB, отличающийся тем, что она хранится в ОП и реализуется не аппаратурой, а программными средствами. Число входов в таблицу определя­ется емкостью ОП и равно -числу страниц, которое может быть размещено в основ­ной памяти. Одновременно с этим имеется и традиционная СТ, но хранится она не в ОП, а на диске. Для поиска нужной записи в инвертированной таблице исполь­зуется хэширование, когда номер записи в таблице вычисляется в соответствии с некой хэш-функцией. Аргументом этой функции служит номер искомой вирту­альной страницы. Хэширование позволяет ускорить операцию поиска. Если нуж­ная страница в ОП отсутствует, производится обращение к основной таблице на диске и после загрузки страницы в ОП корректируется и инвертированная таблица.
Сегментно-страничная организация памяти
При страничной организации предполагается, что виртуальная память — это не­прерывный массив со сквозной нумерацией слов, что не всегда можно признать оптимальным. Обычно программа состоит из нескольких частей — кодовой, ин­формационной и стековой. Так как заранее неизвестны длины этих составляющих, то удобно, чтобы при программировании каждая из них имела собственную нуме­рацию слов, отсчитываемых с нуля. Для этого организуют систему сегментиро­ванной памяти, выделяя в виртуальном пространстве независимые линейные пространства переменной длины, называемые сегментами. Каждый сегмент пред­ставляет собой отдельную логическую единицу информации, содержащую сово­купность данных или программный код и расположенную в адресном простран­стве пользователя. В каждом сегменте устанавливается своя собственная нумерация слов, начиная с нуля. Виртуальная память также разбивается на сегменты, с неза­висимой адресацией слов внутри сегмента. Каждой составляющей программы вы­деляется сегмент памяти. Виртуальный адрес определяется номером сегмента и ад­ресом внутри сегмента. Для преобразования виртуального адреса в физический используется специальная сегментная таблица.
Недостатком такого подхода является то, что неодинаковый размер сегментов приводит к неэффективному использованию ОП. Так, если ОП заполнена, то при замещении одного из сегментов требуется вытеснить такой, размер которого ра- -вен или больше размера нового. При многократном повторе подобных действий в ОП остается множество свободных участков, недостаточных по размеру для за­грузки полного сегмента. Решением проблемы служит сегментно-страничная орга­низация памяти. В ней размер сегмента выбирается не произвольно, а задается кратным размеру страницы. Сегмент может содержать то или иное, но обязатель- '
Понятие виртуальной памяти 26 9
но целое число страниц, даже если одна из страниц заполнена частично. Возника­ет определенная иерархия в организации доступа к данным, состоящая из трех сту­пеней: сегмент > страница > слово. Этой структуре соответствует иерархия таб­лиц, служащих для перевода виртуальных адресов в физические. В сегментной таблице программы перечисляются все сегменты данной программы с указанием начальных адресов СТ, относящихся к каждому сегменту. Количество странич­ных таблиц равно числу сегментов и любая из них определяет расположение каж­дой из страниц сегмента в памяти, которые могут располагаться не подряд — часть страниц может находиться в ОП, остальные — во внешней памяти. Структуру вир­туального адреса и процесс преобразования его в физический адрес иллюстрирует рис. 5.34.
Рис. 5.34. Преобразование адреса при сегментно-страничной организации памяти
Для получения физического адреса необходим доступ к сегментной и од­ной из страничных таблиц, поэтому преобразование адреса может занимать много времени.
Организация защиты памяти
Современные вычислительные машины, как правило, работают в многопользова­тельском и многозадачном режимах, когда в основной памяти одновременно нахо­дятся программы, относящиеся как к разным пользователям, так и к различным задачам одного пользователя. Если даже ВМ выполняет только одну программу, в ОП, помимо этой программы и относящихся к ней данных, всегда присутствуют фрагменты операционной системы. Каждой задаче в основной памяти выделяется свое адресное пространство. Такие пространства, если только это специально не предусмотрено, обьгано независимы. В то же время в программах могут содержаться ошибки, приводящие к вторжению в адресное пространство других задач. След-; ствием этих ошибок может стать искажение информации, принадлежащей другим программам. Следовательно, в ВМ обязательно должны быть предусмотрены меры,
Hosted by uCoz