Операционные системы. Теория и практика. Замятин А.В. - 82 стр.

UptoLike

Составители: 

82
выполнении последнего системного вызова отключения сегмента от
виртуальной памяти соответствующая основная память освобождается.
Подключение сегмента к виртуальной памяти выполняется путем
обращения к системному вызову shmat:
virtaddr = shmat ( id, addr, flags ).
Здесь id ранее полученный дескриптор сегмента, addr требуе-
мый процессу виртуальный адрес, который должен соответствовать
началу сегмента в виртуальной памяти. Значением системного вызова
является реальный виртуальный адрес начала сегмента го значение не
обязательно совпадает со значением параметра addr). Если значением
addr является нуль, ядро выбирает подходящий виртуальный адрес
начала сегмента.
Для отключения сегмента от виртуальной памяти используется си-
стемный вызов shmdt:
shmdt ( addr ),
где addr виртуальный адрес начала сегмента в виртуальной памяти,
ранее полученный с помощью системного вызова shmat. При этом си-
стема гарантирует (опираясь на данные таблицы сегментов процесса),
что указанный виртуальный адрес действительно является адресом
начала разделяемого сегмента в виртуальной памяти данного процесса.
Для управления памятью служит системный вызов shmctl:
shmctl ( id, cmd, shsstatbuf ).
Параметр cmd идентифицирует требуемое конкретное действие, то
есть ту или иную функцию. Наиболее важной является функция уни-
чтожения сегмента разделяемой памяти, которое производится следую-
щим образом. Если к моменту выполнения системного вызова ни один
процесс не подключил сегмент к своей виртуальной памяти, то основная
память, занимаемая сегментом, освобождается, а соответствующий эле-
мент таблицы разделяемых сегментов объявляется свободным. В про-
тивном случае в элементе таблицы сегментов выставляется флаг, запре-
щающий выполнение системного вызова shmget по отношению к этому
сегменту, но процессам, успевшим получить дескриптор сегмента, по-
прежнему разрешается подключать сегмент к своей виртуальной памя-
ти. При выполнении последнего системного вызова отключения сегмен-
та от виртуальной памяти операция уничтожения сегмента завершается.
3.4 Вопросы для самопроверки
1. Чем характеризуется мультипрограммирование в современных
ОС?