The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Линус Торвальдс: 'ядро стало раздутым и огромным'"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Присылайте удачные настройки в раздел примеров файлов конфигурации на WIKI.opennet.ru.
. "Линус Торвальдс: " –1 +/
Сообщение от User294 (ok), 24-Сен-09, 08:07 
>Я не в курсе как сделано там, но подозреваю что аналогично 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 и подобные) вас там кажется не научили.А это лучшее чему могут научить в приличном заведении, если что.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Линус Торвальдс: 'ядро стало раздутым и огромным', opennews, 22-Сен-09, 15:46  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру