Сегментация со страничной организацией памяти: система MULГЮS

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

ничной организации, чтобы иметь дело только с теми страницами сегмента, которые нужны в данный момент.

Поддержка страничных сегментов реализована в нескольких важных для нас системах. В этом разделе мы рассмотрим первую из таких систем, MULTICS. В следующем разделе обратимся к более современной системе Intel x86 — вплоть до x86-64.

Операционная система MULTICS была одной из самых влиятельных из когда-либо созданных операционных систем, оказавших серьезное воздействие на такие довольно-таки несхожие темы, как UNIX, архитектура памяти x86, TLB-буферы и облачные вычисления. Ее создание началось с исследовательского проекта M.I.T., а в реальную жизнь она была запущена в 1969 году. Последняя MULTICS-система, проработавшая 31 год, была остановлена в 2000-м. Немногим операционным системам удалось прожить без существенных изменений столь долгую жизнь. Несмотря на весьма продолжительное существование операционных систем под названием Windows, Windows 8 не имеет ничего общего с Windows 1.0, за исключением названия и того факта, что она была написана компанией Microsoft.

Более того, идеи, проработанные в MULTICS, не утратили своей актуальности и полезности и в том виде, в котором они были сформулированы в 1965 году, когда была опубликована первая статья (Corbato и Vyssotsky, 1965). Поэтому мы сейчас потратим немного времени на рассмотрение одного из наиболее инновационных аспектов MULTICS — архитектуры виртуальной памяти. Дополнительные сведения о MULTICS можно найти по адресу www.multicians.org.

Система MULTICS работала на машинах Honeywell 6000 и их потомках и обеспечивала каждую программу виртуальной памятью размером вплоть до 218 сегментов, каждый из которых был до 65 536 (36-разрядных) слов длиной. Чтобы осуществить это, разработчики системы MULTICS решили трактовать каждый сегмент как виртуальную память и разбить его на страницы, комбинируя преимущества страничной организации памяти (постоянный размер страницы и отсутствие необходимости хранения целого сегмента в памяти, если используется только его часть) с преимуществом сегментации (облегчение программирования, модульности, защиты и совместного доступа).

Каждая программа в системе MULTICS использовала таблицу сегментов, в которой имелось по одному дескриптору на каждый сегмент. Поскольку потенциальное количество записей в таблице превышало четверть миллиона, сама таблица сегментов также являлась сегментом и была разбита на страницы. Дескриптор сегмента содержал индикатор того, находится ли сегмент в памяти или нет. Если какая-то часть сегмента присутствовала в памяти, считалось, что в памяти находится весь сегмент и его таблица страниц будет в памяти. Если сегмент находился в памяти, то его дескриптор (рис. 3.31, а) содержал 18-разрядный указатель на его таблицу страниц. Поскольку использовались 24-разрядные физические адреса, а страницы выстраивались по 64-байтным границам (предполагалось, что 6 бит низших разрядов адреса страницы — это 000000), для хранения в дескрипторе адреса таблицы страниц необходимо было только 18 бит. Дескриптор содержал также размер сегмента, биты защиты и несколько других полей. Дескриптор сегмента в системе MULTICS показан на рис. 3.31, б. Адрес сегмента во вспомогательной памяти находился не в дескрипторе сегмента, а в другой таблице, используемой обработчиком ошибки отсутствия сегмента.

Каждый сегмент представлял собой обыкновенное виртуальное адресное пространство и был разбит на страницы точно так же, как и несегментированная страничная память, рассмотренная ранее в этой главе. Обычный размер страницы был равен 1024 словам

Размер страницы

0 = 1024 слова --------

1 = 64 слова

0 = сегмент разбит

на страницы

1 = сегмент не разбит

на страницы

Биты различного -------------------

назначения

Биты защиты

б

Рис.

3.31. Виртуальная память в системе MULTICS: а — сегмент дескрипторов указывает на таблицы страниц; б — дескриптор сегмента. Числа означают длину полей

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

Адрес в системе MULTICS состоял из двух частей: сегмента и адреса внутри сегмента. Последний, в свою очередь, делился на номер страницы и слово внутри страницы (рис. 3.32).

Когда происходило обращение к памяти, выполнялся следующий алгоритм:

1. Номер сегмента использовался для нахождения дескриптора сегмента.

2. Проверялось, находится ли таблица страниц сегмента в памяти. Если таблица страниц присутствовала в памяти, определялось ее местоположение. Если таблица

в памяти отсутствовала, возникала ошибка отсутствия сегмента. При нарушении защиты возникала ошибка (происходило системное прерывание).

3. Изучалась запись в таблице страниц для запрашиваемой виртуальной страницы. Если страница не находилась в памяти, возникала ошибка отсутствия страницы. Если она была в памяти, из записи таблицы страниц извлекался адрес начала страницы в оперативной памяти.

4. К адресу начала страницы прибавлялось смещение, что давало в результате адрес в оперативной памяти, по которому располагалось нужное слово.

5. И наконец, осуществлялось чтение или сохранение данных.


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

Как вы теперь уже, безо всякого сомнения, догадались, если бы на практике предыдущий алгоритм выполнялся операционной системой для каждой команды процессора, работа программ не отличалась бы особой быстротой. В действительности аппаратура системы MULTICS содержала высокоскоростной буфер быстрого преобразования адреса (TLB) размером 16 слов, который был способен производить поиск параллельно по всем своим записям для заданного ключа. Этот процесс показан на рис. 3.34. Когда компьютер получал адрес, аппаратура адресации сначала проверяла наличие виртуального адреса в TLB. Если этот адрес присутствовал в буфере, она получала номер страничного блока прямиком из TLB и формировала фактический адрес слова, к которому происходило обращение, не выполняя поиск в сегменте дескрипторов или в таблице страниц.

Рис. 3.34. Простейший вариант TLB в системе MULTICS. На самом деле наличие страниц двух размеров делает строение TLB более сложным


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

3.7.3.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Сегментация со страничной организацией памяти: система MULГЮS:

  1. 34. Социальная организация как вид социальной системы. Типы социальных организаций
  2. Организация как система.
  3. Организация как закрытая и открытая система.
  4. Фабричная система организации труда.
  5. § 5.2. Свойства и функции системы управления в организации
  6. § 2. Банковская система России. Взаимоотношения Банка России с кредитными организациями
  7. ПРЕДСТАВЛЕНИЕ ПАМЯТИ
  8. 33. Понятие «социальная система» и социальной организации
  9. Гигиена памяти.
  10. укрепление памяти
  11. ТЕОРИЯ ПАМЯТИ
  12. V. 2. 5. Структура парциального хранилища памяти.
  13. Сила памяти
  14. 9.11. С ПОМОЩЬЮ ПАМЯТИ
  15. В психологии различают четыре типа памяти.
  16. V. 2. МОДЕЛЬ ПАРЦИАЛЬНОГО ХРАНИЛИЩА ПАМЯТИ ЧЕЛОВЕКА