Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 / Lectures / Lect3v12.doc
Скачиваний:
101
Добавлен:
28.05.2015
Размер:
706 Кб
Скачать
☆

23. Классификация систем памяти (см. Пособие Память эвм)

24. Сегментная адресация памяти

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

Основными задачами управления многоуровневой памятью можно считать:

- разделение памяти между несколькими программами, выполняемыми в ЭВМ, работающей в многопрограммном режиме

- упрощение для прикладных программ (и программистов) использования многоуровневой памяти, вплоть до представления ее в виде логически однородного пространства памяти (“виртуальной памяти”)

- выделение места для данных и команд программы в верхних уровнях памяти (кэш, оперативная память)

- определение местонахождения требуемой информации в системе памяти

- обмен информацией между уровнями памяти

- защита информации различных программ от сбоев и несанкционированных воздействий.

Общий подход к решению перечисленных задач: концепция виртуальной памяти, предложенная еще в конце 50-х годов прошлого столетия, - фактически явился основой для организации управления многоуровневой памятью всех современных ЭВМ.

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

Основными механизмами, используемыми для реализации виртуальной памяти ЭВМ, служат сегментное и страничное разделение памяти.

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

Страничное разделение предполагает деление памяти на блоки постоянной длины – страницы. Это разделение, напротив, в большей степени ориентируется на физическую память и управление передачей информации.

В ЭВМ могут использоваться как какой-либо один из этих механизмов, так и оба сразу.

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

Организацию сегментного механизма можно проиллюстрировать на примере архитектуры процессоров IntelIA-86.

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

Сегментный механизм преобразует логический адрес, сформированный исполняемой командой, в адрес в пространстве линейных адресов, разделенном на блоки – сегменты. Схема преобразования показана на рис. 24.1.

Рис. 24.1. Преобразование адреса в блоке сегментации

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

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

Все дескрипторы хранятся в таблицах дескрипторов, расположенных в оперативной памяти. Таблицы могут быть трех типов:

LDT– локальная таблица дескрипторов, описывающая сегменты, доступные только той задаче, к которой она относится;

GDT– глобальная таблица дескрипторов, описывающая сегменты, доступные всем задачам;

IDT– таблица дескрипторов прерываний.

Сегменты различаются по типу на системные сегменты и сегменты кода (исполнительные) или данных (обычные данные или стек), что задается флагом S(segment descriptor) – бит 4 в байте 5 прав доступа дескриптора. Нулевое значение этого флага указывает на системный сегмент, единичное – на сегмент кода или данных.

Сегменты данных от сегментов кода отличаются значением бита флага E(executable– исполнительный) в том же байте 5 (бит 3) дескриптора, равным 1 для сегмента кода и 0 – для сегмента данных (или стека).

Байт 7 Байт 4

База сегм. [31:24]

G

D

/

B

0

-

Разм. сегм

[19:16]

P

DPL

S

TYPE

База сегм. [23:16]

База сегмента [15:0] (Segment Base)

Размер сегмента [15:0] (Segment Limit)

Байт 3 Байт 0

База сегмента(segment base), задаваемая байтами 2, 3, 4 и 7, указывает адрес, с которого начинается сегмент. Этот адрес называется линейным и определяет местоположение сегмента в виртуальном адресном пространстве, если страничный механизм включен. Если страничный механизм выключен, то этот адрес совпадает с физическим и указывает местоположение сегмента в оперативной памяти.

Поле граница сегмента(segment limit), формируемое байтами 0 и 1 и младшими разрядами байта 6, определяет физический размер сегмента в байтах или страницах (по 4096 байтов), что определяется значением битаG(granularity, старший бит байта 6): приG= 0, размер указывается в байтах, приG= 1 – в страницах. Однако сегменты (данных) могут располагаться в адресном пространстве по отношению к своей базе двояко: от базы в сторону увеличения адресов или от базы в сторону уменьшения адресов, (что определяется одним из битов поля типа сегмента данных). Поэтому в случае обычного расположения сегмента относительно базы: в направлении увеличения адресов, - смещение не должно превышать значения границы. Если же сегмент расположен в сторону уменьшения адресов (сегмент стека), то допустимые значения смещения должны быть больше границы.

Поле DPL– уровень привилегий дескриптора (descriptor privilege level) задает привилегию сегмента, определяющую возможности доступа к нему. Обратиться к сегменту может только такая программа, уровень привилегий которой не ниже (численно не больше) уровня привилегий сегмента.

Системные сегменты используются для хранения локальных таблиц дескрипторов (LDT) и состояний задач (TSS–task state segment) и имеют немного иной формат байта 5 прав доступа.

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

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

Если вместе с сегментацией не используется страничный механизм, то полученный линейный адрес непосредственно является физическим адресом. При этом пространство физических адресов определяется как диапазон адресов, которые процессор может генерировать на своей адресной шине.

Соседние файлы в папке Lectures