- •1.2 Обзор методов и алгоритмов работы подсистемы управления
- •1. Теоретическая часть
- •1.1. Обзор методов и алгоритмов работы подсистемы управления
- •1.2 Обзор методов и алгоритмов работы подсистемы управления
- •1. На первом этапе работает механизм сегментации. Исходный
- •2. На втором этапе работает страничный механизм. Полученный
- •1386, I486 и Pentium.
- •1.3. Обзор методов и алгоритмов работы файловой подсистемы
- •7 И нажать кнопку "Чтение".
- •120, 250 И 1000 байт соотвественно показан на рисунке 4.
- •2. Исследовательская часть
- •2.1. Программная реализация системы
- •Int nOperationType) {
- •VirtMemBuffer, int count, int offset) {
- •Int count, int offset) {
- •Int nStart; // начало блока в оперативной памяти
- •Int nLength; // длина блока
- •Int nProcess; // номер процесса (0-99), которому выделен блок (255 -
- •Int nOperationType);
- •VirtMemBuffer, int count, int offset);
- •Int count, int offset);
- •4.3 Dllfunc int osTranslateAddress2(int nProcess, int nSegment, int
- •2.3. Руководство пользователя.
1.2 Обзор методов и алгоритмов работы подсистемы управления
оперативной памятью.
Функции ОС по управлению памятью. Под памятью здесь подразумевается
оперативная память компьютера. В отличие от памяти жесткого диска, которую
называют внешней памятью, оперативной памяти для сохранения информации
требуется постоянное электропитание.
Память является важнейшим ресурсом, требующим тщательного управления со
стороны мультипрограммной операционной системы. Особая роль памяти
объясняется тем, что процессор может выполнять инструкции протравы только в
том случае, если они находятся в памяти. Память распределяется как между
модулями прикладных программ, так и между модулями самой операционной
системы.
В ранних ОС управление памятью сводилось просто к загрузке программы и ее
данных из некоторого внешнего накопителя (перфоленты, магнитной ленты или
магнитного диска) в память. С появлением мультипрограммирования перед ОС
были поставлены новые задачи, связанные с распределением имеющейся памяти
между несколькими одновременно выполняющимися программами.
Функциями ОС по управлению памятью в мультипрограммной системе являются:
отслеживание свободной и занятой памяти;
выделение памяти процессам и освобождение памяти по завершении процессов;
вытеснение кодов и данных процессов из оперативной памяти на диск (полное
или частичное), когда размеры основной памяти не достаточны для размещения в
ней всех процессов, и возвращение их в оперативную память, когда в ней
освобождается место;
настройка адресов программы на конкретную область физической памяти.
Помимо первоначального выделения памяти процессам при их создании ОС
должна также заниматься динамическим распределением памяти, то есть
выполнять запросы приложений на выделение им дополнительной памяти во
время выполнения. После того как приложение перестает нуждаться в
дополнительной памяти, оно может возвратить ее системе. Выделение памяти
случайной длины в случайные моменты времени из общего пула памяти
приводит к фрагментации и, вследствие этого, к неэффективному ее
использованию. Дефрагментация памяти тоже является функцией операционной
системы.
Во время работы операционной системы ей часто приходится создавать
новые служебные информационные структуры, такие как описатели процессов и
потоков, различные таблицы распределения ресурсов, буферы, используемые
процессами для обмена данными, синхронизирующие объекты и т. п. Все эти
системные объекты требуют памяти»» В некоторых ОС заранее (во время
установки) резервируется некоторый фиксированный объем памяти для
системных нужд. В других же ОС используется более гибкий подход, при
котором память для системных целей выделяется динамически. В таком случае
разные подсистемы ОС при создании своих таблиц, объектов, структур и т. п.
обращаются к подсистеме управления памятью с запросами.
Защита памяти — это еще одна важная задача операционной системы, которая
состоит в том, чтобы не позволить выполняемому процессу записывать или
читать данные из памяти, назначенной другому процессу. Эта функция, как
правило, реализуется программными модулями ОС в тесном взаимодействии с
аппаратными средствами.
Типы адресов. Для идентификации переменных и команд на разных этапах
жизненного цикла программы используются символьные имена (метки),
виртуальные адреса и физические адреса.
Символьные имена присваивает пользователь при написании программы на
алгоритмическом языке или ассемблере.
Виртуальные адреса, называемые иногда математическими, или логическими
адресами, вырабатывает транслятор, переводящий программу на машинный язык.
Поскольку во время трансляции в общем случае не известно, в какое место
оперативной памяти будет загружена программа, то транслятор присваивает
переменным и командам виртуальные (условные) адреса, обычно считая по
умолчанию, что начальным адресом программы будет нулевой адрес.
Физические адреса соответствуют номерам ячеек оперативной памяти, где в
действительности расположены' или будут расположены переменные и команды.
Совокупность виртуальных адресов процесса называется виртуальным адресным
пространством. Диапазон возможных адресов виртуального пространства у всех
процессов является одним и тем же. Например, при использовании 32-разрядных
виртуальных адресов этот диапазон задается границами 0000000016и FFFFFFFF16.
Тем не менее каждый процесс имеет собственное виртуальное адресное
пространство — транслятор присваивает виртуальные адреса переменным и
кодам каждой программе .
Сегментное - страничное распределение. Данный метод представляет собой
комбинацию страничного и сегментного механизмов управления памятью и
направлен на реализацию достоинств обоих подходов.
Виртуальная память делится на сегменты, а каждый сегмент - на страницы.
Все современные ОС используют именно такой способ организации.
Рассмотрим схему управления памятью, основанную на комбинировании
сегментного и страничного механизмов виртуальное пространство процесса
делится на сегменты, а каждый сегмент, в свою очередь, делится на
виртуальные страницы. Первое отличие состоит в том, что виртуальные
страницы нумеруются не в пределах всего адресного пространства процесса, а
в пределах сегмента. Виртуальный адрес в этом случае выражается тройкой
(номер сегмента, номер страницы, смещение в странице).
Загрузка процесса выполняется операционной системой постранично, при
этом часть страниц размещается в оперативной памяти, а часть — на диске.
Для ________83 каждого процесса создается собственная таблица сегментов, а для
каждого сегмента — своя таблица страниц. Адрес таблицы сегментов
загружается в специальный регистр процессора, когда активизируется
соответствующий процесс.
Рисунок 1 - Еще одна схема преобразования виртуального адреса в физический для
сегментно-страничной организации памяти
Таблица страниц содержит дескрипторы страниц, содержимое которых
полностью аналогично содержимому ранее описанных дескрипторов страниц.
А вот таблица сегментов состоит из дескрипторов сегментов, которые
вместо информации о расположении сегментов в виртуальном адресном
пространстве содержат описание расположения таблиц страниц в
физической памяти.
На рисунке выше показана схема преобразования виртуального адреса в
физический для данного метода.
По номеру сегмента, заданному в виртуальном адресе, из таблицы
сегментов извлекается физический адрес соответствующей таблицы
страниц.
По номеру виртуальной страницы, заданному в виртуальном адресе,
из таблицы страниц извлекается дескриптор, в котором указан номер
физической страницы.
К номеру физической страницы пристыковывается младшая часть
виртуального адреса — смещение.
Виртуальное пространство процесса делится на сегменты, а каждый сегмент в
свою очередь делится на виртуальные страницы, которые нумеруются в пределах
сегмента. Оперативная память делится на физические страницы. Загрузка
процесса выполняется операционной системой постранично, при этом часть
страниц размещается в оперативной памяти, а часть на диске. Для каждого
сегмента создается своя таблица страниц, структура которой полностью
совпадает со структурой таблицы страниц, используемой при страничном
распределении. Для каждого процесса создается таблица сегментов, в которой
указываются адреса таблиц страниц для всех сегментов данного процесса. Адрес
таблицы сегментов загружается в специальный регистр процессора, когда
активизируется соответствующий процесс.
Данный метод представляет собой комбинацию страничного и
сегментного механизмов управления памятью и направлен на реализацию
достоинств обоих подходов.
Так же как и при сегментной организации памяти, виртуальное адресное
пространство процесса разделено на сегменты. Это позволяет определять
разные права доступа к разным частям кодов и данных программы.
Перемещение данных между памятью и диском осуществляется не
сегментами, а страницами. Для этого каждый виртуальный сегмент и
физическая память делятся на страницы равного размера, что
позволяет более эффективно использовать память, сократив до минимума
фрагментацию.
В большинстве современных реализаций сегментно-страничной организации
памяти в отличие от набора виртуальных диапазонов адресов при
сегментной
организации памяти (рисунок 2, а) все виртуальные сегменты образуют
одно непрерывное линейное виртуальное адресное пространство (рисунок 2, б).
Координаты байта в виртуальном адресном пространстве при сегментно-
страничной организации можно задать двумя способами. Во-первых,
линейным виртуальным адресом, который равен сдвигу данного байта
относительно границы общего линейного виртуального пространства, во-
вторых, парой чисел, одно из которых является номером сегмента, а другое
— смещением относительно начала сегмента. При этом в отличие от
сегментной модели, для однозначного задания виртуального адреса вторым
способом необходимо каким-то образом указать также начальный
виртуальный адрес сегмента с данным номером. Системы виртуальной
памяти ОС с сегментно-страничной организацией используют второй способ,
так как он позволяет непосредственно определить принадлежность адреса
некоторому сегменту и проверить права доступа процесса к нему.
Рисунок 2 - Два способа сегментации
Для каждого процесса операционная система создает отдельную таблицу
сегментов, в которой содержатся описатели (дескрипторы) всех сегментов
процесса. Описание сегмента включает назначенные ему права доступа и
другие характеристики, подобные тем, которые содержатся в дескрипторах
сегментов при сегментной организации памяти. Однако имеется и
принципиальное отличие. В поле базового адреса указывается не начальный
физический адрес сегмента, отведенный ему в результате загрузки в
оперативную память, а начальный линейный виртуальный адрес сегмента в
пространстве виртуальных адресов (на рис. 5.20 базовые физические адреса
обозначены SI, S2, S3, а базовые виртуальные адреса — fl, f2, f3).
Наличие базового виртуального адреса сегмента в дескрипторе
позволяет однозначно преобразовать адрес, заданный в виде
пары (номер сегмента,смещение в сегменте), в линейный виртуальный
адрес байта, который затем преобразуется в физический адрес страничным
механизмом.
Деление общего линейного виртуального адресного пространства процесса
и физической памяти на страницы осуществляется так же, как это делается
при страничной организации памяти. Размер страниц выбирается равным
степени двойки, что упрощает механизм преобразования виртуальных
адресов в физические. Виртуальные страницы нумеруются в пределах
виртуального адресного пространства каждого процесса, а физические
страницы — в пределах оперативной памяти. При создании процесса в
память загружается только часть страниц, остальные загружаются по мере
необходимости. Время от времени система выгружает уже ненужные
страницы, освобождая память для новых страниц. ОС ведет для каждого
процесса таблицу страниц, в которой указывается соответствие виртуальных
страниц физическим.
Базовые адреса таблицы сегментов и таблицы страниц процесса
являются частью его контекста. При активизации процесса эти адреса
загружаются в специальные регистры процессора и используются
механизмом преобразования адресов.
Преобразование виртуального адреса в физический происходит в два
этапа (рисунок 3):
