Файл: Левковиц, Д. Структуры информационных массивов оперативных систем.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 19.10.2024

Просмотров: 94

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

р а з в е т в л я ю т ся на три ветви. В конце этой части при про­

ведении выборочного расчета будет показано,

что на

практике фактор ветвления обычно составляет

несколь­

ко сотен.

 

Дерево, показанное на рис. 6-1, является трехуровне­ вым деревом; первый уровень м о ж н о хранить в опера­ тивной памяти, а остальные два уровня — в З У П Д . Дл я иллюстрации определенной стратегии распределения па­

мяти, применяемой при использовании

некоторых типов

З У П Д , предположим, что устройства

памяти относятся

ко второму или третьему типам, определенным в гл. 2. Если дерево нужно хранить на диске с неподвижны­ ми (фиксированными) головками или на барабане, то

последующие рассуждения остаются справедливыми.

Однако

в этом случае

не имеет

значения, на каких до­

р о ж к а х

хранятся вершины дерева . Н а

рисунке

обо­

значает /-ю д о р о ж к у і-го цилиндра.

 

 

Н а ч и н а я с нижнего уровня дерева, фрагменты клю­

чей, соответствующие

полным

ключам,

можно

читать

в алфавитном порядке слева направо вместе с символи­ ческими адресами Аіз, Аі2, Аіи ..., Ai. Формат каждого поля внутри д о р о ж к и следующий: фрагмент усеченного

ключа/адреса связи с заголовком списка

или с дорожкой,

в которой хранится следующий

уровень/длина списка.

При создании дерева его

вершины

приписываются

фрагментам ключей-терминов в прямом или обратном

порядке.

В рассматриваемом примере выбран обратный

порядок,

поэтому

последние

три

фрагмента

( E Y E R

D Y S O ,

D Ö N L ) помещаются

в правую д о р о ж к у

наиболе

глубокого

уровня

Ті3.

Соответствующие длины

списков

Л І / L I , А2/Ьо

и A3/L3 вместе с

символическим

заголовком

адресов

списка т а к ж е

вводятся в

запись.

Последний

фрагмент ключа на д о р о ж к е называется интервалом до­

рожки . Он т а к ж е

вводится в

д о р о ж к у

второго

уровня

в качестве ссылки. Следовательно,

указателем последней

записи д о р о ж к и Г 1

0

является

E Y E R / Г І З , обозначающий

что E Y E R является

последним

фрагментом ключа

на до­

р о ж к е

третьего уровня

Тіз. П о л е

длины

списка,

равное

нулю

( 0 ) , указывает, что эта ссылка относится к другой

д о р о ж к е в справочнике,

а не к

списку

в

файле .

 

 

Следующие три фрагмента

ключей

(начиная

с

ниж ­

ней части с п и с к а ) — э т о

C R O Z ,

C A R T

и C A R D ;

они

в свою очередь вводятся на следующую доступную до­ рожку (Т&) в соответствии с их адресами связи и дли-

100


нами списков. Последний

фрагмент на д о р о ж к е — C R O Z .

Он

вводится

на д о р о ж к у

второго

уровня

ТІ0 как

ссылка

на

позицию

следующей

записи

и имеет

ссылку

и

нулевую длину списка.

 

 

 

 

 

К а к показано на рис.

6-1, т р а к т о в к а следующих трех

фрагментов аналогична; этим завершается д о р о ж к а вто­ рого уровня Гіп. Последний фрагмент дорожки Гю вво­ дится в запись первого уровня, которая хранится в опе­

ративной

памяти к а к

EYER/Тю и у к а з ы в а е т

последнюю

запись на

д о р о ж к е TiQ

(EYER) . Д л и н а списка

не исполь­

зуется, так как адреса связи уровня, хранимого в опера­

тивной памяти,

не

ведут

непосредственно

к

записям

файла .

 

 

 

 

 

Следующие

три

записи

т а к ж е хранятся

в

обратном

порядке. Это В А К Е ,

B A I L

и BABS . Они помещаются на

дорожку третьего уровня Т, а последний фрагмент име­

ет ссылку на

д о р о ж к у

Г 0 0

в виде

В А К Е / Г О і / 0 .

В списке

остается

еще

один

фрагмент — В А В В . Н а

дорожке Гоо свободны две позиции второго уровня, по­ этому дополнительная д о р о ж к а третьего уровня не нуж ­

на; В А В В помещается

во

вторую

запись

д о р о ж к и

Too

вместе с адресом связи

Аіз

и длиной

списка

L 1 3 . Послед­

ним фрагментом дорожки

второго

уровня

является

те­

перь В А К Е . Он вводится в запись первого уровня в ви­ де ссылки ВАКЕ/ГооЭтим завершается создание трех­

уровневого

дерева

д л я

15

ключей, список которых

дан

в табл . 6-1.

 

 

 

 

 

 

 

 

 

 

Необходимо отметить, что в действительности

имеет­

ся только

13

ключевых ссылок, т а к

как два

ключа

де­

кодируются неоднозначно. Это имена

B E L L и

B E L L S O N ,

которые оба сводятся к B E L L , и B L A C K и B L A C K W E L L ,

которые сводятся к В L A C .

 

 

 

 

 

 

 

Декодирование

с помощью

этого

дерева

выполняется

следующим

 

образом .

Пусть

надо

декодировать

 

имя

CARD ER. Д л я получения фрагмента

ключа

выделяются

первые четыре буквы CARD. Поиск на уровне оператив­

ной памяти дает, что CARD старше (при алфавитном

упорядочении), чем В А К Е ,

но

младше, чем

EYER;

сле­

довательно, о б р а щ а ю т с я к

д о р о ж к е

