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) дані на дискеті, записавши їх у відповідний сектор на конкретній доріжці.


 

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

75900. Россия как федерация: de jure и de facto. Правовой и фактический статус субъектов федерации 18.21 KB
  Правовой и фактический статус субъектов федерации. Принцип равноправия субъектов РФ провозглашенный в федеральной Конституции при последовательном его проведении предполагает построение симметричной федерации. Причем нынешняя асимметрия Российской Федерации вызвана во многом объективными причинами в первую очередь экономическими политическими историческими. Правовое положение субъекта Российской Федерации определяется Конституцией Российской Федерации.
75901. Особенности формирования и деятельности вооруженных сил современной России. Военные реформы в России 18.04 KB
  Направления реформы: Сокращение срока службы по призыву В декабре 2000 года Путин заявил: Армия должна быть профессиональной. Эти изменения в частности предусматривают сокращение с 2008 года срока военной службы по призыву с 24 до 12 месяцев С осени 2007 года россиян стали призывать в армию на 18 месяцев с 1 января 2008 года на 12 месяцев. Увеличение числа контрактников Улучшение материального положения военнослужащих и военных пенсионеров Введение альтернативной службы В 2002 г. Государственная Дума приняла закон согласно...
75902. Крестьянские движения XVII – XVIII вв.: бунт или революция? Сравнительный анализ 15.29 KB
  Первое крестьянское восстание под предводительством Хлопка 1603 вспыхнуло вследствие ужесточения крепостного гнета. Следующее восстание под предводительством И. Еще более крупное восстание в казацкой среде усилившейся за счет большого количества беглых людей произошло в Поволжье под руководством С. Восстание под предводительством К.
75903. Программные установки в движениях декабристов и народников: общее и особенное 19.14 KB
  Северное общество за сохранение монархии но ограниченной парламентом; Южное общество за республику. Северное общество за имущественный ценз. Северное общество за то чтобы их имели все граждане страны. Южное общество согласно но делает одно существенное дополнение гражданские и политические права народ получит только после длительного периода военной диктатуры.
75904. Политические партии в России в начале ХХ в.: сравнительный анализ программных лозунгов и деятельности двух-трех партий на выбор 186.39 KB
  Лидеры партии отстаивали целостность России допуская автономию только для Финляндии и Польши. Лидерами партии были известные предприниматели и финансисты А.
75905. Почему большевики смогли взять и удержать власть 15.43 KB
  Напротив большевики придя к власти незамедлительно приняли Декрет о земле отменивший право частной собственности на землю: земля переходила во всенародную государственную собственность; В 1914-1918 гг. Большевики соответственно также издали и Декрет о мире; Политическая раздробленность царившая среди остальных партийных кругов компромисс кадетов с эсерами с меньшевиками привела к потере ими фактического влияния в стране; наиболее организованной группой оставались лишь большевики способные в короткий срок мобилизовать собственные...
75906. Диссидентское движение в СССР: основные направления, лидеры и результаты деятельности 19.6 KB
  Диссиденты (лат. dissidents - несогласный) - термин, который с середины 70-х годов применялся к лицам, открыто спорившим с официальными доктринами в тех или иных областях общественной жизни СССР и пришедшим к явному столкновению с аппаратом власти. Первые годы брежневского правления
75907. Сравнительный анализ политических программ двух-трех современных российских политических партий (целевая аудитория (электорат) партии, образ желаемого будущего России (политическая, социально-экономическая модели, место России в международных процессах) 16.93 KB
  Все три партии видят будущее России поразному. Окончательное формирование социалистических общественных отношений В качестве альтернативы этим шагам предусмотрена программаминимум которая предполагает национализацию природных богатств России установление власти трудящихся и т. В программе ЕР нет ясного положения относительно будущего России какой она должна быть отсутствует там и идеология партии.
75908. Аграрная политика в дореволюционной России и в СССР: крепостное право и коллективизация без выдачи паспортов, община и колхоз 16.6 KB
  Крепостное право и кресьянская община. В России крестьянская община зародилась вместе с Древнерусским государством и видоизменяясь просуществовала вплоть до конца 1920х. В период Киевской Руси крестьянская община стала основной производящей единицей.