Расположение данных в одной ячейке
Существует 2 варианта: в старшем разряде ячейки памяти располагается старший (наиболее значимый) разряд информации; далее – разряды в порядке убывания их значимости; в старшем разряде ячейки памяти располагается младший (наименее значимый) разряд; далее – разряды в порядке возрастания их значимости. Первое правило расположения разрядов информации в ячейке памяти называется правилом «тупоконечников». Второе правило расположения разрядов информации в ячейке памяти называется правилом «остроконечников». Этого правила придерживаются в архитектуре компьютеров фирмы Intel. Разделение этих правил по фирмам условно. Многие процессоры могут работать в обоих режимах. В этих процессорах правило упорядочивания байтов определяется при подключении к процессору питания.
Расположение составных данных в оперативной памяти Логично было бы такие данные располагать в подряд расположенных ячейках, причем, чтобы никаких ограничений на число подряд располагаемых байтов не накладывалось. Это может быть 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 младших разряда адреса должны быть нулевыми и т. д. Такое решение проблемы позволит эффективно использовать оперативную память и обеспечит быструю работу с оперативной памятью.
|