Организация оперативной памяти и способы адресации




страница1/4
Дата08.06.2016
Размер0.53 Mb.
  1   2   3   4

8.6.16

Организация оперативной памяти и способы адресации

Память в современных ЦВМ имеет многоуровневую (иерархическую)


структуру:

1)- Регистры процессора


2)- Сверхоперативное ЗУ (КЭШ-память) cache-фр.
3)- Основное ОЗУ
4)- Внешние ЗУ (диски, ленты)
На следующий (нижележащий) уровень можно поставить выход в сеть для связи с другими ЭВМ; ее (сеть) можно рассматривать для данной ЭВМ как разновидность внешнего ЗУ.

Уровень 2) в простых (низкопроизводительных) процессорах часто отсутствует. По направлению от 1) к 4) уменьшается быстродействие и увеличивается емкость уровня ЗУ.

Далее, если не будет оговорено особо, будем иметь в виду уровни 2) и 3) - основное ОЗУ (память с произвольным, адресным доступом). Именно в нем во время выполнения программы хранятся выполняемые команды и обрабатываемые данные.

Разновидности организации памяти


Различают следующие способы организации доступа к памяти:

  1. память с произвольным доступом (с адресной организацией)

  2. память с последовательным доступом

  3. память с ассоциативной выборкой

Память с адресной организацией (с произвольным доступом).


Так называют память, в которой
а) запоминающие элементы упорядочены (т.е. между ними существует отношение «предшествующий – последующий»), и
б) каждый элемент памяти (минимальная адресуемая единица) имеет индивидуальный признак, номер, называемый адресом. Адрес чаще всего интерпретируется как беззнаковое целое, т.е. можно считать, что адрес это просто порядковый номер элемента в упорядоченном множестве. (В некоторых платформах адрес интерпретируется как число со знаком, например, Transputer фирмы Inmos – 1985…1990.)

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

Диапазон возможных адресов, которым могут соответствовать элементы реально существующей памяти, в конкретной платформе всегда ограничен. Это ограниченный диапазон называют размером физического адресного пространства. Например, в платформе х86 для большинства процессоров подмножества 386+ размер физического адресного пространства ограничен шириной шины адреса процессора (32 бита) и составляет соответственно 232 адресов. В вычислительной системе может быть задействована только часть диапазона адресов (т.е. для части адресов элементы памяти физически отсутствуют).

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

Не следует, с точки зрения организации доступа, считать разновидность памяти, известную под названием «память с произвольным доступом» (Random Access Memory) альтернативой постоянной памяти (ROM Read Only Memory), так как ROM это тоже память с произвольным (адресным) доступом, но не позволяющая изменять содержимое.

Память с последовательным доступом


Память с последовательным доступом ПсПД. Так называют логическую организацию памяти, при которой элементы памяти упорядочены в одномерный массив, но не имеют индивидуальных признаков (адресов). Запись в элементы такой памяти возможна только подряд, начиная с некоторого определенного «начального» элемента. После того, как один или более элементов записано, они могут быть считаны, но тоже, только подряд. По способу считывания различают ПсПД типа «стек» (Stack) и типа «очередь» (Queue). Читать элементы из стека можно только, начиная с последнего записанного, и в порядке, обратном записи (Last In First Out, LIFO). Читать элементы из очереди можно, начиная с первого записанного. Последовательный доступ к памяти может быть обусловлен ее конструкцией (память на магнитной ленте в стримерах) или схемотехникой.

Однако часто стеки и очереди реализуют на части памяти с адресной организацией, используя соответствующие способы адресации с автоиндексацией – автоинкрементную и автодекрементную.

Стеки и очереди являются типовыми элементарными динамическими структурами данных, рассматриваемыми в языках программирования. Поэтому следует всегда отдавать себе отчет, что имеется в виду в конкретных контекстах: разновидность аппаратной (схемотехнической) реализации или структура, реализованная в адресуемой памяти с произвольным доступом, посредством использования подходящих способов адресации.

Среди типовых динамических структур данных рассматривают также «двустороннюю очередь» (Deque – Double-Ended Queue). Эта структура данных допускает последовательный доступ, как по чтению, так и по записи с обоих концов, она совмещает свойства стека и очереди.


Память с ассоциативным доступом.


Эта разновидность памяти предполагает, что элементы памяти никак не упорядочены (только для программиста!!   для разработчиков схемотехники или топологии БИС эти элементы, конечно же, упорядочены). Запись в ассоциативную память происходит по принципу «в любой свободный элемент». Считывание осуществляется по принципу «найти элемент(ы) данных, которые удовлетворяют заданным условиям» (например, содержат в заданных битовых полях заданные значения).

