параллельно один и тот же домен могли использовать различные программы. Запись
активации фактически создается при вызове метода и удаляется, когда метод завершил
работу.
3. Процесс представляет собой набор объектов, необходимых для создания, выполнения
и завершения процесса. Состоит из объектов типа «память», где память есть домен,
который описывает временно выделяемую область; объектов,
составляющих процесс
(домен для кода, несколько записей архивации); контекста (записи архивации
процесса); глобальные данные и т.д. Это защищаемая область адресного пространства,
где описаны доступы, дескрипторы или мандаты для других сегментов. Тип объекта
хранится внутри дескриптора. Системой аппаратно поддерживается (контролируется)
различные типы доступа для различных объектов.
Домен защиты (Д) определяет
тип операций, применимых к данному сегменту
через данный дескриптор.
Типы доменов защиты:
1. Выполняемый (E);
2. Чтение (R);
3. Запись (W).
В связи с тем, что с использованием одного и того же дескриптора или мандата
происходит последовательно несколько обращений, и каждый раз этот мандат должен
размениваться через дескрипторную таблицу, придумали хитрость: сказано, что мандат
или
дескриптор может находиться в одном из сегментных регистров (CS, SS, DS, ES, FS,
GS). Эти сегментные регистры имеют размер, равный размеру дескриптора какого-то
сегмента или объекта. Т.е. в сегментных регистрах содержится дескриптор, и вы
обращаетесь к сегменту относительно дескриптора, но на самом деле в дескрипторе
хранится не адрес, а номер входа в таблицу дескрипторов.
Адрес сегмента в памяти
называется базой, длина сегмента называется размером.
При обращении к сегменту через сегментный регистр читается дескрипторная
таблица, потом в команде вычисляется смещение относительно начала сегмента, с этим
базовым адресом происходит сложение и обращается к области физической памяти.
Значит, каждое обращение к памяти сопровождается обращением к памяти. Получается
абсурд
. Чтобы решить эту проблему, придумали хитрость: каждый сегментный регистр
имеет теневой регистр с размером элемента таблицы отображения и фактически адрес
сегмента, размер сегмента и т.д. хранится внутри процессора. Как только перезагружается
сегментный регистр, процессор, зная адрес дескрипторной таблицы извлекает 64-битное
слово и записывает его в теневой регистр. Адрес дескрипторной
таблицы хранится в
специальном регистре GDT, размером 64 бита, т.е. физический адрес хранится в таблице
отображения и поэтому, как только меняется содержимое сегментного регистра,
запускается программа, которая попадает в таблицу по заданному новому смещению (по
новой точке входа в таблицу). Таким образом, всегда поддерживается соответствие
сегментного регистра и теневого.
Тема 5.4. Стековая архитектура
Это родная архитектура всех языков программирования высокого уровня. В курсе
теории автоматов обсуждался вопрос о том, что разрешимыми являются 3 типа языков:
контекстные, контекстно-свободные и регулярные. Языки произвольные или типа 0 не
разрешимы. Не зная наперед какую-то конкретную грамматику языка, вы никогда не
сможете определить принадлежность строки языку.
Контекстно-свободные языки
могут быть относительно эффективно распознаны
магазинными автоматами. Но помимо того, что магазинный автомат необходим для
распознавания, код, который порождается такого рода автоматом, тоже очень легко может
быть исполнен на магазинном (стековом) автомате. Поэтому есть целый класс архитектур,
которые близки к языкам высокого уровня тем, что они являются стековыми.