Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
33__33__33__33_ItogOS.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.55 Mб
Скачать

90. Сегментно-страничная организация памяти

Данный метод является комбинацией страничного и сегментного распределения памяти виртуальных адресов.

Виртуальное пространство процесса делится на сегменты, а каждый сегмент в свою очередь делится на виртуальные страницы, которые нумеруются в пределах сегмента. Оперативная память делится на физические страницы.

Данная организация памяти в частности используется при загрузке ОС. Загрузка процесса выполняется операционной системой постранично, при этом часть страниц размещается в оперативной памяти, а часть на диске. Для каждого сегмента создается своя таблица страниц, структура которой полностью совпадает со структурой таблицы страниц, используемой при страничном распределении. Для каждого процесса создается таблица сегментов, в которой указываются адреса таблиц страниц для всех сегментов данного процесса. Адрес таблицы сегментов загружается в специальный регистр процессора, когда активизируется соответствующий процесс.

Средством для межпроцессной связи являются сегменты. Они позволяют процессам иметь общие области виртуальной памяти и, как следствие, разделять содержащуюся в них информацию. Единицей разделяемой памяти являются сегменты, свойства которых зависят от аппаратных особенностей управления памятью.

Преобразование виртуального адреса в физический адрес происходит в два этапа.  • На первом этапе исходный виртуальный адрес, заданный в виде пары (номер сегмента, смещение), преобразуется в промежуточный линейный виртуальный адрес байта. Виртуальный адрес вычисляется путем сложения базового адреса сегмента и смещения (если доступ к сегменту разрешен).  • На втором этапе полученный виртуальный адрес преобразуется в искомый физический адрес на основе страничного механизма преобразования. При этом виртуальный адрес представляется в виде пары (номер страницы, смещение в странице). 

91. Последовательность выполнения .Exe файлов

Файлы *.exe являются наследниками исполняемых файлов *.com, которые пишутся в основном на языке Ассемблера.

Состоять *.exe файлы могут из нескольких сегментов, следовательно их размер не ограничен 64 кб. По структуре *.exe  файл сложнее, кроме кода программы в файле также содержатся: заголовок файла, таблица настройки адресов, данные и т.п.

Структура файла:

  1. Заголовок *.exe файла . В заголовке находится информация о размере выполняемого модуля, области загрузки в памяти, адресе стека и относительных смещениях, которые должны заполнить машинные адреса в соответствии с относительными шестнадцатеричными позициями. Заголовок имеет минимальный размер 512 байтов и может быть больше, если программа содержит большое число настраиваемых элементов.

  2. Тело программы - основная часть программы, выполняющая какие-либо полезные действия

  3. Конец программы - завершающая часть программы, которая сохраняет нужные и удаляет ненужные данные из ОЗУ, закрывает все открытые данной программой файлы и т.п.

Первая и последняя часть программы являются обязательными для всех EXE файлов, а вторая часть вовсе не обязательна. 

Алгоритм выполнения программы *.exe:

 Загружает программа в память с помощью системного загрузчика (функция DOS 4Bh), и при этом выполняются действия в следующей последовательности: 1. Определяется сегментный адрес свободного участка памяти, размер которого достаточен для размещения программы. 2. Создается и заполняется блок памяти для переменных среды. 3. Создается блок памяти для PSP (префикс программного сегмента) и программы. В поля PSP заносятся соответствующие значения. 4. Адрес DTA (область ввода-вывода) устанавливается равным PSP:0050h. 5. В рабочую область загрузчика считывается форматированная часть заголовка *.exe-файла. 6. Вычисляется длина загрузочного модуля. 7. Определяется смещение загрузочного модуля в файле. 8. Вычисляется сегментный адрес (START_SEG) для загрузки – обычно это PSP+10h. 9. Считывается в память загрузочный модуль (начиная с адреса START_SEG:0000). 10. Для каждого входа таблицы настройки: a ) читаются слова I_OFF и I_SEG; b ) вычисляется RELC^SEG-START^SEG+LSEG; c ) считается слово по адресу RELO_SEG:I_OFF). d ) к прочитанному слову прибавляется START_SEG; e ) результат запоминается по тому же адресу (RELO_SEG:I_OFF). 11. Распределяется память для программы .

12. Инициализируются регистры, выполняется программа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]