Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Os_Otvety.docx
Скачиваний:
143
Добавлен:
01.04.2022
Размер:
32.58 Mб
Скачать

32. Понятие виртуальной памяти Виртуализация памяти

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

  1. свопинг (swapping) — образы процессов выгружаются на диск и возвращаются в оперативную память целиком;

  2. виртуальная память (virtual memory) — между оперативной памятью и диском перемещаются части (сегменты, страницы и т. п.) образов процессов.

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

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

Аппаратная поддержка очень важна (ниже)

Виртуальная память - это некоторый механизм совместного функционирования оперативной(основной) памяти и внешней памяти. Механизм виртуальной памяти достаточно громоздкий => за такими алгоритмами всегда стоят задержки и снижение производительности. Однако взамен мы можем отвязаться от реалий физической памяти (процессы работают с “иллюзией” использования физической памяти).

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

!!! В конечном итоге обращение происходит по физическим адресам, и данные (инструкции) хранятся в физ. памяти.

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

Структура виртуального адресного пространства

1 подход: плоское виртуальное адресное пространство

весь набор вирт адресов линейны => чтобы добраться до нужного байта, надо знать только одно число. Т.Е. пронумеровали все байты, к байту обращаемся по его номеру и соответственно виртуальным адресом является одно число, символизирующее смещение от начала ВАП (виртуальное адресное пространство) до байта, к которому происходит обращение

2 подход: сегментированное ВАП: придумали следующую конструкцию, что адрес (тогда еще физический) будет храниться в двух компонентах адреса (сегмент и смещение). Сегментированное ВАП это совокупность (набор) сегментов, сегменты - это участки памяти (внутри сегментов байты пронумерованы последовательно. Здесь виртуальным адресом является пара чисел (сегмент и смещение внутри сегмента)

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

Есть два выбора, когда преобразовать виртуальные адреса в физические(ниже рисунок)

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