Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_gosy.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
3.86 Mб
Скачать

Сравнение сегментной и страничной организации

Оба рассмотренных способа организации виртуальной памяти имеют свои достоинства и недостатки.

К преимуществам сегментной организации в литературе обычно относят следующие.

·         Легко можно указать режим доступа к сегменту в зависимости от смысла его данных. Например, сегмент кода программы обычно должен быть доступен только для чтения, а сегмент данных может быть доступен и для записи.

·         В том случае, если программа работает с двумя или более структурами данных, каждая из которых может увеличиваться в размерах независимо от других, выделение отдельного сегмента для каждой структуры позволяет освободить программиста от забот, связанных с размещением структур в имеющейся памяти (эти проблемы перекладываются на ОС, которая обязана будет найти место в физической памяти для увеличивающихся сегментов).

·         Гораздо реже называется еще одна, более прозаическая причина использования сегментов, которая на самом деле в определенный период являлась очень веской. Если в используемой архитектуре компьютера разрядность адреса в командах слишком мала (например, 16 разрядов, как у процессоров i286, что позволяет адресовать всего лишь 64 Кб), а размер программы и ее данных достигает многих мегабайт, то единственное решение – использовать много сегментов по 64 Кб.

Для современных процессоров разрядность адреса составляет 32 или даже 64 бита, что снимает необходимость возиться с большим количеством мелких сегментов. При этом на первый план выходят достоинства страничной организации:

·         программист не должен вообще думать о разбиении программы и ее данных на части ограниченного размера (сегменты), в его распоряжении единое пространство виртуальных адресов;

·         исключается возможность фрагментации физической памяти и связанные с этим проблемы;

·         как правило, уменьшается обмен данными с диском, поскольку в него включаются только отдельные страницы, а не целые сегменты.

Для сравнительной оценки сегментной и страничной организации полезно также вспомнить историю развития версий Windows. Версия Windows 2.0 была ориентирована на процессор i286, имевший сегментную организацию памяти с 16-разрядным смещением в сегменте. В эти годы фирмы Intel и Microsoft активно защищали сегментную модель, подчеркивая ее достоинства. Однако в Windows 3.0 были уже частично использованы новые возможности процессора i386, а именно, страничная организация памяти. Поскольку эта версия по-прежнему была основана на 16-разрядных адресах, использование сегментов оставалось необходимым, что привело к сложной сегментно-страничной модели памяти. Зато переход к 32-разрядным версиям WindowsNT и Windows 95 сопровождался фактическим отказом от использования сегментного механизма в пользу чисто страничной организации памяти. Формально же теперь все адресное пространство пользователя укладывается в один очень большой сегмент размером 4 Гб.

Большим преимуществом использования виртуальной памяти, как в сегментном, так и в страничном варианте, является возможность легко и просто изолировать процессы в памяти. Для этого достаточно, чтобы система не отображала никакие виртуальные страницы двух разных процессов на одну и ту же физическую страницу. Тогда процессы просто «не будут видеть» друг друга в памяти и не смогут повредить друг другу.

С другой стороны, в некоторых ситуациях желательно, чтобы два или более процессов имели доступ к общей области памяти. Это дает, например, возможность хранить в памяти единственный экземпляр системных библиотек, которым могут пользоваться несколько процессов. Для создания общей памяти достаточно, чтобы виртуальные страницы всех заинтересованных процессов отображались на одни и те же страницы физической памяти.

Защищенный режим предназначен для обеспечения независимости выполнения нескольких задач, что подразумевает защиту ресурсов одной задачи от возможного воздействия другой задачи (под задачами подразумеваются как прикладные, так и задачи операционной системы).

Основным защищаемым ресурсом является память, в которой хранятся коды, данные и различные системные таблицы (например, таблица прерываний). Защищать требуется и совместно используемую аппаратуру, обращение к которой обычно происходит через операции ввода-вывода и прерывания. В защищенном режиме процессор 80286 аппаратно реализует многие функции защиты, необходимые для построения супервизора многозадачной ОС, поддерживая и механизм виртуальной памяти.

