singlepost

Операционная система. Методы взаимодействия процессов и устройство ядра. << На главную или назад  

Итак, начну. Только не смейтесь. Я задумал ось…
Она обладает модульной структурой, т. е. в режиме ядра исполняется только ядро и несколько жизненно важных процессов. Все драйверы и пользовательские программы работают в режиме пользователя с минимальными аппаратными привилегиями (защищенный режим x86).

Для общения между собой процессы используют передачу сообщений. Сообщение может передаваться только по специальным шинам, которые обслуживаются ядром.

Шины бывают четырех типов:

1. Адресная, она же системная. При передаче сообщений используется PID процесса-потомка, так как разрешено посылать их можно только в одну сторону.

2. Коллекторная. Все сообщения, передаваемые по этой шине, получает только процесс, создавший шину.

3. Распределенная. Сообщение получают все, кто подключен к шине – одновременно.

4. Конкурентная. Сообщение посылается первому попавшемуся свободному процессу, подключенному к шине.

Сообщения бывают двух типов:

а) блокирующее, когда отправитель блокируется в ожидании ответа и
б) уведомление – неблокирующее сообщение.

Если послать уведомление занятому процессу, оно просто проигнорируется и пропадет.

Любой процесс должен ответить на сообщение. Если этого не произойдет, система сама сформирует стандартный ответ.

Я считаю, что все эти ограничения могут защитить от взаимного блокирования процессов и, следовательно, снижают риск зависания.

А саму передачу можно организовать так:

а) методом "рандеву" (я думаю, все знают, что это);
б) или создать вытесняемое ядро, как в QNX. Т. е. ядро вызывает предварительно зарегистрированную процессом функцию-обработчик, при этом разрешив все прерывания. Выход из функции передает управление прерванному вызову ядра и все прерывания тут же запрещаются.

