Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 4, Модели оперативной памяти.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
78.85 Кб
Скачать

Расположение составных данных в оперативной памяти

Логично было бы такие данные располагать в подряд расположенных ячейках, причем, чтобы никаких ограничений на число подряд располагаемых байтов не накладывалось. Это может быть 2, 4, 8, 16, 32 байта и т.д. Естественно, что число последовательно расположенных байтов - это величина 2i, где i = 1,2,3,4….. .

Тогда размещение можно быть следующим:

полуслова (2 байта) располагаются в двух последовательно расположенных ячейках оперативной памяти;

слова (4 байта) располагаются в четырех последовательно расположенных ячейках оперативной памяти;

двойные слова (8 байтов) располагаются в восьми последовательно расположенных ячейках оперативной памяти;

данные 16 байтов располагаются в 16 последовательно расположенных ячейках оперативной памяти и т.д.

В данных, состоящих из нескольких байтов, расположение байтов может быть разным:

- начиная с младшего байта;

- начиная со старшего байта.

Старшим байтом является байт, содержащий первые 8 разрядов данных (0 – 7-й разряды).

Эта проблема решается в различных архитектурах по правилам «остроконечников» и «тупоконечников».

Как правило, возникают споры относительно того, какое из упорядочения байтов является лучшим. На самом деле термины «остроконечник» и «тупоконечник» заимствованы из книги Джонатана Свифта «Путешествия Гулливера», где описывается вражда двух группировок по поводу того, с какого конца разбивать сваренное всмятку яйцо: с острого или тупого. Точно так же, как и в случае с пресловутым яйцом, не существует технологического смысла ставить один способ упорядочивания байтов выше другого.

С какого адреса могут располагаться данные в оперативной памяти?

С точки зрения программиста данные, размером в 2i (i ≥2) байтов, должны располагаться, начиная с любого адреса. Это позволит наиболее эффективно использовать оперативную память при работе с данными различной разрядности. Но это не позволит аппаратуре работать с такими размерами данных с максимальным быстродействием. Как правило, аппаратуре удобно за одно обращение извлекать (или записывать) 2i байтов (где величина i зависит от конкретного компьютера и может быть равна 1, 2, 3, 4, 5, 6, 7…), т.е., 2, 4, 8, 16, 32, 64, 128…байтов. Если же искомые данные находятся в двух областях оперативной памяти, то для их извлечения потребуется 2 обращения к оперативной памяти. Даже если данные находятся в прочитанном блоке, то необходимо уметь выделить их начало и все последующие байты. А это дополнительные затраты аппаратуры, а самое главное сегодня (и в последующем) - это дополнительное время, самый ценный ресурс.

Поэтому принято компромиссное решение. Пусть каждая порция данных размером 2i байт (где i = 1, 2, 3, 4, 5, 6…) начинается с адреса кратного 2i. То есть, байт может располагаться в любой ячейке оперативной памяти, полуслово (2 байта) - с адреса кратного 2, слово – с адреса кратного 4, двойное слово - с адреса кратного 8 и т. д.

Это означает, что при адресации:

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

слова – 2 младших разряда должны быть нулевыми;

двойного слова - 3 младших разряда адреса должны быть нулевыми и т. д.

Такое решение проблемы позволит эффективно использовать оперативную память и обеспечит быструю работу с оперативной памятью.