Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО / конспект_укр.doc
Скачиваний:
43
Добавлен:
03.03.2016
Размер:
634.37 Кб
Скачать

Алгоритм визначення повного списку елементів в каталозі за вказаним шляхом

Вхідні дані – шлях до каталогу для отримання повного списку файлів

Вихідні – список файлів

Алгоритм:

  1. Отримати номера запису MFT, що описує каталог.

  2. Читання атрибуту $INDEX_ROOT каталогу з отриманим номером MFT

  3. Отримати список файлів в індексному запису, що зберігається в $INDEX_ROOT

Алгоритм отримання списку файлів в заданому індексному записі

Вхідні параметри – адреса індексного запису для отримання списку файлів;

номер запису MFT, що описує список файлів.

Вихідні – список файлів

Алгоритм:

  1. Якщо поточний index entry не має дочірньої гілки то перехід на п. 9

  2. Прочитати заголовок дочірнього індексного запису, що починається з VCN, вказаного в поточному index entry атрибуту $INDEX_ALLOCATION файлу із заданим номером MFT

  3. Визначити розмір масиву, що містить список останніх двох байт кожного сектора дочірнього індексного запису.

  4. Визначити повний розмір списку index entry, що міститься в дочірньому індексному запису

  5. Прочитати масив, що містить список останніх двох байт кожного сектора дочірнього індексного запису

  6. Прочитати список index entry, що міститься в дочірньому індексному запису.

  7. Відновлення останніх двох байт кожного сектора дочірнього індексного запису.

  8. Якщо поточний index entry останній в списку перехід на п. 13

  9. Додавання імені файлу, що зберігається в поточному index entry в список знайдених файлів

  10. Обчислення адреси наступного index entry

  11. Перехід на п. 1

13. Вихід

Для реалізації вищевикладених алгоритмів знадобляться наступні структури:

Заголовок індексного запису для атрибуту index_root

typedef struct

{

unsigned long type; //тип атрибуту – для каталогів завжди рівний 0x30

unsigned long collation_rule;

unsigned long bytes_per_index_block; //розмір в байтах одного index entry

unsigned char clusters_per_index_block; // кількість кластерів на один //index entry

char Padding[3]; //не використовується(вирівнювання на 8 байт)

unsigned long offs1; // зсув першого Index entry відносно даного //поля

unsigned long size; //суммарный розмір всіх index entry в атрибуті(байт)

unsigned long allocsize; //займаний дисковий простір(байт)

unsigned char flags; // прапори =0 якщо каталог маленький і список файлів

//уміщається в $INDEX_ROOT

//=1 якщо потрібний $INDEX_ALLOCATION

char Padding1[3]; //выравнивание

}ihead_index_root;

За заголовком слідує список index entry

Заголовок індексного запису для атрибуту index_allocation

typedef struct

{

char INDX[4]; //строка “INDX”

unsigned short offsetUpSeq; //зсув масиву останніх байт кожного

//сектору відносно початку заголовку

unsigned short sizeUpSeq; //кількість елементів цього масиву

__int64 lfseqNum; //номер записи з $LogFile

__int64 currVCN; //номер VCN в якому розташовано

//поточний індексний запис

unsigned long offIe; // зсув першого Index entry відносно даного поля

unsigned long sizeIe; ; //суммарный розмір всіх index entry в //атрибуте(байт)

unsigned long AllocsizeIe; // займаний дисковий простір(байт)

unsigned char child; //=1 якщо індексний запис має дочірні гілки

// інакше =0

char padding[3]; // вирівнювання до 8байт

}ihead_index_allocation;

Структура Index entry:

typedef struct

{

tfileref fr; //посилання на номер запису MFT, що описує даний файл

unsigned short lenientry; // розмір поточного index entry

unsigned short streamlen; // зсув імені файлу відносно початку index entry

unsigned char flag; // прапори біт 0=1 якщо є дочірні гілки

//біт 1 = 1 якщо це остання index entry в індексному

//запису

}index_entry;

Порівняльна характеристика розглянутих файлових систем.

FAT

FAT32 (vFAT)

NTFS

Системи, що її підтримують

DOS, Windows9Х, NT всіх версій

Windows98, NT5

NT4, NT5

Максимальний розмір тому

2 Гбайт

практично необмежений (2Тб)

практично необмежений

Макс. число файлів на томі

приблизно 65 тисяч

практично не обмежено

практично не обмежено

Ім'я файлу

з підтримкою довгих імен - 255 символів, системний набір символів

з підтримкою довгих імен - 255 символів, системний набір символів

255 символів, будь-які символи будь-яких алфавітів (65 тисяч різних зображень)

Можливі атрибути файлу

Базовий набір

Базовий набір

все, що завгодно

Безпека

немає

Немає

так (починаючи з NT5.0 вбудована можливість фізично шифрувати дані)

Стискування

немає

немає

Так

Стійкість до збоїв

середня (система дуже проста і тому ламатися особливо нічому :))

погана (засоби оптимізації за швидкістю привели до появи слабких по надійності місць)

повна - автоматичне відновлення системи при будь-яких збоях (не рахуючи фізичні помилки запису, коли пишеться одне, а насправді записується інше)

Економічність

мінімальна (величезні розміри кластерів на великих дисках)

покращувана за рахунок зменшення розмірів кластерів

максимальна. Дуже ефективна і всіляка система зберігання даних

Швидкодія

висока для малого числа файлів, але швидко зменшується з появою великої кількості файлів в каталогах. результат - для слабо заповнених дисків - максимальна, для заповнених - погана

повністю аналогічно FAT, але на дисках великого розміру (десятки гігабайт) починаються проблеми із спільною організацією даних

система не дуже ефективна для малих і простих розділів (до 1 Гбайт), але робота з величезними масивами даних і значними каталогами організована як не можна ефективніше і дуже сильно перевершує за швидкістю інші системи

Соседние файлы в папке СПО