Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
8.10.11.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.95 Mб
Скачать

Виртуальная память

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

Физическая память организована как последовательность однобайтовых ячеек Байты пронумерованы от нуля и до общего размера памяти, доступного в данной конфигурации, минус 1, как показано на рис. 6-1. Этот набор чисел (показанных здесь в шестнадцатиричной системе счисления) составляет физичес­кое адресное пространство машины.

Логическая память, чаще называемая виртуальной (virtual memory) — это способ представления памяти для программы, и в современных ОС она редко совпадает с физической структурой памяти. Обычно системы виртуальной па­мяти используют либо сегментное, либо линейное представление памяти. Во всех первых персональных компьютерах на основе процессоров Intel, начиная с Intel 8086 и заканчивая Intel 80286, была использована сегментная модель. В системе сегментной адресации физическая память разделена на блоки адресов, обычно последовательных, называемые сегментами. В типичном случае адрес состоит из номера сегмента и смещения в сегменте.

С другой стороны, большинство процессоров RISC и даже последние CISC-процессоры Intel поддерживают линейную структуру адресов. Линейная адресация соответствует физической структуре памяти точнее, чем сегментная. В линейной схеме адреса начинаются с 0 и возрастают, байт за байтом, до верх­ней границы адресного пространства.

Рис. 6-1. Физическое адресное пространство.

Виртуальное адресное пространство (virtual address space) — это набор адресов памяти, которые могут использовать потоки процесса. Каждый процесс имеет отдельное адресное пространство, которое обычно гораздо больше раз­мера физической памяти. Хотя диапазон физических адресов для конкретного компьютера ограничен объемом имеющейся у него памяти (каждый байт кото­рой обладает уникальным адресом), диапазон виртуальных адресов ограничен только количеством битов в адресе.( Существуют также машины, где единицей памяти является слово, а не байт, но рас­сматриваем только байт—ориентированные компьютеры.) Каждый бит может быть либо установлен, либо сброшен; таким образом, например, процессор MIPS R4000, имеющий 32-разрядные адреса, обладает виртуального адресного пространства в 232, или 4 миллиарда байт (4 Гбайт), как показано на рис. 6-2.

Рис. 6-2. Линейное виртуальное адресное пространство.

Первая версия Windows NT использует 32-разрядные адреса для совместимости с Intel 386.

Это несоответствие между физическим и виртуальным адресными про­странствами приводит к тому, что система виртуальной памяти обязательно дол­жна выполнять следующие две задачи:

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

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

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

Вторая задача, выгрузка содержимого памяти на диск, является следствием первой. Ясно, что процесс не может адресовать 4 Гбайт памяти, если в компью­тере физически установлено только 4 Мбайт. Такой эффект достигается систе­мой виртуальной памяти за счет использования диска в качестве резервной "па­мяти", называемой резервным хранилищем (backing store). При переполнении физической памяти система виртуальной памяти определяет, какие данные можно из нее удалить, и временно перемещает их в файл на диске. Когда эти данные вновь потребуются выполняющемуся потоку, система виртуальной па­мяти считывает их обратно с диска.

Перемещение данных между памятью и диском было бы недопустимо мед­ленным, если бы диспетчер виртуальной памяти перемещал лишь по одному байту за раз. Поэтому виртуальное адресное пространство разделено на блоки равного размера, которые называются страницами (pages). Соответственно, физическое адресное пространство разделяется на блоки, называемые стра­ничными фреймами (page frames), которые используются для хранения стра­ниц. В любой момент времени в памяти находится некоторое множество стра­ниц из виртуального адресного пространства каждого процесса. Страницы, на­ходящиеся в физической памяти и доступные немедленно, называются действи­тельными страницами (valid pages). Страницы, находящиеся на диске (или на­ходящиеся в памяти, но не доступные немедленно), называются недействитель­ными (invalid pages), как ясно из рис. 6-3.

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

Рис. 6-3. Отображение виртуальных страниц в физические страничные фреймы.

Обработка страничной ошибки может быть дорогой операцией, требую­щей много тактов процессора. Однако большие размеры страницы снижают затраты, так как в память загружается большее количество данных и страничные ошибки происходят реже. (слишком большой размер страницы может привести к загрузке большего объема данных, чем необходимо, так что здесь требуется определенный баланс.) В общем случае число байт на странице выра­жается степенью двойки и зачастую определяется аппаратурой. Windows NT ис­пользует размер страницы, установленный в Intel 386 и равный 212, или 4 Кбайт. (MIPS R4000 позволяет задавать размер страницы программно.)

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

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

• Защищать как совместно используемую, так и "частную" память от несанк­ционированного доступа.

• Если система предназначена для работы на многопроцессорном ком­пьютере, как Windows NT, то она должна обрабатывать страничные ошибки от нескольких потоков одновременно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]