Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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



НЕ 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

 

 

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

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

 

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

 

На вході:

AH

02h

 

AL

Кількість секторів, які потрібно прочитати

 

CH

Номер доріжки

 

CL

Номер сектора

 

DH

Номер головки

 

DL

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

 

ES:BX

Адреса буферу для даних

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT, AT, PS/2

 

Ця функція дозволяє прочитати один сабо декілька секторів диску в буфер, що знаходиться оперативній пам'яті.

Для НМД номер доріжки і номер сектора задаються наступним чином: біти 5...0 регістра CX задають номер сектора, а біти 15...6 – номер доріжки.

Перед читанням необхідно підготовити таблицю параметрів НГМД чи НМД.

 

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

 

На вході:

AH

03h

 

AL

Кількість секторів, які необхідно прочитати

 

CH

Номер доріжки

 

CL

Номер сектора

 

DH

Номер головки

 

DL

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

 

ES:BX

Адреса буферу для даних

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT, AT, PS/2

 

Функція запису секторів аналогічна до попередньої, за виключенням напряму переміщення даних – дані записуються з буферу в один або декілька секторів диску. Необхідно відзначити, що при роботі з НГМД не для кожної BIOS буде очікування перед виконанням операції запису, поки двигун розкрутиться до робочої швидкості. В результаті програма може отримати признак помилки. Перед тим, як робити вивід про причину помилки, слід скинути контролер НГМД функцією 00H та повторити операцію запису три рази.

 

 

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

 

На вході:

AH

04h

 

AL

Кількість секторів, які потрібно перевірити

 

CH

Номер доріжки

 

CL

Номер сектора

 

DH

Номер головки

 

DL

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

На виході:

AH

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

 

AL

Кількість перевірених секторів

 

CF

1, якщо виникла помилка,

0, якщо помилка немає

Примітка:

 

PC, XT, AT, PS/2

 

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

Перед використанням цієї функції впевніться в тому, що двигун НГМД розкрутився до робочої швидкості (на виконання цієї операції зазвичай достатньо 0,5 - 1 сек), в протилежному випадку виникне помилка.

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

 

На вході:

AH

05h

 

AL

Кількість секторів, які потрібно створити на доріжці, або фактор чередування для НМД IBM PC/XT

 

CH

Номер доріжки

 

CL

Номер сектора

 

DH

Номер головки

 

DL

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

 

ES:BX

Адреса буферу формату, використовується для НГМД и НМД

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT, AT, PS/2

 

Функція форматування призначена для початкового формування структури доріжки диску. Ця функція знищує всі дані, записані на доріжці. За допомогою функції 05h ви можете за один раз від форматувати тільки одну доріжку з вказаним номером в регістрі CH.

Для функції форматування потрібно задати два параметра – фактор чередування та адресу формату буфера. Фактор чередування визначає послідовність розміщення секторів на доріжці. Сектори можуть розміщуватися в порядку своїх номерів, через один, через два і т.д. Спосіб розміщення секторів визначається значенням фактора чередування. Фактор 1 передбачає послідовне розміщення секторів в порядку їх номерів, тобто чередування відсутнє. Фактор 2 задає розміщення секторів через один, 3 – через два і так далі. На мал. 1.3 показано використання я при форматуванні доріжки.

Мал. 2. Використання фактору чередування

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

 

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

 

На вході:

AH

06h

 

AL

Фактор чередування

 

CH

Номер доріжки

 

CL

Номер сектора

 

DH

Номер головки

 

DL

Адреса НМД (80h, 81h,...)

 

ES:BX

Адреса буфера формату

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT

 

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

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

 

На вході:

AH

07h

 

AL

Фактор чередування

 

CH

Номер доріжки

 

CL

Номер сектора

 

DH

Номер головки

 

DL

Адреса НМД (80h, 81h,...)

 

ES:BX

Адреса буферу формату

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT

 

Функція форматування з кодом 7 призначена тільки для форматування цілого диску починаючи з деякої доріжки.

