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

НЕ 1.2 (Лекція)

Тема: Визначення складу та основних

Характеристик зп

(Типи процесорів та їх розпізнавання. Кількість та характеристики портів В/В)

Якщо ваша програма працює з пристроями комп’ютера на низькому рівні або використовує які-небудь апаратні особливості периферії, вона повинна «вміти» визначати конфігурацію апаратних засобів. В комп’ютері можуть бути встановлені різноманітні процесори та різні системи BIOS. Що стосується номенклатури периферійних пристроїв, таких як мережеві контролери, відеоадаптери,мережеві та звукові адаптери, то вона практично безмежна.

Можна виділити три основних підходи до визначення складу та основних характеристик зовнішніх пристроїв ПК:

1. Без ОС – ваша програма завантажується при старті комп’ютера та дізнається інформацію про систему отримавши її з області даних BIOS.

2. Використовуючи ОС – отримати інформацію про систему з області даних BIOS або з енергонезалежної пам’яті CMOS.

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

Для найбільш розповсюджених моделей персональних комп’ютерів конфігурація апаратних засобів задається встановленням перемичок на системній платі (motherboard) та платах контролерів периферійних пристроїв, а також записується в область даних BIOS та в енергонезалежну пам'ять CMOS спеціальною програмою BIOS Setup.

Далі розглянемо засоби BIOS, що дозволяють визначити конфігурацію комп’ютера.

Визначення конфігурації за допомогою BIOS

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

Відомості про наявність основних пристроїв комп’ютера записується в область даних BIOS з адресою 0000:0410 розміром в двобайтове слово – слово конфігурації. За допомогою переривання INT 11h програма може отримати в регістрі AX слово конфігурації з вказаної вище області даних BIOS.

Біти регістра AX

Вміст

0

В системі встановлений накопичувач на магнітному диску (НМД)

1

В системі встановлений арифметичний співпроцесор

2 – 3 (всі моделі, крім IBM PS/2)

Кількість банків оперативної пам’яті на системній платі. Для комп’ютера IBM PC розмір одного банка рівний 16 Кбайт, для IBM PC/XT – 64 Кбайт. Для визначення об’єму оперативної пам’яті сучасних комп’ютерів слід використовувати інші засоби

2 (IBM PS/2)

Комп’ютер IBM PS/2 обладнаний мишею

3 (IBM PS/2)

Не використовується в IBM PS/2

4 – 5

Початковий режим відеоадаптера:

00 – EGA або VGA

01 – кольоровий, 40x25

10 – кольоровий, 80x25

11 – монохромний, 80x25

6 – 7

Кількість встановлених накопичувачів на гнучких магнітних дисках (НГМД)

8

Встановлено контролер прямого доступу до DMA

9 – 11

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

12

Встановлений ігровий порт

13

Встановлений послідовний порт

14 – 15

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

Наявність НМД

Зараз вже важко знайти комп’ютер, в якому не було би жорсткого диску. Тим не менш, аналізуючи біт слова конфігурації, отриманого в регістрі AX від переривання INT 11h, ви можете визначити, чи обладнаний даний комп’ютер жорстким диском. Якщо цей біт встановленій в одиницю, то обладнаний, якщо ні – жорсткий диск відсутній.

Наявність арифметичного співпроцесора

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

Аналізуючи біт з номером 1 в значенні, отриманому в регістрі AX від переривання INT 11h, ви можете визначити факт наявності в системі арифметичного співпроцесора.

Початковий режим роботи відеоадаптера

Біти з номерами 4 і 5 слова конфігурації містять номер початкового режиму відеоадаптера. В сучасних комп’ютерах застосовується, як правило, режим з номером 10b - кольоровий, 80 текстових рядків по 25 символів у кожному рядку.

Кількість встановлених НГМД

Поле розміром два біта з номерами 6 та 7 містить кількість накопичувачів НГМД, встановлених в системі, мінус одиниця. Тобто, якщо в комп’ютері встановлений один НГМД, в цьому полі записано нульове значення, якщо два – значення 1 і так далі.

Сучасні моделі комп’ютерів зазвичай обладнані одним НГМД, призначеним для читання дискет розміром 3,5.

Наявність контролера прямого доступу DMA

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

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

