Стек у каждого процесса вообщето свой, но он должен быть доступен из ядра чтобы работали трапы ОС (сигналы и т.п.). Т.е. система должна уметь переходить в процесс и возвращаться в ядропо стеку процесса вторым уровнем (т.е. безотносительно первого уровня - прерывания и восстановления контекста с возвращением в контекст). Значит, стек выполняемого процесса в момент выполнения трапов должен быть в непереключаемой области (либо какие-то другие меры более заумные). Если эта область большая (как в Орионе-ПРО - 4 кб), то можно задействовать в ней несколько кусков под процессы и обойтись без копирования, но в ядре тогда нужно все обращения туда делать не по абсолютному адресу, а по индексу процесса, т.е. тоже снижение скорости пускай возможно и не такое большое. Если сохранять совместимость с Орионом(128/256/512), то там в непереключаемой области - максимум 1кб и остается только вариант с копированием. Как по мне, LDIR 800 байт (400 на включение нового контекста и 400 сохранение предыдущего) на каждое переключение контекстов - это не так уж и много, для того и разгоняют процы чтобы покрывать такие накладные расходы.
- - - Добавлено - - -
На MSX есть оба варианта (UZIX - работает само, FUZIX стартует из-под DOS). Потому что на самом деле это вопрос не "настоящестости" ОС, а теологии (т.е. веры и предпочтений). Никто не мешает мне например драйвер дисков и экрана затащить в ядро и стартовать ОС без CP/M (от которой я использую только загрузчик этих двух драйверов и сами драйверы). Только нафига? Они на асме (и на порядок более функциональные чем простетские дефолтные для UZIX/FUZIX), а ОС - на С, пишутся и отлаживаются обособленно. Пока отладка самой ОС не завершена, склеивать ужа и ежа, усложняя себе сборку и отладку - преждевременно.
Кстати, такой подход весьма распространен в бытовых и промышленных ОС, где есть первоначальный загрузчик-конфигуратор (по сути: маленькая ОС на отдельном разделе или в ПЗУ - для загрузки большой), после загрузки основной ОС не используемый. На вскидку: винда ранних версий (ранее 95), Open-VMS, AIX (и все ОС на базе Power OpenFirmware), IBM I/OS, да даже Linux OrangePI которым я сейчас играюсь - и тот грузит ядро и конфиги с FAT-раздела, а потом уже работает со вторым, линуксовым разделом где все основное лежит (FAT нужен только для загрузки ОС). Да взять тот же UEFI (т.е. большинство x86 серверов) - это что как не оно? На пару порядков посложнее чем CP/M.





Ответить с цитированием