При чтении из адресуемой памяти (вернуть содержимое элемента с заданным адресом) или из памяти с последовательным доступом (вернуть содержимое следующего элемента) всегда возвращается одно и только одно значение. Результат запроса к ассоциативной памяти может быть трояким: 1) есть в точности один элемент, удовлетворяющий заданным условиям, 2) таких элементов нет вовсе, и 3) есть несколько таких элементов.

Более подробно будем рассматривать использование ассоциативного доступа при изучении КЭШ-памяти.

Адресная организация памяти и способы адресации

Логически ОЗУ представляет собой упорядоченный (одномерный) массив элементов. Элементы (минимальные адресуемые единицы МАЕ) пронумерованы, причем номер каждой МАЕ фиксирован и определяется схемотехнической реализацией устройства памяти.

Номер элемента реально существующего в системе устройства памяти в дальнейшем будем называть адресом (Address) этого элемента. В каждой такой ячейке может храниться двоичное слово фиксированной длины. (МАЕ). Длина МАЕ (того, что имеет индивидуальный адрес) в ранних моделях ЦВМ бывала разной, но сейчас для (почти) всех ЭВМ она равна одному байту. (Есть и исключения – например, память программ в PIC-контроллерах – однокристальных микроЭВМ фирмы MicroChip для разных моделей процессоров – может иметь длину 12, 14 или 16 бит.)

Как мы увидим далее, возможность программно оперировать с адресами в ходе выполнения программы дает программисту массу дополнительных возможностей. При вычислении адреса, нередко он (адрес) может быть определен арифметическим выражением, содержащим несколько компонент. Например, адрес элемента массива может быть определен как начальный адрес массива плюс произведение номера (индекса) элемента массива на его длину. Некоторые из этих компонент известны уже на этапе написания текста программы (например, длина элемента массива). Некоторые другие становятся известными на этапе трансляции, третьи станвятся известными после загрузки программы (например, начальный адрес массива) и, наконец, четвертые принимают определенное значение лишь во время выполнения программы (например, номер элемента, обрабатываемого программой в данный момент).

Понятие «машинное слово» чаще всего означает максимальную длину операнда, с которым процессор может действовать как с одним целым. Это понятие (почти) совпадает с понятием «разрядность АЛУ» процессора, например, в контексте «процессоры с 32-разрядной архитектурой», однако оно достаточно нечетко, так как нередко в разных командах одного процессора максимальная длина операнда может быть разной.

Говоря в дальнейшем "организация оперативной памяти и способы адресации" - имеем в виду:
- каким образом устанавливается соответствие между содержимым поля адресации в команде и физическим адресом в массиве ячеек ОЗУ.

Как уже отмечалось, для разных операций требуется различное количество параметров.

В истории развития способов адресации можно выделить три этапа

1) Для ЭВМ 1...2 поколений были характерны небольшой обьем ОЗУ (4...32 Кслов) и значительная длина машинного слова (40...64 и более бит). Длина слова выбиралась обычно достаточной для представления числа с инженерной точностью в плавающем формате. При этом в поле адреса мог поместиться полный физический адрес (для маленького объема ОЗУ он был коротким).

Простейшая структура адресной части команды:

КОП

ФизАдрес1

ФизАдрес2

...

Адресные поля содержат физические адреса

2) В ходе развития ЭВМ


- увеличивался обьем ОЗУ, а следовательно и длина требуемого физического адреса;
- желательно было вычислять/модифицировать адреса. Это давало возможность одному участку программы обрабатывать данные, расположенные в разных адресах.

Перешли к структуре:

Простейший вариант такой схемы: физический адрес содержится в адресном регистре, а адресное поле содержит имя (код, номер) адресного регистра плюс код, обозначающий способ адресации (в данном случае косвенно-регистровую адресацию – см. далее). Длина такого поля адреса, могла быть гораздо меньше длины адреса.


Например, если процессор содержит восемь регистров общего назначения и использует не более 8 разных способов адресации, длина номера регистра = 3 бита, длина кода способа адресации также 3 бита. Адресное поле в команде будет содержать всего 6 битов.

3) При дальнейшем развитии ЦВМ - увеличивается размер адресного пространства


При 32-разрядном физическом адресе размер физического адресного пространства = 4 ГБайт. В то же время реальный объем ОЗУ в современном (2004 г) настольном ПК составляет 64...512 МБайт (для адресации такого объема достаточна длина физического адреса 26...29 разрядов). Таким образом, имеет место несовпадение диапазона логических адресов (в частности, тех чисел, которые могут храниться в адресных регистрах процессора) и диапазона физических адресов, нумерующих реально существующие ячейки ОЗУ. Поэтому все более широко используется следующая схема преобразования адресов:

