Наиболее сложной является многосегментная модель. В данном случае используются все средства, предоставляемые механизмом сегментации. Каждой программе дается собственная таблица дескрипторов сегментов и свои собственные сегменты. Эти сегменты могут либо поступать в исключительное распоряжение программы. либо могут разделяться другими конкретными программами. Доступ между программами и конкретными сегментами может управляться индивидуально.
Для немедленного использования могут быть готовы до шести сегментов. Существуют сегменты, для которых селекторы сегмента загружены в сегментные регистры. Доступ к остальным сегментам выполняется при помощи загрузки соответствующих селекторов сегмента в сегментные регистры (см. Рисунок 5-3).
Каждый сегмент представляет собой отдельное адресное пространство. Хотя они и могут располагаться в смежных блоках физической памяти, механизм сегментации предотвращает доступ к содержимому одного сегментом посредством выхода за границу другого сегмента при чтении. Попытка адресации памяти за концом сегмента ведет к генерации исключения общей защиты.
Механизм сегментации принудительно устанавливает адресный диапазон, заданный в дескрипторе сегмента. Ответственность за распределение каждому сегменту отдельного адресного диапазона лежит на операционной системе. Могут существовать ситуации, когда желательно иметь сегменты, разделяющие один и тот же адресный диапазон. Например, система может иметь и код, и данные, хранимые в ПЗУ. При доступе в ПЗУ для выборки команд должен быть использован дескриптор кодового сегмента. При доступе в ПЗУ для выборки оттуда данных должен быть использован дескриптор сегмента данных.
Сегментные Дескрипторы Физическаярегистры сегментов память ---------- ---------------- -------------| CS |------> |Доступ|Граница| | |---------- ------------------------ | | |Базовый адрес | | | | ---------------- | | | | | |---------- ---------------- | | || SS |------> |Доступ|Граница| | | |---------- --------------------------------- | | |Базовый адрес | | \| | ---------------- | |-----------| | | |---------- ---------------- | | || DS |------> |Доступ|Граница| \ | |---------- ----------------------- \ | | |Базовый адрес | \ \ | | ---------------- \ \ | | \ \ | |---------- ---------------- \ \ | || ES |------> |Доступ|Граница| \ \ | |---------- -------------------------- \ \ | | |Базовый адрес | | \ \| | ---------------- | \ |-----------| | \ | |---------- ---------------- | \| || FS |------> |Доступ|Граница| | |-----------|---------- ------------------------------ | | |Базовый адрес | | \ | | ---------------- | \ | | | \ | |---------- ---------------- | \| || GS |------> |Доступ|Граница| | |-----------|---------- --------------------- | | | |Базовый адрес | \ \ | | ---------------- \ \ | | \ \ | | ---------------- \ \ | | |Доступ|Граница| \ \ | | -------------------- \ \ | | |Базовый адрес | | \ \| | ---------------- | \ |-----------| | \ | | ---------------- | ------\---|-----------| |Доступ|Граница| | | \ | | ------------------------ \ | | |Базовый адрес | | \| | ---------------- -------- |-----------| \ | | ---------------- ----------|-----------| |Доступ|Граница| | \ | | ------------------------ \ | | |Базовый адрес | \ | | ---------------- \ | | \| | ---------------- |-----------| |Доступ|Граница| | | -------------------------------- | | |Базовый адрес | \| | ---------------- ------------- Рисунок 5-3. Многосегментная модель