Виртуальная память и каналы
Виртуальная память представляет собой непрерывную для пользователя, с ней работающего, область памяти, которая может быть вложена в другую виртуальную память. Виртуальная память состоит из сегментов, связанных между собой в двунаправленную цепь. Каждому сегменту известно его положение относительно нижнего логического уровня. Работа с виртуальной памятью происходит через канал, выделенный для нее. Канал – это набор характеристик описывающих: где расположена виртуальная память, и в каком ее месте мы находимся. Количество каналов ограничено, поэтому канал выделяется той виртуальной памяти, которая нужна в данный момент. Система имеет набор каналов, которые могут иметь ссылку на виртуальную память, либо быть незанятыми. Первые 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.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий