singlepost

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Страницы: [1] 2 3 4 »

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Страницы: [1] 2 3 4 »

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