Физическая структура указателя

Физическое представление адреса существенно зависит от аппа-

ратной архитектуры вычислительной системы. Рассмотрим в качестве

примера структуру адреса в микропроцессоре i8086.

Машинное слово этого процессора имеет размер 16 двоичных

разрядов. Если использовать представление адреса в одном слове,

то можно адресовать 64 Кбайт памяти, что явно недостаточно для

сколько-нибудь серьезного программного изделия. Поэтому адрес

представляется в виде двух 16-разрядных слов - сегмента и смеще-

ния. Сегментная часть адреса загружается в один из специальных

сегментных регистров (в i8086 таких регистров 4). При обращении

по адресу задается идентификатор сегментного регистра и 16-битное

смещение. Полный физический (эффективный) адрес получается следу-

ющим образом. Сегментная часть адреса сдвигается на 4 разряда

влево, освободившиеся слева разряды заполняются нулями, к полу-

ченному таким образом коду прибавляется смещение, как показано на

рис. 2.8.

Полученный эффективный адрес имеет размер 20 двоичных разря-

дов, таким образом, он позволяет адресовать до 1 Мбайт памяти.

Еще раз повторим, что физическая структура адреса принципи-

ально различна для разных аппаратных архитектур. Так, например, в

сегмент ┌─┬─┬─┬─┼─┬─┬─┬─┼─┬─┬─┬─┼─┬─┬─┬─┐

│0│1│1│1│0│0│1│0│1│1│1│1│0│0│1│1│0 0 0 0

+ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

смещение ┌─┬─┬─┬─┼─┬─┬─┬─┼─┬─┬─┬─┼─┬─┬─┬─┐

│0│0│0│1│1│0│0│1│1│1│1│0│0│1│1│0│

= └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

полный физи- ┌─┬─┬─┬─┼─┬─┬─┬─┼─┬─┬─┬─┼─┬─┬─┬─┼─┬─┬─┬─┐

ческий адрес │0│1│1│1│0│1│0│0│1│0│0│1│0│0│0│1│0│1│1│0│

└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

Рис 2.8. Вычисление полного адреса в микропроцессоре i8086.

микропроцессоре i386 обе компоненты адреса 32-разрядные; в про-

цессорах семейства S/390 адрес представляется в виде 31-разрядно-

го смещения в одном из 19 адресных пространств, в процессоре

Power PC 620 одним 64-разрядным словом может адресоваться вся как

оперативная, так и внешняя память.

Операционная система MS DOS была разработана именно для про-

цессора i8086 и использует описанную структуру адреса даже, когда

выполняется на более совершенных процессорах. Однако, это сегодня

единственная операционная система, в среде которой программист

может работать с адресами в реальной памяти и с физической струк-

турой адреса. Все без исключения современные модели процессоров

аппаратно выполняют так называемую динамическую трансляцию адре-

сов и совместно с современными операционными системами обеспечи-

вают работу программ в виртуальной (кажущейся) памяти. Программа

разрабатывается и выполняется в некоторой виртуальной памяти, ад-

реса в которой линейно изменяются от 0 до некоторого максимально-

го значения. Виртуальный адрес представляет собой число - номер

ячейки в виртуальном адресном пространстве. Преобразование вирту-

ального адреса в реальный производится аппаратно при каждом обра-

щении по виртуальному адресу. Это преобразование выполняется со-

вершенно незаметно (прозрачно) для программиста, поэтому в совре-

менных системах программист может считать физической структурой

адреса структуру виртуального адреса. Виртуальный же адрес предс-

тавляет собой целое число без знака. В разных вычислительных сис-

темах может различаться разрядность этого числа. Большинство сов-

ременных систем обеспечивают 32-разрядный адрес, позволяющий ад-

ресовать до 4 Гбайт памяти, но уже существуют системы с 48 и даже

64-разрядными адресами.