Архитектура операционной системы 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 След. >|

Java книги

Контакты: [email protected]