95
Unix, например, каждый процесс имеет при начале выполнения три
сегмента: кодов, данных и стека). Каждому сегменту могут быть
определены свои права доступа. Поскольку обращения к памяти могут
быть трех видов: чтение, запись и передача управления, то для описания
прав доступа достаточно 3-битного поля Read-Write-eXecute, каждый
разряд которого определяет разрешение одного из видов доступа.
Аппаратные средства большинства архитектур обеспечивают контроль
права доступа при трансляции адресов: поле прав доступа включается в
дескриптор сегмента и если поступивший вид обращения не разрешен, то
выполняется прерывание-ловушка "нарушение доступа".
Другое важное преимущество многосегментной модели заключается
в том, что процесс имеет возможность использовать виртуальное адресное
пространство, размер которого больше, чем размер доступной реальной
памяти. Это достигается за счет того, что не обязательно все сегменты
процесса должны одновременно находиться в реальной памяти.
Дескриптор каждого сегмента содержит бит present, который
установлен в 1, если сегмент подкачан в оперативную память, или в 0, –
если сегмент вытеснен из нее. Аппаратура трансляции адресов проверяет
этот бит и при нулевом его значении выполняет прерывание-ловушку
"отсутствие сегмента" (segment falure). В отличие от большинства других
ловушек, которые в основном сигнализируют об ошибках, при которых
дальнейшее выполнение процесса невозможно, эта не приводит к
фатальным для процесса последствиям. ОС, обрабатывая это прерывание,
находит образ вытесненного сегмента на внешней памяти и подкачивает
его в реальную память. Естественно, что процесс, обратившийся к
вытесненному сегменту, переводится в ожидание; это ожидание может
затянуться, если у ОС имеются проблемы с ресурсом реальной памяти.
Когда сегмент будет подкачан, процесс перейдет в очередь готовых и
будет активизирован вновь с той команды, которая вызвала прерывание-