22595

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

Лабораторная работа

Информатика, кибернетика и программирование

Програмування контролера НГМД 765 і мікросхеми прямого доступу до пам'яті 8237. Мікросхема контролера НГМД 765 фірми NEC управляє мотором і головками накопичувача на дискетах і обробляє потоки даних що направляються в або з дискових секторів. Один контролер встановлений на платі адаптора дисків може обслуговувати до чотирьох НГМД. За винятком випадків пов'язаних із захистом від копіювання програмістам не доводиться програмувати мікросхему контролера НГМД напряму.

Украинкский

2013-08-03

63.5 KB

0 чел.

ЛАБОРАТОРНА РОБОТА № 5

"Контролер локальних дисків"

Всі диски, як гнучкі, так і жорсткі, організовані однаково. Поверхня диска розділена на ряд концентричних кілець, що називаються доріжками, а доріжки діляться радіально на сектори. Наприклад, стандартна дискета з діаметром 5 1/4 дюйма має 40 доріжок і в системі MS DOS кожна доріжка розбита на 9 секторів (15 секторів на дискеті місткістю 1.2 Мбайта і 18 на дискеті 3,5 дюйма з кількістю доріжок 80). Розмір сектора 512 байт, і 512 байт * 9 секторів * 40 доріжок * 2 сторони дає в результаті місткість дискети 360K. Всі типи гнучких дисків використовують розмір сектора 512 байт в MS DOS.

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

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

Дискові сектори визначаються магнітною інформацією, яку записує утиліта форматування диска. Інформація включає ідентифікаційний номер кожного сектора. BIOS нумерує сектори 1-8, 1-9 (або 1-15, 1-18) в залежності від місткості диска. Доріжки не маркіруються, замість цього вони визначаються механічно по зміщенню головки читання/запису від зовнішнього краю диска. Доріжки нумеруються від 0 до 39 для дискет діаметром 5 1/4 дюйма, а для дисків більшої місткості їх може бути більше. Дискові функції BIOS звертаються до певному сектору, вказуючи номери доріжки і сектора. Однак функції DOS розглядають всі сектори диска, як один ланцюг, якій нумерується підряд, починаючи від 0, тому кожний сектор має свій логічний номер сектора. Для дискет перший сектор (доріжка 0, сектор 1) містить запис початкового завантаження, яке є невеликою програмою, що дозволяє комп'ютеру завантажувати з дискового накопичувача інші частини DOS. Потім йдуть дві копії таблиці розміщення файлів, які містять інформацію про розподіл дискового простору (друга копія зберігається з міркувань безпеки). Потім йде кореневий каталог, який містить список файлів і посилань на підкаталоги, а також вказує в якому місці диска вони починаються. Нарешті, далі йдуть дві невеликі програми DOS IBMBIO.COM і IBMDOS.COM, які прочитуються при старті і забезпечують компьютер можливостями необхідними для знаходження і завантаження файла COMMAND.COM, який безсумнівно є основною частиною операційної системи.

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

Читання таблиці розміщення файлів.

Диск використовує таблицю розміщення файлів (FAT) для відведення дискового простору файлам і зберігання інформації про вільні сектори. З міркувань безпеки на всіх дисках зберігаються дві копії FAT. Вони зберігаються послідовно, в секторах з самими молодшими доступними логічними номерами, починаючи зі сторони 0, доріжки 0, сектора 2 (сектор 1 також зайнятий записом початкового завантаження). Число секторів, що займаються FAT визначається розміром і типом диска. Зазначимо, що в MS DOS розмір запису FAT може бути 16 бітів для фіксованого диска (FAT-16). Тут ми будемо роглядати тільки 12-бітні записи (FAT-12).

Таблиця розміщення файлів зберігає інформацію про кожний кластер секторів на диску. Кластер це група стандартних секторів розміром 512 байт (незалежно від типу диска MS DOS завжди працює з 512- байтными секторами). Група секторів використовується, щоб зменшити розмір FAT. Однак великі кластери, що використовуються на фіксованому диску марно витрачають дисковий простір при записи маленьких файлів. Є набір розмірів кластерів і розмірів FAT, що використовуються в IBM PC:

