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

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

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

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

Добавлен: 19.10.2024

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

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

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

обновления, то дерево полностью регенерируется н ре­ зервное пространство создается заново. Точный процент резерва является параметром программы обновления. Его значение в данный момент времени зависит от спо­ соба обновления справочника системы и ж е л а е м о г о пе­ риода регенерации. Кроме того, заметим, что требова­ ния при обновлении справочника обычно менее строгие, чем при обновлении файлов, поэтому 10%-ное значение

резерва

по Л а н д а у е р у

адекватно, по-видимому, д л я боль­

шинства

систем.

 

 

 

В т а б л . 6-1

и на

рис.

6-1 изображен декодер с

усе­

чением

имен.

П о д о б н а я

стратегия не подходит для

ре­

ального случая представления ключа в форме Имя/Ве ­ личина (процедура усечения может разрушить всю Ве­ личину или ее значительную часть) . В этом случае воз­ можны два подхода. П е р в ы й состоит в усечении X сим­ волов в Имени и У в Величине и создании фрагмента ключа из двух фрагментов путем их объединения. Дру ­ гой подход более гибкий, т а к к а к он дает возможность создать конструкцию деревьев, приспособленную к усе­ ченным Величинам. При этом создается двухуровневая иерархия деревьев, где первый уровень — это справоч­ ник Имен, а второй содержит справочники Величин. Пре­

имущество такой иерархии состоит в

том, что фрагмент

Имени

не надо

повторять с к а ж д ы м

фрагментом

Вели­

чины.

Кроме

того, к а ж д о е дерево

Величин

может

впринципе иметь фрагмент своей длины, хотя все

фрагменты

внутри

одного и того ж е

дерева

одинаковы

по длине.

 

 

 

 

К р о м е

быстрого

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

больших

справочни­

ков и относительно простого программирования, другое преимущество дерева состоит в возможности поиска по диапазону . Например, запрос 1 на рис. 4-2 вызывает по­

иск ключа

в диапазоне от

AGE/21 до AGE/30. Системе

з а р а н е е

не

известно',

есть

ли в

файле действительные

значения

ключевого

имени

AGE,

поэтому желательно

провести поиск по списку имеющихся ключей. М о ж н о

написать

программу, которая

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

дере­

во И м е н

(в данном

случае она

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

AGE)

и направлять

его в

дерево

Величин. З а т е м она

опреде­

лит .границу

наименьшей величины (21) и просмотрит

дерево снизу

вверх,

начиная

с этой точки и кончая

верх­

ней границей

(30). Все величины, полученные при этом

просмотре, декодируются в

соответствующие

адресные

104


ссылки. Кроме того, для

к а ж д о й из них

проводится

по­

иск по списку.

 

 

 

В конце этой главы

будут выведены

формулы, с

по­

мощью которых можно рассчитать число дорожек и уров­ ней, требуемых для словаря ключей заданного объема.

6-2. ДЕРЕВО ОДНОЗНАЧНО УСЕЧЕННЫХ КЛЮЧЕВЫХ СЛОВ ПЕРЕМЕННОЙ ДЛИНЫ

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

слова, д а ю щ е е

однозначно

закодированный фрагмент.

Набор правил кодирования приведен во втором

и

треть­

ем

столбцах табл .

6-1. К а к

и в

случае справочника

с по­

стоянными

(по длине) словами, ключевые

слова

вначале

упорядочивают

в

алфавитном

порядке

(это

показано

в

левом

столбце

т а б л и ц ы ) .

З а т е м

(как

показано

во втором столбце) получается однозначно закодирован ­

ный фрагмент. Д л я этого

используется

наименьшее,

на­

чиная

слева, количество символов

(требуемое

д л я одно­

значного различения данного полного имени

от

непо­

средственно

предшествующего

имени) .

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