110 ответов в теме “Операционная система. Методы взаимодействия процессов и устройство ядра.”

  1. 33
    Константин Смотритель ответил:

    Владимир, +1000

  2. 32
    Владимир Литвинов ответил:

    Не понятно зачем изобретать велосипед с квадратными колесами ))) Если только ради интереса. Есть Minix Танненбаума, на его основе можно понять принципы работы ОС :) Я всегда считал что цель программиста минимизировать трудозатраты, а не создавать новые ))

    P.S. Лично мое мнение, интересно выслушать остальные ))

  3. 31
    Vitaly Ch ответил:

    приходилось мне таким заниматся

    лучше присоеденитесь к проэкту JariOS

  4. 30
    Vitaly Ch ответил:

    > Кольцо-0 – это максимальные привилегии – "делай с компом что хочешь!" ))))

    это не максимальная привилегия – в отдельных процах бывают более высокие привилегии …

  5. 29
    Леонид Максимов ответил:

    #28 тут, конечно, все программисты. адрес группы, о которой шла речь: //vkontakte.ru/club10083088

  6. 28
    Нгамдкхе Кверос ответил:

    Ilya Echoes Burakov
    да-да, я и говорю что сейчас всё делается так, сам под линуксом с некоторыми девайсами без драйвера работаю напрямую по портам (типо воч дога, чего фигнёй страдать а не вставить прям в прогу контроля зависших процессов немного асма). это я критиковал систему "посылает команды в ядро, а ядро их выполняет", и это на каждую операцию ввода вывода в порт, страшно подумать что это может получиться…

  7. 27
    Александр Васюченко ответил:

    #23 Значит в неё надо вступить, если хотите конечно.

  8. 26
    Ilya Burakov ответил:

    Карта портов меняется 2 раза: при запросе ресурса и при его освобождении, сколько же между этими двумя вызовами произойдет операций ввода-вывода систему не волнует

  9. 25
    Нгамдкхе Кверос ответил:

    вобще в 86 сейчас 4 кольца защиты, но я их не помню потому как обычно всё работает или в нулевом или третьем, qnx вроде больше использовал, но точно не помню, давно вгрызался.

    напрягать ядро по каждой попытке записать в порт??? это будет не драйвер, часть оборудования просто не заработает(слишком большие паузы), а другая будет так тормозить, вы представьте это же для допустим считывания из порта данных и записать обратно увеличеное на 1, вместо трёх асмовских операций(ну да, самые тормозные тут in и out так что инкриментом можно пренебречь), процу придётся 2 раза выгружать контекст выполняемого процесса и загружать его обратно, плюс ко всему ещё логика ядра несколько инструкций на всю эту вакханалию… да у вас ракетное топливо кончится ещё до того как вы все датчики опросите.

    да обычно расшариваются в карте доступных процессу портов ввода-вывода и всё, остальное он честно делает сам. блокировка прерываний это хуже, в qnx за такое руки отрывают. по возможности нужно этого избегать, но избежать этого совсем – для работы с некоторым оборудованием нельзя.

    Нет. ну а самое то главное, в чём эта система стабильней нынешних если она тупо будет выполнять все команды драйвера ?

    лучше бы написал просто программу которая рассылала многим процессам сообщения если тебе это так актуально с подпиской кому они надо а кому нет.

  10. 24
    Ilya Burakov ответил:

    Видимо, имеется ввиду, что сообщение становится доступным для всех процессов одновременно, а не то, что они прочитают его без задержек относительно друг друга.

  11. 23
    Леонид Максимов ответил:

    мне вот что не понятно:

    > 3. Распределенная. Сообщение получают все, кто подключен к шине – одновременно.

    как это возможно в x86?

  12. 22
    Николай Труфанов ответил:

    2Александр – группа закрытая => нет прав на просмотр.

  13. 21
    Александр Васюченко ответил:

    #15 Какой подвох?
    Я просто увидел эту тему и подумал может вам будет интересно принять там участие

  14. 20
    Расул Фазлыев ответил:

    Fuf, ну понятно. Я пойду, мне идти пора, вы пока пообсуждайте, я еще появлюсь.

  15. 19
    Сергей Романов ответил:

    А во вопрос как будут обстаять дела с поддержкой приложений, поддержкой драйверов( понимаю, что об этом пока говорить рано, но мысли какие – то есть наверное)

  16. 18
    Сергей Романов ответил:

    Возможен ли вариант с чётким выделеним памяти, чтобы каждый процесс использовал определённое число ресурсов, таким образов взяв под контроль "скрытые" процессы или нежелательные

  17. 17
    Расул Фазлыев ответил:

    2 Ilya
    Правда? И в каком виде ресурсы предоставляются? Временным повышением привилегий? Погоди, было что-то такое в Миниксе – level0 вызов назывался, по-моему.

  18. 16
    Ilya Burakov ответил:

    Не повышением привилегий, а подключением страницы в его PageDirectory, к примеру, или установкой соответствующего бита на карте портов ввода-вывода.

  19. 15
    Сергей Романов ответил:

    ну теперь понятно, спасибо:)

  20. 14
    Расул Фазлыев ответил:

    2 Александр Васюченко
    >>> Расул, вам наверно будет интересно принять участие в этом проекте:
    //vkontakte.ru/topic-10083088_21581385

    А в чем подвох?

  21. 13
    Ilya Burakov ответил:

    Расул Фазлыев, это происходит немного не так, как вы описали. Драйвер не диктует, а просит ресурс у системы на некоторое время.

  22. 12
    Расул Фазлыев ответил:

    Кольцо-0 – это максимальные привилегии – "делай с компом что хочешь!" )))) Там система сидит. Пользовательские программы – в кольце-3

  23. 11
    Сергей Романов ответил:

    Это я знаю, но мне всегда казалось, что драйвера "живут" в Нулевом кольце?

  24. 10
    Ilya Burakov ответил:

    К примеру, микроядро Mach предоставляет следующие абстракции: задачи, потоки, объекты памяти, порты и сообщения. Все! Этого достаточно, чтобы построить на их базе полноценную операционную систему лишь с помощью тех частей, которые будут работать в пользовательском режиме
    [ (с) Lonesome ]

  25. 9
    Расул Фазлыев ответил:

    Ну, драйвер вызывает ядро и диктует, что нужно делать, а ядро за него все и делает, совершенно не понимая, зачем драйверу это нужно.

  26. 8
    Александр Васюченко ответил:

    Расул, вам наверно будет интересно принять участие в этом проекте:
    //vkontakte.ru/topic-10083088_21581385

  27. 7
    Расул Фазлыев ответил:

    2. Это специальные таблицы или списки внутри ядра. Ядро просто проверяет возможность посылки сообщения и копирует его из одного буфера в другой. Потом запускает программу-получатель.

    А ограничивается доступ к портам, к памяти и к специальным командам процессора, которые может использовать только ядро.

  28. 6
    Сергей Романов ответил:

    Линукс, вроде как монолитная система(если только я ничего не путаю), ядро там же современное.
    Ilya Echoes Burakov, тогда вопрос, а на ring – 0 что работает?(скорее всего я что – то перепутал)

  29. 5
    Расул Фазлыев ответил:

    Кстати монолитный MINIX 1 ( или 2 – не помню) – прямой предок Linux. Линус просто чуть изменил миниксовое ядро и добавил несколько вещей).

    А Миникс 3 уже микроядерный.

  30. 4
    Ilya Burakov ответил:

    Сергей Романов, современное ядро (не монолитное) должно работать именно так: драйвера на уровне пользователя.

  31. 3
    Сергей Романов ответил:

    Ну всё – таки я всё – равно пока слабо представляю, как можно драйверам дать пользовательски уровень:) Ну да ладно..

    2. как будет реализована эта сущность? Ведь таких просьб будет очень много

    Ограничения прав в чем? Пока же нет самой системы, поэтому и прав нет:)
    Хотелось бы узнать, какие права будут ограничиаться и кому

    Ну пока сложно сказать, что будет снижать риск зависаний, а что нет. Вот когда будет готова, тогда и посмотрим:)) но хотя мне кажется, что если по каждому поводу посылать сообщения процессу, то на это уйдёт много ресурсов. Да и главное всё сделать нормально, тогда и зависаний меньше будет:)

  32. 2
    Расул Фазлыев ответил:

    2 Сергей Uranium Романов:

    1. Идея с драйверами взята из MINIX 3, где запись в порты производит система по просьбе драйвера.

    2. Ну, ядро по просьбе программы создает некую сущность, с помощью которой передаются сообщения – канал.

    3. Не задумывался.

    А минимальные привилегии – это максимальное ограничение в правах, насколько я помню.

    А как считаете, поможет против зависаний (исключая вариант с млн сообщений)?

  33. 1
    Сергей Романов ответил:

    1. Интересно, как драйвера будут в режиме пользователя работать?
    2. Не совсем понятна фраза "Сообщение может передаваться только по специальным шинам, которые обслуживаются ядром."
    3. "Любой процесс должен ответить на сообщение. Если этого не произойдет, система сама сформирует стандартный ответ." – интересно, а если таких сообщений послать миллионов 100, процесс или система тоже ответят?
    Если всё будет работать с минимальными аппаратными прив. то получается любое стороннее приложение, сможет получить доступ к любому приложению на системе?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.