- •5. Способы адресации в пэвм с 32-разрядной архитектурой
- •9. Эффект гонок в микропрограммных автоматах и способы его устранения
- •17. Сегментация микропрограмм
- •18. Назначение, основные характеристики и функции систем прерывания программ
- •19. Запоминание состояния, переход к прерывающей программе и возврат из нее
- •20. Приоритетное обслуживание прерываний
- •22. Сравнение систем прерываний ес эвм и пэвм
- •23. Классификация систем памяти (см. Пособие Память эвм)
- •24. Сегментная адресация памяти
- •25. Страничная адресация памяти
- •26. Защита памяти
- •27. Защищенный режим в пэвм
- •28. Алгоритмы замещения информации в основной памяти
- •29. Алгоритмы управления очередностью обмена с внешними зу (см. Пособие Память эвм)
- •30. Принципы построения систем ввода-вывода в эвм
- •31. Организация интерфейсов ввода-вывода (должно дорабатываться)
- •32. Программное управление вводом-выводом
- •33. Передача данных с прямым доступом к памяти
- •34. Структура эвм Единой Системы и см эвм
- •35. Основные типы микропроцессоров. Структура микроЭвм
- •36. Совмещение во времени выполнения нескольких команд программы
- •37. Суперскалярная и пакетно-сетевая архитектуры процессоров пэвм
- •38. Процессоры с risc-архитектурой и эвм, управляемые потоками данных
- •39. Гиперпоточная архитектура в пэвм и архитектура эвм с большой длиной командного слова
- •40. Классификация вычислительных систем
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 у дескрипторов называемых шлюзами вызова, задач, прерываний и ловушек, которые используются для передачи управления программам, имеющим более высокий (меньший) уровень привилегий, что необходимо процессору для организации работы механизмов защиты. Поля базы и границы в таких дескрипторах фактически определяют адреса переходов (точек входа) в вызываемых сегментах.
Поскольку при обращениях к памяти с применением схемы сегментации приходится каждый раз вычислять адрес, используя базу сегмента и его границу, то извлечение их каждый раз из таблицы дескрипторов, расположенной в памяти, привело бы к существенным задержкам и снижению производительности ЭВМ. Поэтому каждый раз при замене содержимого сегментного регистра база и граница для нового сегмента аппаратно копируются в соответствующую программно недоступную пару регистров (базового адреса и границы сегмента), связанную с каждым сегментным регистром, и при последующих обращениях к данному сегменту берутся из этих регистров.
Если вместе с сегментацией не используется страничный механизм, то полученный линейный адрес непосредственно является физическим адресом. При этом пространство физических адресов определяется как диапазон адресов, которые процессор может генерировать на своей адресной шине.