В А В В Е Т (первое имя

в

данной

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

можно однозначно закодировать просто буквой

В;

BABSON отличается от В А В В Е Т

четвертой

буквой;

сле­

довательно,

д л я

того

чтобы отличать B A B S O N

от

ВАВВЕТ, требуется закодированный фрагмент BABS *.

Аналогично,

B A I L E Y

отличается

от B A B S O N

буквами

B A I ,

a B A K E R

от B A I L E Y — б у к в а м и

ВАК .

Эта

про­

цедура применяется ко всему набору ключей;

результат

этого показан во втором столбце табл . 6-1.

 

 

 

 

Д л я иллюстрации того, как

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

фрагмен­

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

в

памяти

на дисках

и к а к

это

дерево

декодируется,

будут

рас­

смотрены д в а примера. В первом примере все 15 имен (табл. 6-1) р а з м е щ а ю т с я на одной дорожке . Во втором, более общем примере будет рассмотрен случай много­ уровневого дерева .

* Очевидно, что BABSON в этом случае можно закодировать фрагментом ВА. (Прим. пер.) >

Г105


 

Распределение

отдельной дорожки

Т а б л и ц а 6-2

 

 

Номер записи

Содержание дорожкн

Комментарии

 

1

6,1

Ключ длимы 6 (1 ключ)

 

BLACKW/AI.L,

Ссылка на ключ BLACKWELL

 

 

(в области файла

/1,) с длиной

 

 

списка Z-i

 

2

5,1

Ключ длины 5 (1

ключ)

 

B E L L S / A 2 / L ,

 

 

34,3 Ключ длины 4 (3 ключа)

C A R T / A S / L 3 B E L M / A 4 / L t BABS/A5 /L5

43,2

B A K / A 6 / L 0

BAI/A,'L,

5

2,4

 

 

D Y / A . / L ,

-

 

C R / A . / L ,

 

B L / A 1 0 / 1 I 0

 

 

B E / A . . / L , ,

 

6

1,4

 

 

E / A i 2 / L , 2

 

 

D / A 1 3 / L I 3

 

 

C / A , . , / L u

 

 

B / A 1 6 / L 1 5

 

Р а с п р е д е л е н ие

отдельной

дорожки

показано

в табл . 6-2. Таблица

состоит из

трех столбцов.

В первом

столбце указывается номер записи на дорожке . Во вто­

ром — содержание д о р о ж к и

внутри каждого поля запи­

си (каждое поле отмечается

при помощи разделительной

черты) . В третьем столбце содержатся комментарии, от­

носящиеся к записям . Процедура состоит в перестанов­

ке фрагментов в порядке уменьшения

их длин. В резуль­

тате этого самый длинный фрагмент

B L A C K W , содержа­

щий шесть букв, появляется в заголовке списка; затем

идет пятибуквенный фрагмент B E L L S

и т. д. Первое поле

в записи называется заголовком . В нем содержатся два

вида

информации

. Первый — это длина фрагмента, рав­

ная

6 д л я записи

1, а

второй — количество

фрагментов,

содержащееся в

записи

(в данном случае

1). Следова-

106


тельно, программа декодирования осуществляет чтение фрагмента длины 6 с соответствующими адресом связи и длиной списка - и в записи будет только один такой триплет. Bo-второй логической записи содержится един­

ственная тройка,

длина фрагмента

в

которой

равна 5.

В третьей записи содержатся три

тройки

с

длинами

фрагментов

4, а

именно

CART, B E L M

и BABS .

Таким

образом, в целом

д о р о ж к а

планируется

в порядке

умень­

шения длин

фрагментов.

Вообще

говоря,

эта

д о р о ж к а

является одной из многих, содержащих списки закоди­ рованных фрагментов.

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

триваемой

дорожке .

В

этом

случае физическая

запись

(т. е. д о р о ж к а )

считывается

в

оперативную

память

це­

ликом. П е р в а я

запись

указывает,

что

шесть

букв

имени B A B S O N надо

сравнить

с фрагментом

B L A C K W ,

т а к ж е состоящим

из

шести

букв, — сравнение

окажется

неудачным.

Тогда программа

удалит

одну

букву

из

фрагмента B A B S O N и сравнит

первые пять букв с пяти-

буквенньш

фрагментом

B E L L .

Сравнение опять

окажет ­

ся неудачным. З а т е м программа сравнит первые четыре

буквы В AB S с

фрагментами

CART,

B E L M и

BABS .

В итоге слово B A B S O N однозначно декодируется в со­

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

адрес связи

Ай. Неоднозначность

деко­

дирования слов

B E L L S O N и

B E L L

(в предыдущем де­

реве) можно уничтожить, если закодировать их соответ­

ственно как B E L L S

и

BE.

 

Однозначность

поиска гарантируется т а к ж е

сравне­

нием полного ключа,

хранимого в найденной

записи,

с з а д а н н ы м при поиске ключом. Например, если оши­

бочное

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

B I N D E R привело

к фраг­

менту В

(соответствующему

слову В А В В Е Т ) ,

то

ошибка

обнаружится при обращении к записи файла и

сравне­

нии хранимого в ней

полного .ключевого

слова

В А В В Е Т

с з а д а н н ы м ключом

B I N D E R .

 

 

 

Д л я

добавления

в справочник нового

ключевого сло­

ва применяется следующая процедура: слово вначале,

декодируется д л я обнаружения избыточного

фрагмента

(если избыточно закодированного фрагмента

нет,

то

в качестве фрагмента берется н а ч а л ь н а я

буква с л о в а ) .

Затем разыскивается избыточное ключевое слово,

у ж е

имеющееся в файле. При этом возможны

два

случая.

107


1.

Новое слово

алфавитно

предшествует

старому

слову.

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

слову ставится

в соответ­

ствие ранее закодированный фрагмент, а старому слову

назначается

 

более

длинный

фрагмент

для

отличия

его

от нового слова . Например, пусть в существующий

спра­

вочник

надо

занести

имя

B L A B .

Оно

декодируется

в фрагмент

B L , ранее назначенный слову B L A C K . Слово

B L A B алфавитно

предшествует слову

B L A C K ,

поэтому

слову

B L A B

н а з н а ч а е т с я

фрагмент

B L , а

д л я B L A C K

создается

фрагмент B L A C

(чтобы

отличать

его

от

B L A D ) . Н а

остальную

часть

списка

это

не

влияет,

пото­

му

что следующее

слово

B L A C K W E L L ,

очевидно,

не совпадает с более коротким фрагментом

слова B L A C K

и тем более не может совпасть с любым более

длинным

фрагментом .

 

 

 

 

 

 

 

 

 

 

 

2.

При

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

обнаруживается,

что

новое

слово

 

алфавитно

следует

за

старым.

В этом случае

за

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

старого слова.

 

 

 

 

Рассмотрим

создание трехуровневого дерева

д л я 15

ключевых

слов

(рис. 6-2). Создание дерева

начинается

с правого

края .

К а ж д а я логическая

запись

отделяется

внутри д о р о ж к и

двойными линиями.

К а к и

в

случае

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

ответствующую запись помещается

у к а з а т е л ь

ссылки

на следующую запись более высокого уровня.

З а т е м

начинается новая д о р о ж к а низшего

уровня. П р и

исполь­

зовании резервного пространства д л я дерева

ключевых

слов переменной длины требуется подсчет

количества

фрагментов ключей, помещенных

на

данную

дорожку .

Это количество может зависеть от переменной длины

самих закодированных

фрагментов,

а т а к ж е

от того,

что

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

фрагменты

одинаковой

длины

можно

сгруппировать

под

одним и

тем

ж е

заголовком .

 

Д л я

определенности

предположим

в этом

примере,

что

в

к а ж д о й

д о р о ж к е с о д е р ж а т с я

четыре

фрагмента .

Это

означает,

что

в случае

трехуровневого

дерева

на

первых двух уровнях требуются только две

возможности

ветвления (для

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

на

третьем,

уровне

108