Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Диплом К

.pdf
Скачиваний:
16
Добавлен:
23.03.2016
Размер:
1.22 Mб
Скачать

Модуль “Интерфейс оператора” реализует диалог администратора сети с про-

граммой-сервером. Он реализует функции создания и регистрации новых БД, отсоеди-

нения зарегистрированных БД, отображение текущих соединений пользователей с ба-

зами данных, ведение журнала операций и т.п.

Модуль “Диспетчер транзакций клиента” принимает транзакцию-результат с сер-

вера и передает ее на анализ в СУБД клиента.

Модуль “СУБД клиента” реализует трансляцию функций СУБД в программу– сервер с помощью транзакций-запросов. Кроме того в функции этого модуля входит реализация взаимодействия между документами и СУБД. Именно здесь конструируют-

ся считанные документы.

Модуль “Библиотека пользовательского интерфейса” содержит базовые объекты,

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

граммах-клиентах.

3.2.3. Диаграмма процессов.

Расположение частей системы и баз данных в вычислительной сети показано на рисунке 2. Из него можно сделать несколько заключений.

Во-первых, программа-сервер должна быть установлена на всех узлах сети, где размещена хотя бы одна БД.

Во-вторых, одна программа-сервер может обслуживать несколько программ-

клиентов, расположенных на разных узлах сети, причем на каждом узле может функци-

онировать несколько программ-клиентов.

В-третьих, программа-сервер и программа-клиент могут быть расположены на од-

ном узле сети (если этот узел вообще один, то соответствующее сетевое программное и аппаратное обеспечение может отсутствовать).

ËÂÑ

Ê ëèåí òû

(óçåë1)

Сервер

Ê ëèåí òû (óçåë2)

 

 

 

.

 

 

...

.

 

 

.

 

 

 

ÁÄ1

ÁÄ2

 

ÁÄn

Ê ëèåí òû (óçåën)

Рис. 2. Архитектура системы.

В-четвертых, на одном узле сети может располагаться несколько БД, обслуживае-

мых одной программой-сервером.

3.3. Файл данных

3.3.1. Выбор способа реализации Основное предназначение разрабатываемого файла данных – хранение записей

переменного и заранее неизвестного размера. Такая задача возникает на практике до-

статочно часто – например, любая файловая система предназначена для хранения фай-

лов переменного размера, при этом размер каждого файла может изменяться от одного байта до нескольких Мбайт и даже Гбайт. На практике встречаются три основные вари-

анта реализации данной задачи.

3.3.1.1. Резервирование по максимуму

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

странства, записи в файле располагаются так, как показано на рис. 3.

М аксим альн ы й разм ер зап иси

Çàãî ëî âî ê

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ô àéëà

 

Çàï èñü

 

 

 

Çàï èñü

 

 

....

 

Çàï èñü

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Íеисп о льзуем о е

ïро стран ство

Рис. 3. Файл данных с резервированием по максимуму

Недостатки данного подхода очевидны. Длина записи не может превысить неко-

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

симальную длину записи. Накладные расходы, то есть потери из-за наличия неисполь-

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

3.3.1.2. Непрерывное

Второй возможный вариант состоит в том, что место под одну запись в файле вы-

деляется по ее фактическому размеру. Таким образом, при отсутствии удалений в файле все записи располагаются последовательно (как показано на рис. 4), и всякие потери от-

сутствуют в принципе.

Çàãî ëî âî ê

 

 

 

 

 

 

 

 

 

ô àéëà

 

Çàï èñü

 

 

Çàï èñü

 

 

Çàï èñü

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4. Файл данных с непрерывным расположением записей

Сложности в этом случае возникают при необходимости удалить какую-либо за-

пись из середины файла. При этом в файле образуется пустое место, та называемая

дырка. Когда записей удаляется достаточно много, то количество дырок растет (см. рис.

5). Дырки не всегда могут быть использованы под хранение новых добавляемых запи-

сей, так как их размер может быть меньше, чем размер записи. Возможна ситуация, ко-

гда файл данных практически пуст, но новая запись все равно добавляется в конец фай-

ла, увеличивая тем самым его размер, так как ни одна дырка не имеет достаточного размера для хранения этой записи.

Çàãî ëî âî ê

 

 

 

 

 

 

 

 

 

 

 

ô àéëà

 

Çàï èñü

 

 

 

Çàï èñü

 

 

 

Çàï èñü

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5. Образование дырок в файле данных

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

мет выявления дырок требуемого размера, так и созданием специальной структуры – списка дырок. Первый способ неэффективен при больших объемах файла данных, вто-

рой затруднен – сам список надо тоже где-то хранить.

Данный способ также нельзя признать удовлетворительным из-за больших накладных расходов (потери на дырки могут достигать 90% и более). Надо отметить,

