Термин Виртуальная память предполагает возможность адресовать пространство памяти конкретной вычислительной машины.
Существует два общепринятых способа организации виртуальной памяти: страничная и сегментная организации памяти. Существует также их комбинация.
Суть концепции виртуальной памяти заключается в том, что адреса, к которым обращается выполняющий процесс, отделяются от адресов, реально существующих в первичной памяти. Первые называются виртуальными адресами, а вторые – реальными. Механизмы динамического преобразования адресов обеспечивают преобразование виртуальных адресов в реальные во время выполнения процесса. Все подобные системы обладают общим свойством: смежные адреса виртуального адресного пространства процесса необязательно будут смежными в реальной памяти, это свойство называют “искусственной смежностью”.
Механизм динамического преобразования адресов должен вести таблицы, показывающие, какие ячейки виртуальной памяти в текущий момент времени находятся в реальной памяти и где именно они размещаются. Если бы такое отображение осуществлялось пословно или побайтно, то для её хранения потребовалось бы слишком много реальной памяти. Поэтому для отображения информации группируем её в блоки, и система следит за тем, в каких местах реальной памяти размещаются эти блоки. Увеличение размера блоков приводит к уменьшению дополнительных затрат памяти для механизма отображения. При реализации виртуальной памяти возникает вопрос о том, следует ли все блоки делать одинаково или разных размеров.
Если блоки имеют одинаковый размер, то они называются страницами, а организация памяти – страничной, если блоки могут быть различных размеров, то они называются сегментами, а организация памяти – сегментной. В некоторых системах оба эти подхода комбинируются, т.е. сегменты переменных размеров формируются из страниц фиксированного размера. Виртуальный адрес в системе поблочного отображения указывается при помощи упорядоченной пары (b,d), где b – номер блока, а d – смещение относительно начального адреса этого блока.
Виртуальный адрес в страничной системе – упорядоченная пара (p,d), где p – номер страницы в виртуальной памяти, а d – смещение в рамках страницы p, где размещается адресуемый элемент. Страницы переписываются из внешней памяти в первичную и размещаются в ней в блоках, называемых страничными кодами таких же размеров. Выполняющийся процесс обращается по адресу виртуальной памяти V=(p,d), ищет номер страницы p в таблице отображения страниц и определяет, что эта страница находится в страничном коде p¢. Адрес реальной памяти формируется затем путём конкатенации p¢ и d. Представим типичную строку таблицы отображения страниц следущим образом:
r
s
p¢
где r – бит-признак присутствия страницы в первичной памяти. r=1, если присутствует, иначе r=0. Если страницы нет, то s – её адрес во внешней памяти, если есть, то p¢ - номер страничного кода.
Недостаток: таблица прямого отображения страниц может быть достаточно большой и находиться в первичной памяти, а так как время цикла выборки из первичной памяти составляет наибольшую долю выполнения команды, то преобразование адресов может может вызвать снижение скорости работы почти вдвое. Однако способ прямого отображения может быть приемлимым в случае размещения всей таблицы целиком в сверхвысокоскоростной кэш-памяти.
Смысл заключается в том, чтобы всю таблицу преобразования страниц разместить в ассоциативной памяти. Все строки таблицы, хранящейся в ассоциативной памяти, одновременно сравниваются с адресом страницы p. Именно из-за этого ассоциативная память является столь дорогостоящей. Применение кэш-памяти для реализации ассоциативной памяти обходится слишком дорого. Необходима некая компромисная схема.
Операция Å выполняется только в случае, если поиск по ассоциативной таблице окажется неудачным. Сдесь ассоциативная память хранит небольшую часть полной таблицы. В строках этой таблицы отображаются только те страницы, к которым были последние ссылки, и вероятно будут новые обращения. Чтобы обеспечить хорошие скоростные показатели частичная ассоциативная таблица должна быть небольшой.