В полі, утвореним бітами 9, 10 та 11, зберігається кількість асинхронних послідовних адаптерів, встановлених в системі та виявлених BIOS в процесі ініціалізації.

Ігровий адаптер

Якщо встановлений біт з номером 12, то до комп’ютера під’єднаний ігровий адаптер, призначений для джойстика.

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

В полі, утвореним бітами 14 та 15, записується кількість паралельних адаптерів, виявлених на етапі ініціалізації.

Конфігурація в пам’яті CMOS

Для збереження поточної конфігурації апаратних засобів використовується енергонезалежна пам'ять CMOS. Ця пам'ять складається із набору комірок, доступ до яких для читання чи запису виконується через порти вводу і виводу з адресами 70h та 71h.

Процедура читання комірки пам'яті CMOS складається з двох кроків. На першому кроці програма записує в вихідний порт за адресою 70h номер комірки, з якої необхідно прочитати інформацію. На другому кроці програма читає вмістиме даної комірки з вихідного порту за адресою 71h:

int nCellContent;

outp(0x70, nCell);

nCellContent = inp(0x71);

Запис даних в комірку пам'яті CMOS виконується аналогічно, тільки після запису номеру комірки в порт 70h програма повинна записати нове значення для цієї комірки в порт за адресою 71h:

outp(0x70, nCell);

outp(0x71, nNewValue);

В пам'яті CMOS зберігається поточна дата та час, відомості про конфігурацію системи, результат тестування при включенні живлення та інша інформація, приведена нижче:

Адреса комірки

Вмістиме

00h - 0Dh

Використовується годинником реального часу

0Eh

Байт стану діагностики при включенні живлення

0Fh

Байт стану відключення

10h

Тип НГМД

11h

Зарезервовано

12h

Тип НМД (якщо менше 15)

13h

Зарезервовано

14h

Конфігурація обладнання

15h - 16h

Об'єм основної пам'яті

17h - 18h

Об'єм розширеної пам'яті

19h

Тип першого НМД (якщо він більше 15)

1Ah

Тип другого НМД (якщо він більше 15)

1Bh - 20h

Зарезервовано

21h - 2Dh

Зарезервовано

2Eh - 2Fh

Контрольна сума комірок 10h - 20h

30h - 31h

Об'єм розширеної пам'яті

32h

Поточне століття в двійково-десятковому коді (19h для 19-го століття)

33h

Різна інформація

34h - 3Fh

Зарезервовано

Розглянемо детальніше призначення окремих комірок пам'яті CMOS.

00h - 0Dh – область годинника реального часу

Комірки з адресами 00h - 0Dh використовуються годинником реального часу.

0Eh – байт діагностики

