Э. Таненбаум - Архитектура компьютера (1127755), страница 120
Текст из файла (страница 120)
При обращении к любому адресу всегла появляются требуемые данные или нужная команда. Поскольку программист может писать программы, ничего не зная о страничной организации памяти, этот механизм называют прозрачным. Ситуация, когда программист использует какой-либо виртуальный механизм и даже не знает, как он работает, не нова.
В архитектуры команл, например, часто включается команда я0~ (умножение), даже если аппаратно умножение не подЛерживается. Иллюзия того, что машина может перемножать числа, создается микропрограммой. Точно так же операционная система может создавать иллюзию, что все виртуальные адреса поддерживаются реальной памятью, лаже если это неправла.
Только разработчикам и исследователям операционных систем нужно знать, как строится такая иллюзия. Реализация страничной организации памяти Виртуальной памяти требуется диск для хранения всей программы и всех ланных. Копию программы, сохраненную на диске, улобнее рассматривать как оригинал, а фрагменты, регулярно записываемые в основную память, — как копии. Естественно, оригинал в таком случае должен оперативно обновляться. Когда изменения вносятся в копию программы в основной памяти, они в конечном итоге должны быть отражены в оригинале. Виртуальное адресное пространство разбивается на ряд страниц равного размера, обычно от 512 байт ло 64 Кбайт, хотя иногла встречаются страницы по 4 Мбайт. Размер страницы всегда должен быть степенью лвойки.
Физическое алресное пространство тоже разбивается на части равного размера таким образом, чтобы кажлая такая часть основной памяти вмещала ровно одну страницу. Эти части основной памяти называются страничными кадрами. На рис. 6.2 основная память содержит только один страничный кадр.
На практике обычно имеются несколько тысяч страничных кадров. На рис. 6.3, а показан олин из возможных вариантов разделения первых 64 Кбайт виртуального алресного пространства на страницы по 4 Кбайт. Адрес может быть байтом, а может быть словом, нитример, в компьютере, в котором последовательно расположенные слова имеют послеловательные алреса. Виртуальную память, изображенную на рис. 6.3, можно реализовать посрелством таблицы страниц, в которой количество элементов равно количеству страниц в виртуальном адресном пространстве.
Злесь для простоты мы показали только первые 16 элементов. Когда программа пытается обратиться к слову из первых 64 Кбайт виртуальной памяти, чтобы вызвать команлу или данные или чтобы сохранить ланные, сначала она генерирует виртуальный адрес от 0 до 65 532 (предполагается, что адреса слов должны делиться на 4). Для этого могут использоваться любые станлартные механизмы адресации, в том числе инлексирование и косвенная адресация. На рисунке 6.3, б изображена физическая память, состоящая из восьми страничных кадров по 4 Кбайт. Эту память можно ограничить ло 32 К, поскольку; 1) зто вся память машины (лля процессора, встроенного в стиральную машину 480 Глава 6. Уровень операционной системы или микроволновую печь, этого достаточно) или 2) оставшаяся часть памяти за- нята лругими программами.
Страница Виртуальный адрес 61440 — 65535 15 57344 — 61439 14 53248 — 57343 13 49152 — 53247 12 Нижние 32 Кбайт адресов основной памяти 45056 — 49151 40960 -45055 10 Страничный кадр Физические адреса 36864 — 40959 32768 — 36863 28672 — 32767 24576 — 28671 20480 — 24575 16384 — 20479 12288 — 16383 8192 — 12287 4096 — 8191 0 — 4095 Рио.
6.3. Первые 64 Кбайт виртуального адресного пространства разделены на 16 страниц по 4 Кбайт каждая (а); 32 Кбайт основной памяти разделены на 8 страничных кадров по 4 Кбайт каждый (б) А теперь посмотрим, как 32-разрядный виртуальный алрес можно отобразить на физический адрес основной памяти. В конце концов, память воспринимает только реальные, а не виртуальные адреса, поэтому такое отображение лолжно быть слелано.
Каждый компьютер с виртуальной памятью содержит устройство для отображения виртуальных адресов на физические. Это устройство называется диспетчером памяти 1Мешогу Мапайешепс 1)шц ММ1)). Он может нахолиться на микросхеме процессора или на отдельной микросхеме рядом с процессором. В нашем примере диспетчер памяти отображает 32-разрялный виртуальный алрес на 15-разрялный физический адрес, поэтому ему требуется 32-разрялный входной регистр и 15-разрядный выходной. Чтобы понять, как работает лиспстчер памяти, рассмотрим пример на рис.
6.4. Когда в диспетчер памяти поступает 32-разрялный виртуальный адрес, он разлеляет этот адрес на 20-разрядный номер виртуальной страницы и 12-разрядное смещение внутри этой страницы (поскольку страницы в нашем примере имеют размер 4 Кбайт). Номер виртуальной страницы используется в качестве инлекса в таблице страниц для нахождения нужной страницы. На рис.
6.4 номер виртуальной страницы равен 3, поэтому в таблице выбирается элемент 3. Сначала лиспетчер памяти проверяет, находится ли нужная страница в текущий момент в памяти. Поскольку у нас есть 2зо виртуальных страниц и всего 8 страничных кадров, не все виртуальные страницы могут находиться в памяти Виртуальная память 481 одновременно. Диспетчер памяти проверяет бит присутствия в данном элементе таблицы страниц, В нашем примере этот бит равен 1. Это значит, что страница в данный момент находится в памяти. — — 10-разрядный адрес памяти — — -ьВыходной регистр Виртуальная страница 00000000000000000011000000010110 регистр 20-разрядная виртуальная страница-+32-разрядное смещена 32-разрядный виртуальный адрес Рис.
6.4. Формирование адреса основной памяти из адреса аиртуальной памяти Далее из выбранного элемента таблицы нужно взять значение страничного кадра (в нашем примере — 6) и скопировать его в старшие 3 бита 15-разрядного выходного регистра. Нужно именно 3 бита, потому что в физической памяти находится 8 страничных кадров. Параллельно с этой операцией младшие 12 бит виртуального адреса (поле смещения страницы) копируются в младшие 12 бит 482 Глава б. Уровень операционной системы выходного регистра.
Затем полученный 15-разрядный адрес отправляется в кзшпамять или основную память для поиска. На рис. 6.5 показан возможный вариант отображения виртуальных страниц на физические страничные кадры. Виртуальная страница О находится в страничном кадре 1. Виртуальная страница 1 находится в страничном кадре О. Виртуальной страницы 2 нет в основной памяти. Виртуальная страница 3 находится в страничном кадре 2. Виртуальной страницы 4 нет в основной памяти.
Виртуальная страница 5 находится в страничном кадре 6 и т. д. Таблица страниц Виртуальная Страничный страница кадр 18 14 12 10 аничный кадр 1 — присутствует в основной памяти Π— отсутствует в основной памяти Рис. Е.б. Возможное отображение первых 16 виртуальных страниц в основную память, содер:кащую 8 страничных кадров Вызов страниц по требованию и рабочее множество В предыдущем обсуждении предполагалосгь что виртуальная страница, к которой происходит обращение, находится в основной памяти. Однако это предположение не всегда верно, поскольку в основной памяти недостаточно места для Виртуальная память 483 всех виртуальных страниц.
При обращении к адресу страницы, которой нет в основной памяти, происходит ошибка отсутствия страницы. В случае такой ошибки операционная система должна считать нужную страницу с диска, ввести новый адрес физической памяти в таблицу страниц, а затем повторить команду, вызвавшую ошибку. На машине с виртуальной памятью можно запустить программу даже в том случае, если в основной памяти нет ни одной части программы.
Просто таблица страниц должна показать, что абсолютно все виртуальные страницы находятся во вспомогательной памяти. Если центральный процессор попытается вызвать первую команду, он сразу получит ошибку отсутствия страницы, в результате чего страница, содержащая первую команду, будет загружена в память и внесена в таблицу страниц. После этого начнется выполнение первой команды. Если первая команда содержит два адреса и оба этих адреса находятся на разных страницах, причем не на той, в которой находится команда, то произойдут еше две ошибки отсутствия страницы и еше две страницы будут перенесены в основную память до завершения команды. Следующая команда может вызвать еше несколько ошибок и т.
д. Такой метод работы с виртуальной памятью называется вызовом страниц по требованию (г)епзапс( рая1пя). Такой вызов страниц напоминает кормление младенца по требованию (в противоположность кормлению по расписанию): когда младенец кричит, вы его кормите. При вызове страниц по требованию страницы переносятся в основную память только в случае необходимости, но не ранее.
Вопрос о том, стоит вызывать страницы по требованию илн нет, имеет смысл только при запуске программы. Когда программа проработает некоторое время, нужные страницы уже окажутся в основной памяти. Однако если это компьютер с разделением времени и процессы выгружаются, проработав примерно 100 миллисекунд, то каждая программа будет запускаться многократно. Для каждой программы распределение памяти уникально и при переключении с одной программы на другую меняется, поэтому в системах с разделением времени такой подход не годится.
Альтернативный подход основан на наблюдении, что многие программы обрашаются к адресному пространству неравномерно. Обычно большинство обращений относятся к небольшому числу страниц. Это называется принципом локальности. При обращении к памяти можно вызвать команду, вызвать данные или сохранить данные.