В результате вычисления в соответствии со способом адресации формируется объект, называемый исполнительным (executive) или эффективным (так переводят английский термин effective, хотя лучше исполнительный или действующий адрес). Это понятие уровня языка ассемблера почти эквивалентно используемому в языках высокого уровня понятию указатель (pointer). Все перечисленные в данном абзаце понятия   прежде всего суть понятия логические (логические адреса).

Логические адреса требуется отображать на физические адреса фактически имеющейся памяти. В простейшем случае можно это делать «один в один», начиная (размещая, загружая) всю программу целиком в определенное место памяти (например, в простейшем варианте, начиная с нулевого адреса).

В то же время, как увидим далее, такое взаимно однозначное отображение адресов не всегда удобно, а иногда даже и невозможно.

Понятие «Способ адресации» включает:

  1. Способ кодирования местоположения операнда (ов) в адресном поле команды.

  2. Условное обозначение (синтаксис) способа адресации при записи команды на языке ассемблера.

  3. Алгоритм вычисления исполнительного адреса по информации, содержащейся в адресном поле, а также в других элементах процессора, имеющих отношение к вычислению адреса (хранящих адресную информацию, компоненты адреса).

Функции способов адресации (и механизма трансляции адреса)

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

1.Обеспечить удобство вычисления логических адресов при отображении на память компонентов сложных структур данных (массив, структура и поля ее записей, список и т.п.) Это одно из свойств, которые обычно имеют в виду, когда говорят, что "микропроцессор оснащен средствами для программирования на языках высокого уровня"

2.Обеспечить переход от содержимого адресного поля команды к логическому адресу и отображение пространства логических адресов на пространство физических адресов.

3.Обеспечить перемещаемость программных модулей (для легкости компоновки из этих модулей большой программы).
Под термином «перемещаемость» могут иметь в виду одно из двух различных свойств программы. Статическая перемещаемость состоит в том, что оттранслированную программу можно, без модификации адресных частей команд, загружать, начиная с различных адресов, при этом программа сохраняет работоспособность. Динамическая перемещаемость – более сильное свойство, состоящее в том, что загруженную и выполняющуюся программу можно в любой точке остановить, переместить (как одно целое) в другое место памяти и затем успешно продолжить выполнение с точки останова без каких-либо изменений кода программы.

4.Обеспечить возможность многозадачного режима работы, когда в памяти одновременно находятся и выполняются несколько программ: надо разрешить этим программам обмениваться информацией, но защитить их друг от друга (чтобы одна программа не имела возможности испортить команды или данные другой программы).

Что такое "многозадачность"?

В простейшем случае две задачи - это программа пользователя, прикладная программа ПрП и операционная система ОС. ПрП не должна иметь возможности испортить ОС. Другой пример: кроме ОС - две ПрП, из которых одна работает в фоновом режиме. Например, основная задача - текстовый процессор, с которым работает человек, редактируя текст. В паузах, когда человек думает, какую клавишу нажать, работает фоновая задача, например, распечатывается на принтере другой текст. Еще более сложный случай - многопользовательская система, когда на одном процессоре работает несколько пользователей одновременно, они разделяют процессорное время, пространства памяти и другие ресурсы.

Элементы синтаксиса языков Ассемблера

Язык Ассемблера представляет собой систему символических обозначений, отражающую особенности архитектуры, системы команд и набора способов адресации конкретного процессора (или семейства программно-совместимых моделей процессоров). Поэтому язык Ассемблера – свой для каждой вычислительной платформы, и в мире языков Ассемблера формально отсутствует стандартизация, подобная той, что имеется, например, для языков Си или Паскаль. Однако фактически в языках Ассемблера для различных процессоров имеется поразительно много общего, как в структуре программы, так и в элементах синтаксиса. В то же время встречаются и обратные примеры, когда для одного процессора разные авторы разрабатывают трансляторы Ассемблера, использующие различный (и несовместимый) синтаксис.



Что общего в языках Ассемблера для разных платформ?

1. Структура ассемблерного оператора, она обычно имеет следующий формат:

[метка] мнемокод_операции [операнд],[операнд],…[операнд] ; [комментарий]

