Вот, выношу на обсуждение кое-какие предложения по поводу организации памяти и принципа работы с ней в ОС. С 64к много не накрутишься, но такая архитектура кажется мне достаточно приемлемой... Кодом пока не подтверждено.
Менеджер памяти ОС.
* Структура памяти.
Вся системная память делится ОС на 4К-страницы. Существует память
ROM, OS RAM, общая память, заменяемая память (область подкачки) и
память приложений. Адресное пространство системы состоит из 16 таких
страниц. Приложения могут динамически распределить любое число 4К
страниц, но не менее чем 4К. Если необходимо более точное выделение
памяти, приложение должно использовать процедуры менеджера системной
(не страничной) памяти.
Память ROM - это страницы, содержащие системное ПЗУ. Они используются
только тогда, когда HAL делает системные вызовы. В этих страницах
также находится ПЗУ TR-DOS (или ZXDOS).
Память OS RAM - это страницы с кодом и данными ОС. Эти страницы
являются системными и не должны изменяться приложениями. Эти
страницы не заменяемы (сама ОС может заменять их и разделять их со
страницами ROM), но это прозрачно для приложений.
Общая память - это страницы, память в которых может быть распределена
приложениям и сохраняет свой адрес независимо от текущего приложения.
Это весьма ограниченный ресурс, который должен использоваться крайне
аккуратно. Приложения могут использовать его для коммуникации между
процессами/страницами, однако объем памяти, распределяемый в этой
области, ограничен для каждого приложения. Блоки памяти в этой области
именованы (имеют символьные идентификаторы).
Заменяемая память (область подкачки) используется приложениями для
обращения к статической/динамической распределяемой памяти.
Страницы памяти приложений содержат код и статические данные
приложений. Эта область обычно имеет гранулярность системных страниц
(не менее 16 кб), однако одна системная страница может содержать более
одного приложения. Если приложению нужно более одной 16К-страницы,
то приложение должно использовать систему межстраничных вызовов.
Межстраничные вызовы занимают 5 байт памяти и настраиваются ОС во
время загрузки приложения.
* Статическая и динамическая память.
Когда приложению необходимо поместить некоторую страницу RAM (4 кб) в
некоторую физическую страницу, вызов ОС возвращает адрес физической
страницы в регистре IY. Эта память будет доступна до следующего
вызова размещения страницы в той же физической странице. Такая
память называется динамической. Любой вызов к функциям размещения
динамической памяти делает невозможным доступ к статической памяти до
следующего вызова размещения страниц статической памяти.
В дополнение к динамической памяти, ОС может настроить приложение так,
что адреса обращения к памяти будут фиксированы. Это называется
статической памятью. Статическая память распределяется во время
загрузки приложения и не освобождается до завершения приложения.
Вызов размещения страниц статической памяти в физических страницах
делает невозможным доступ к динамической памяти до следующего вызова
размещения страниц динамической памяти.
Метод выделения памяти (статический или динамический) определяется
программистом. Возможно также использовать комбинацию двух методов.
* Менеджер системной памяти.
Если приложению не требуются полные 4К-страницы, оно может использовать
менеджер системной памяти. Менеджер системной памяти распределяет
4К-страницы по мере необходимости, выделяя приложениям требуемый объем.
Менеджер системной памяти предоставляет собственные функции размещения
памяти в страницах, аналогичные функциям размещения динамической памяти.
Для своей работы менеджер памяти создает в 4К-страницах собственные
структуры. Память, распределяемая через менеджер памяти, выравнивается
по 256-байтным границам.
* Карта памяти
** Вариант 1: стандартная конфигурация
#0000 #3FFF ROM (4)
#4000 #5FFF Экран, общая память (2)
#6000 #9FFF OS RAM (4)
#A000 #BFFF Область подкачки (2)
#C000 #FFFF Область приложений (4)
** Вариант 2: размещаемая ROM (cache и др.)
#0000 #3FFF ROM, OS RAM, ZXDOS (4)
#4000 #6FFF Экран, общая память (3)
#7000 #8FFF OS RAM (2)
#9000 #BFFF Область подкачки (3)
#C000 #FFFF Область приложений (4)
** Вариант 3: возможность замены страницы #8000-#BFFF
#0000 #3FFF ROM (4)
#4000 #5FFF Экран, общая память (2)
#6000 #7FFF OS RAM (2)
#8000 #BFFF OS RAM, область подкачки (4)
#C000 #FFFF Область приложений (4)
** Вариант 4: размещаемая ROM, возможность замены страницы #8000-#BFFF
#0000 #3FFF ROM, OS RAM, ZXDOS (4)
#4000 #6FFF Экран, общая память (3)
#7000 #7FFF OS RAM (1)
#8000 #BFFF OS RAM, область подкачки (4)
#C000 #FFFF Область приложений (4)
