Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
НЕ_1.4.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
286.72 Кб
Скачать

НЕ 1.4 (Лекція)

Тема: Робота з гнучкими та жорсткими дисками. Форматування дисків.

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

По-друге, програма може працювати з дисками за допомогою переривань BIOS. Далі розглянемо різні функції переривання INT 13h, призначені для виконання операцій читання, запису та форматування. Використання функцій переривання INT 13h набагато краще, ніж безпосереднє програмування контролера, так як BIOS приховує особливості апаратної реалізації контролера.

По-третє, програма може звертатися до переривань MS-DOS, спеціально призначених для доступу до дискової системи.

Перші комп’ютери типу IBM PC не мали жорсткого диску (так званого вінчестера чи накопичувача на жорсткому магнітному диску – НМД). Вони були обладнані двома флоппі-дисками (накопичувачами на гнучких магнітних дисках – НГМД), котрі й являли собою дискову систему.

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

Об'єм сучасних накопичувачів складає сотні гігабайт.

Що являє собою диск?

Дискета (флоппі-диск) – це кругла пластина в квадратному конверті, з двох боків вкрита магнітним матеріалом. Цей матеріал схожий на той, що використовується в магнітних стрічках звичайних магнітофонів. Ближче до центру в диску знаходиться маленький отвір, призначений для синхронізації. Коли дискета вставляється в дисковод, з обох боків (зверху та знизу) до неї притискаються магнітні головки. При цьому ніякого зазору між поверхнею дискети та головками. За допомогою спеціального покрокового двигуна головки можуть переміщуватися стрибкоподібно уздовж радіуса диску.

Жорсткий диск складається з багатьох жорстких круглих пластинок, вкритих магнітним матеріалом. Пластинки крутяться з величезною швидкістю ( 3600 - 20000 обертів на хвилину) в геометричному корпусі. Біля кожної пластини розташовано по одній магнітній голові, але вони не торкаються диску а «плавають» дуже близько до його поверхні.

Подаючи команди дисковому контролеру, програма може переміщувати блок головок уздовж радіуса диску, переходячи таким чином від одного циліндра до іншого. Переміщуючись уздовж кола диску, магнітна головка може записувати або зчитувати інформацію. Запис виконується по бітам, при цьому додається різноманітна службова інформація та інформація для контролю даних.

Дані записуються не суцільним потоком, а блоками деякого розміру. Ці блоки називаються секторами. Сектор представляє собою найменший об’єм даних, який записується чи зчитується контролером.

Для кожного сектору виконується контроль запису та читання. При запису сектора вираховується контрольна сума всіх байтів, що знаходяться в секторі, і ця контрольна сума записується на диск в службову частину, розміщену після сектору. При читанні ця контрольна сума вираховується заново і порівнюється з контрольною сумою, зчитаною з службової області. При неспівпадінні контролер повідомляє програму про помилку.

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

Програмування контролера НГМД

Більшість дискових операцій можна виконати на рівні функцій BIOS. Це найбільш простий та надійний спосіб роботи на фізичному рівна. Однак в окремих випадках вам може знадобитися безпосередній доступ до контролера НГМД – наприклад, якщо ви розробляєте систему захисту даних від несанкціонованого копіювання.

Формат доріжки дискети

Для кращого розуміння роботи контролера наведемо схему розміщення зон даних на доріжці дискети (мал. 1).

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

Мал. 1. Схема розміщення зон даних на доріжці дискети

Мал. 2. Формат сектора

Функції BIOS для роботи з дискети

Найкращий і найбільш безпечний спосіб роботи з дисками на фізичному рівні – використання функцій базової системи вводу/виводу BIOS. Ці функції враховують всі особливості апаратури і надають достатньо широкий набір засобів доступу до дисків на фізичному рівні.

Вся дискова підсистеми обслуговується перериванням INT 13h. Це переривання виконує багато функцій. Для виклику деякої функції програма повинна занести її номер в регістр AH. При цьому в інші регістри слід записати параметри – номер НМД чи НГМД, номер циліндра, головки, адресу таблиць параметрів НМД чи НГМД і так далі.

