- •Кафедра комп'ютерної інженерії опорний конспект лекцій до дисципліни "Системне програмне забезпечення "
- •Тема1. Загальне уявлення про операційну систему
- •Першою системою, побудованою таким чином була проста пакетна система the, яку побудував Дейкстра і його студенти в 1968 році.
- •Модель клієнт-сервер і мікроядра
- •Об'єктно-орієнтований підхід
- •Класифікація ос
- •Тема 2. Файлова система fat
- •Файлова система типа fat
- •7 Головка0
- •Структура логічних дисків
- •Алгоритм визначення ланцюжка кластерів
- •Функції створення і доступу до об'єктів файлової системи
- •Порушення структури файлової системи
- •Тема 3. Файлова система ntfs
- •Базові поняття в ntfs
- •Характеристики ntfs
- •Додаткові можливості ntfs
- •Фізична організація файлової системи ntfs
- •Mft і його структура
- •Метафайли
- •Файли і потоки
- •Каталоги
- •Атрибути файлів і каталогів
- •Короткі імена
- •Алгоритм визначення номера запису mft відповідною файлу із заданим ім'ям
- •Алгоритм пошуку номера запису mft для поточного елементу шляху по каталогу, який описаний записом mft з заданим номером
- •Каталогу із заданим номером запису mft
- •Алгоритм визначення повного списку елементів в каталозі за вказаним шляхом
- •Алгоритм отримання списку файлів в заданому індексному записі
- •Заголовок індексного запису для атрибуту index_root
- •Заголовок індексного запису для атрибуту index_allocation
- •Тема 4 . Організація пам'яті реального режиму
- •Організація пам'яті реального режиму
- •Звільнення і виділення блоків
- •Тема 5. Організація доступу до пам'яті в захищеному режимі
- •Сегмент
- •Структура дескриптора сегменту
- •Атрибут 2
- •Розподіл пам'яті в Windows
Алгоритм визначення повного списку елементів в каталозі за вказаним шляхом
Вхідні дані – шлях до каталогу для отримання повного списку файлів
Вихідні – список файлів
Алгоритм:
Отримати номера запису MFT, що описує каталог.
Читання атрибуту $INDEX_ROOT каталогу з отриманим номером MFT
Отримати список файлів в індексному запису, що зберігається в $INDEX_ROOT
Алгоритм отримання списку файлів в заданому індексному записі
Вхідні параметри – адреса індексного запису для отримання списку файлів;
номер запису MFT, що описує список файлів.
Вихідні – список файлів
Алгоритм:
Якщо поточний index entry не має дочірньої гілки то перехід на п. 9
Прочитати заголовок дочірнього індексного запису, що починається з VCN, вказаного в поточному index entry атрибуту $INDEX_ALLOCATION файлу із заданим номером MFT
Визначити розмір масиву, що містить список останніх двох байт кожного сектора дочірнього індексного запису.
Визначити повний розмір списку index entry, що міститься в дочірньому індексному запису
Прочитати масив, що містить список останніх двох байт кожного сектора дочірнього індексного запису
Прочитати список index entry, що міститься в дочірньому індексному запису.
Відновлення останніх двох байт кожного сектора дочірнього індексного запису.
Якщо поточний index entry останній в списку перехід на п. 13
Додавання імені файлу, що зберігається в поточному index entry в список знайдених файлів
Обчислення адреси наступного index entry
Перехід на п. 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 Гбайт), але робота з величезними масивами даних і значними каталогами організована як не можна ефективніше і дуже сильно перевершує за швидкістю інші системи
|