Войти
ПрограммированиеФорумОбщее

Как обрабатываются функции обработки сообщений от ОС

#0
18:14, 22 янв. 2011

Всем доброго вечера!

Хочу поговорить про обработку сообщений от операционной системы Windows именно на уровне работы процессора.

Мы операционной системе сообщаем адрес функции, которая будет выполняться при получении сообщения для данной программы. Все события крутятся вокруг операционной системы. То есть во время их обработки, анализа или ещё чего-то, операционная система приостанавливает выполнение программы и процессор возится именно с ядром ОС. И вот ОС определила какой программе предназначено сообщение и что дальше:

а) Выполняется указанная функция обработки сообщений программы за счёт времени ядра ОС с привилегиями программы

б) Выполняется указанная функция обработки сообщений программы за счёт времени самой программы и естественно с привилегиями программы

Какой из вариантов?


#1
18:23, 22 янв. 2011

Всё выглядит как будто (б), но на самом деле не (а) и не (б).
Чтобы разобраться нужно ознакомится с  М. Руссинович, Д. Соломон "Внутреннее устройство Microsoft Windows 2000/XP/2003 Server"

#2
18:26, 22 янв. 2011

v_over
А если вкратце, то как?

#3
18:32, 22 янв. 2011

См. таблицу методов IPC - http://ru.wikipedia.org/wiki/Межпроцессное_взаимодействие

ЗЫ.
Обрати внимание на "Сигналы"

#4
19:12, 22 янв. 2011

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

#5
19:43, 22 янв. 2011

s3dworld
> Хочу поговорить про обработку сообщений от операционной системы Windows именно
> на уровне работы процессора.

да какие-то там команды процессора крутятся :) или ты про то как системный вызов происходит на ring0 ?

#6
20:08, 22 янв. 2011

innuendo
> да какие-то там команды процессора крутятся :) или ты про то как системный вызов происходит на ring0 ?
Я про то, что вот у нас в системе запущено много программ. Для каждой отводится определённое процессорное время. Ядро ОС это тоже программа, которая начинает работать когда срабатывает таймер, когда заканчивается процессорное время программы и когда происходит прерывание. То есть когда ядро начинает работать, все остальные программы спят. И вот именно ядро анализирует сообщения и определяет какой программе их послать. Оно определило какой программе, определила адрес функции. И теперь что делает ядро, чтобы функция программы отработала?

#7
20:21, 22 янв. 2011

читай про многозадачность на sysbin.com и osdev.ru... там есть треды об этом...

#8
20:23, 22 янв. 2011

s3dworld
определенно за счёт времени самой программы, программы часто состоят из одной обработки сообщений

#9
23:41, 22 янв. 2011

http://www.kernel.org/ - качать и разбирать.

#10
0:30, 23 янв. 2011

http://www.ozon.ru/context/detail/id/3092042/

читать@разбирать

#11
12:39, 23 янв. 2011

s3dworld
> Оно определило какой программе, определила адрес функции. И теперь что делает
> ядро, чтобы функция программы отработала?
Модифицирует контекст, так чтобы при переключении на него процесс начал выполнять нужную функцию. Ну и еще надо позаботится о том чтобы по выходу из этой функции восстановился истинный контекст, который был до этого callback, простого ret будет недостаточно. Это похоже на софт реализацию прерывания.

#12
13:45, 24 янв. 2011

s3dworld
> То есть когда ядро начинает работать, все остальные программы спят.

я бы даже сказал - недосыпают :)

ПрограммированиеФорумОбщее

Тема в архиве.