Лекция 7 Управление памятью Сегментная, страничная и сегментно- страничная организация памяти.
Компилятор Программа или техническое средство, выполняющее компиляцию. Машинная программа, используемая для компиляции. Транслятор, выполняющий преобразование программы, составленной на исходном языке, в объектный модуль. Программа, переводящая текст программы на языке высокого уровня, в эквивалентную программу на машинном языке. Программа, предназначенная для трансляции высокоуровневого языка в абсолютный код или, иногда, в язык ассемблера. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно- ориентированном языке, а на выходе компилятора эквивалентное описание алгоритма на машинно- ориентированном языке (объектный код).
Компилятор Большинство компиляторов переводит программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен центральным процессором. Как правило, этот код также ориентирован на исполнение в среде конкретной операционной системы, поскольку использует предоставляемые ею возможности (системные вызовы, библиотеки функций). Архитектура (набор программно-аппаратных средств), для которой производится компиляция, называется целевой машиной.
Компилятор компиляторов Компилятор компиляторов программа, воспринимающая синтаксическое или семантическое описание языка программирования и генерирующая компилятор для этого языка. Синтаксис выражается в виде БНФ или её производной и должен удовлетворять правилам того метода синтаксического анализа, который будет использоваться в генерируемом компиляторе.
Форма Бэкуса Наура Формальная система описания синтаксиса, в которой одни синтаксические категории последовательно определяются через другие категории. БНФ используется для описания контекстно-свободных формальных грамматик.
Контекстно-свободная грамматика частный случай формальной грамматики (тип 2 по иерархии Хомского), у которой левые части всех продукций являются нетерминалами. Смысл термина «контекстно-свободная» заключается в том, что возможность применить продукцию к нетерминалу, в отличие от общего случая грамматики Хомского, не зависит от контекста этого нетерминала.
Примеры Вложенные скобки Терминалы: '(' и ')'; нетерминал: S; продукции: S (S), S ε; начальный нетерминал S. Этой грамматикой задаётся язык вложенных скобок { ( n ) n | n0 }. Целые числа Терминалы: '+', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'; нетерминалы:,,,, ; Продукции:
Примеры Арифметическое выражение Терминалы: '+', '-', '*', '/', '(', ')', 'x' нетерминалы:,, продукции: + - * / ( ) x
Таблицы компилятора Исходный текст, сохраненный для печати листинга Символьная таблица с именами и атрибутами переменных Все используемые константы, с ПТ Дерево грамматического разбора, содержащие синтаксический анализ программы Стек, для процедурных вызовов внутри компилятора
ВАП Таблица кодировки символов Исходный текст Таблица констант Дерево синтаксического анализа Стек вызовов
Сегменты Множество полностью независимых адресных пространств Содержит линейную последовательность адресов от 0 до некоторого максимума
Сравнение ВопросСтраничная памятьСегментация Нужно ли программисту знать о том, что используется эта техника? НетДа Сколько в системе линейных адресных пространств?1Много Может ли суммарное адресное пространство превышать размеры физической памяти? Да Возможно ли разделение процедур и данных, а также раздельная защита для них? НетДа Легко ли перемещаются таблицы с непостоянными размерами? НетДа Облегчен ли совместный доступ пользователей к процедурам? НетДа Зачем придумана эта техника?Что бы получить большое адресное пространство без дополнительных затрат на физическую память Для возможности разбиения программ и данных на логически независимые адресные пространства, облегчение совместного доступа и защиты
Сегментация с использованием страниц При большом размере сегментов может быть невозможно хранить их в оперативной памяти целиком. MULTICS 2^18, каждый из которых мог быть до (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).