Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
272 из 715
5 Копирование данных между адресным пространством системы и адресным пространством задачи
До сих пор речь шла о том, что процесс выполняетсяв режиме ядра или в режиме задачи без каких-либо перекрытий (пересечений) между режимами. Однако, при выполнении большинства системных функций, рассмотренных в последней главе, между пространством ядра и пространством задачи осуществляется пересылка данных, например, когда идет копирование параметров вызываемой функции из пространства задачи в пространство ядра или когда производится передача данных из буферов ввода-вывода в процессе выполнения функции read. На многих машинах ядро системы может непосредственно ссылаться на адреса, принадлежащие адресному пространству задачи. Ядро должно убедиться в том, что адрес, по которому производится запись или считывание, доступен, как будто бы работа ведется в режиме задачи; в противном случае произошло бы нарушение стандартных методов защиты и ядро, пусть неумышленно, стало бы обращаться к адресам, которые находятся за пределами адресного пространства задачи (и, возможно, принадлежат структурам данных ядра). Поэтому передача данных между пространством ядра и пространством задачи является «дорогим предприятием», требующим для своей реализации нескольких команд.
fubyte: # пересылка байта из пространства задачи
prober $3, $1, *4(ap) # байт доступен?
beql eret # нет
movzbl *4(ap), r0
ret
eret:
mnegl $1, r0 # возврат ошибки (-1)
ret
Рисунок 6.17. Пересылка данных из пространства задачи в пространство ядра в системе VAX
На Рисунке 6.
|< Пред. 270 271 272 273 274 След. >|