Лекция №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).