Тип диска

Секторів на кластер

Розмір FAT (cект.)

дискета 360K

2

2

дискета 1.2 M

1

7

дискета 1.44 M

1

7

вінчестер 10M

8

8

вінчестер 20M

4

40

При більшому розмірі кластера марно витрачається дисковий простір, але коли великі диски мають малий розмір кластера, то таблиця розміщення файлів стає дуже великий. При роботі з дисками DOS завантажує копію FAT в пам'ять, по можливості зберігаючи її там. Для дискет місткістю 1.2 M та 1.44 М вибраний кластер розміром в 1 сектор, оскільки їх основне призначення складається в зберіганні копій жорсткого диска, а отже компактність дуже важлива.

Кожна позиція в таблиці розміщення файлів відповідає конкретній позиції кластера на диску. Звичайно файл займає декілька кластерів і запис в каталозі файлів містить номер стартового кластера, в якому записаний початок файла. Переглянувши позицію FAT, відповідну першому кластеру, DOS знаходить номер кластера, в якому зберігається наступна порція цього файла. Цьому кластеру відповідає свій запис в FAT, який в свою чергу містить номер наступного кластера в ланцюжку. Для останнього кластера, зайнятого файлом FAT містить значення від FF8H до FFFH. Невживаним (або звільненим) кластерам записується значення 000, а поганим секторам - FF7H. Нарешті, значення від FF0H до FF7H приписуються резервним кластерам.

Номер кластера містить 3 шістнадцяткові цифри, для збереження яких потрібно 1 1/2 байти. Для зменшення розмірів FAT числа для двох сусідніх кластерів зберігаються в трьох послідовних байтах таблиці. MS DOS автоматично проводить всі необхідні обчислення. Перші три байти FAT не використовуються для номерів кластерів.

Перший байт містить код, що визначає тип диска, а наступні 2 байти обидва рівні FFH. Оскільки ці позиції таблиці зайняті, то кластери нумеруються, починаючи з 2, причому кластери 2 і 3 займають другу трійку байт таблиці.

MS DOS може створювати FAT із записами розміром 16 біт. Такі записи необхідні для фіксованих дисків розміром більш 10M, які мають більше, ніж 4086 кластерів.

Програмування контролера НГМД 765 і мікросхеми прямого доступу до пам'яті 8237.

Мікросхема контролера НГМД 765 фірми NEC управляє мотором і головками накопичувача на дискетах і обробляє потоки даних, що направляються в або з дискових секторів. Один контролер, встановлений на платі адаптора дисків, може обслуговувати до чотирьох НГМД. За винятком випадків, пов'язаних із захистом від копіювання, програмістам не доводиться програмувати мікросхему контролера НГМД напряму. Процедури роботи з дисками, DOS, що надаються і BIOS ефективні і зручні, крім того, дуже ризиковане писати свої власні процедури, оскільки помилки в них можуть зруйнувати дисковий каталог або таблицю розміщення файлів, що викличе повне руйнування інформації на диску. Вам потрібна документація по мікросхемі контролера НГМД 8272A фірми Intel, яка аналогічна мікросхемі фірми NEC. У даній документації перераховані переривання, що генеруються контролером НГМД, в той час як в документації по IBM PC цього списку немає.

Контролер НГМД може виконувати 15 операцій, з яких тут будуть обговорюватися тільки три: операції пошуку і читання або записів одного сектора. Розуміння того як вони працюють дозволить виконати будь-які з дванадцяти, що залишилися. Читання файла складається з пошуку його в каталозі, визначенні його положення на диску за допомогою таблиці розміщення файлів і потім з виконання набору операцій читання одного сектора. Ця процедура включає 6 кроків:

1. Включення мотора і коротке очікування, поки він набере обороти.

2. Виконання операції пошуку і очікування переривання, вказуючого на завершення цієї операції.

