Niklaus Wirth, Jurg Gutknecht - Project Oberon. The Design of an Operating System and Compiler / Никлаус Вирт, Юрг Гуткнехт - Проект Oberon. Разработка операционной системы и компилятора: 8.1. Storage Layout and Run-time Organization / Распределение памяти и организация поддержки выполнения

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

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

linuxoid 19.02.10 в 16:54

0

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

linuxoid 19.02.10 в 16:54

0

К несчастью, число отдельных пространств больше двух. Если бы их было два, то никакого условного ограничения размера не было бы нужно; попросту сумма их объёмов была бы по сути ограничена общим объёмом памяти. В случае трех пространств произвольно определенное ограничения размера неизбежно. Наличие аппаратного преобразования адресов облегчает задачу, тем не менее, так как виртуальное адресное пространство несколько больше предельного, оно нелегко будет всегда достижимым.

linuxoid 19.02.10 в 16:55

0

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

linuxoid 19.02.10 в 16:55

0

Если трансляция адресов отсутствует, как в случае Ceres-3 - недостаток элемента управления памятью памяти, установка ограничение размеров неизбежна. Выбранная схема для Ceres-3 показана на Рис. 8.2; стэк ограничен 128 Кбт.

linuxoid 19.02.10 в 16:55

0

Рис. 8.1. Структура памяти для Ceres-1 и Ceres-2

linuxoid 19.02.10 в 16:56

0

Рис. 8.2. Структура памяти для Ceres-3

linuxoid 19.02.10 в 16:56

0

Рис. 8.3. Состояние стэка до и после вызова и завершения процедуры

linuxoid 19.02.10 в 16:56

0

Область адресов с диапазоном 0...FFFFH включает

linuxoid 19.02.10 в 16:56

0

1. NIL-страницу (0...FFFH), которая всегда остается не размещенной. Цель этого элемента – позволить осуществлять адресные ловушки посредством ссылки на NIL-указатель.

linuxoid 19.02.10 в 16:57

0

2. Системный стек (1000H - 17FFH) который используется для обработки прерываний, совершаемых в режиме супервизора, включая заголовок прерывания.

linuxoid 19.02.10 в 16:57

0

3. Таблица размещения для страниц и секторов диска.

linuxoid 19.02.10 в 17:00

0

4. Дескрипторы модулей (4000H - 7FFFH).

linuxoid 19.02.10 в 17:02

0

5. Блоки для постоянно резидентных модулей внутреннего ядра, то есть Kernel, FileDir, Files и Modules.

linuxoid 19.02.10 в 17:02

0

Рабочая область организована в обычной форме как стек записей вызовов процедур. Его вершина записана в SP-регистр Следующий регистр, называемый указатель фрейма FP, является привязкой к активным последовательностям записей вызовов. Новый элемент добавляется при вызове процедура в два шага Первый шаг выполняется после загрузки параметров при вызове подпрограммы (CXP для вызовов внешних, BSR для вызовов локальных процедур). Следующий шаг выполняется при исполнении ENTER-инструкции которая является первой инструкцией тела каждой процедуры. Запись вызова удаляется тоже в две инструкции, при завершении процедуры по инструкциям EXIT и RXP для внешних или RET для локальных процедур. Состояние рабочей области до и после этих четырех шагов показанно на Рис. 8.3.

linuxoid 19.02.10 в 17:03

0

Отсюда следует, что локальные переменные адресуются относительно FP-значения с отрицательным смещением. Параметры адресуются относительно FP с положительным смещением, начинающимся с 12 для внешних процедур вызванных по CXP-инструкции, и с 8 для локальных процедур, где MOD-регистр не перенесен в стек при вызове подпрограммы.

linuxoid 19.02.10 в 17:03

0

Глобальные переменные и константы (строковые) доступны через SB-регистр (статическая часть). Значение этого регистра автоматически устанавливается посредством CXP и RXP инструкций также и для прерываний и ловушек.

linuxoid 19.02.10 в 17:03

0
Минутку...