
Сообщение от
Eltaron
Те диспетчеры, которые bank16, bankfixed - они занимаются только выделением свободной страницы создаваемому процессу. И даже не самой страницы, а её номера. Тупо отслеживают, что занято, а что нет, больше ничего не делают.
Я потерялся в поиске примера где в коде Алана используется архитектура вот с этой картинки:
Код:
First 64k Subsequent 64k banks
FFFF +------------+ +------------+
Common | Common | | Task Store |+
F000 +------------+ +------------+|+
| | | |+|+
| Kernel | | Process ||+|
Banked | Code | | Code |||+
| | | & Data ||||
| | | ||||
0100 +------------+ +------------+|||
| Reserved | | Reserved |+||
0000 +------------+ +------------+|+|
+------------+|+
+------------+|
Т.е. именно как оно (в каких функциях) использует диспетчер по 64к (он же 60к) для доступа к данным в другие страницы. В моем представлении это должны бы быть какие-то ассемблерные вставки, чтоли...

Сообщение от
Eltaron
А код, переключающий задачи (=переключающий страницы) платформно-специфичен и вынесены в ассемблерные файлы.
Это, по-сути, пять функций:
switchout - выполняется после того, как у процесса отбирается процессорное время.
swithin - выполняется перед тем как процессу выдается процессорное время
map_kernel - вернуть маппинг ядра
map_process - подключить страницы, занятые указанным процессом
do_fork - создать копию текущего процесса
От их реализации и зависит всё поведение системы.
C этим более-менее понятно. Аналогично было и на UZIX, только функции по-другому назывались. Для UZIX эти модули я вчерне уже начинал писать, тогда не хватило упорства победить компилятор (это самая засада в программировании для Z80 на C).