Байт діагностики (розміщений в пам'яті CMOS за адресою 0Eh) містить результати виконання діагностики при включенні живлення комп’ютера. Проаналізувавши вмістиме байта 0Eh, програма може виявити несправність НМД, годинника реального часу, розрядку акумулятора та помилки в конфігурації. Приведемо формат цього байта:

Біт

Опис

0-1

Не використовується, рівно 0

2

0 – неправильне встановлення годинника реального часу

1 – годинник реального часу встановлено

3

0 - НМД справний;

1 - несправність НМД, неможливо завантажити операційну систему з жорсткого диску

4

0 - розмір оперативної пам'яті вказаний правильно;

1 - фактичний розмір оперативної пам'яті не відповідає вказаному в пам'яті CMOS

5

0 - конфігурація вказано правильно;

1 – помилка в конфігурації системи, фактична конфігурація не відповідає вказаній в байті конфігурації обладнання (комірка 14h)

6

0 - контрольна сума пам'яті CMOS правильна;

1 – помилка в контрольній сумі пам'яті CMOS

7

0 – акумулятор, що живить пам'ять CMOS, справний и заряджений;

1 - розрядка акумулятора вище за норму

10h – тип накопичувачів НГМД

Молодша і старша тетради першого байту описують, відповідно, другий та перший НГМД:

Значення

Ємність НГМД

0000

НГМД не встановлено

0001

360 Кбайт

0010

1,2 Мбайт

0011

720 Кбайт

0100

1.44 Мбайт

12h – тип першого та другого НМД

Цей байт розділений на дві тетради аналогічно байту, що описує НГМД. Однак в тетраді можна закодувати тільки 16 різних значень, а типів НМД значно більше. Тому тип 15 використовується спеціальним чином – якщо тип НМД в молодшій тетраді (перший фізичним НМД) рівний 15, то правильне значення типу знаходиться в паняті CMOS за адресою 19h. Аналогічно для другого фізичного НМД цей тип можна прочитати з байту за адресою 1Ah (якщо старша тетрада байту за адресою 12h більша 15).

В сучасних комп’ютерах встановлені НМД з інтерфейсами IDE чи SCSI.

В першому випадку тип диску встановлюється рівним 47. Це означає, що фактичні параметри диску зберігаються в старших комірках пам'яті CMOS, номера котрих залежать від виробника и версії BIOS.

Тип НМД з інтерфейсом SCSI задається як 1 або 0. Фактичні параметри НМД визначаються BIOS, розміщеній в контролері SCSI.

13h – зарезервовано

Ця комірка пам’яті CMOS зарезервована.

14h – конфігурація обладнання

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

Біт

Опис

0

1 - в системі встановлені НГМД;

0 - НГМД не використовуються

1

1 – встановлений арифметичний співпроцесор;

0 – арифметичний співпроцесор не встановлено

2-3

не використовуються , рівні 0

4-5

Тип відеоадаптера и відеорежим:

00 - не використовується або EGA;

01 - CGA, EGA, VGA в режимі 40x25;

10 - CGA, EGA, VGA в режимі 80x25;

11 – монохромний відеоадаптер

6-7

Кількість встановлених НГМД, зменшене на одиницю;

00 – один НГМД;

01 – два НГМД;

10 – три НГМД;

11 – чотири НГМД

15h-16h – об’єм стандартної оперативної пам'яті

Комірка 15h містить молодший байт, а комірка 16h - старший байт об’єму основної пам'яті, наприклад:

  • 0100h – 256 Кбайт;

  • 0200h – 512 Кбайт;

  • 0280h – 640 Кбайт

17h-18h – об’єм розширеної пам'яті

Комірки 17h и 18h містять, відповідно, молодший и старший байти розміру розширеної пам'яті (розміщеної вище границі 1 Мбайт) в кілобайтах.

19h-1Ah – тип першого та другого НМД

Ці комірки містять типи, відповідно, першого та другого НМД, якщо відповідний тип має значення більше 15 (див. опис комірки 12h).

1Bh-2Dh – зарезервовано

Ці комірки пам'яті CMOS зарезервовані.

2Eh-2Fh – контрольна сума комірок 10h - 20h

Для комірок пам'яті CMOS з адресами від 10h до 20h при ініціалізації система BIOS виконує повірку контрольної суми. Ця контрольна сума зберігається також в пам'яті CMOS в комірках 2Eh та 2Fh (відповідно старший та молодший байти).

30h-31h – об’єм розширеної пам'яті

Комірки 30h та 31h містять, відповідно, молодший та старший байти розміру розширеної пам'яті (розміщеної вище границі 1 Мбайт) в кілобайтах.

Це значення дублює значення, записане в комірках з адресами 17h-18h.

Визначення типу і характеристик процесора

Для кваліфікованого й ефективного використання персонального комп'ютера важливо знати:

  • тип процесора;

  • частоту процесора для однакової часової затримки на різних комп’ютерах, а також для налаштування роботи програми, виходячи з частоти та типу процесора;

  • працює процесор в «штатному» чи «розігнаному» режимі;

  • чи може даний мікропроцесор виконати ту чи іншу інструкцію: наприклад, якщо частина програми оптимізована під MMX або SEE, то перед виконанням цієї оптимізованої частини важливо впевнитися в тому, що процесор підтримує цю технологію.

Така інформація також необхідна для виявлення системних проблем, зв’язаних з роботою програм на різноманітних процесорах.

Розглянемо спосіб визначення типу процесора за допомогою інструкції CPUID, котра визначає:

  • виробника процесора;

  • підтримку процесором відповідних технологій;

  • інформацію про тип і розмір кеш-пам’яті 1-го, 2-го та 3-го рівнів процесора, а також інформацію про TLB-буфери процесора;

  • назву процесора і його частоту (в деяких випадках);

Для використання цієї функції перевіряється чи підтримується вона процесором, що тестується. Це визначається можливістю програмної зміни 21-го біту регістра EFLAGS, котра свідчить про підтримку процесором інструкції CPUID.

Наступним кроком є запуск CPUID (при eax=0). Це дозволяє дізнатися про виробника і кількість підтримуваних стандартних рівнів інструкції CPUID. Далі необхідно виконати CPUID для цих рівнів та зберегти всю отриману інформацію.

Назва процесора в загальному випадку визначається в порядку пріоритетності наступним чином:

  1. Визначається виробник процесора, в основному за допомогою інструкції CPUID при eax=0 (стрічка назви виробника записується в регістри ebx, edx, ecx).

  2. Назву процесора намагаємося отримати з Brand String (стрічка назви процесора міститься в регістрах eax, ebx, ecx після виконання інструкції CPUID при eax=0x80000002h, eax=0x80000003h, eax=0x80000004h), вона підтримується якщо інструкція CPUID при eax=0x80000000h повертає в eax число не менше за 0x80000004h.

  3. Якщо Brand String не підтримується, то перевіряється Brand ID. Ненульове значення Brand ID свідчить про підтримку Brand ID. Тоді по таблицям значень Brand ID для відповідного виробника ідентифікується тип процесора.

  4. Інакше визначається тип процесора по його сигнатурі (бітовому масиву, що містить інформацію про сімейство, модель, степпінг). При цьому необхідно також враховувати і виробника, так як деякі процесори, наприклад, Celeron, Pentium II можуть мати однакову сигнатуру.

Для визначення тактової частоти процесора в загальному випадку потрібно:

  1. Вияснити чи підтримує процесор TSC 64-бітний лічильник реального часу, для чого перевіряється 4й біт регістра edx після виконання інструкції CPUID з параметром 1.

  2. Якщо процесор працює з цим лічильником, то необхідно отримати поточне значення лічильника за допомогою функції rdtsc (ReaD from Time Stamp Counter); при цьому 64-бітне значення лічильника поміщується в регістри edx та eax;

  3. Після цього зробити затримку на протязі деякого проміжку часу

  4. Зчитати нове значення лічильника за допомогою функції rdtsc

  5. Визначити різницю отриманих значень

  6. Отримати частоту в мегагерцах розділивши різницю на час затримки і мікросекундах

Ось деякі ідентифікатори виробників процесорів:

ASCii-стрічка

HEX-значення EBX:EDX:ECX

Назва виробника

"GenuineIntel"

756E6547:49656E69:6C65746E

Intel

"AuthenticAMD"

68747541:69746E65:444D4163

AMD

"CyrixInstead"

69727943:736E4978:64616574

Cyrix

"CentaurHauls"

746E6543:48727561:736C7561

Centaur

"SiS SiS SiS "

20536953:20536953:20536953

SiS

"NexGenDriven"

4778654E:72446E65:6E657669

NexGen

"GenuineTMx86"

756E6547:54656E69:3638784D

Transmeta

"RiseRiseRise"

65736952:65736952:65736952

Rise

"UMC UMC UMC "

20434D55:20434D55:20434D55

UMC

"Geode by NSC"

646F6547:79622065:43534E20

National Semiconductor

Паралельний адаптер

Розглянемо тепер такий розповсюджений периферійний пристрій як паралельний адаптер. Таки адаптер є практично в будь-якому комп’ютері і зазвичай використовується для підключення принтеру. Тільки в портативних комп’ютерах, де принтер підключається через USB (англ. Universal Serial Bus — «універсальна послідовна шина»), паралельний адаптер відсутній.

Базова системи вводу/виводу BIOS може працювати з трьома паралельними адаптерами. В процесі тестування та ініціалізації системи BIOS знаходить працездатні адаптери та записує їх базові адреси в таблицю. Таблиця базових адрес знаходиться в області даних BIOS за адресою 0000:0408h та може містити наступні значення:

  • 378h – паралельний адаптер LPT1;

  • 278h – паралельний адаптер LPT2;

  • 3BCh – паралельний адаптер на платі адаптера монохромного дисплею (зараз це практично музейні експонати).

Паралельні адаптери можуть виробляти запити на переривання:

  • LPT1 - IRQ7, INT 0Fh;

  • LPT2 - IRQ5, INT 0Dh

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