Читайте также:
|
|
Реальный режим процессора Intel – однозадачная среда, в данный момент времени в ней может выполняться только одна, конкретная задача. Все сегменты в этом режиме доступны для любого процесса, поэтому в многозадачном режиме процессы могут мешать друг другу. Для решения этой проблемы начиная с процессора i80268 был реализован защищенный режим. Современный вид защищенный режим приобрел в процессоре i80368 (применительно к 4-х гигабайтному адресному пространству). Главной особенностью защищенного режима является то, что вся многозадачность реализована аппаратно.
Перечислим преимущества, которые дает защищенный режим:
1. Возможность для каждой задачи иметь свою систему сегментов. Это значит, что программа может работать только с теми областями памяти, которые выделены ей операционной системой. В процессор закладывается возможность быстрого переключения между задачами. Кроме того, предполагается, что в системе существуют сегменты, принадлежащие операционной системе. Это сильно повышает надёжность работы многозадачных операционных систем.
2. Сегменты могут быть защищены от записи.
3. В поле доступа можно также указать уровень доступа. Смысл уровня доступа заключался в том, что задача не может получить доступ к сегменту, у которого уровень доступа выше, чем у данной задачи.
4. Заложена возможность виртуальной памяти, т.е. памяти, формируемой с учетом возможности того, что сегмент может временно храниться на диске.
Организацию памяти в защищенном режиме разделяют на две части: сегментация (segmentation), и страничная организация (paging).
Сегментация – это механизма разделения адресного пространства процессора на отдельные защищенные друг от друга кусочки (сегменты). Сегментация позволяет изолировать модули кода, данных, стека и позволяет работать нескольким задачам и программам на одном процессоре (multitasking) и не конфликтовать между собой.
Механизм страничной памяти позволяет разместить часть оперативной памяти на диске. Это позволяет обеспечить прикладные программы оперативной виртуальной памятью, размер которой больше размера физической памяти, установленной в компьютере.
При включении процессора в нем автоматически устанавливается режим реального адреса. Переход в защищённый режим осуществляется программно путем выполнения соответствующей последовательности команд. Программы, предназначенные для защищённого режима, должны быть написаны особым образом. Это означает, что реальный и защищённый режим не совместимы.
Разделение адресного пространства на сегменты (сегментация)
В реальном режиме работы процессора адресное пространство процесса (программы) делится на равные части механически, без учета смыслового значения данных. В одном сегменте могут оказаться и коды команд, и инициализируемые переменные, и массив исходных данных программы. Такой подход не позволяет обеспечить дифференцированный доступ к разным частям программы, а это свойство могло бы быть очень полезным во многих случаях. Например, можно было бы запретить обращаться с операциями записи в сегмент программы, содержащий коды команд, разрешив эту операцию для сегментов данных. Также полезно запретить операции записи со стороны прикладных процессов для системных таблиц, очевидно, что, сама операционная система при этом должна иметь возможность менять содержимое этих таблиц.
Кроме того, разбиение виртуального адресного пространства на «осмысленные» части (которые и называются сегментами) делает принципиально возможным совместное использование фрагментов программ разными процессами. Пусть, например, двум процессам требуется одна и та же подпрограмма, тогда в память достаточно загрузить только одну копию кода. Коды этой подпрограммы могут быть оформлены в виде отдельного сегмента и включены в виртуальные адресные пространства обоих процессов. Таким образом, оба процесса получат доступ к одной и той же копии подпрограммы.
Итак, адресное пространство процесса делится на части — сегменты, размер которых определяется с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т. п. (Еще раз прошу обратить внимание – в реальном режиме размеры всех сегментов одинаковые (64 Кбайта), а в защищенном каждый сегмент имеет собственный размер.)
На этапе создания процесса во время загрузки его образа в оперативную память система создает в памяти локальную таблицу дескрипторов–описателей сегментов (LDT) процесса. Каждый дескриптор описывает свой сегмент. Кроме локальных таблиц дескрипторов сегментов система создает одну глобальную таблицу дескрипторов (GDT), где хранятся дескрипторы сегментов, занятых операционной системой. Доступ к глобальной таблице имеют все выполняемые задачи.
Независимо от вида таблицы каждый дескриптор содержит следующую информацию, характеризующую сегмент:
1. базовый адрес сегмента в оперативной памяти. Сегмент может начинаться в любой точке адресного пространства объемом 232 = 4Гбайт. Это адресное пространство носит название линейного, а адрес в нем соответственно линейным адресом (для процессоров с разрядностью адресной шины 36 разрядов объем адресного пространства будет соответственно 236 = 64Гбайт.);
2. размер сегмента в байтах. Максимальный размер сегмента определяется разрядностью линейного адреса, при 32-разрядной организации процессора он равен 4 Гбайт;
3. тип сегмента (сегмент кода, сегмент данных, системный сегмент) и права на его использование (возможность модифицировать сегмент кода, считывать содержимое сегмента или выполнять этот код);
4. право доступа (позволяет указать, что данный сегмент доступен только для чтения);
5. уровень привилегий сегмента.
Рассмотрим понятие уровень привилегий более детально.
Привилегии это свойство, которое определяет, какие компьютерные операции разрешаются в любой момент времени и какие доступы к памяти законны. Привилегии используются для обеспечения безопасности в компьютерной системе.
Защита на уровне сегментов представлена четырьмя уровнями привилегий (Privilege Level, PL). Четыре уровня привилегий можно интерпретировать в виде колец защиты (рис. 22). Центр - уровень 0 - предназначен для сегментов, содержащих наиболее критичные программы (обычно ядро операционной системы). Внешние кольца предназначены для сегментов с менее критичными программами или данными. Обычно процессы имеют следующие привилегии:
- 0 – ядро операционной системы, системные драйверы.
- 1 – программы обслуживания аппаратуры, драйверы, программы, работающие с портами ввода/вывода компьютера.
- 2 – системы управления базами данных, расширения операционной системы.
- 3 – прикладные программы, запускаемые пользователем.
Рисунок 22 Кольца защиты системы
Программа может обратиться к сегменту данных, который находится на том же или более низком уровне привилегий т.е. программе будет предоставлен доступ к сегменту только в том случае, когда уровень привилегий дескриптора запрашиваемого сегмента больше или равен ее уровню привилегий. Если доступ к данным не разрешен, система генерирует прерывание «нарушение защиты», в этом случае вы увидите примерно такое сообщение (рис. 23).
Рисунок 23 Сообщение системы в случае нарушения защиты
Теперь разберемся, как формируется нужный нам физический адрес. Преобразование виртуального адреса в физический происходит в два этапа. На первом этапе работает механизм сегментации, который мы и разбираем.
Так же как и в случае реального режима будет использоваться двухкомпонентный логический адрес. По-прежнему логический адрес формируется при помощи сегментных регистров и регистров, где хранится смещение. Однако сегментные регистры содержат теперь не сегментный адрес, а так называемый селектор, часть которого (13 бит) представляет собой индекс в дескрипторной таблице, т.е. указывает на дескриптор, в котором находится полная информация о сегменте. Как это происходит показано на рис. 24..Иначе это преобразование называется трансляция логического адреса в линейный.
Логический адрес состоит из 16-битового селектора сегмента (записываемого в специальный сегментный регистр) и 32-битового смещения в этом сегменте. Логический адрес преобразуется в линейный адрес сложением смещения и адреса сегмента. Адрес сегмента берется из таблицы глобальных дескрипторов (GDT), либо из таблицы локальных дескрипторов (LDT).
Бит Т (13-й разряд) в селекторе сегмента определяет, какая таблица (глобальная или локальная) должна быть использована, а собственно сам дескриптор определяется на основании 13 младших разрядов селектора сегмента. Можно сказать, что эти младших 13 разрядов являются 13-разрядным индексом в таблице дескрипторов, а еще проще, номером нужного нам дескриптора в таблице. На основании известного системе адреса таблицы дескрипторов (определяется специальными регистрами) и номера сегмента вычисляется адрес дескриптора сегмента.
Получив доступ к дескриптору, анализируются его поля, выполняется проверка возможности выполнения заданной операции (возможность доступа к сегменту). Если доступ разрешен, то из дескриптора извлекается адрес этого сегмента и вычисляется линейный адрес. Если доступ невозможен, возникает прерывание. Для нахождения линейного адреса к адресу сегмента добавляется смещение, заданное в исходном логическом адресе. Как мы уже писали, смещение хранится в специальном 32- разрядном регистре. С точки зрения процесса смещение это и есть адрес внутри сегмента, он находятся в диапазоне от 00000000h до FFFFFFFFh.. В результате проведенного преобразования мы получили требуемый 32- разрядный линейный адрес. Полученный линейный адрес является виртуальным, т.е. не может быть непосредственно отправлен на шину адреса. Для перехода от линейного адреса к физическому требуется второй этап преобразования.
Дата добавления: 2015-07-08; просмотров: 479 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Верхний блок памяти | | | Механизм страничной памяти. |