OSDev
http://osdev.ru/

Ядро и процессы
http://osdev.ru/viewtopic.php?f=5&t=1107
Страница 1 из 1

Автор:  pavia [ 04 авг 2015, 22:28 ]
Заголовок сообщения:  Ядро и процессы

Такой вопрос.
Есть ядро в ядре есть массив структур процессов.
Процесс А хочет прочитать этот массив. Открыть процесс B и записать в него данные.
Проблема в том что пока процесс А будет читать массив он может измениться.
Какие варианты есть решения?
1) Можно заблокировать прерывания от таймера и прочитать этот массив. Но мне такой подход не нравится так как постоянное чтение повесит процессор.
2) Можно во время прерывания сделать копию. Получится отложенная обработка. ОС будет возвращать список не чаще чем сработает таймер.

Автор:  Bargest [ 04 авг 2015, 22:37 ]
Заголовок сообщения:  Re: Ядро и процессы

А если процессоров на устройстве несколько, то просто блокировка прерывания таймера не поможет. Второй же подход приведет к тому, что вероятно новосозданные процессы не будут доступны сразу после создания, и это придется править костылями.
На мой взгляд самое простое решение - запретить прерывание таймера, заблокировать массив spin-lockом, прочитать, найти нужный процесс, разблокировать массив, разрешить прерывание и работать уже с этим процессом.
Я делал иначе - обращения к процессам у меня идут как любые другие IO запросы через менеджер ввода-вывода. В то же время свич потоков другие процессы почти не затрагивает (берется только процесс следующего запланированного потока) и потому почти не пересекается с IO-менеджером. Да, это гораздо медленней, зато позволяет при занятости откладывать это чтение стандартными средствами (т.е. читать асинхронно) или снимать запросивший поток с планирования на время ожидания доступа и не жрать процессорное время пустым ожиданием семафора, а также автоматически разрешает конфликты при доступе, потому что весь доступ делается исключительно IO-менеджером и никем другим. Для меня скорость не очень важна - я не планирую, что работа с чужими процессами будет выполняться очень часто в моей ОС. Более того, она вообще будет максимально ограничена, а для большинства юзермодных процессов запрещена вовсе в целях безопасности, поскольку в пользовательских ОС, к коим относится моя хобби-ос, работа с чужим процессом обычному приложению не нужна.

Автор:  Yoda [ 05 авг 2015, 12:28 ]
Заголовок сообщения:  Re: Ядро и процессы

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

Автор:  pavia [ 05 авг 2015, 14:12 ]
Заголовок сообщения:  Re: Ядро и процессы

Защита она отдельно. Вопрос её не касается. Пользовательский процесс не имеет не посредственный доступ. Тут вопрос о синхронизации.
Если поставить барьер. То отвалится переключатель процессов. Либо обрабатывать запрос только во время переключения.
Конечно есть вызов ядра где блокируются прерывания до обработки этого вызова. Так называемый синхронный вызов. Но пока этот вариант мне не нравится. Так как блокирует всю систему.
Можно складировать запросы в очередь и их обрабатывать.

Автор:  pavia [ 10 авг 2015, 10:41 ]
Заголовок сообщения:  Re: Ядро и процессы

Всё оказалось немого иначе чем думал. Я не занимался блокировками и синхронизацией.И хотел это дело отложить на потом. Но не выходит. И пора заняться ими.
На данный момент буду прорабатывать событийную модель и WaitEvent и WaitMultyEvents

Автор:  pavia [ 11 авг 2015, 22:59 ]
Заголовок сообщения:  Re: Ядро и процессы

А кто как тестирует параллельный код? И стоит ли для этого писать эмулятор, виртуализатор?

Автор:  panotnap [ 15 авг 2015, 18:30 ]
Заголовок сообщения:  Re: Ядро и процессы

А в массиве структур процессов что хранится?

Автор:  pavia [ 15 авг 2015, 20:11 ]
Заголовок сообщения:  Re: Ядро и процессы

Описание процесса и его состояние. Пока что детально этот вопрос не прорабатывался. Тут так что в конечном счёте получится, то получится. В процессе развития эта структура будет меняться. А в конце зафиксирую результат.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/