7.5.2.1. Организация памяти

Память на шине процессора i486 называется физической памятью. Она организованна как последовательность 8-ми битовых байтов. Каждому байту соответствует уникальный адрес, называемый физическим, который может находиться в интервале от 0 до (2**32)-1 (4 Гбайт). Диспетчер памяти - это аппаратный механизм для надежного и эффективного использования памяти. При использовании данного механизма, прикладные программы не используют прямой адресации к физической памяти, а адресуются к некоторой модели памяти, называемой виртуальной памятью.

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

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

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

Линейный адрес, выработанный устройством сегментации, используется непосредственно как физический адрес, если 31-ый бит регистра CR0 очищен. Данный бит регистра указывает, используется или не используется механизм подкачки страниц. Если же данный бит не очищен, для преобразования линейного адреса в физический используется устройство подкачки страниц.

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

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

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

·  "Плоское" адресное пространство, при котором пространства кодов, стека и данных отображаются в общие линейные адреса. В этом случае сегментация игнорируется и позволяется доступ любого типа указателя на память к любому типу данных.

·  Сегментированное адресное пространство с различными сегментами для пространств кода, данных и стека. Может быть использовано до 16383 линейных адресных пространств, размером до 4 Гбт каждое.

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

 

 

HotLog

.  

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий