Лекция №7 Управление памятью Сегментная, страничная и сегментностраничная организация памяти. Компилятор  Программа или техническое средство, выполняющее     компиляцию. Машинная программа, используемая для компиляции. Транслятор, выполняющий преобразование программы, составленной.

Download Report

Transcript Лекция №7 Управление памятью Сегментная, страничная и сегментностраничная организация памяти. Компилятор  Программа или техническое средство, выполняющее     компиляцию. Машинная программа, используемая для компиляции. Транслятор, выполняющий преобразование программы, составленной.

Лекция №7
Управление памятью
Сегментная, страничная и сегментностраничная организация памяти.
Компилятор
 Программа или техническое средство, выполняющее




компиляцию.
Машинная программа, используемая для компиляции.
Транслятор, выполняющий преобразование программы,
составленной на исходном языке, в объектный модуль.
Программа, переводящая текст программы на языке
высокого уровня, в эквивалентную программу на
машинном языке.
Программа, предназначенная для трансляции
высокоуровневого языка в абсолютный код или, иногда,
в язык ассемблера. Входной информацией для
компилятора (исходный код) является описание
алгоритма или программа на проблемноориентированном языке, а на выходе компилятора —
эквивалентное описание алгоритма на машинноориентированном языке (объектный код).
Компилятор
 Большинство компиляторов переводит
программу с некоторого высокоуровневого
языка программирования в машинный код,
который может быть непосредственно
выполнен центральным процессором. Как
правило, этот код также ориентирован на
исполнение в среде конкретной
операционной системы, поскольку использует
предоставляемые ею возможности
(системные вызовы, библиотеки функций).
Архитектура (набор программно-аппаратных
средств), для которой производится
компиляция, называется целевой машиной.
Компилятор компиляторов
 Компилятор компиляторов — программа,
воспринимающая синтаксическое или
семантическое описание языка
программирования и генерирующая
компилятор для этого языка. Синтаксис
выражается в виде БНФ или её
производной и должен удовлетворять
правилам того метода синтаксического
анализа, который будет использоваться в
генерируемом компиляторе.
Форма Бэкуса — Наура
 Формальная система описания синтаксиса,
в которой одни синтаксические категории
последовательно определяются через
другие категории. БНФ используется для
описания контекстно-свободных
формальных грамматик.
Контекстно-свободная грамматика
 частный случай формальной грамматики
(тип 2 по иерархии Хомского), у которой
левые части всех продукций являются
нетерминалами. Смысл термина
«контекстно-свободная» заключается в
том, что возможность применить
продукцию к нетерминалу, в отличие от
общего случая грамматики Хомского, не
зависит от контекста этого нетерминала.
Примеры

Вложенные скобки





Терминалы: '(' и ')';
нетерминал: S;
продукции: S→(S), S→ε;
начальный нетерминал — S.
Этой грамматикой задаётся язык вложенных скобок { (n)n | n≥0 }.

Целые числа

Терминалы: '+', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9';

нетерминалы: <число>, <число без знака>, <последовательность цифр>, <ненулевая цифра>, <цифра>;

Продукции:

<число> → 0

<число> → +<число без знака>

<число> → -<число без знака>

<число> → <число без знака>

<число без знака> → <ненулевая цифра>

<число без знака> → <ненулевая цифра><последовательность цифр>

<последовательность цифр> → <цифра><последовательность цифр>

<последовательность цифр> → <цифра>

<цифра> → 0

<цифра> → <ненулевая цифра>

<ненулевая цифра> → 1

<ненулевая цифра> → 2

<ненулевая цифра> → 3

<ненулевая цифра> → 4

<ненулевая цифра> → 5

<ненулевая цифра> → 6

<ненулевая цифра> → 7

<ненулевая цифра> → 8

<ненулевая цифра> → 9
Примеры
 Арифметическое выражение
 Терминалы: '+', '-', '*', '/', '(', ')', 'x'
 нетерминалы: <выражение>, <слагаемое>,









<множитель>
продукции:
<выражение> → <выражение> + <слагаемое>
<выражение> → <выражение> - <слагаемое>
<выражение> → <слагаемое>
<слагаемое> → <слагаемое> * <множитель>
<слагаемое> → <слагаемое> / <множитель>
<слагаемое> → <множитель>
<множитель> → ( <выражение> )
<множитель> → x
Таблицы компилятора
 Исходный текст, сохраненный для печати




листинга
Символьная таблица с именами и
атрибутами переменных
Все используемые константы, с ПТ
Дерево грамматического разбора,
содержащие синтаксический анализ
программы
Стек, для процедурных вызовов внутри
компилятора
ВАП
Стек вызовов
Дерево синтаксического
анализа
Таблица констант
Исходный текст
Таблица кодировки
символов
Сегменты
 Множество полностью независимых
адресных пространств
 Содержит линейную последовательность
адресов от 0 до некоторого максимума
Сравнение
Вопрос
Страничная память
Сегментация
Нужно ли программисту знать о том, что используется эта
техника?
Нет
Да
Сколько в системе линейных адресных пространств?
1
Много
Может ли суммарное адресное пространство превышать
размеры физической памяти?
Да
Да
Возможно ли разделение процедур и данных, а также
раздельная защита для них?
Нет
Да
Легко ли перемещаются таблицы с непостоянными
размерами?
Нет
Да
Облегчен ли совместный доступ пользователей к
процедурам?
Нет
Да
Зачем придумана эта техника?
Что бы получить большое
адресное пространство
без дополнительных
затрат на физическую
память
Для возможности
разбиения программ и
данных на логически
независимые адресные
пространства,
облегчение
совместного доступа и
защиты
Сегментация с использованием страниц
 При большом размере сегментов может
быть невозможно хранить их в
оперативной памяти целиком.
 MULTICS 2^18, каждый из которых мог
быть до 65536 (36 разрядных) слов длиной.
Сампл
1.
2.
3.
4.
5.
По номеру сегмента находится дескриптор
сегмента.
Проверяется, находится ли таблица
страница сегмента в памяти. Если таблица
страниц в памяти, определяется ее
расположение. Если нет – вызывается
сегментное прерывание. При нарушении
защиты происходит прерывание.
Изучается запись в таблице страниц для
запрашиваемой виртуальной страницы.
Если страница не находится в памяти,
происходит страничное прерывание. Если
она в памяти, из записи таблицы страниц
извлекается адрес начала страницы в
оперативной памяти.
К адресу начала страницы прибавляется
смещение, что дает в результате адрес в
оперативной памяти, где расположено
нужное слово.
Чтение или сохранение.
Intel Pentium
 16k независимых сегментов, каждый до 1
млрд 32 разрядных слов.
 Локальная таблица дескрипторов (LDT)
 Глобальная таблица дескрипторов (GDT)
 Каждый селектор (указывает на
дескриптор) представляет собой 16разрядный номер.
 13 битов определяют номер записи в
таблице дескрипторов, поэтому эти
таблицы ограничены, каждая содержит 8К
(2^13) сегментных дескрипторов.
 1 бит указывает тип используемой таблицы
дескрипторов LDT или GDT.
С учетом максимального размера сегмента - 4 Гбайта - каждая задача, при
чисто сегментной организации виртуальной памяти, работает в
виртуальном адресном пространстве в 64 Тбайта (4 Гбайта * 16К, где
16К=8К*2 т.к. LDT и GDT).