Итак, начну. Только не смейтесь. Я задумал ось…
Она обладает модульной структурой, т. е. в режиме ядра исполняется только ядро и несколько жизненно важных процессов. Все драйверы и пользовательские программы работают в режиме пользователя с минимальными аппаратными привилегиями (защищенный режим x86).
Для общения между собой процессы используют передачу сообщений. Сообщение может передаваться только по специальным шинам, которые обслуживаются ядром.
Шины бывают четырех типов:
1. Адресная, она же системная. При передаче сообщений используется PID процесса-потомка, так как разрешено посылать их можно только в одну сторону.
2. Коллекторная. Все сообщения, передаваемые по этой шине, получает только процесс, создавший шину.
3. Распределенная. Сообщение получают все, кто подключен к шине – одновременно.
4. Конкурентная. Сообщение посылается первому попавшемуся свободному процессу, подключенному к шине.
Сообщения бывают двух типов:
а) блокирующее, когда отправитель блокируется в ожидании ответа и
б) уведомление – неблокирующее сообщение.
Если послать уведомление занятому процессу, оно просто проигнорируется и пропадет.
Любой процесс должен ответить на сообщение. Если этого не произойдет, система сама сформирует стандартный ответ.
Я считаю, что все эти ограничения могут защитить от взаимного блокирования процессов и, следовательно, снижают риск зависания.
А саму передачу можно организовать так:
а) методом "рандеву" (я думаю, все знают, что это);
б) или создать вытесняемое ядро, как в QNX. Т. е. ядро вызывает предварительно зарегистрированную процессом функцию-обработчик, при этом разрешив все прерывания. Выход из функции передает управление прерванному вызову ядра и все прерывания тут же запрещаются.
30 сентября 2009 в 2:02
Владимир, +1000
29 сентября 2009 в 7:04
Не понятно зачем изобретать велосипед с квадратными колесами ))) Если только ради интереса. Есть Minix Танненбаума, на его основе можно понять принципы работы ОС Я всегда считал что цель программиста минимизировать трудозатраты, а не создавать новые ))
P.S. Лично мое мнение, интересно выслушать остальные ))
9 сентября 2009 в 17:00
приходилось мне таким заниматся
лучше присоеденитесь к проэкту JariOS
9 сентября 2009 в 17:00
> Кольцо-0 – это максимальные привилегии – "делай с компом что хочешь!" ))))
это не максимальная привилегия – в отдельных процах бывают более высокие привилегии …
31 июля 2009 в 22:04
#28 тут, конечно, все программисты. адрес группы, о которой шла речь: //vkontakte.ru/club10083088
31 июля 2009 в 18:02
Ilya Echoes Burakov
да-да, я и говорю что сейчас всё делается так, сам под линуксом с некоторыми девайсами без драйвера работаю напрямую по портам (типо воч дога, чего фигнёй страдать а не вставить прям в прогу контроля зависших процессов немного асма). это я критиковал систему "посылает команды в ядро, а ядро их выполняет", и это на каждую операцию ввода вывода в порт, страшно подумать что это может получиться…
31 июля 2009 в 17:01
#23 Значит в неё надо вступить, если хотите конечно.
31 июля 2009 в 16:03
Карта портов меняется 2 раза: при запросе ресурса и при его освобождении, сколько же между этими двумя вызовами произойдет операций ввода-вывода систему не волнует
31 июля 2009 в 14:02
вобще в 86 сейчас 4 кольца защиты, но я их не помню потому как обычно всё работает или в нулевом или третьем, qnx вроде больше использовал, но точно не помню, давно вгрызался.
напрягать ядро по каждой попытке записать в порт??? это будет не драйвер, часть оборудования просто не заработает(слишком большие паузы), а другая будет так тормозить, вы представьте это же для допустим считывания из порта данных и записать обратно увеличеное на 1, вместо трёх асмовских операций(ну да, самые тормозные тут in и out так что инкриментом можно пренебречь), процу придётся 2 раза выгружать контекст выполняемого процесса и загружать его обратно, плюс ко всему ещё логика ядра несколько инструкций на всю эту вакханалию… да у вас ракетное топливо кончится ещё до того как вы все датчики опросите.
да обычно расшариваются в карте доступных процессу портов ввода-вывода и всё, остальное он честно делает сам. блокировка прерываний это хуже, в qnx за такое руки отрывают. по возможности нужно этого избегать, но избежать этого совсем – для работы с некоторым оборудованием нельзя.
Нет. ну а самое то главное, в чём эта система стабильней нынешних если она тупо будет выполнять все команды драйвера ?
лучше бы написал просто программу которая рассылала многим процессам сообщения если тебе это так актуально с подпиской кому они надо а кому нет.
31 июля 2009 в 6:05
Видимо, имеется ввиду, что сообщение становится доступным для всех процессов одновременно, а не то, что они прочитают его без задержек относительно друг друга.
31 июля 2009 в 5:02
мне вот что не понятно:
> 3. Распределенная. Сообщение получают все, кто подключен к шине – одновременно.
как это возможно в x86?
30 июля 2009 в 23:05
2Александр – группа закрытая => нет прав на просмотр.
30 июля 2009 в 20:01
#15 Какой подвох?
Я просто увидел эту тему и подумал может вам будет интересно принять там участие
30 июля 2009 в 19:02
Fuf, ну понятно. Я пойду, мне идти пора, вы пока пообсуждайте, я еще появлюсь.
30 июля 2009 в 19:02
А во вопрос как будут обстаять дела с поддержкой приложений, поддержкой драйверов( понимаю, что об этом пока говорить рано, но мысли какие – то есть наверное)
30 июля 2009 в 19:01
Возможен ли вариант с чётким выделеним памяти, чтобы каждый процесс использовал определённое число ресурсов, таким образов взяв под контроль "скрытые" процессы или нежелательные
30 июля 2009 в 19:01
2 Ilya
Правда? И в каком виде ресурсы предоставляются? Временным повышением привилегий? Погоди, было что-то такое в Миниксе – level0 вызов назывался, по-моему.
30 июля 2009 в 19:01
Не повышением привилегий, а подключением страницы в его PageDirectory, к примеру, или установкой соответствующего бита на карте портов ввода-вывода.
30 июля 2009 в 19:00
ну теперь понятно, спасибо:)
30 июля 2009 в 19:00
2 Александр Васюченко
>>> Расул, вам наверно будет интересно принять участие в этом проекте:
//vkontakte.ru/topic-10083088_21581385
А в чем подвох?
30 июля 2009 в 19:00
Расул Фазлыев, это происходит немного не так, как вы описали. Драйвер не диктует, а просит ресурс у системы на некоторое время.
30 июля 2009 в 18:05
Кольцо-0 – это максимальные привилегии – "делай с компом что хочешь!" )))) Там система сидит. Пользовательские программы – в кольце-3
30 июля 2009 в 18:05
Это я знаю, но мне всегда казалось, что драйвера "живут" в Нулевом кольце?
30 июля 2009 в 18:05
К примеру, микроядро Mach предоставляет следующие абстракции: задачи, потоки, объекты памяти, порты и сообщения. Все! Этого достаточно, чтобы построить на их базе полноценную операционную систему лишь с помощью тех частей, которые будут работать в пользовательском режиме
[ (с) Lonesome ]
30 июля 2009 в 18:05
Ну, драйвер вызывает ядро и диктует, что нужно делать, а ядро за него все и делает, совершенно не понимая, зачем драйверу это нужно.
30 июля 2009 в 18:04
Расул, вам наверно будет интересно принять участие в этом проекте:
//vkontakte.ru/topic-10083088_21581385
30 июля 2009 в 18:04
2. Это специальные таблицы или списки внутри ядра. Ядро просто проверяет возможность посылки сообщения и копирует его из одного буфера в другой. Потом запускает программу-получатель.
А ограничивается доступ к портам, к памяти и к специальным командам процессора, которые может использовать только ядро.
30 июля 2009 в 18:04
Линукс, вроде как монолитная система(если только я ничего не путаю), ядро там же современное.
Ilya Echoes Burakov, тогда вопрос, а на ring – 0 что работает?(скорее всего я что – то перепутал)
30 июля 2009 в 18:04
Кстати монолитный MINIX 1 ( или 2 – не помню) – прямой предок Linux. Линус просто чуть изменил миниксовое ядро и добавил несколько вещей).
А Миникс 3 уже микроядерный.
30 июля 2009 в 18:02
Сергей Романов, современное ядро (не монолитное) должно работать именно так: драйвера на уровне пользователя.
30 июля 2009 в 18:01
Ну всё – таки я всё – равно пока слабо представляю, как можно драйверам дать пользовательски уровень:) Ну да ладно..
2. как будет реализована эта сущность? Ведь таких просьб будет очень много
Ограничения прав в чем? Пока же нет самой системы, поэтому и прав нет:)
Хотелось бы узнать, какие права будут ограничиаться и кому
Ну пока сложно сказать, что будет снижать риск зависаний, а что нет. Вот когда будет готова, тогда и посмотрим:)) но хотя мне кажется, что если по каждому поводу посылать сообщения процессу, то на это уйдёт много ресурсов. Да и главное всё сделать нормально, тогда и зависаний меньше будет:)
30 июля 2009 в 18:00
2 Сергей Uranium Романов:
1. Идея с драйверами взята из MINIX 3, где запись в порты производит система по просьбе драйвера.
2. Ну, ядро по просьбе программы создает некую сущность, с помощью которой передаются сообщения – канал.
3. Не задумывался.
А минимальные привилегии – это максимальное ограничение в правах, насколько я помню.
А как считаете, поможет против зависаний (исключая вариант с млн сообщений)?
30 июля 2009 в 17:05
1. Интересно, как драйвера будут в режиме пользователя работать?
2. Не совсем понятна фраза "Сообщение может передаваться только по специальным шинам, которые обслуживаются ядром."
3. "Любой процесс должен ответить на сообщение. Если этого не произойдет, система сама сформирует стандартный ответ." – интересно, а если таких сообщений послать миллионов 100, процесс или система тоже ответят?
Если всё будет работать с минимальными аппаратными прив. то получается любое стороннее приложение, сможет получить доступ к любому приложению на системе?