III. УПРАВЛЕНИЕ ПАМЯТЬЮ В МП СЕМЕЙСТВА Х86
1. Линейная и сегментированная модели памяти.
Обмен информацией между процессором и оперативной памятью при работе компьютера осуществляется с помощью трех шин: шины адреса (AB - Address Bus), шины данных (DB – Data Bus) и шины управления (CB– Control Bus).
Аппаратный интерфейс между выходными шинами процессора и памятью компьютера в принципе одинаков практически для всех компьютеров. Процессор формирует на адресной шине, требуемый физический адрес памяти. При этом на шину управления им выдаются управляющие сигналы считывания или записи, а на шину данных поступают от процессора данные для записи в память, либо из памяти поступают запрашиваемые данные для передачи в процессор. Процессор, имеющий n проводников (разрядов) в шине адреса, может обращаться к памяти с максимальным объемом в 2ячеек. Описанный интерфейс процессора с памятью определяет линейную или плоскую (flat) модель памяти. Каждый из 2 возможных кодов, выдаваемых процессором на шину адреса, выбирает одну определенную ячейку памяти.
Однако, код физического адреса, выдаваемого на адресную шину, не у всех процессоров совпадает с представлением адреса в командах программы. Так, в процессорах семейства х86 адрес в командах обычно представляет только одну составляющую полного физического адреса. Другая составляющая предварительно заносится в один из сегментных регистров. Эти две составляющие образуют логический или виртуальный адрес. Такое представление адреса является следствием использования так называемой сегментированной модели памяти, которая существенно отличается от линейной модели. При сегментированной модели памяти адресное пространство разделено на блоки смежных адресов, называемых сегментами, в которых размещаются программы и данные. При этом программа может обращаться только к данным, находящимся в заданных, текущих, сегментах. Начальные же адреса, используемых в данное время сегментов в адресном пространстве, определяются кодами, которые заносятся в соответствующие сегментные регистры. Обычно выделяются сегменты кода (программные сегменты), сегменты стека и несколько сегментов данных.
Логический адрес представляется в форме Seg:Offset, где Seg (Segment) – имя соответствующего сегментного регистра, а Offset – смещение в этом сегменте.
Главной задачей системы управления памятью в процессоре, является формирование из логических адресов, указываемых в программе, физических адресов, выдаваемых процессором на адресную шину компьютера.
2. Формирование физического адреса в МП 8086.
В МП 8086, а также при реальном режиме работы (R-режиме) всех последующих моделей процессоров семейства х86, определены четыре типа сегментов: сегмент кода (CS), где размещаются программы; сегмент стека (SS), для запоминания стековых данных и два сегмента данных, основной (DS) и дополнительный (ES). При этом все сегменты имеют один и тот же размер – 64Кбайта. Сегменты задаются в адресном пространстве, равном 1Мбайт, указанием их начальных логических адресов в соответствующих 16 разрядных сегментных регистрах: кодового сегмента - в регистре CS, сегмента данных в - регистре DS, сегмента стека – в регистре SS и дополнительного сегмента данных – в регистре ES. Местоположение же в данном сегменте адресуемой ячейки памяти, т.е. расстояние ее от начального адреса этого сегмента, которое называется смещением в сегменте, по умолчанию определяется:
1. В кодовом сегменте – содержимым регистра указателя
инструкций IP.
2. В сегментах данных – указывается в команде: либо некоторой константой, при прямой адресации; либо содержимым одного из индексных регистров (SI, DI), при операциях со строками, или так называемым эффективным адресом EA (при косвенной адресации). Последний, в общем случае, может являться суммой трех составляющих: содержимого базового регистра BX или BP, одного из индексных регистров SI или DI, а также некоторой константы (смещения в команде). Причем, некоторые из них могут при этом отсутствовать.
3. В сегменте стека – определяется в большинстве случаев содержимым регистра указателя стека (SP). Однако, если при формировании эффективного адреса EA, вместо регистра BX используется регистр BP, то автоматически адресуется сегмент стека SS, а не сегмент данных DS. При этом, принцип стека «первый пришел – последний вышел» игнорируется, и ячейки стекового сегмента рассматриваются как ОЗУ с произвольной выборкой.
Следует, однако, отметить, что в ряде случаев, пользуясь так называемыми префиксами замены сегментов, можно изменить сегмент, заданный по умолчанию, для которого в команде указано внутрисегментное смещение. Но это не касается сегментов CS, SS и ES.
Формирование 20-ти разрядного физического адреса из логического (виртуального), т.е. из 16 разрядного указателя начального адреса сегмента и 16 разрядного смещения в сегменте осуществляется следующим образом. Указатель начального адреса сегмента выбирается из соответствующего регистра, сдвигается на 4 двоичных разряда влево (т.е. умножается на 16), образуя собственно начальный адрес сегмента, и суммируясь со смещением в сегменте, указанном в команде, образует физический адрес задаваемой ячейки памяти (см. рис III.1).
Обязательный сдвиг 16-разрядного указателя начального адреса сегмента дает возможность адресовать сегменты в любой точке адресного пространства в 1Мбайт, однако, при этом, создает дискретность в их задании по адресному пространству, равную 16 байтам.
Такая простая сегментация адресного пространства позволила использовать адресное пространство в 1Мбайт, с помощью 16 разрядных адресов, указываемых в команде. Однако она имеет и существенные недостатки, которые усложняют разработку мультизадачных систем. Они заключаются в следующем.
1. Сегменты памяти определяются только сегментными регистрами и описываются всего двумя атрибутами: начальным адресом и максимальным размером, равным 64Кбайт.
2. Размещение сегментов в памяти произвольно: сегменты могут пересекаться частично или полностью.
3. Программа может обращаться по любому адресу, как для считывания, так и записи данных, а также для выборки команд. Нет никаких препятствий для обращения даже к физически несуществующей памяти, что может привести к зависанию системы.
Рис.III.1 Формирование физического адреса МП семейства х86 в
реальном режиме работы (R-режиме).
Для устранения этих недостатков в МП семейства х86 дальнейших типов был введен, так называемый, защищенный режим работы процессора или P – режим. При этом режиме, в процессорах имеются гибкие средства организации сегментов с большим числом атрибутов и эффективные механизмы контроля и защиты доступа к сегментам. Однако поместить всю эту информацию в одном 16 разрядном сегментном регистре было просто невозможно. Поэтому для ее размещения были введены специальные 8 байтные структуры данных, названные дескрипторами, которые полностью описывали соответствующие сегменты. А обращение к этим дескрипторам осуществлялось через соответствующие сегментные регистры, содержимое которых, в этом случае, получило название селекторов. Поэтому, прежде чем рассматривать принципы формирования физического адреса в процессорах семейства Х86 в защищенном режиме работы, посмотрим, какие сегменты памяти определены в этом режиме, и каковы структуры дескрипторов, описывающих эти сегменты.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.