3. Ініціалізація мікросхеми DMA для пересилки даних в пам'ять.

4. Посилка команди читання контролеру НГМД і очікування переривання, що вказуює, що пересилка даних завершена.

5. Отримання інформації про статус контролера НГМД.

6. Вимкнення мотора.

Контролер НГМД працює через три порти введення/виводу:

3F2H - регістр цифрового висновку

3F4H - регістр статусу

3F5H - регістр даних

"Перекалібрування" накопичувача має на увазі повернення його головки на нульову доріжку. Ця операція здійснюється посилкою простою послідовності команд контролеру НГМД. Контролер НГМД керує поточною позицією головки, за рахунок запам'ятовування всіх змін позицій головки від початкової установки на нульову доріжку. Коли контролер НГМД скидається, за рахунок зміни біта 2 регістри цифрового виводу, то значення поточної позиції головки встановлюється в нуль, незалежно від того, на якій доріжці знаходиться головка насправді, що робить необхідним перекалібрування. Звичайно скидання контролера НГМД проводиться тільки у разі такої серйозної помилки накопичувача, після якої невідомий поточний стан контролера НГМД і накопичувача.

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

Робота мікросхеми контролера НГМД розділяється на три фази: командна фаза, фаза виконання і фаза результату. У командній фазі один або більше байти посилаються в регістр даних. Послідовність байтів суворо фіксована і вона міняється від команди до команді. Потім контролер НГМД виконує команду і в цей час він знаходиться в фазі виконання. Нарешті, під час фази результату, ряд байтів статусу читаються з регістра даних. При цьому обов"язково , щоб не було помилки у кількості байтів, що передаються або считуються в регістр даних в командній і результативній фазах.

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

Перший байт цієї технічної інформації відноситься до числа байтів в секторі, яке кодується як 0 для 128, 1 для 256, 2 для 512 і 3 для 1024. Звичайно дискети, створені в MS DOS мають сектори розміром 512 байт. Потім йдуть дані кінця доріжки (EOT), які дають максимальний номер сектора для циліндра; це значення дорівнює 9 для дискет місткістю 360K. Нарешті, йде байт що дає довжину зсуву (GPL, рівний 2AH) і довжину даних (DTL, рівний FFH). MS DOS зберігає чотири технічні параметра в пам'яті, в спеціальній таблиці параметрів, званою базою диска (disk base). Вектор переривання 1EH показує на цю таблицю. Чотири значення зберігаються в тому порядку, в якому вони повинні бути передані контролеру НГМД, починаючи зі зміщення 3.

Операція

# байта

Функція

Установка для головки 0

доріжки 15, сектора 1

Пошук

1

2

номер коду 00001111

головка і накопичувач XXXXXHDD

1FH

00H

Читання

1

2

3

4

5

6

7

8

9

номер коду 01100110

головка і накопичувач XXXXXHDD

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

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

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

байтів в секторі

кінець доріжки

довжина зсуву

довжина даних

66H

00H

0FH

00H

01H

02H

09H

1AH

FFH

Запис

1

2-9

номер коду 01000101

ті ж, що і для читання сектора

45H

(у ланцюжках бітів черех X позначені біти, значення яких несуттєві Н - номер головки, а через DD - номер накопичувача)

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

биті 3-0 1 = накопичувач D-A в режимі пошуку

4 1 = контролер НГМД виконує команду читання/запису

5 1 = контролер НГМД не в режимі DMA

6 1 = регістр даних контролер НГМД готовий до прийому даних 0 = готовий до посилки даних

7 1 = контролер НГМД готовий до посилки або прийому даних

Перед початком дискових операцій непогано перевірити, що біт 6 рівний нулю, відображаючи, що контролер НГМД чекає команду. Якщо він чекає посилки даних, то сталася помилка. Коли байт даних посилається в регістр даних, то біт 7 регістри статусу стає рівним нулю; продовжуйте читання регістра доти, поки біт не зміниться зворотно на 1, а потім посилайте наступний байт команди. Аналогічно, перевіряйте цей біт статусу перед читанням байта статусу в фазі результату.

