В системах с сегментной организацией снимается ограничение необходимости выполнения программы в одном блоке смежных ячеек реальной памяти. Программа может занимать много отдельных блоков первичной памяти и не обязательно одинакового размера. Однако сложнее становится проблема защиты программы каждого пользователя от несанкционированного доступа со стороны других пользователей. Один из способов реализации защиты памяти в системах с сегментной организацией – использование ключей защиты. Когда в УП для ключа защиты памяти устанавливается значение 2, соответствующее пользователю B, программа этого пользователя может обращаться только к тем блокам памяти, которые имеют именно этот ключ защиты (2). Управление ключами защиты осуществляет только операционная система. Виртуальный адрес в сегментной системе – упорядоченная пара V=(s,d), где s – номер сегмента, а d – смещение в рамках этого сегмента. Одним из достоинств сегментных систем является именно возможность чёткого управления доступом к сегментам. Для этого каждому процессу предоставляются определенные права доступа к каждому сегменту и фактически полностью запрещается доступ ко многим сегментам. К наиболее распространенным видам управления доступом относятся Read (чтение), Write (запись), Execute (выполнение), Append (дополнение). Read – можно сделать копию сегмента. Write – можно изменить любой элемент, содержащийся в сегменте, можно уничтожить всю информацию сегмента. Execute – процесс может работать с этим сегментом как с программой. Процесс которому разрешено дополнение некоторого сегмента, может записать дополнительную информацию в конце сегмента, но не может изменить существующую информацию.
В системе, предусматривающей все эти четыре вида управления доступом можно создать 16 различных режимов управления доступом, разрешая или запрещая каждый вид. Восемь наиболее полезных комбинаций видов доступа для чтения, записи и выполнения.
R
W00110011
X01010101
Как и при страничной организации, в сегментных системах существует много стратегий реализации преобразования адресов сегментов. Это можно делать путём прямого, ассоциативного или комбинированного отображения. Формат типичной строки полной таблицы сегментов представляется следущим образом:
r
a
l
R
W
E
A
S¢
r – бит-признак присутствия сегмента в текущий момент времени в первичной памяти. Если сегмента в первичной памяти нет, то a – адрес внешней памяти, по которому следует выбрать сегмент. l – длина сегмента. После загрузки сегмента смещение d сравнивается с длиной сегмента l. Если d больше l, вырабатывается прерывание по выходу за пределы сегмента, ОС принимает управление на себя и прекращает выполнение данного процесса.
Если смещение d находится в рамках сегмента, то осуществляется контроль по битам-признакам защиты, чтобы удостовериться в том, что соответствующая операция доступа разрешена. Если да, то базовый адрес сегмента s¢ суммируется со смещением d и образуется случайный адрес r= s¢+d. Если указанная операция доступа не разрешена, то происходит прерывание по защите сегмента и ОС прекращает выполнение данного процесса.