OSDev
http://osdev.su/

взаимодействие между программами
http://osdev.su/viewtopic.php?f=6&t=809
Страница 1 из 1

Автор:  scuter [ 11 окт 2013, 13:07 ]
Заголовок сообщения:  взаимодействие между программами

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

Автор:  phantom-84 [ 11 окт 2013, 15:55 ]
Заголовок сообщения:  Re: взаимодействие между программами

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

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

Автор:  scuter [ 11 окт 2013, 17:14 ]
Заголовок сообщения:  Re: взаимодействие между программами

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

Автор:  phantom-84 [ 11 окт 2013, 21:21 ]
Заголовок сообщения:  Re: взаимодействие между программами

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

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

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