Коли операція пошуку завершена, то контролер НГМД ініціює переривання 6, переривання від НГМД. Хоч так само просто можна дізнатися про закінчення операції пошуку перевіряючи регістр статусу, в прикладі це робиться за рахунок обробки переривання. Коли відбувається перериванння, то обробник переривання BIOS встановлює біт 7 байти статусу пошуку в області даних BIOS, розташованого за адресою 0040:003E. Це єдиний результат обробки переривання. Можна перевіряти цей байт доти, поки біт 7 не буде встановлений, а потім перейти до наступного кроку операції читання сектора.

Наступний крок складається в ініціалізації мікросхеми прямого доступу до пам'яті 8237. Ця мікросхема займається обміном даних між периферійними пристроями і пам'яттю, роботою, якою може займатися також процесор. Тактова частота процесора адекватна цій задачі, однак при пересилці даних всі переривання повинні бути заборонені, з тим щоб не відбувалося втрати даних. Всі моделі IBM PC мають мікросхему DMA, тому процесор вільний при передачі даних.

IBM PC і XT використовують 4-хканальную мікросхему DMA 8237. Канал 0 призначений для "оновлення" пам'яті (memory refresh); він постійно відновлює заряд елементів оперативної пам'яті. Якщо Ви будете працювати по цьому каналу, то це приведе швидше всього до краху машини. Канал 2 призначений для дискових операцій, а два інші каналу, з номерами 1 і 3, доступні (через роз'єм розширення) для додаткового обладнання. На жаль, обмін пам'ять-пам'ять вимагає двох каналів і одним з них повинен бути канал 0, тому такий обмін недоступний на IBM PC і XT. Однак AT має 7 каналів прямого доступу до пам'яті і DMA автоматично використовується інструкціями MOVS, істотно збільшуючи продуктивність.

Перед ініціалізацією каналу програма повинна послати в мікросхему код, той, що повідомляє чи буде відбуватися читання або запис в контролері НГМД. Цей однобайтний код рівний 46H для читання і 4AH - для запису. Цей код повинен бути посланий в кожний з двох портів з адресами 0BH і 0CH. Кожний канал мікросхеми 8237 використовує три регістри. Один 16- бітний регістр, регістр лічильника, містить число тих байтів даних, що передаються. Його величина повинна бути на одиницю менше, ніж необхідне число байтів. Для каналу 2 доступ до цього регістра здійснюється через порт 05H; пошліть в нього два послідовних байта, причому спочатку молодший байт.

Інші два регістри містять адресу буфера в пам'яті, за допомогою якого буде відбуватися обмін даними. Ця адреса задається як 20-бітне число, тому, наприклад, адреса 3000:ABCD задається як 3ABCD. Молодші 16 бітів посилаються в регістр адреси, який для каналу 2 має адресу порту 04H. Спочатку посилається молодший байт. Старші 4 біти йдуть в регістр сторінки, який для каналу 2 має адресу порту 81H. Коли байт посилається на цю адресу, то мають значення тільки 4 молодших біта. Якщо буфер створюється в сегменті даних, то треба скласти значення DS і зміщення буфера для отримання 20-бітного значення. Складання може привести до перенесення в значення регістра сторінки. Наприклад, якщо DS рівний 1F00H, а зміщення буфера - 2000H, то результуюча адреса буде рівний 1F00 + 2000 = 21000H.

Після того як ці три регістри встановлені, пошліть 2 в порт з адресою 0AH, щоб дозволити роботу каналу 2. Це залишає мікросхему DMA в стані очікування даних від накопичувача, а програма повинна негайно почати посилку командних байтів в контролер НГМД. Ось короткий перелік кроків при програмуванні мікросхеми 8237:

1. Послати код читання або запису.

2. Обчислити 20-бітну адресу пам'яті буфера, в яку будуть переслані дані, і заслати його в регістри адреси і сторінки каналу 2.

3. Вмістити значення числа байтів (мінус 1), що передаються в регістр лічильника каналу 2.

4. Дозволити роботу каналу.

Після посилки командних байтів, чекайте переривання і звертайтеся за ним так само, як і після операції пошуку. Потім прочитайте байти статусу.

Постановка задачі

Написати програму читання даних з сектора N доріжки M сторони K дискети, використовуючи роботу з контролером НГМД. Для перевірки правільності рекомендуємо підготувати (наприклад, за допомогою програми DE.EXE) дані на дискеті, записавши їх у відповідний сектор на конкретній доріжці.


 

А также другие работы, которые могут Вас заинтересовать

36950. Побудова графіків в Matlab / Simulink 233.79 KB
  Висновок: під час лабораторної роботи я вивчив графічні можливості СКМ Matlab/Simulink.
36951. Вивчення універсального вимірювача Е7-11 при вимірюваннях індуктивності, ємності, опору, тангенса кута втрат й добротності елементів 378 KB
  Мета: Навчитись вимірювати індуктивність, ємність, опір, тангенса кута втрат й добротність елементів універсальним вимірювачем Е7-11.
36952. Проектування та створення баз даних у СУБД MS Access**. Створення табличних об’єктів засобами конструктора 858.5 KB
  Таблиці СУБД нормалізовані. Нормалізація – процес видалення з таблиць даних що повторюються шляхом перенесення їх у інші таблиці записи яких не містять значень що дублюються. Структура реляційної таблиці визначається складом полів. Вміст поля подається у стовпці таблиці.
36953. Проведенння приймального суцільного контролю якості продукції 366.5 KB
  Підготувати прилад В7І6 до роботи і провести вимірювання опору резисторів на різких діапазонах. Підготувати прилад МО62 до роботи і провести вимірювання опору резисторів. 3 призначений для забезпечення високого вхідного опору приладу і перетворення величини вимірюваного опору в напругу. Перший каскад коефіцієнт підсилення якого дорівнює одиниці призначений для перетворення вимірюваного опору в напругу із цією метою на його виході автоматично.
36954. СУБД MS Access**. Сортування, пошук та відбір записів у таблиці. Конструювання запитів 1.34 MB
  Звичайний фільтр викликається послідовністю команд Записи – Фильтр – Изменить фильтр. Розширений – Записи – Фильтр – Расширенный фильтр. Записи формуються шляхом об’єднання записів таблиць що використовуються у запиті. Умови відбору сформульовані у запиті дозволяють фільтрувати записи що складають результат об’єднання таблиць.
36955. Дослідження активних фільтрів на операційних підсилювачах у середовищі Electronics Workbench 95 KB
  Розрахувати номінали елементів наступних кіл: Примітка: для кожної зі схем доцільно обрати Ф а решту елементів розрахувати виходячи з вимог завдання варіанту; а ФНЧ першого порядку на неінвертуючій ланці з частотою зрізу і коефіцієнтом підсилення ; б ФВЧ першого порядку на неінвертуючій ланці з частотою зрізу і коефіцієнтом підсилення ; в ФНЧ другого порядку на неінвертуючій ланці з частотою зрізу і коефіцієнтом підсилення ; г ФВЧ другого порядку на неінвертуючій ланці з частотою зрізу і коефіцієнтом підсилення ; д СФ на...
36957. Дослідження надійності нерезервованої системи 36.8 KB
  При постійних інтенсивностях відмов елементах де інтенсивність відмови системи. Ризик системи Rct і обчислюються по наступним формулам: де Qct=1Pct – вірогідність відмови системи протягом часу t; qit – вірогідність відмови iго елементу системи протягом часу t. Якщо елементи системи рівно надійні то співвідношення Rct до має вигляд: .
36958. Волоконно-оптические системы передачи повышенной пропускной способности 676 KB
  Основным преимуществом ВОЛС к высокой помехоустойчивостью; качества длинной линии передачи и корреляция; параметры стабильности воспроизведения канала; Цифровой строительство сети; И самое главное - очень технико-экономические показатели