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

2.3 Пошук й найменування логічних дисків у розширеному розділі

Наступною частиною алгоритму є пошук і найменування логічних дисків у розширеному розділі. Граф схема цього участку алгоритму приведена на рис 1.3.

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

Для пошуку й найменування логічних дисків у розширеному розділі для кожного жорсткого диска виконуємо наступні дії.:

- Організуємо цикл по перегляду елементів PT на предмет пошуку розширеного розділу (код системи 05hабо 0Fhблоки 1-5). Якщо такий елемент знайдений , уміст поля відносної адреси цього елемента PT запам'ятовуємо як початок розширеного розділу на аналізованому жорсткому диску. Установлюємо адресу першої вторинної MBR рівну адресі початку розширеного розділу (ADR_BEG_EXP), й по даній адресі читаємо сектор. Перший елемент PT у вторинної MBR характеризує логічний диск у розширеному розділі. Якщо параметр код системи першого елемента PT вторинної MBR відповідає параметру файлової системи FAT то даному логічному диску привласнюємо чергову букву.

Якщо другий елемент PT дорівнює нулю отже інформація в даному розділі жорсткого диска вичерпана, інакше перевіряємо код системи на 05h або 0Fh, і обчислюємо адресу наступної вторинної MBR, як

ADR_BEG_EXP + OTN_ADR

де ADR_BEG_EXP - адрес початку розширеного розділу

OTN_ADR - відносний номер першого сектору розділу

По цій адресі зчитуємо чергову вторинну MBR і повторюємо дії виконувані з першої вторинної MBR. На граф схемі алгоритму ці операції виконуються у блоках 6-9. Програмний код реалізуючий даний алгоритм наведений нижче

for(int i=0;i<4;i++)//Цикл по чотирьом елементам Partition Table

//Перевірка на розширений розділ

...

beg_ext=MBR.table[i].smeshenie; //Початок розширеного розділу

next_MBR=0;

int j=i;

do //Цикл по ланцюгам розширеного розділу

{

next_MBR=next_MBR+MBR.table[j].smeshenie;

get_MBR(&MBR,drive,next_MBR); //Читання MBR. MBR-

//структура MBR,

//drive – номер жорсткого диска

// next_MBR–номер першого сектору MBR

if(FAT(MBR.table[0].sys))//Перевірка на файлову системуFAT

{

//Іменуємо диск та виводимо потрібну інформацію

...

}

j=1;

next_MBR=beg_ext;

}

while(MBR.table[1].sys!=0);

//Перехід до наступного жорсткого диску

}

Приклад структури ланцюжка логічних дисків у розширеному розділі представлений на рис 1.4

Рис1.4 Ланцюжок логічних дисків у розширеному розділі

2.4 Іменування логічних дисків, що залишилися, в основних розділах.

Остання частина алгоритму - іменування логічних дисків, що залишилися, в основних розділах. Граф схема цього участку алгоритму приведена на рис 1.4.Для цього на кожному жорсткому диску переглядаємо елементи PT на предмет пошуку логічних дисків FAT, які не були охоплені першим пунктом алгоритму (рис 1.1). Кожному знайденому диску привласнюємо чергову букву.

рис 1.4 Граф схема алгоритм пошуку та іменування логічних дисків залишившихся основних розділах.

Фрагмент коду програми

for(int i=0;i<4;i++) //Цикл по чотирьом елементам Partition Table

//Перевірка на FAT а також, що даний логічний диск ще не проіменован

if(FAT(MBR.table[i].sys)&&(DRIVE[drive-0x80].num_table!=i))

{

//Іменуємо диск та виводимо потрібну інформацію

...

}

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