Готовый перевод Niklaus Wirth, Jurg Gutknecht - Project Oberon. The Design of an Operating System and Compiler / Никлаус Вирт, Юрг Гуткнехт - Проект Oberon. Разработка операционной системы и компилятора: 8.1. Storage Layout and Run-time Organization / Распределение памяти и организация поддержки выполнения
Важное свойство системы Оберон – централизованное управление ресурсами. Ее преимущество заключается в том, что не происходит копирования управляющих алгоритмов и предъразделения ресурсов. Сложность этих управляющих алгоритмов устанавливается раз и навсегда и остается одинаковой для всех приложений. Успех централизованного управления ресурсами, следовательно, сильно зависит от гибкости и эффективности реализации. Эта глава представляет схему и алгоритмы управления основной памятью в системе Оберон.
Распределение памяти в системе Оберон определяется из структуры кода и данных, что типично при использовании модульных, высокоуровневых языков программирования таких, как Оберон. Оно выражается в разделении памяти на области.
К несчастью, число отдельных пространств больше двух. Если бы их было два, то никакого условного ограничения размера не было бы нужно; попросту сумма их объёмов была бы по сути ограничена общим объёмом памяти. В случае трех пространств произвольно определенное ограничения размера неизбежно. Наличие аппаратного преобразования адресов облегчает задачу, тем не менее, так как виртуальное адресное пространство несколько больше предельного, оно нелегко будет всегда достижимым.
Кроме того, мы отмечаем, что оба пространства стэка и кучи должны быть реально выделены, то есть любой адрес внутри пространства должен указывать на настоящий физический адрес. Следовательно, нет смысла создавать виртуальное адресное пространство для них больше всей физической памяти. Размер виртуального блока пространства тогда становится разностью между виртуальным и физическим адресными пространствами. Получившаяся схема показана на Рис. 8.1. Верхний край адресного пространства зарезервирован для регистров устройств.
Если трансляция адресов отсутствует, как в случае Ceres-3 - недостаток элемента управления памятью памяти, установка ограничение размеров неизбежна. Выбранная схема для Ceres-3 показана на Рис. 8.2; стэк ограничен 128 Кбт.
Рис. 8.1. Структура памяти для Ceres-1 и Ceres-2
Рис. 8.2. Структура памяти для Ceres-3
Рис. 8.3. Состояние стэка до и после вызова и завершения процедуры
Область адресов с диапазоном 0...FFFFH включает
1. NIL-страницу (0...FFFH), которая всегда остается не размещенной. Цель этого элемента – позволить осуществлять адресные ловушки посредством ссылки на NIL-указатель.
2. Системный стек (1000H - 17FFH) который используется для обработки прерываний, совершаемых в режиме супервизора, включая заголовок прерывания.
3. Таблица размещения для страниц и секторов диска.
4. Дескрипторы модулей (4000H - 7FFFH).
5. Блоки для постоянно резидентных модулей внутреннего ядра, то есть Kernel, FileDir, Files и Modules.
Рабочая область организована в обычной форме как стек записей вызовов процедур. Его вершина записана в SP-регистр Следующий регистр, называемый указатель фрейма FP, является привязкой к активным последовательностям записей вызовов. Новый элемент добавляется при вызове процедура в два шага Первый шаг выполняется после загрузки параметров при вызове подпрограммы (CXP для вызовов внешних, BSR для вызовов локальных процедур). Следующий шаг выполняется при исполнении ENTER-инструкции которая является первой инструкцией тела каждой процедуры. Запись вызова удаляется тоже в две инструкции, при завершении процедуры по инструкциям EXIT и RXP для внешних или RET для локальных процедур. Состояние рабочей области до и после этих четырех шагов показанно на Рис. 8.3.
Отсюда следует, что локальные переменные адресуются относительно FP-значения с отрицательным смещением. Параметры адресуются относительно FP с положительным смещением, начинающимся с 12 для внешних процедур вызванных по CXP-инструкции, и с 8 для локальных процедур, где MOD-регистр не перенесен в стек при вызове подпрограммы.
Глобальные переменные и константы (строковые) доступны через SB-регистр (статическая часть). Значение этого регистра автоматически устанавливается посредством CXP и RXP инструкций также и для прерываний и ловушек.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: идёт перевод
Переведено на Нотабеноиде
http://notabenoid.org/book/4714/20708
Переводчики: linuxoid
Настройки
Готово:
