OSDev

для всех
Текущее время: 16 авг 2018, 03:09

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Ядро и процессы
СообщениеДобавлено: 04 авг 2015, 22:28 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ядро и процессы
СообщениеДобавлено: 04 авг 2015, 22:37 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ядро и процессы
СообщениеДобавлено: 05 авг 2015, 12:28 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 945
Откуда: Дагоба
1. Пользовательский процесс не должен иметь непосредственный доступ к данным ядра.
2. Традиционно этот вопрос решается так. Сначала процесс А устанавливает связь с процессом В через системный вызов, затем обменивается данными либо через механизм посылки сообщений, либо через совместно используемую память с блокировками.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ядро и процессы
СообщениеДобавлено: 05 авг 2015, 14:12 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ядро и процессы
СообщениеДобавлено: 10 авг 2015, 10:41 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
Всё оказалось немого иначе чем думал. Я не занимался блокировками и синхронизацией.И хотел это дело отложить на потом. Но не выходит. И пора заняться ими.
На данный момент буду прорабатывать событийную модель и WaitEvent и WaitMultyEvents


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ядро и процессы
СообщениеДобавлено: 11 авг 2015, 22:59 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
А кто как тестирует параллельный код? И стоит ли для этого писать эмулятор, виртуализатор?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ядро и процессы
СообщениеДобавлено: 15 авг 2015, 18:30 

Зарегистрирован: 28 окт 2014, 10:41
Сообщения: 31
А в массиве структур процессов что хранится?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ядро и процессы
СообщениеДобавлено: 15 авг 2015, 20:11 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
Описание процесса и его состояние. Пока что детально этот вопрос не прорабатывался. Тут так что в конечном счёте получится, то получится. В процессе развития эта структура будет меняться. А в конце зафиксирую результат.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB