Основные характеристики реального режима
· объем адресуемой памяти - 1 Мб (=220, у них 20-разрядная шина адреса) · поддерживается выполнение всего одной программы Þ нет потребности в организации защиты программ от взаимного влияния · поддерживается сегментированная модель памяти (оперативная память делится на отдельные участки – сегменты) · сегмент имеет длину не более 64 Кбайт (216 ) · адрес сегмента располагается в одном из сегментных регистров · отсутствуют аппаратные средства контроля доступа к сегменту Þ любая программа может обратиться к любому адресу в памяти. · формирование физического адреса происходит по правилам реального режима: Например: для определения физического адреса содержимое сегментного регистра умножается на 16 за счет добавления справа к младшим битам четырех нулей, после чего к полученному значению прибавляется содержимое регистра внутрисегментного смещения. Получается двадцати - битовое значение (20-разрядная шина адреса).
30. Понятие сегментированной модели памяти. На какие сегменты делится ОП? (л7). Память делится на непрерывные области памяти, называемые сегментами. Сама программа может обращаться только к данным, которые находятся в этих сегментах. Сегмент представляет собой независимый, поддерживаемый на аппаратном уровне блок памяти.
Для микропроцессоров Intel принят особый подход к управлению памятью. Каждая программа в общем случае может состоять из любого количества сегментов, но непосредственный доступ она имеет только к 4 основным сегментам: кода, данных и стека и к дополнительным сегментам данных.
Операционная система (а не сама программа) размещает сегменты программы в ОП по определенным физическим адресам, а значения этих адресов записывает в определенные места, в зависимости от режима работы микропроцессора: · в реальном режиме адреса помещаются непосредственно в специальные сегментные регистры (cs, ds, ss, es, gs, fs);
Для доступа к данным внутри сегмента обращение производится относительно начала сегмента линейно, т.е. начиная с 0 и заканчивая адресом, равным размеру сегмента. Этот адрес называется смещением (offset). Таким образом, для обращения к конкретному физическому адресу ОП необходимо определить адрес начала сегмента и смещение внутри сегмента. Физический адрес принято записывать парой этих значений, разделенных двоеточием segment: offset Например, 0040:001Ch; 0000:041Ch; 0020:021Ch; 0041:000Ch. Пример: Адрес, локализующий положение сегмента в оперативной памяти, содержится в одном из специальных сегментных регистров процессора, но он тоже 16-разрядный. Для того, чтобы при помощи этого адреса можно было перекрыть все пространство ОЗУ (в реальном режиме 1 Мб), со стороны младшего байта его дополняют четырьмя нулями. Например, если содержимое сегментного регистра: 0001.1101.1000.1111 (или 1D8F16) то адрес начала соответствующего сегмента будет равен: 0001.1101.1000.1111.0000 (или 1D8F016). Таким образом можно искусственно разделить всю память на сегменты, начинающиеся по адресам, кратным 1610. Предположим, что внутрисегментное смещение нашей ячейки задано числом 1001.1011.0010.0101 или 9В2516, в этом случае ее реальный адрес будет равен сумме адреса сегмента и внутрисегментного смещения: 1D8F016+9B2516 = 2741516 (рис. 4).
32. Понятие стековой памяти. Способы записи LIFO, FIFO. Для чего используется стековая память? (л7) Стек реализуется на базе оперативной памяти. Элементы стека расположены в оперативной памяти, Запись нового слова производится в верхнюю ячейку, при этом все ранее записанные слова сдвигаются вниз, в соседние ячейки. Считывание возможно только из верхней или нижней ячейки памяти области стека. Если производится считывание с удалением, все остальные слова в памяти сдвигаются вверх. Т.о. существуют два способа записи в стек:
а) при первом способе порядок считывания слов соответствует правилу LIFO: последним поступил, первым ушел. Б) при втором способе порядок считывания слов соответствует правилу FIFO ("first-in-first-out") –по принципу: первым пришел, первым ушел.
Элементы стека располагаются в области памяти, отведенной под стек, начиная с вершины стека (т.е. с его максимального адреса) по последовательно уменьшающимся адресам. Адрес верхнего, доступного элемента хранится в регистре-указателе стека SP. Как и любая другая область памяти программы, стек должен входить в какой-то сегмент или образовывать отдельный сегмент. В любом случае сегментный адрес этого сегмента помещается в сегментный регистр стека SS. Таким образом, пара регистров SS:SP описывают адрес доступной ячейки стека: в SS хранится сегментный адрес стека, а в SP - смещение последнего сохраненного в стеке данного. Операции со стеком поддерживаются двумя регистрами: 1. Регистр сегмента стека (SS). Стеки размещаются в памяти. Количество стеков в системе ограничивается только максимальным числом сегментов. Размер стека не может превышать 4 Гбайт, что соответствует максимальному размеру сегмента (232) бита для процессора i486. В каждый момент времени доступен только один стек, значение сегмента которого содержится в регистре SS. Регистр SS автоматически используется процессором для выполнения всех операций со стеком. 2. Регистр указателя стека (SP). В регистре SP содержится относительный адрес вершины стека в текущем сегменте стека. Его значение используется командами PUSH (добавление в стек) и POP (извлечение из стека), при вызове подпрограмм и при возврате исключениями и прерываниями. При занесении элемента размером в слово (2байта) в стек (смотри Рисунок), процессор уменьшает значение регистра SP на 2, а затем записывает следующий элемент по адресу новой вершины (SP -2)., а содержимое SP уменьшается еще на2 (SP-4) и т.д.. При извлечении данных из стека, процессор копирует элемент в выходную переменную, расположенный по адресу вершины, а затем увеличивает значение регистра указателя стека. Иными словами, стек растет вниз, в сторону уменьшения адресов.
Рисунок. Стеки push X ~ SP:= SP − 2; m [SP]:= X;pop X ~ X:= m [SP]; SP:= SP + 2;Здесь через m[SP] обозначается содержимое слова памяти с адресом SP (m - сокращение от memory ). Стек традиционно используется, например, для сохранения содержимого регистров, используемых программой, перед вызовом подпрограммы, которая, в свою очередь, будет использовать регистры процессора "в своих личных целях". Исходное содержимое регистров извлекается из стека после возврата из подпрограммы. Другой распространенный прием - передача подпрограмме требуемых ею параметров через стек. Подпрограмма, зная, в каком порядке помещены в стек параметры, может забрать их оттуда и использовать при своем выполнении. Отличительной особенностью стека является своеобразный порядок выборки содержащихся в нем данных: в любой момент времени в стеке доступен только верхний или нижний элемент, т.е. элемент, загруженный в стек последним или первым Выгрузка из стека верхнего или нижнего элемента делает доступным следующий элемент.
|