что несмотря на это, такой способ используется на практике для хранения полей приме-

чаний (memo-полей) в СУБД dBASE III Plus. При этом сборка мусора вообще не произ-

водится.

3.3.1.3. Сегментация

Метод сегментации физического пространства является наиболее широко распро-

страненным. Практически все современные операционные системы (в частности, MS-

DOS) в том или ином виде используют данный метод.

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

нен в процессе работы с ним. Применительно к данной разработке вместо термина

"сегмент" используется термин страница (для файловой системы MS-DOS аналогич-

ным понятием является кластер). Строение сегментированного файла представлено на рис. 6.

Çàãî ëî âî ê

 

 

 

 

 

 

 

 

 

ô àéëà

Ñåãì åí ò

Ñåãì åí ò

Ñåãì åí ò

.....

 

Ñåãì åí ò

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 6. Файл данных, разбитый на сегменты

При добавлении записи в файл она разбивается на несколько страниц в соответ-

ствии со своим размером. При этом первая страница записи называется головной, а

остальные – хвостовыми. При изменении записи положение ее головной страницы не меняется (в отличие от хвостовых). Номер головной страницы используется как ссылка на запись в файле. Расположение записи в файле показано на рис. 7.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Çàãî ëî âî ê

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ãî ëî âí àÿ

 

 

Õâî ñòî âàÿ

 

 

Ï óñòî é

 

 

Õâî ñòî âàÿ

 

.....

 

 

 

 

 

 

 

 

 

ô àéëà

 

стран ица

 

 

стран ица

 

 

ñåãì åí ò

 

 

стран ица

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Çàï èñü

Рис. 7. Файл данных, разбитый на сегменты

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

Преимущества такого подхода достаточно очевидны. Можно хранить запись дей-

ствительно любого размера – ограничение накладывает только максимальный размер файла в MS-DOS (4 Гбайт), что более чем достаточно для существующих прикладных задач. Пространство файла, освобождаемое в результате удаления записей, гарантиро-

ванно будет использовано при добавлении новых записей в файл. Как показано в иссле-

довательской части, на практике доля служебной информации при таком подходе не превышает 17%, что является вполне удовлетворительным результатом. Поэтому метод сегментации физического пространства и был взят за основу при разработке файла дан-

ных.

3.3.2. Структуры данных В данном разделе рассмотрено внутреннее строение файла данных (для него также

используется термин DS–файл) и соответствующие структуры данных. В DS–файле можно выделить следующие структуры данных: страница, запись, список свободный страниц. Среди страниц особое место занимает нулевая страница, предназначенная для хранения внутренней информации о DS–файле. В записи различают головную

и хвостовые страницы. Ниже дается подробное описание всех этих структур.

3.3.2.1. Страница

Страница является единицей данных для ввода/вывода с файлом. Размер страницы задается при создании DS–файла и уже не может быть изменен при работе с ним. Стра-

ница состоит из заголовка страницы и собственно данных, которые на ней размещают-