Бібліотека системи Borland C++ містить спеціальну функцію _bios_disk, котра сильно спрощує роботу з дисковими функціями BIOS. Приведемо коротку таблицю функцій переривання INT 13h.

Номер функції

Опис

00h

Скидання дискової системи

01h

Визначення стану дискової системи

02h

Читання сектора

03h

Запис сектора

04h

Перевірка сектора

05h

Форматування доріжки

06h

Форматування доріжки НМД

07h

Форматування НМД

08h

Отримати поточні параметри НГМД або НМД

09h

Ініціалізація таблиць параметрів НМД

0Ah

Читання довге (тільки для НМД)

0Bh

Запис довгий (тільки для НМД)

0Ch

Пошук циліндра (тільки для НМД)

0Dh

Альтернативне скидання НМД

0Eh

Читання буфера сектора (тільки для НМД)

0Fh

Запис буфера сектора (тільки для НМД)

10h

Перевірка готовності НМД

11h

Рекалібровка НМД

12h

Перевірка пам'яті контролера НМД

13h

Перевірка НМД

14h

Перевірка контролера НМД

15h

Отримати тип НМД або НГМД

16h

Перевірка заміни диска

17h

Встановлення типу дискети

18h

Встановлення середовища носія даних для форматування

19h

Паркування головок (тільки для НМД)

1Ah

Форматування НМД з інтерфейсом ESDI

Скидання дискової системи

На вході:

AH

00h

DL

Адреса пристрою НМД або НГМД (0, 1, ..., 80h, 81h, ...)

На виході:

-

Примітка:

PC, XT, AT, PS/2

Ця функція визиває скидання та рекалібровку дискового контролера (в ході цієї процедури головки встановлюються на нульову доріжку). Якщо в байті адреси старший біт (біт 7) встановлено в 1, виконується скидання контролера НМД.

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

Адреса пристрою, рівний 0, відповідає першому НГМД (А:), 1 – другому (В:) і так далі. Адреса 80h, 81h відповідає першому та другому НМД, відповідно.

Визначення стану дискової системи

На вході:

AH

01

DL

Адреса пристрою НГМД або НМД (0, 1, ..., 80h, 81h, ...)

На виході:

AL

Стан пристрою після завершення останньої операції

Примітка:

PC, XT, AT, PS/2

Ця функція можу бути використана для аналізу результату виконання операції та отримання коду помилки. Функція бере переданий в регістрі AL код помилки із області даних BIOS (байт за адресою 0000h:0441h).

Код помилки може приймати значення:

Значення

Опис

00h

Успішне завершення операції

01h

Неправильна команда

02h

Не знайдена адресна мітка

03h

Спроба запису на диск, захищений від запису

04h

Сектор не знайдено

05h

Помилка при скиданні НМД

06h

Відбулася заміна дискети

07h

Неправильні параметри НМД

08h

Переповнення каналу прямого доступу ПДП при роботі з НГМД

09h

Перехід за границю 64 Кбайт при роботі з ПДП

0Ah

Виявлено поганий сектор (тільки для НМД)

0Bh

Виявлено погану доріжку (тільки для НМД)

0Ch

Неправильний номер доріжки

0Dh

Неправильний номер сектора при форматуванні (тільки для НМД)

0Eh

Виявлено адресну мітку управляючих даних (тільки для НМД)

0Fh

Помилка ПДП при роботі з НМД

10h

Виявлено помилку в контрольній сумі CRC /ECC

11h

Дані скоректовані з використанням ECC (тільки для НМД)

20h

Збій контролера

40h

Збій при пошуку доріжки

80h

Таймаут - програма не встигає обробляти дані

AAh

НМД не готовий

BBh

Невідома помилка (тільки для НМД)

CCh

Збій при записові (тільки для НМД)

E0h

Помилка регістру стану НМД

FFh

Помилка операції читання (тільки для НМД)

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