>Я не в курсе как сделано там, но подозреваю что аналогично Z80
>- два банка регистров с возможностью быстрого переключения.Не, там покруче на пару порядков. Грубо говоря - это такой идеальный неймановец.Настолько идеальный что даже у general purpose регистров CPU есть ... адрес (да, это вам не х86). Крыша еще на хлопает в ладоши? Отлично, тогда вот в чем прикол: состояние проца по сути описывается указателем на адрес начала блока регистров. Думаю теперь понятно как контекст переключается 1 командой? Правильно - она тупо пишет 1 указатель, начало этого самого окна регистров. В итоге почти моментально можно перекинуть проц в какое-то другое состояние. И допустим у каждой задачи могут быть свои копии регистров :).Переключение по сути моментальное - перезапись 1 указателя спец. командой для этого и баста.Поэтому если есть 20 задач, можно прыгать между их 20 состояниями довольно просто и быстро. Лишь бы накристальной RAM для регистров хватало (ограничение только в том что это должна быть скоростная накристальная RAM успевающая за ядром, видимо немцев ломало городить сложную логику в довольно простом проце).
Не вижу проблем чуть доразвить эту идею и сделать по образу и подобию но с переключением привилегий и полного состояния CPU, буквально еще пара-тройка регистров к контексту (Program Counter, mode, flags, ...).Тогда проц мог бы спокойно прыгать между пачкой процессов и режимов характерных для микроядра за буквально время выполнения 1 команды пишущей указатель, т.е. несколько тактов. Если б кого приперло микроядра всерьез и много юзать - давно б сделали.
>Вот только есть одна небольшая проблема: данная методика работает только в
>случае когда у вас есть только две задачи,
О, я все больше убеждаюсь что шутка про некоторых, которые "unable to think big" не такая уж и шутка была :-).Некоторые, реально, unable - вы сами только что доказали, что видя решение для ДВУХ ЗАДАЧ вам слабо его же представить в случае когда вместо 2 будет N. А вот немцам оказалось не слабо - в конкретном железе при том.Немолодом весьма.Забавно, а?
>Если же мы хотим иметь больше процессов, тогда либо делаем как в i286+
>(выделяем отдельный TSS для сохранения контекста задачи), либо вводим
>жёсткое ограничение на кол-во аппаратно поддерживаемых контекстов.
Немцы в их добре наверное могли бы поддерживать сколько угодно наборов регистров, ограничиваясь только адресным пространством. По факту оно у них ограничено объемом накристальной RAM.И ничем более.Это явно не 2 задачи а, гм, довольно-таки неплохая кучка.
Если вспомнить про размер кешей у современных топовых CPU и предусмотреть на пиковый случай сброс добра в обычную оперативу (уже с потерей скорости ессно) можно понять что таким манером вполне реально очень быстро переключать контексты всех процессов и потоков в ОС. Если б кому зудело - давно б сделали уже. Просто всем и так хорошо - вот и не дергаются. Но в теории это не запрещается. И даже как видите на практике в минимальном варианте существовало, блин.
>контекст нужно проверить уровень привелегий, сохранить текущий контекст в медленную
>память
А что помешает присобачить резвую локальную память спецом под хранеение контекста, на манер немцев, если задаться такой целью? Немцы вон в простом виде вон смогли. И красиво так запихали это все в неймановскую архитектуру. Этакий абсолютизированный неймановец вышел, у которого даже регистры - адресуются.
>после этого можно передать управление коду.
Дык разговор вроде был не о том как все паршиво может быть (у какойнить унылой байды типа х86 уродца) а о том как в принципе можно было сделать если б задаться целью. Проц похожий на это (хоть и отдаленно) я даже показал.
>Теперь подумайте как это сделать за один такт и сколько времени он
>должен длиться.
Элементарно, Ватсон - это будет называться памятью на кристалле. Которая работает с частотами порядка частот проца по жизни (кэш, etc). Соответственно, при должном желании можно перебросить контекст за считанные такты. Длиться будет недолго. Ну, у немцев оно толи 1 толи 2 такта занимает. А фигли, 1 указатель перезаписать. Если задаться такой целью - не вижу проблем например сделать адресуемую накрсистальную память и адресовать указатели на нее пока есть место.Ну а в крайнем случае уже с оперативой дело иметь, но в реальной ОС при разумном ее юзеже этот крайний вообще никогда не настанет и нужно только для перестраховки (а вдруг юзер миллион процессов все-таки захочет запустить?!).
>Только вы забыли уточнить что ваш 80C167 как и Z80 имел в
>лучшем случае двух байтный буфер выбраных команд и поддерживал только плоскую
>модель памяти.
Это все не столь уж принципиально, т.к. буфером в случае накристальной памяти она может быть сама себе. В конечном итоге идею адресуемых регистров и переписку указателя можно вписать куда угодно. Хоть в отдельное адресное пространство или там куда еще. Вы размышляете с точки зрения "есть х86 говно, оно единственно возможное". А я размышляю с точки зрения создания проца под задачу, хорошо вписывающегося в нее. Просто по факту то что есть - неплохо работает, ну и влом всем придумывать хитрые велосипеды ради не особо очевидных выигрышей. Но если представить себя конструктором велосипедов... ;)
>Для такого простого проца сделать переключение банка в один такт - действительно
>очень просто.
Внимание, коронный вопрос: есть у нас накристальная память. Есть указатель, выбирающий в ней текущий блок регистров, описывающий состояние CPU. Чему там тормозить при переключении блоков регистров? Указатель перезаписат как бы быстро. После чего проц оказывается в совсем другом состоянии, т.к. его регистры одним взмахом содержат другой контекст. Я вижу только 1 проблему - чтобы не лимитить жестко число процессов, отлив в обычную память таки придется сделать, да. Но в обычной ситуации оно вообще юзаться не должно - этакая запасная фича, по аналогии с свопом :). И, собссно, зачем привязываться к тому как у х86 урода сделано? Можно ведь и иначе. Просто и изящно приделать это к новой архитектурке, заранее предусмотрев какойнить обработчик исключений по этому поводу, отливая в заведомо non-pageable память и прочая (да, читать контекст проца из свопа - не рулит как бы, ни разу! :D).
>Вы вообще что заканчивали то?
Институт для благородных девиц наверное :).А так - я уж не знаю что вы там заканчивали но вам это кажись помогло не очень сильно - думать своей головой и не полагаться на заранее существующий ответ (х86 и подобные) вас там кажется не научили.А это лучшее чему могут научить в приличном заведении, если что.