ВУЗ:
Составители:
81
После открытия очереди процесс может помещать в него сообще-
ния с помощью вызова msgsnd или читать сообщения с помощью вызова
msgrsv. Программист может влиять на то, как ОС будет обрабатывать
ситуацию, когда процесс пытается читать сообщения, которые еще не
поступили в очередь, то есть на синхронизацию процесса с данными.
Разделяемая память. Разделяемая память представляет собой сег-
мент физической памяти, отображенной в виртуальное адресное про-
странство двух или более процессов. Механизм разделяемой памяти
поддерживается подсистемой виртуальной памяти, которая настраивает
таблицы отображения адресов для процессов, запросивших разделение
памяти, так что одни и те же адреса некоторой области физической па-
мяти соответствуют виртуальным адресам разных процессов.
Для работы с разделяемой памятью используются четыре систем-
ных вызова:
shmget – создает новый сегмент разделяемой памяти или нахо-
дит существующий сегмент с тем же ключом;
shmat – подключает сегмент с указанным дескриптором к вирту-
альной памяти обращающегося процесса;
shmdt – отключает от виртуальной памяти ранее подключенный
к ней сегмент с указанным виртуальным адресом начала;
shmctl – служит для управления разнообразными параметрами,
связанными существующим сегментом.
После того как сегмент разделяемой памяти подключен к виртуаль-
ной памяти процесса, процесс может обращаться к соответствующим
элементам памяти с использованием обычных машинных команд чтения
и записи, не прибегая к дополнительным системным вызовам. Синтак-
сис системного вызова shmget выглядит следующим образом:
shmid = shmget ( key, size, flag );
Параметр size определяет желаемый размер сегмента в байтах. Да-
лее, если в таблице разделяемой памяти находится элемент, содержащий
заданный ключ, и права доступа не противоречат текущим характери-
стикам обращающегося процесса, то значением системного вызова яв-
ляется дескриптор существующего сегмента (и обратившийся процесс
так и не узнает реального размера сегмента, хотя впоследствии его мож-
но узнать с помощью системного вызова shmctl). В противном случае
создается новый сегмент, размер которого не меньше, чем установлен-
ный в системе минимальный размер сегмента разделяемой памяти, и не
больше, чем установленный максимальный размер. Создание сегмента
не означает немедленного выделения для него основной памяти. Это
действие откладывается до первого системного вызова подключения
сегмента к виртуальной памяти некоторого процесса. Аналогично, при
Страницы
- « первая
- ‹ предыдущая
- …
- 79
- 80
- 81
- 82
- 83
- …
- следующая ›
- последняя »
