IA-32 Memory management Overview

Перевод 3 главы руководства «Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3 (3A & 3B):System Programming Guide».

Средства управления памятью (memory management facilities) архитектуры IA-32 делятся на две части: сегментация и paging (страничный механизм). Сегментация предоставляет механизм изоляции отдельных сегментов кода, данных и стека модулей, так, что много программ (или задач) может выполняться на одном процессоре не мешая друг другу. Страничная организация (paging) предоставляет механизм реализации традиционный demand paged механизм виртуальной памяти, когда части выполняющихся программ отображаются на физическую память по необходимости. Страничная организация может также использоваться для изоляции между задачами. Когда Операционная Система выполняется в защищённом режиме, те или иные формы сегментации должны использоваться. В защищённом режиме нет возможности отключения сегментации. Использование же страничной организации является опциональным.

Эти два механизма (сегментация и страничный механизм) могут быть сконфигурированы для любых однозадачных, мультизадачных и многопроцессорных систем использующих общую память.

Как показано на рисунке 3-1, сегментация предоставляет механизм доступного процессору адресного пространства (называемого линейной адресное пространство), на меньшие защищенные адресные пространства, называемые сегментами. Сегменты могут использоваться для хранения кода, данных и стека программ или для хранения системных структур данных, таких как TSS и LDT). Если процессор выполняет более одной программы или задачи, каждой программе может быть назначен отдельный набор собственных сегментов. Процессор контролирует границы между этими сегментами и гарантирует, что программы не могут влиять на другие программы записывая что-то в чужие сегменты других программ. Сегментация позволяет также установить тип разрешенных операций для разных типов сегментов.

Все сегменты в системе содержатся в линейном адресном пространстве процессора. Чтобы найти байт в определенном сегмента, логический адрес (также называемый дальним указателем) должен быть задан. Логический адрес состоит из селектора сегмента и смещения. Селектор сегмента — уникальный идентификатор сегмента. Среди других вещей, селектор предоставляет смещение внутри таблицы дескрипторов (такой как глобальная таблица дескрипторов GDT) до структуры данных называемой дескриптор сегмента. Каждый сегмент описывается своим дескриптором сегмента, определяющим размер сегмента, права доступа, уровень привилегий сегмента, тип сегмента и адрес первого байта сегмента в линейном адресном пространстве процессора (называемый базовым адресом сегмента). Базовый адрес сегмента складывается со смещением взятым из логического адреса для получения адреса данного байта в линейном адресном пространстве. Т.о. базовый адрес плюс смещение формируют линейный адрес в линейном адресном пространстве процессора.


(Иллюстрация из руководства Intel)

Если paging (страничный механизм) не используются, тогда линейное адресное пространство процессора непосредственно отображается на физическое адресное пространство процессора. Физическое адресное пространство определяется как диапозон адресов, которые процессор может генерировать на своей адресной шине.

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

Страничный механизм предоставляет «виртуальную память» — абстракцию, в которой большое линейное адресное пространство эмулируется небольшим количеством физической памяти (RAM или ROM) и некоторым дисковым хранилищем. При использовании страничного механизма, каждый сегмент разделяется на страницы (обычно 4К-байтного размера), которые сохраняются либо в физической памяти либо на диске. Операционная система организует директорий страниц и набор табиц страниц для загрузки нужных страниц по необходимости. Когда программа или задача пытается получить доступ к адресу в линейном адресном пространстве, процессор использует директорий страниц и таблицы страниц для трансляции линейного адреса в физический адрес и затем выполняет требуемые операции (чтение или запись) адреса в памяти.

Если страница, к которой запрошен доступ, не находится в данный момент в физической памяти, процессор прерывает выполнение программы (генерацией page-fault исключения). Операционная система затем загружает страницу в физическую память с диска и продолжает выполнение программы.

Когда страничный механизм должным образом реализован в операционной системе, процесс «своппинга» страниц между физической памятью и диском незаметен для приложений. Даже программы, написаные для 16-битных IA-32 процессоров работающие в виртуальном 8086-режиме, могут работать в присутствии страничного механизма.

Продолжение здесь…

Оставьте комментарий