Метка это символическое обозначение адреса, с которого в памяти будет располагаться двоичный код данной команды. Комментарий отделяется от прочих элементов разделителем (в данной записи это точка с запятой, хотя в некоторых Ассемблерах в качестве разделителя может использоваться другой символ.

Элементы вышеприведённого оператора, заключенные в квадратные скобки, в отдельных операторах Ассемблера могут отсутствовать.

2. Мнемонические обозначения однотипных команд в разных Ассемблерах похожи, а нередко, просто одинаковы, это не следствие стандартизации, а исторически сложившаяся ситуация.

3. В условные обозначения операндов входят компоненты, обозначающие используемые способы адресации. В различных ассемблерах обозначения способов адресации, хотя и могут несколько различаться, имеют много общих черт.

3. Обозначения программно-видимых элементов регистровой модели имеют в разных Ассемблерах много общего.

Вот пример ассемблерной команды для процессоров х86:

L1: mov eax, [ebp+4esi+1Fh] ; Это пример ассемблерной команды для х86

Мнемонические обозначения для операций будут весьма подробно обсуждаться при рассмотрении типового состава систем команд, выполняемых процессорами. Здесь упомянем только некоторые мнемокоды, которые будут использованы в примерах в данном разделе.

mov   копирование

add   сложение

sub   вычитание

inc   увеличение на 1

dec   уменьшение на 1

mul   умножение

Что различно в языках Ассемблера для разных платформ?

Наборы команд для разных процессоров отличаются, иной раз существенно, хотя структура этих наборов имеет в разных платформах много общего.

В различных платформах реализован различный набор способов адресации.

Могут существенно различаться по составу и по свойствам регистровые модели разных процессоров, это отражено и в перечне обозначений программно-видимых компонентов процессора.



Замечание по синтаксису: в многооперандной команде один из операндов обозначает место, куда помещается результат операции, этот операнд называют операндом-приёмником (в англоязычной терминологии – destination, сокращенно dst). В некоторых языках Ассемблера принято операнд-приёмник записывать левее операндов-приёмников (такое соглашение принято, в частности, в Ассемблере для семейства процессоров х86 фирмы Intel). В других Ассемблерах наоборот, записывают операнд приёмник в ассемблерном операторе правее операндов-источников (например, для семейства 32-разрядных процессоров MC68ххх фирмы Motorola, имеющих архитектуру, называемую CPU 32).

В данном конспекте во всех примерах команд на языке Ассемблера операнд-источник располагается левее операндов-приёмников.

При изучении программирования на Ассемблере, программист (учащийся) должен изучить три группы вопросов:

Во-первых, это синтаксис языка для конкретной платформы, включающий индивидуальный набор мнемоник команд конкретного процессора, обозначения программно видимых регистров процессора, обозначения для реализованных в процессоре способов адресации;

Во-вторых, это множество управляющих элементов: ключевых слов (директив) и конструкций, предназначенных для управления процессом трансляции, описания требуемого распределения памяти, опций трансляции отдельных частей программы и т.п.;

В-третьих, это содержимое библиотек стандартных функций (подпрограмм), обычно входящих в состав операционной системы и доступных для использования программистом уровня Ассемблера.

По трудоёмкости изучения эти три части находятся (очень приблизительно) в соотношении 1:1:3.

Зачем нам в курсе Организации ЭВМ может понадобиться язык Ассемблера. Его символические обозначения, относящиеся к первой группе вопросов, отражают и описывают свойства конкретной вычислительной платформы – регистровую модель процессора для программиста, набор операций, выполняемых им и реализованные в нем способы адресации, поэтому мы будем использовать эти обозначения при рассмотрении соответствующих вопросов. Однако, в данном курсе не делается попытки освоить программирование на языке Ассемблера, это задача отдельного учебного курса.

Способы адресации более подробно

Словосочетание «способ адресации» можно понимать в двух смыслах – более широком и более узком.

В более узком смысле – имеется в виду алгоритм определения адреса в основной памяти, с которого в ней расположен операнд.

(Точнее говоря, та часть алгоритма определения (формирования) адреса, которая является наблюдаемой для программиста, которую программист может задать, записывая команды программы. Еще одна часть этого алгоритма, которую называют словосочетанием «трансляция адреса», для прикладного программиста не наблюдаема.)

В более широком смысле – имеется в виду способ указания в команде местоположения операнда (ов), хотя эти операнды могут располагаться:
1) в основной памяти (с адресной организацией),
2) в регистрах процессора,
3) в регистрах периферийных устройств.

Здесь следует заметить, что, опять, для различных архитектур, доступ к этим трем местам может быть организован совершенно одинаково, как в Pic-процессорах фирмы MicroChip, либо тремя разными способами, как в х86, либо в промежуточных вариантах.

Пока не будет обсуждаться доступ к регистрам периферийных устройств.

  1   2   3   4


База данных защищена авторским правом ©uverenniy.ru 2016
обратиться к администрации

    Главная страница