OSDev

для всех
Текущее время: 27 апр 2024, 22:22

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 11 окт 2013, 13:07 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
мне надо осуществить взаимодействие между программами, только как вот это сделать не могу догадаться,
есть к примеру драйвер к нему идут запросы от сервисных программ а к сервисам идут запросы от обычных программ,
так вот как лучше осуществить такое взаимодействие.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 окт 2013, 15:55 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Все зависит от архитектуры, но в принципе все механизмы известны. У меня обращение к драйверам режима ядра выполняется точно так же, как к самому ядру, только с использованием абстракции "виртуальное устройство" (я это называю обращением к функциям вирт. устройства). Например:
Код:
mov esi,SI_DEVICEIO0
mov edi,[dev]
... ; другие параметры
int 60h
Также у драйверов есть возможность цеплять обработчики ко входам IDT 61h-0FFh, но это рекомендуется использовать только для очень специфических целей (эмуляция ABI других систем и т.п.) - ядро не занимается диспетчеризацией обращений к таким обработчикам.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 окт 2013, 17:14 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
то есть всё взаимодействие происходит через прерывания и через syscall происходит прикрепление к IDT селектора, а когда к драйверу обращается несколько программ и этот драйвер включает ожидание и ожидает ответа со стороны устройства, к тому же как происходит передача данных, от одно к другой.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 окт 2013, 21:21 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Весь системный сервис висит на одном программном прерывании int 60h. Это относится и к функциям виртуальных устройств - функции всех устройств отображаются на один и тот же диапазон системных функций DeviceIO0-DeviceIO15 и выбираются по номеру устройства. Все устройства регистрируются в таблице вирт. устройств, в которую заносятся адреса обработчиков их функций. Ядро упорядочивает запросы к функциям вирт. устройств, предотвращая повторную входимость и циклические вызовы.

Что касается передачи данных между службами и приложениями, то мне больше всего нравятся receive/send/reply для коротких сообщений и lockread/unlockread/lockwrite/unlockwrite для больших порций данных через разделяемые буферы (помимо самих буферов здесь используются т.н. мьютексы/бинарные семафоры чтения-записи). Почитай про механизмы IPC, информации полно.


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

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


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

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


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

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