второго

 

уровня

Гю-

Эта д о р о ж к а

просматривается

и определяется,

что

CARD

старше, чем B L A C , но младше, чем CROZ; поэтому про­

исходит обращение к д о р о ж к е

третьего уровня Г 1 2 . Вну­

три д о р о ж к и

Тіі точное отображение CARD

 

содержится

в первой записи.

Н а

этом

декодирование

завершается

101


Его

результатом являются

адрес

связи

Л 6

и длина спис­

ка

Ьв.

 

 

 

 

 

 

 

 

 

С помощью этого дерева все ключи,

кроме

ВАВВЕТ,

будут

декодироваться

за

два

обращения

к

диску,

а В А В В Е Т — за одно обращение. Если следовать

указан­

ной

схеме нумерации

дорожек,

то при

первом

обраще­

нии (ко второму уровню дерева)

требуется

перемещение

головок

и поворот дорожки,

в то время

как второе обра­

щение (к третьему уровню) происходит внутри одного цилиндра и требует лишь поворота диска.

Вообще говоря, в вершине дерева надо представлять максимально возможное количество фрагментов. Это

объясняется тем, что к а ж д а я

вершина занимает

в

З У П Д

объем,

соответствующий физической записи. Р а з м е р

этой

записи

ограничен объемом

З У П Д

либо оперативной

па­

мяти.

Обычно

физическая

запись

соответствует

полной

д о р о ж к е

(например, в 3 000

символов) . Если

тройка

фрагмент ключа/адрес/длина списка состоит из

15

сим­

волов,

то

в к а ж д у ю вершину дерева можно

поместить

200 фрагментов

и декодировать с помощью трехуровне-

го дерева

(200) 3 = 8 млн. ключей. Это означает,

что один

выбор из 8 млн. ключей можно сделать за три обраще­

ния к З У П Д (если верхний уровень,

требующий 3 000

символов, не хранится в оперативной

п а м я т и ) , и за два

обращения, если верхний уровень хранится в оператив­ ной памяти .

М о ж н о предположить, что вершина с максимальным количеством фрагментов используется только для созда­ ния небольшого упорядоченного дерева; однако ниже

будет показано, что это является

оптимальным

подхо­

дом .

 

 

 

 

 

Предположим, что

сравнения

в вершине,

хранимой

в оперативной памяти, производятся

последовательно

(на к а ж д о е сравнение

требуется

100

мксек,

т. е.

около

25 машинных циклов) . Тогда максимальное время по­ иска ключа внутри вершины составляет 20 мсек, а сред­ н е е — 10 мсек. Процедуру сравнения можно оптимизиро­ вать, применяя поиск с бинарным разбиением. Тогда на

сравнение и упорядочение интервала требуется 200

мксек.

Количество сравнений

равно в этом случае

log2 200 = 8,

а время поиска

внутри

вершины — 1,6

мсек.

Д л я срав­

нения заметим,

что

время

обращения

к З У П Д

обычно

составляет

20—500

мсек

(точнее, 60—100 мсек).

Следо­

вательно,

время

просмотра

большой вершины в

опера-

102


тнвной памяти незначительно по сравнению с временем обращения к отдельной вершине, хранимой в З У П Д (при использовании оптимального метода бинарногоразбие­ ния). Если просмотр не оптимизирован, это время со­ ставляет от 1/6 до 1/10 обычных времен обращения .

Чтобы иметь возможность оперативно обновлять файл, физические записи, с о д е р ж а щ и е вершины, не дол­

жны быть плотно упакованы, т. е. в конце записи

надо

оставлять некоторое

количество

резервного пространст­

ва,

обеспечивающего

расширение

вершины.

Л а н д а у е р

[Л.

12]

рекомендует

д л я большинства систем

(основан­

ных на различных способах обновления)

оставлять

в ре­

зерве 10% занимаемого объема памяти.

Пусть,

напри­

мер,

к

справочнику

надо

добавить ключевое

 

слово

BINDER . Сначала получается фрагмент

B I N D , который

старше, чем ВАКЕ, но младше, чем EYER, следователь­

но, обращаются

к д о р о ж к е Гю; B I N D младше, чем

B L A C ,

следовательно,

обращаются

к д о р о ж к е

Гц.

Поскольку

B I N D

старше,

чем

B E L M ,

но

младше,

чем B L A C , он

должен

находиться

м е ж д у

этими

двумя

фрагментами .

Если предположить, что в оперативной памяти есть бу­ ферная память д л я ввода-вывода, то физическая запись

передается в буферную память вывода,

причем

B I N D по­

мещается между B E L M и B L A C вместе с соответствую­

щим адресом ссылки и длиной списка

(равной

единице,

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

ку Гц. Если в результате

предшествующих

обновлений

резервное

пространство

было израсходовано

(10%

ре­

зервного

пространства

на

д о р о ж к е

в 200 ключей

дает

возможность сделать 20

обновлений

до переполнения),

а дерево требуется оставить упорядоченным, то послед­

ний

фрагмент

проталкивается на следующую дорожку

того

ж е самого

уровня, т. е. следующую дорожку и до­

рожку более высокого уровня надо обновлять совместно.

Например,

пусть

на

д о р о ж к у

Ті2 добавляется

B L A C ,

а интервалом дорожки Гц становится затем

B I N D

(за­

меняющий

B L A C

на

д о р о ж к е Гю). Если д о р о ж к а

Г 1 2

не

имеет достаточного резерва, то на дорожке

Тіз

передви­

гается CROZ и т. д. Если получены сведения об исчер­

пании резервного

пространства

д о р о ж е к или

среднего

количества

продвижений, необходимых д л я

выполнения

103