- •НИУ ВШЭ – Пермь
- •Многоуровневая система управления данными
- •Порядок работы приложения, реализующего доступ к данным
- •Требования к реализации функции управления данными
- •Понятие файловой системы
- •Понятие файла
- •Понятие файла и свойства файлов
- •Понятие файла и свойства файлов
- •Понятие файла и свойства файлов
- •Понятие файла и свойства файлов
- •Понятие файла и свойства файлов
- •Атрибуты файлов
- •Операции над файлами
- •Операции над файлами
- •Каталоги и системы каталогов
- •Каталоги и системы каталогов
- •Иерархическая система хранения данных
- •Иерархическая система хранения данных и полное имя файла
- •Подсистема ввода-вывода и управление внешними устройствами
- •Доступ к данным на ВЗУ
- •Организация ввода-вывода и управление внешними устройствами
- •Управление внешними устройствами: понятие драйвера
- •Организация файлов в ОС
- •Логическая организация файлов
- •Структуризация файлов: записи
- •Последовательная организация файлов
- •Последовательная организация файлов: запись в файл
- •Последовательная организация файлов: запись в файл
- •Последовательная организация файлов: запись в файл
- •Последовательная организация файлов: запись в файл
- •Последовательная организация файлов: чтение из файла
- •Последовательная организация файлов: чтение из файла
- •Последовательная организация файлов: чтение из файла
- •Последовательная организация файлов: чтение из файла
- •Последовательная организация файлов: чтение из файла
- •Последовательная организация файлов: прямой доступ к данным
- •Последовательная организация файлов: прямой доступ к данным
- •Последовательная организация файлов: прямой доступ к данным
- •Последовательная организация файлов: прямой доступ к данным
- •Последовательная организация файлов: прямой доступ к данным
- •Последовательная организация файлов: прямой доступ к данным
- •Буферизация ввода
- •Буферизация вывода
- •Индексированные файлы
- •Индексированные файлы: пример
- •Многоуровневые индексы
- •Сортировка файлов
- •Понятие отрезка файла
- •Отрезки файла: пример
- •Разделение файла
- •Разделение файла: схема алгоритма
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Разделение файла: пример
- •Слияние файлов
- •Слияние файлов – схема слияния отрезков
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Слияние файлов – пример
- •Завершение сортировки (пример): разбиение
- •Завершение сортировки (пример): разбиение
- •Завершение сортировки (пример): разбиение
- •Завершение сортировки (пример): разбиение
- •Завершение сортировки (пример): разбиение
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Завершение сортировки (пример): слияние
- •Сортировка файлов: сбалансированное слияние
- •Сортировка файлов: сбалансированное слияние
- •Сортировка файлов: четырехленточная сортировка – пример
- •Сортировка файлов: четырехленточная сортировка – пример
- •Сортировка файлов: четырехленточная сортировка – пример
- •Сортировка файлов: четырехленточная сортировка – пример
- •Сортировка файлов: четырехленточная сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка
- •Сортировка файлов: Фибоначчиева сортировка
- •Сортировка файлов: Фибоначчиева сортировка
- •Сортировка файлов: Фибоначчиева сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка – пример
- •Сортировка файлов: Фибоначчиева сортировка – пример
Последовательная организация файлов: прямой доступ к данным
|
Program |
«Связываем» файловую |
|
|
type Element |
||
|
переменную с файлом на |
||
|
|
||
|
|
внешнем устройстве |
|
|
var N: |
Открываем файл для чтения |
|
|
E: |
||
|
F: file |
|
|
|
begin |
|
|
|
Assign(F, |
Проверяем размер файла – количество |
|
|
reset(F); |
записей в нем файла |
|
|
write('Введите |
||
|
|
||
|
readln(N); |
|
|
|
if FileSize(F) |
Смещаемся к нужной записи в файле |
|
|
then begin |
||
|
|
||
|
seek(F, N); |
Чтение записи из файла |
|
|
read(F, E); |
||
|
|
||
|
write('Число Фибоначчи', E.ElementNumber:3, ' равно ', E.FibNumber) |
||
|
end |
|
|
|
else write('Числа с таким номером нет в файле'); |
||
41 |
close(F); |
Закрываем файл |
|
end. |
|||
|
|||
Буферизация ввода
|
|
Буфер |
|
|
|
Запись 0 |
|
|
Блок |
Запись 1 |
Логическая |
Файл F |
|
||
(физическая |
|
||
… |
запись |
||
|
запись) |
(тип REC) |
|
|
|
|
Запись n–1 Запись n
42
Рабочая область программы
type REC = record
…
end;
…
var R: REC: F: file of REC;
…
begin
…
assign(F, ‘F’); reset(F);
…
{Чтение всех записей из файла и обработка данных в цикле:}
while not eof(F) do begin
… Read(F, R); … end;
close(F)
…
end.
Буферизация вывода
|
|
Буфер |
|
|
|
|
Запись 0 |
|
|
|
Блок |
Запись 1 |
Логическая |
|
Файл F |
|
|||
(физическая |
… |
|||
запись |
||||
|
запись) |
|
(тип REC) |
|
|
|
|
Запись n–1 Запись n
43
Рабочая область программы
type REC = record
…
end;
…
var R: REC:
F: file of REC;
…
begin
…
assign(F, ‘F’); rewrite(F);
{Формирование записей и вывод их в файл в цикле:}
for … do begin
… Write(F, R);… end;
close(F)
…
end.
Индексированные файлы
Если система сама берет на себя задачу организации
вспомогательных файлов (таблиц), используемых для ускорения доступа, то говорят об индексной организации файлов.
Файлы с индексной организацией (или индексированные файлы) имеют более сложную организацию: кроме основного файла,
представляющего собой массив записей, строится
вспомогательная таблица (индекс), содержащая ключевую информацию для поиска, а также данные о местоположении записи в основном файле (смещение соответствующей записи
относительно начала файла); кроме того, если записи могут иметь переменную длину, в каждой строке (элементе, записи) индекса содержится и размер записи
44
Индексированные файлы: пример
45
Многоуровневые индексы
46
Сортировка файлов
Очевидно, любой алгоритм сортировки файла требует изъятия каких-то элементов из файла и включения их в файл на новые места.
С учетом специфики работы с файлами (необходимость позиционирования, буферизация и пр.) эффективнее работать не с отдельными элементами, а с блоками.
Таким образом, при сортировке часть файла (блок) должна быть переписана на новое место (в новый файл или в несколько новых файлов), а затем эти новые файлы объединяются (сливаются) в результирующий файл: сортировка выполняется чередованием операций разделения и слияния.
Рассмотрим подробнее операции разделения и слияния файлов.
47
Понятие отрезка файла
Отрезком длины k в файле является последовательность записей Ai , Ai+1 , Ai+2 , . . . , Ai+k–1 ,
такая, что в ней не имеется пропусков, т.е. для любого j, i <= j <= (i + k–1),
запись Aj принадлежит отрезку, и записи отрезка упорядочены по ключам, т.е.
Key(Ai) <= Key(Ai+1) <= Key(Ai+2) <= ... <= Key(Ai+k–1)
При этом Key(Ai –1) > Key(Ai), если Ai – не первая запись в файле и Key(Ai+k–1) > Key(Ai+k), если Ai+k–1 – не последняя запись в файле.
Иными словами, отрезок – это максимальная упорядоченная часть (блок последовательных записей) файла.
48
Отрезки файла: пример
Весь файл состоит из отрезков.
Если файл содержит n записей, то он может содержать от 1 до n отрезков.
Файл, состоящий из одного отрезка, – это полностью упорядоченный файл.
Файл, состоящий из n отрезков, может иметь, например, такую последовательность ключей:
9, 8, 7, 6, 5, 4, 3, 2, 1
Это файл записей, упорядоченных в обратном порядке. Файл с ключами
11, 14, 8, 9, 51, 15, 86, 98, 13, 4, 6, 10 состоит из 5 отрезков:
49 |
1) 11, 14; |
2) 8, 9, 51; |
3) 15, 86, 98; |
4) 13; |
5) 4, 6, 10 |
Разделение файла
Операция имеет 1 операнд – исходный файл и 2 файла, рассматриваемые в качестве результата. Исходный файл представляет собой последовательность отрезков
I1 , I2 , I3 , I4 , . . . , Im .
Результирующие файлы представляют собой последовательности отрезков: I1 , I3 ,. . . , Im–1 и I2 , I4 , . . . , Im (для четного m)
или
I1 , I3 , . . . , Im и I2 , I4 , . . . , Im–1 (для нечетного m).
Эта операция выполняется так (пока не закончится исходный файл):
1.Читаются элементы исходного файла и переписываются в 1-й файл результата до тех пор, пока не закончится 1-й отрезок (с нечётным номером).
2.Затем поток элементов исходного файла переключается на вывод
50 |
во 2-й файл до окончания 2-го отрезка (с чётным номером) и т.д. |
