Разработка прототипа системы управления объектно-ориентированной базой данных
938aad90

Виртуальная память и каналы


Виртуальная память представляет собой непрерывную для пользователя, с ней работающего, область памяти, которая может быть вложена в другую виртуальную память. Виртуальная память состоит из сегментов, связанных между собой в дву­направленную цепь. Каждому сегменту известно его положение относительно нижнего логического уровня. Работа с виртуальной памятью происходит через канал, выделенный для нее. Канал – это набор характеристик описывающих: где расположена виртуальная память, и в каком ее месте мы находимся. Количество каналов ограничено, поэтому канал выделяется той виртуальной памяти, которая нужна в данный момент. Система имеет набор каналов, которые могут иметь ссылку на виртуальную память, либо быть незанятыми. Первые 5 каналов – это базовые каналы, отображенные на физические носители (оперативная память, файл). Вторые 5 каналов – каналы виртуальной памяти, хранящие каталоги объектов. Остальные каналы предназначены для работы с объ­ектами. Все каналы основываются на каких-либо других каналах, образуя, в общем случае, 5 независимых деревьев. Корень – один из базовых каналов (0..4). Одна и та же виртуальная память не может быть загружена в два канала. При переходе от верхнего канала к нижнему выполняется трансляция адреса.

Рис 3: Связь каналов с хранилищами объектов

Таблица 2: Параметры канала

Параметр канала

Семантика

NCHAN



Номер текущего канала

LOWCH

Нижний канал; в него вложен этот канал

CHGCTX

Признак изменения данных заголовка фрагмента

TEKADR

Текущая позиция для чтения/записи

SYNCADDR

Адрес начала заголовка текущего сегмента в нижнем канале

TEKADR0

Позиция, соответствующая началу данных фрагмента

PREDADDR

Адрес заголовка предыдущего фрагмента (–1, если его нет)

NEXTADDR

Адрес заголовка следующего фрагмента (–1, если его нет)

BUSYLEN

Занятая длина

LEN

Выделенная длина

Таблица 3: Операции доступа к данным виртуальной памяти

Операция

Семантика (все операции работают с текущим каналом)

IBS

Чтение байта из канала

OBS

Запись байта в канал

GOTO

Переход по адресу в канале

@GOTO

Переход по смещению в канале

UPSIZE

Выделить доп. память в конце канала и встать на ее начало

DEFRAG

Сделать виртуальную память непрерывной на уровне нижнего канала (т.е. однофрагментной)

<
Начало виртуальной памяти соответствует нулевому значению TEKADR. Доступ осуществляется через операции позиционирования (GOTO и @GOTO), чтения байта (IBS) и записи байта (OBS). Остальные функции, реализуются через них (например, чтение длинного слова). К памяти может быть применена функция UPSIZE с аргументом, содер­жащим необходимое количество байт для выделения. Память может гаранти­ро­ванно вы­деляться до заполнения всей выделенной длины. При исчерпании выделенной длины, делается запрос к нижестоящему уровню о выделении дополнительной памяти. Если та­кой запрос применяется к каналу ниже 5-го, соответствующего дисковому файлу, файл увеличивается в размере, если его выделен­ная длина исчерпана. Если увеличение раз­мера файла невозможно из-за нехватки дискового пространства, то, в случае невоз­можности выделения памяти за счет упаковки, возбуждается ситуация NOMEMORY. При попытке доступа за пределы определенной вирту­альной памяти (например, чтение после расположения данных), возни­кает ситуация OUTDATA.


Содержание раздела