200 likes | 438 Views
Лекция № 7. Управление памятью. Сегментная, страничная и сегментно-страничная организация памяти. Компилятор. Программа или техническое средство, выполняющее компиляцию. Машинная программа, используемая для компиляции.
E N D
Лекция №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 до некоторого максимума
Сегментация с использованием страниц • При большом размере сегментов может быть невозможно хранить их в оперативной памяти целиком. • MULTICS 2^18, каждый из которых мог быть до 65536 (36 разрядных) слов длиной.
Сампл • По номеру сегмента находится дескриптор сегмента. • Проверяется, находится ли таблица страница сегмента в памяти. Если таблица страниц в памяти, определяется ее расположение. Если нет – вызывается сегментное прерывание. При нарушении защиты происходит прерывание. • Изучается запись в таблице страниц для запрашиваемой виртуальной страницы. Если страница не находится в памяти, происходит страничное прерывание. Если она в памяти, из записи таблицы страниц извлекается адрес начала страницы в оперативной памяти. • К адресу начала страницы прибавляется смещение, что дает в результате адрес в оперативной памяти, где расположено нужное слово. • Чтение или сохранение.
Intel Pentium • 16k независимых сегментов, каждый до 1 млрд 32 разрядных слов. • Локальная таблица дескрипторов (LDT) • Глобальная таблица дескрипторов (GDT) • Каждый селектор (указывает на дескриптор) представляет собой 16-разрядный номер.
13 битов определяют номер записи в таблице дескрипторов, поэтому эти таблицы ограничены, каждая содержит 8К (2^13) сегментных дескрипторов. • 1 бит указывает тип используемой таблицы дескрипторов LDT или GDT. С учетом максимального размера сегмента - 4 Гбайта - каждая задача, при чисто сегментной организации виртуальной памяти, работает в виртуальном адресном пространстве в 64 Тбайта (4 Гбайта * 16К, где 16К=8К*2 т.к. LDT и GDT).