Файл: Левковиц, Д. Структуры информационных массивов оперативных систем.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