
Бит и байт
Основной единицей памяти является двоичный разряд, который называется битом. Бит может содержать 0 или 1. Это самая маленькая единица памяти. (Устройство, в котором хранятся только нули, вряд ли могло быть основой памяти. Необходимы по крайней мере две величины.)
Многие полагают, что в компьютерах используется бинарная арифметика, потому что это «эффективно». Цифровая информация может храниться благодаря различию между разными величинами какой-либо физической характеристики, например напряжения или тока. Чем больше величин, которые нужно различать, тем меньше различий между смежными величинами и тем менее надежна память. Двоичная система требует различения всего двух величин, следовательно, это самый надежный метод кодирования цифровой информации.
Считается, что некоторые компьютеры, например большие IBM, используют и десятичную, и двоичную арифметику. На самом деле здесь применяется так называемый двоично-десятичный код. Для хранения одного десятичного разряда используется 4 бита. Эти 4 бита дают 16 комбинаций для размещения 10 различных значений (от 0 до 9). При этом 6 оставшихся комбинаций не используются. Ниже показано число 1944 в двоично-десятичной и чисто двоичной системах счисления; в обоих случаях используется 16 битов:
десятичное: 0001 10010100 0100 двоичное: 0000011110011000
16 битов в двоично-десятичном формате могут хранить числа от 0 до 9999, то есть всего 10000 различных комбинаций, а 16 битов в двоичном формате – 65536 комбинаций. Именно по этой причине говорят, что двоичная система эффективнее.
Следующим после бита уровнем в организации памяти являются байты. С логической точки зрения байт состоит из восьми бит. Все байты в пределах ОП пронумерованы идущими подряд целыми числами, начиная с нуля. Номер байта – его адрес.
Содержимое любого байта памяти может задаваться и обрабатываться независимо от остальных байтов. Но процессор не может получить доступ к отдельному биту байта.
Из-за того, что есть возможность напрямую обращаться к любому байту, ОП называют еще памятью с прямым доступом, и используют для нее обозначение RAM (Random access memory).
Поле – группа смежных байтов. Байт поля с наименьшим номером считается младшим. Поле характеризуется адресом и длиной. Адресом считается номер младшего байта, а длиной считается количество байтов из которых оно состоит. Байты внутри поля нумеруются слева направо. Биты внутри полей и отдельных байтов нумеруются справа налево.
ОП естественно рассматривать как упорядоченную в порядке возрастания адресов совокупность байтов. Но любое обращение к памяти со стороны процессора по ряду технических соображений осуществляется не по произвольным адресам байтов, а только по адресам слов памяти.
Сегментация машинной памяти
Запись по одним и тем же физическим адресам ОП двух различных программных кодов или используемых ими кодов данных приведет к неверной работе или даже уничтожению по крайней мере одной из таких программ. Поэтому в программах следует избегать прямого задания физических адресов полей памяти. Операционная система автоматически выделяет для записи и хранения кодов каждой программы и её данных подходящий по размерам свободный участок ОП. Вследствие случайности поступления программ на выполнение гарантировать выделение программе того участка памяти, который содержит зафиксированные в программе физические адреса, невозможно, так как он может быть занят.
Существует требование о наличии у программ свойства перемещаемости, которое заключается в том, что программа не должна зависеть от выделенного ей участка ОП.
Механизм, обеспечивающий программам свойства перемещаемости и защиты от взаимного разрушения во время их одновременного нахождения в ОП, представляет собой сегментацию оперативной памяти.
Сегментом называется сплошной участок ОП с независимой адресацией байтов, входящих в сегмент.
Каждый сегмент характеризуется адресом начала сегмента S и длиной сегмента L. S – абсолютный адрес начального байта, а S+L – абсолютный адрес последнего байта сегмента. Различия между понятиями поля и сегмента проявляется в характерных длинах участков и способе их использования. Поля имеют длину от единиц до сотен байтов, а сегменты – десятки и сотни тысяч.
В каждом сегменте кроме абсолютной системы адресации вводится относительная система отсчета адресов байтов, принадлежащих сегменту. Адреса D таких байтов отсчитываются относительно начального байта сегмента и называются смещениями. абсолютный адрес любого байта внутри сегмента равен S+D. Такой способ задания адресов называется сегментной адресацией.
Рис. 5.1.
В сегментной адресации физический адрес поля памяти A задается двумя компонентами: адресом сегмента S и внутрисегментным смещением D. Адрес, заданный в такой форме, принято называть полным указателем и записывать в виде пары S:D. В различных архитектурах компьютеров сегменты памяти обладают разными свойствами. В компьютерах, использующих процессор i8086, сегмент оперативной памяти обладает свойствами:
всегда имеет длину 64 Kb,
обязательно начинается с адреса кратного 16.
Заметим, что при длине сегмента L = 64 Kb максимально возможное смещение D=FFFF.
В программе, выполняющейся процессором i8086, можно использовать от 1 до 4 сегментов ОП:
сегмент кода – для хранения программного кода;
сегмент данных;
сегмент стека;
дополнительный сегмент данных.