ся. Заголовок страницы содержится на каждой странице, кроме нулевой (нулевая стра-

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

называемый ВСН – ВнутриСистемный Номер. ВСН хранится в трех байтах как целое число длиной 23 бита (старший бит не используется).

 

 

7 áàéò

 

 

 

 

 

1 áàéò

 

3 байта

3 байта

6 áèò

1 áèò

1 áèò

Ññû ëêà í à

Ññû ëêà í à

И ден тиф икато р

Ï

ðèçí àê

Ï ðèçí àê

ï ðåäû äóù óþ

следую щ ую

стран ицы

ãî ëî âí î é

çàí ÿòî ñòè

стран ицу

стран ицу

(42)

стран ицы

 

 

Рис. 8. Структура заголовка страницы

Ссылка на предыдущую страницу и ссылка на следующую страницу – это ВСН'ы

страниц DS–файла.

Идентификатор страницы – шестибитовое число (в данной реализации – 42), слу-

жащее для контроля целостности информации.

Признак занятости устанавливается в 1, если данная страница является частью ка-

кой-либо записи. Следует отметить, что для повышения производительности при уда-

лении записи этот признак сбрасывается в 0 не для всех страниц, составляющих запись,

а только для головной страницы (см. раздел 3.3.4.6.)

Признак головной страницы устанавливается в 1, если страница является головной страницей какой-либо записи.

3.3.2.2. Нулевая страница

Нулевая страница используется для хранения внутренней информации о DS–

файле, которую необходимо сохранять между сеансами работы с файлом. Нулевая страница не имеет стандартного заголовка страницы. Структура нулевой страницы по-

казана в графической части работы и рис. 9 (сверху указан размер каждого поля в бай-

тах и класс–владелец информации). Ниже подробно описано каждое поле.

dsPage

 

dsFPL

 

 

 

 

 

dsFile

 

 

 

 

2

2

3

3

2

2

4

4

1

8

6

2

1

2

L en

Qnt

First

L ast

M Rec

M Pg

N Page

N Rec

Flags

U ser

Reserv

Ver

Op

Tag

Рис. 9. Структура нулевой страницы.

1 áèò

 

1 áèò

 

1 áèò

 

1 áèò

 

1 áèò

 

1 áèò

 

2 áèò

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ï ðèçí àê

 

Ô àéë

 

 

 

Режим

 

 

 

 ô àéëå

 

 

 

 

èçì åí åí èÿ

òî ëüêî äëÿ

Резерв

 

сжатия

Резерв

 

есть сжаты е

Резерв

 

ô àéëà

 

÷òåí èÿ

 

 

çàï èñåé

 

 

 

çàï èñè

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 10. Структура байта признаков.

Len – длина страницы в байтах.

Qnt – Число свободных страниц.

First – Номер первой свободной страницы

Last – Номер последней свободной страницы

MRec – Размер наибольшей из записей, содержащихся в файле, в байтах.

MPg – Размер наибольшей из записей, содержащихся в файле, в страницах.

NPage – Общее число страниц в файле

NRec – Число записей в файле

Flags – Различные признаки. Структура байта признаков приведена на рис. 10. User – Область пользователя. Пользователь может хранить здесь до 8 байт какой-

либо информации.

Reserv – 6 байт, зарезервированных для расширения системы.

Ver – Номер версии реализации DS–файла. Текущая версия имеет номер 10.

Op – Код последней операции, которая производилась с DS–файлом. Данное поле предназначено для отслеживания ошибок и сбоев. При каждой операции в это поле за-

носится ее код. При закрытии файла заносится код операции “Закрыть файл”. Если при открытии файла поле Op не равно коду операции “Закрыть файл”, это говорит о том,

что файл не был закрыт или был закрыт с ошибкой.

Tag – Сигнатура файла, служащая для контроля целостности информации. По наличию данной сигнатуры ( в текущей реализации – число 21316) производится про-

верка на корректность формата заголовка файла.

3.3.2.3. Запись

Запись представляет собой двунаправленный список страниц. Список организует-

ся при помощи полей "Ссылка на предыдущую страницу" и "Ссылка на следующую страницу" в заголовке страницы (см. рис. 8). Структура записи показана в графической части работы и рис. 11.

 

 

0

1

0

0

Рис. 11. Структура записи

Сама запись (данные пользователя) показана штриховкой. Цифрами показан при-

знак головной страницы. Видно, что двунаправленный список имеет следующие осо-

бенности: ссылка на следующую страницу у последней страницы записи нулевая, а

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

3.3.2.4. Головная страница записи

Головная страница записи, кроме заголовка страницы, имеет также заголовок за-

писи, который предшествует собственно записи. Структура заголовка записи приведена в графической части работы и рис. 12.

 

5 áàéò

 

1 áàéò

2 байта

2 байта

Атрибут

Äëèí à

Äëèí à

н есжато й

сжато й

çàï èñè

çàï èñè

çàï èñè

 

Рис. 12. Структура заголовка записи

Атрибут записи – это некоторый байт, который присваивается записи при добав-

лении в DS–файл. По умолчанию он равен нулю. Он используется, например, для отде-

ления системных записей от записей пользователя. Системные записи имеют атрибут 1,

а записи пользователя – атрибут 0.

Запись при добавлении в DS–файл может быть сжата с использованием алгоритма сжатия Лемпела–Зива (LZ77, описанный, например, в [2]). Сжатие записей в DS–файле задается при его создании. В заголовке записи хранится как оригинальная длина несжа-

той записи (то есть сколько запись занимает в оперативной памяти), так и длина сжатой записи (то есть сколько запись занимает на диске). Если длина сжатой записи равна длине несжатой записи, это значит, что запись не может быть сжата и записана на диск в несжатом виде или вообще сжатие записей отключено.

3.3.2.5. Хвостовые страницы записи

Хвостовые страницы записи имеют стандартный заголовок страницы (показанный на рис. 8). На самой последней странице записи часть страницы может оставаться неза-

полненной.

3.3.2.6. Список свободных страниц

Эта структура формируется при удалении записей из DS–файла. Список свобод-

ных страниц (ССС) реализован в виде, аналогичном реализации записи (см. рис. 13).

Вместо признака головной страницы показан признак занятости. Признак занятости га-

рантированно находится в сброшенном состоянии только у первой страницы ССС.

0

0

0

Рис. 13. Список свободных страниц

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]