Пошук доріжки (НМД)

 

На вході:

AH

0Ch

 

CH

Номер доріжки

 

CL

Номер сектора

 

DH

Номер головки

 

DL

Адрес НМД (80h, 81h,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT, AT, PS/2

За допомогою функції 0Ch програма може підвести головки до доріжки з заданим номером. Функції читання та запису секторів не потребують попереднього пошуку доріжки, вони виконують пошук самостійно.

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

 

На вході:

AH

0Eh

 

ES:BX

Адреса буферу для даних

 

DL

Адреса НМД (80h, 81h,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT

 

Контролери НМД, як правило, мають внутрішній буфер даних. За допомогою функції 0Eh програма може прочитати вмістиме цього буферу в оперативну пам'ять. Функція читання буферу використовується в основному для діагностики контролера.

Запис буферу сектора (НМД)

 

На вході:

AH

0Fh

 

ES:BX

Адреса буферу для даних

 

DL

Адреса НМД (80h, 81h,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT

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

Визначення стану НМД

 

На вході:

AH

10h

 

DL

Адреса НМД (80h, 81h,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT, AT, PS/2

 

Про готовність НМД можна судити по байту стану, переданому функцією в регістрі AH. Аналогічний байт повертається в регістрі AH функцією 01h.

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

 

На вході:

AH

11h

 

DL

Адреса НМД (80h, 81h,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT, AT, PS/2

 

Виклик цієї функції призводить до позиціонування головок вибраного НМД на нульову доріжку. Додатково в регістрі AH повертається байт стану пристрою.

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

 

На вході:

AH

12h

 

DL

Адреса НМД (80h, 81h,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT

 

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

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

 

На вході:

AH

13h

 

DL

Адреса НМД (80h, 81h,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PC, XT

 

Функція використовується для запуску внутрішньої діагностики контролера.

Визначення типу типа НГМД або НМД

 

На вході:

AH

15h

 

DL

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

На виході:

AH

Тип НГМД або НМД

 

CX:DX

Кількість секторів розміром 512 байт

Примітка:

 

AT, PS/2

 

Тип НГМД або НМД, який повертається цією функцією, може приймати наступні значення:

 

Тип

Опис

 

НГМД або НМД відсутні

 

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

 

НГМД, оснащений засобами виявлення заміни дискети

 

НМД

 

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

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

 

На вході:

AH

16h

 

DL

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

На виході:

AH

Признак заміни носія даних:
0 – заміни не було;
6 – носій даних був замінений

Примітка:

 

AT, PS/2

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

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

 

На вході:

AH

17h

 

AL

Тип дискети

 

DL

Адреса НГМД (0, 1,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

AT, PS/2

 

Функцію встановлення типу дискети необхідно використовувати перед початком роботи з дискетою. Тип може приймати наступні значення:

 

Тип

Об'єм дискети та тип дисковода

 

Не використовується

 

360 Кбайт в дисководі з низькою щільністю запису (розрахованим на дискети об’ємом 360 Кбайт)

 

360 Кбайт в дисководі з високою щільністю запису (розрахованим на дискети об’ємом 1,2 Мбайт)

 

1,2 Мбайт або 1,4 Мбайт в дисководі з високою щільністю запису

 

720 Кбайт в дисководі с низькою щільністю запису (розрахованим на дискети об’ємом 720 Кбайт)

 

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

Паркування головок НМД

 

На вході:

AH

19h

 

DL

Адреса НМД (80h, 81h,...)

На виході:

AH

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

 

CF

1, якщо виникла помилка,
0, якщо помилки немає

Примітка:

 

PS/2

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

Сучасні НМД виконують паркування головок автоматично.

 


Дата добавления: 2015-08-27; просмотров: 154 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
Приглашаем 17 мая на ЖЕНСКИЙ тренинг | Тема:Робота з драйвером маніпулятора «миша»

mybiblioteka.su - 2015-2024 год. (0.132 сек.)