Итак прочел все страницы этой темы – не выдержал, зарегистрировался, хочу вставить свои 5коп.
Как я понял – есть желание разработать многопроцессорную машину на совковой-отечественной-древней-ретро (нужное подчеркнуть) элементной базе (выбран дорогой моему сердцу КР580ВМ80А). Итак – первое, с чего необходимо начинать подобную разработку – определить цели и методы (доступные средства).
В общем вводная:
• Многопроцессорная (для начала 4ре процессора) машина
• Процессоры архитектурно равноправны
• Как процессор использовать КР580ВМ80А
• ОЗУ на статической памяти
• Постаратся обойтись без современных ИМС, без ПЛИС. Т.е. условно 74 серия
• Страничная организация ОЗУ сегментами по 8К
• Возможность переключения ОЗУ в виде любая страница-куда угодно.
• ОБЯЗАТЕЛЕН механизм защиты памяти (об этом ниже)
• ОС самописная многозадачная, с вытесняющей многозадачностью. Необходимо постаратся реализовать посикс
• Возможность запуска ПО различных старых восьмибитников в режиме аппаратной эмуляции (при условии что они пользуют стандартные вызовы CP/M, монитора)
• На первых порах ограничится текстовым вводом – выводом – терминал в компорт.
• Среда разработки – ASM , ANSI C
Итак устройство управления памятью, устройство защиты памяти.
Сначала сразу скажу, что делать в железе сколько-нибудь пригодную для реального использования машину без механизма защиты памяти темболее многозадачную, темболее многопроцессорную – просто бессмысленно.
Организация памяти с точки зрения процессора
Восемь страниц по 8к. Младшая страница – системная, может быть переведена в режим только чтение (средствами MPCU через запись в управляющий регистр ACR соответствующего значения)
Организация памяти глобально.
Все глобальное аддресное пространство состоит из 8К страниц. Страницы бывают:
• Страница супервизора: в ней загрузочное системное ПЗУ, регистры УВВ, регистры управления устройства управления и защиты памяти.
• Страницы ОЗУ. Просто страницы ОЗУ по 8К
MPCU
в зависимости от значения регистра PCR маппит соответствующую 8к страницу ОЗУ в адресное пространство соответствующего процессора, в заданый 8к сегмент.
В зависимости от значения регистра ACR запрещает запись соответствующей системной страницы (аппаратно блокирует сигналы записи от процессора)
Процессоры индивидуально могут быть сброшены через запись соответствующих значений в регистр CCR
Могут быть вызваны (индивидуально, каждого процессора) прерывания через запись соответствующих значений в регистр CCR.
Механизм работы всего бардака:
Все процессоры стартуют, но системное ПЗУ изначально замаплено в АП только одного процессора. Выполняя программу из системного ПЗУ процессор прячет страницу со всеми критичными регистрами от других процессоров. Потом халтит другие процессоры. Затем устанавливает запрет для всех других процессоров на запись в системные страницы. Заполняет страницы кодом для других процессоров и маппит их в системные страницы, запускает код на выполнение в других процессорах (отжимает халт, или ресетит). В общем у кого ПЗУ, того и тапки.
Вытесняющая многозадачность обеспечивается инициированием прерываний с передачей управления в соответствующую системную страницу и подменой страниц с кодом разных задач. Если процессор запретил прерывания – задача считается повисшей и проц ресетится со стороны супервизора по таймауту сторожевого таймера.
Обеспечить вытесняющую многозадачность супервизор сам себе не способен, поэтому прикладные задачи на нем выполнятся не будут.
Кстати через ПДП можно организовать виртуальную память, я думаю..
Возможно в принципе масштабирование системы с созданием иерархической структуры из вычислительных ячеек по 4-8 процессоров с собственным ОЗУ и MPCU, с передачей страниц ОЗУ между ячейками через ПДП но с одним супервизором на систему (возможно даже главный супервизор будет делегировать часть своих задач другим процессорам ). Но при этом все процессоры структурно эквивалентны, просто кто супервизор в текущий момент зависит от конфигурации системы.