Защита памяти основана на использовании сегментации. Сегмент — это блок адресного пространства памяти определенного назначения. К элементам сегмента возможно обращение с помощью различных инструкций процессора, использующих разные режимы адресации для формирования адреса в пределах сегмента. Максимальный размер сегмента для процессоров 8086 и 80286 составлял 64 Кб, в 32-разрядных процессорах этот предел отодвигается до 4 Гб. Сегменты памяти выделяются задачам операционной системой, но в реальном режиме любая задача может переопределить значение сегментных регистров, задающих положение сегмента в пространстве памяти, и “залезть” в чужую область данных или кода. В защищенном режиме сегменты тоже распределяются операционной системой, но прикладная программа сможет использовать только разрешенные для нее сегменты памяти, выбирая их с помощью селекторов из предварительно сформированных таблиц дескрипторов сегментов. Селекторы представляют собой 16-битные указатели, загружаемые в сегментные регистры процессора.

Дескрипторы — это структуры данных, используемые для определения свойств программных элементов (сегментов, вентилей и таблиц). Дескриптор определяет положение элемента в памяти, размер занимаемой им области (лимит), его назначение и характеристики защиты. Защита памяти с помощью сегментации не позволяет:

• использовать сегменты не по назначению (например, пытаться трактовать область данных как коды инструкций);

• нарушать права доступа (пытаться модифицировать сегмент, предназначенный только для чтения, обращаться к сегменту, не имея достаточных привилегий, и т. п.);

• адресоваться к элементам, выходящим за лимит сегмента;

• изменять содержимое таблиц дескрипторов (то есть параметров сегментов), не имея достаточных привилегий.

Защищенный режим предоставляет средства переключения задач. Состояние каждой задачи (значение всех связанных с ней регистров процессора) может быть сохранено в специальном сегменте состояния задачи (TSS), на который указывает селектор в регистре задачи. При переключении задач достаточно загрузить новый селектор в регистр задачи, и состояние предыдущей задачи автоматически сохранится в ее TSS, а в процессор загрузится состояние новой (возможно, и ранее прерванной) задачи и начнется (продолжится) ее выполнение.

Четырехуровневая иерархическая система привилегий предназначена для управления использованием привилегированных инструкций и доступом к дескрипторам. Уровни привилегий нумеруются от 0 до 3, нулевой уровень соответствует максимальным (неограниченным) возможностям доступа и отводится для ядра операционной системы. Уровень 3 имеет самые ограниченные права и обычно предоставляется прикладным задачам. Систему защиты обычно изображают в виде концентрических колец, соответствующих уровням привилегий (рис. 4.), а сами уровни привилегий иногда называют кольцами защиты. Сервисы, предоставляемые задачам, могут находиться в разных кольцах защиты. Передача управления между задачами контролируется вентилями (Gate), проверяющими правила использования уровней привилегий. Через вентили задачи могут получить доступ только к разрешенным им сервисам других сегментов.

Уровни привилегий относятся к дескрипторам, селекторам и задачам. Кроме того, в регистре флагов имеется поле привилегий ввода-вывода, с помощью которого обеспечивается управление доступом к инструкциям ввода-вывода и управление флагом прерываний.

Дескрипторы и привилегии являются основой системы защиты: дескрипторы определяют структуры элементов (без которых невозможно их использование), а привилегии определяют возможность доступа к дескрипторам и выполнения привилегированных инструкций. Любое нарушение защиты приводит к возникновению специальных исключений, обрабатываемых ядром операционной системы.

Механизм виртуальной памяти позволяет любой задаче использовать логическое адресное пространство размером до 64 Тб (16К сегментов по 4 Гб). Для этого каждый сегмент в своем дескрипторе имеет специальный бит, который указывает на присутствие данного сегмента в оперативной памяти в текущий момент времени. Неиспользуемый сегмент может быть выгружен из оперативной во внешнюю память (например, дисковую), о чем делается пометка в его дескрипторе. На освободившееся место из внешней памяти может восстанавливаться содержимое другого сегмента (этот процесс называется свопингом, или подкачкой), и в его дескрипторе делается пометка о присутствии. При обращении задачи к отсутствующему сегменту процессор вырабатывает соответствующее исключение, обработчик которого и заведует виртуальной памятью в операционной системе. После подкачки страницы (сегмента) выполнение задачи продолжается, так что виртуализация памяти для прикладных задач прозрачна (если не принимать во внимание задержку, вызванную подкачкой).

Процессор предоставляет только необходимые аппаратные средства поддержки защиты и виртуальной памяти, а их реальное использование и устойчивость работы программ и самой операционной системы защищенного режима, конечно же, зависят от корректности построения ОС и предусмотрительности ее разработчиков. Хорошо спроектированная операционная система защищенного режима может обеспечить живучесть ОС даже при некорректном поведении прикладных задач.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]