
- •3 Управление памятью
- •3.1 Функции ос по управлению памятью
- •3.2 Общие замечания
- •3.3 Алгоритмы распределения памяти
- •3.2.1 Распределение памяти фиксированными разделами
- •3.3.2 Распределение памяти динамическими разделами
- •3.3.3 Перемещаемые разделы
- •3.3.4 Страничное распределение
- •3.3.5 Сегментное распределение памяти
- •3.3.6 Сегментно-страничное распределение
- •3.3.7 Разделяемые сегменты памяти
3.3.7 Разделяемые сегменты памяти
Подсистема виртуальной памяти представляет собой удобный механизм для решения задачи совместного доступа нескольких процессов к одному и тому же сегменту памяти, который в этом случае называется разделяемой памятью.
Для организации разделяемого сегмента достаточно поместить его в виртуальное адресное пространство каждого процесса, которому нужен доступ к данному сегменту, а затем настроить параметры отображения этих виртуальных сегментов так, чтобы они соответствовали одной и той же области оперативной памяти. В этом случае разделяемый сегмент помещается в индивидуальную часть виртуального адресного пространства каждого процесса и описывается в каждом процессе индивидуальным дескриптором сегмента. Возможно другое решение задачи – помещение единственного разделяемого виртуального сегмента в общую часть виртуального адресного пространства процессов, то есть в ту часть, которая обычно используется для модулей ОС.
Для того, чтобы отличать разделяемые сегменты памяти от индивидуальных, дескриптор сегмента должен содержать поле, имеющее два значения: разделяемый или индивидуальный.
Разделяемые сегменты могут создаваться как по явному запросу, так и по умолчанию. В первом случае прикладной процесс должен выполнить соответствующий системный вызов, по которому ОС создает новый сегмент с указанными в вызове параметрами: размером сегмента, разрешенными над ним операциями и идентификатором. Все процессы, выполнившие подобные вызовы с одним и тем же идентификатором, получают доступ к этому сегменту. Кроме того, ОС сама может в определенных ситуациях принять решение о создании разделяемого сегмента.
Разделяемые сегменты выгружаются на диск системой виртуальной памяти по тем же алгоритмам и с помощью тех же механизмов, что и индивидуальные.