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 Также у драйверов есть возможность цеплять обработчики ко входам IDT 61h-0FFh, но это рекомендуется использовать только для очень специфических целей (эмуляция ABI других систем и т.п.) - ядро не занимается диспетчеризацией обращений к таким обработчикам.mov edi,[dev] ... ; другие параметры int 60h Что касается обращения к службам со стороны прикладных программ, то здесь используются абсолютно такие же механизмы, что и между прикладными программами (в их основе лежит разделение памяти и синхронизация между процессами). |
Автор: | 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/ |