- •Лекція 4 «Операційні системи сімейства Unix, MacOs, Windows»
- •Сімейство Microsoft Windows.
- •Підсистеми ядра ос. Інтерфейс ядра операційної системи
- •Підсистема управління введенням-виведенням
- •Підсистема управління оперативною пам'яттю
- •Поняття планувальника операційної системи.
- •Типи планувальників ос.
- •Реалізація планувальників у різних ос.
- •Взаємодія між процесами.
- •Засоби міжпроцесної взаємодії.
- •Поняття Бібліотеки.
- •Статичні та динамічні бібліотеки.
- •Використання бібліотек.
- •Додаткова функціональність ос.
- •Безпека ос.
- •Командний інтерпретатор операційної системи.
- •Характеристики Кожному процесу мають бути виділені наступні ресурси: процесор, пам'ять, доступ до пристроїв вводу-виводу, файли
- •Робочий цикл процесу
- •Виконання процесів
- •Завершення процесів
- •Особливості написання драйверів для Windows nt.
- •Сервісні системні виклики.
- •Система відслідковування та обробки помилок у ос.
- •Види помилок.
- •Робота з відеоадаптером.
- •Структура відеоадаптера.
- •Особливості функціонування відеоадаптера у текстовому та графічному режимах.
- •Отримання та зміна атрибутів.
- •Позиціонування та організація пошуку даних.
- •Основні функції для роботи з bios.
- •Системний реєстр.
- •Функції bios для роботи з консоллю.
- •Функції bios для роботи з клавіатурою.
- •Функції bios для роботи з екраном.
- •Робота з портами.
- •Інтерфейс rs – 232.
- •Отримання та передача даних через порти.
- •Таймер bios.
- •Керування пам’яттю за допомогою функцій biosmemory.
- •Резидентні програми.
- •Структура та особливості тsr –програм.
- •Модульне програмування.
- •Організація інтерфейсу.
- •Зв’язок Асемблера з мовами високого рівня.
- •Структура об’єктного та завантажувального модуля.
- •Зовнішні виклики.
- •Поняття “extern” та компоновка кількох об’єктних модулів.
- •Основні поняття тестування програмного забезпечення.
- •Розробка test-cases, test-suites.
- •Атрибути test-cases, test-suites.
- •1. Процес тестування програмного забезпечення
- •2. Чорна скринька - функціональне тестування
- •3. Розробка test-cases, test-suites. Атрибути test-cases, test-suites.
- •Атрибути тс
- •Атрибути тs
- •Цикли розробки та тестування програмного забезпечення.
- •Особливості та порядок виконання.
- •Класифікація видів тестування програмного забезпечення.
- •Призначення тестування програмного забезпечення.
- •Класифікація видів тестування
- •Методи генерації, методи відбору тестування програмного забезпечення.
- •Виконання процесу тестування.
- •Файлові системи та Бази даних.
- •Технології доступу до даних. Dao, ado, odbc.
- •Архітектура odbc
- •Список зареєстрованих драйверів
- •Створення dsn для бази даних Mіcrosoft sql Server
- •Застосування Structured Query Language (sql).
- •Open DataBase Connectivity (odbc) для доступу до даних.
- •Використання та dao у базах даних.
- •Інтернет – системи з підтримкою бд.
Функції bios для роботи з консоллю.
Функції bios для роботи з клавіатурою.
Функції bios для роботи з екраном.
Навчальна мета: Засвоїти основні поняття застосування базової системи введення-виведення для роботи з периферійними пристроями.
Виховна мета: Допомогти студентам усвідомити вагому роль застосування базової системи введення-виведення для роботи з периферійними пристроями.
Актуальність: Донести до відома студентів, що на сьогоднішній день знання застосування базової системи введення-виведення для роботи з периферійними пристроями є основним для роботи системного адміністратора.
Мотивація: Мотивацією вивчати даний напрямок у курсі системного програмування може стати бажання отримати позицію системного програміста.
Функції BIOS для роботи з консоллю
ROM BIOS (Read Only Memory Basic Input Output System) являє собою сукупність програм в енергонезалежній пам'яті комп'ютера, однією із задач яких є усунення специфіки апаратних компонентів комп'ютера для функціонуючі на ньому програмного забезпечення, включаючи операційну систему. Обслуговування клавіатури й монітора виконують програми BIOS, називані драйверами. Структурно драйвери складаються з ряду підпрограм, називаних функціями, кожна з яких виконує певні дії. Звертання до функцій BIOS виробляється аналогічно звертанню до функцій MS DOS. Для роботи із клавіатурою й екраном BIOS містить два програмних переривання - 16h і 10h, звертання до яких, виходячи з вищесказаного, є звертанням до драйверів цих пристроїв. Для виклику цих переривань, як звичайно, використається команда INT - int 16h або int 10h. Для виконання певної операції в регістрі АН указується номер функції. При необхідності в інших регістрах може вказуватися додаткова (параметрична) інформація. Нижче розглянемо докладніше можливості BIOS для роботи з консоллю.
Функції BIOS для роботи із клавіатурою
Переривання 16 BIOS має функції для різних типів клавіатур: звичайної — 84 клавіші й двох типів розширеної клавіатури — 101\102 і 122-клавішної.З'ясувати функціональні можливості клавіатури дозволяє функція 09 h:
Вхід: АН - 09h. Вихід: AL = бітове поле, установлені біти якого позначають підтримувані функції: 7 - резерв; 6 - підтримка клавіатури з 122 клавішами (і функцій 20h-22h (int 16h)); 5 - підтримка розширеної клавіатури з 101-102 клавішами (і функцій 10h-12h (int 16h)); 4 - підтримка функції 0Ah (int 16h); 3 - підтримка функції 0З0бп (int 16h); 2 - підтримка функції 0305h (int 16h); 1 - підтримка функції 0304h (int 16h); 0 - підтримка функції 0З00 h (int 16h).
Перш ніж викликати цю функцію, необхідно впевнитися в тому, що вона підтримується даною версією BIOS. Зробити це можна, викликавши функцію 0С0h переривання int 15h.
Вхід: АН = COh одержати конфігурацію. Вихід: CF = 1 - BIOS не підтримує цю функцію; CF - 0 - у випадку успіху: ES:BX - адреса конфігураційної таблиці в ROM-пам'яті; АН = стан (Ооп - успіх; 8бп - функція не підтримується).
Формат конфігураційної ROM-таблиці:
Зсув |
Розмір |
Опис |
00h |
2 байти |
Число байтів у цій таблиці |
02h |
1 байт |
Модель BIOS |
03h |
1 байт |
Підмодель BIOS |
04h |
1 байт |
Видання BIOS: 0 — 1-я редакція, 1 — 2-я редакція й т.д. |
05h |
1 байт |
1-й байт властивостей |
06h |
1 байт |
2-й байт властивостей |
07h |
1 байт |
3-й байт властивостей |
08h |
1 байт |
4-й байт властивостей |
09h |
1 байт |
5-й байт властивостей |
Якщо в результаті цього виклику біт б другого байта властивостей установлений, то BIOS підтримує функцію 09h переривання int 16h, за допомогою якої визначаються функціональні можливості клавіатури.
Вхід: АН = 10h, 20h читання символу з очікуванням (для 101-102- і 122-клавиш-ных клавіатур відповідно). Вихід: для звичайних клавіш (АН = скан-код BIOS; AL = символ ASCII); для клавіш і комбінацій з розширеним кодом (АН = розширений ASCII-код; AL = 0); для додаткових клавіш (АН - розширений ASCII-код; AL = 0Eh). Для уведення рядка символів дані функції необхідно використати в циклі. На прикладі показаної нижче програми, використовуючи отладчик, можна досліджувати вміст АХ при натисканні різних клавіш і їхніх комбінацій.
;prg05_02.asm - програма на асемблері для уведення рядка ;з використань функції уведення символу 10h
.data
string db 5 dup (0) len_string =$-string adr_stringdd string
.code
mov cx,len_string
les di.adr_string ml: mov ah.O10h
int 16h
stosb
loop ml
Програма вводить 5 символів і зберігає їх у рядку str.
Перевірка наявності символу (01h, 11h, 21h int 16h)
Вхід: АН = Olh перевірка наявності символу (для 84-клавішної клавіатури). Вихід: якщо ZF=O, те регістри АН і AL містять: для звичайних клавіш (АН = скан-код BIOS; AL = символ ASCII); для клавіш і комбінацій з розширеним ASCII-кодом (АН = розширений ASCII-код; AL = 0); якщо ZF=1, то буфер порожній.
Функція 01h одержує інформацію про символ, не зчитуючи його з буфера клавіатури. Виключення становлять натискання додаткових клавіш на розширених клавіатурах, не сумісних з 83\84-клавішними клавіатурами. У процесі перевірки функцією O1h вони віддаляються з буфера. Тому при роботі з розширеними клавіатурами необхідно використати функції 11h і 21h.
Вхід: АН = llh, 21h перевірка наявності символу (для 101-102- і 122-клавішних клавіатур відповідно). Вихід: якщо ZF=O, те регістри АН і AL містять: для звичайних клавіш (АН = BIOS скан-код; AL - символ ASCII); для клавіш і комбінацій з розширеним кодом (АН = розширений ASCII-код; AL = 0); для додаткових клавіш (АН = розширений ASCII-код; AL = 0eh); якщо ZF=0, то буфер порожній. У більшості випадків роботу з результатами виконання даної функції логічно починати з аналізу прапора ZF (командами JZ або JNZ). Що ж стосується вмісту регістра АХ, те воно аналогічно містимо00h int 16h :пересилаємо його: stosb jmpml
Одержання стану прапорів клавіатури (02h, 12h, 22h int 16h)
BIOS надає функцію 02h для одержання стану світлових індикаторів клавіатури й деяких керуючих клавіш.
Вхід: АН = 02h одержати стан прапорів клавіатури (для 84-клавішної клавіатури). Вихід: AL = бітове поле, установлені біти якого відповідають стану наступних прапорів: 7 — режим вставки активний; 6 — індикатор CapsLock включений; 5 — індикатор NumLock включений; 4 — індикатор ScrollLock включений; 3 — натиснута клавіша Alt (будь-яка клавіша Alt на 101-102-клавішній клавіатурі); 2 — натиснута клавіша Ctrl (будь-яка клавіша Ctrl на 101-102-клавішній клавіатурі); 1 — натиснута ліва клавіша Shift; 0 — натиснута права клавіша Shift.
Підтримка розширених клавіатур здійснюється функціями 12h і 22h BIOS.
Вхід: АН = 12h, 22h одержати стан прапорів клавіатури (для 101-102- і 122-клавішних клавіатур). Вихід: AL = перше бітове поле, установлені біти якого відповідають стану прапорів, що повертають у регістрі AL функцією 02п; АН = друге бітове поле, установлені біти якого відповідають наступному стану прапорів: 7 — натиснута клавіша SysReq (SysRq); 6 - натиснута клавіша CapsLock; 5 — натиснута клавіша NumLock; 4 — натиснута клавіша Scrolllock; 3 — натиснута права клавіша Alt; 2 — натиснута права клавіша Ctrl; 1 — натиснуто ліву клавішу Alt; 0 — натиснута ліва клавіша Ctrl. Крім цього, стан даних прапорів можна прочитати з оперативної пам'яті по адресах: 0040h:0017h (AL) і O040h:0010h (АН).
Запис символу в буфер клавіатури (05h int 16h)
Вхід: АН = 05h запис символу в буфер клавіатури: СН = скан-код; CL = символ ASCII. Вихід: AL = стан: 00h — успішний запис; Olh — помилка (буфер клавіатури заповнений).
За допомогою цієї функції можна здійснювати перевірку для програм, які очікують уведення із клавіатури. Сам буфер клавіатури організований за принципом кільця, має розмір 16 байт і займає в пам'яті діапазон адрес 0040h:001Eh...0040h:003Dh. В комірці 0040h:001Ah зберігається адреса початку буфера, а в комірці 0040h: 00,1Ch - адреса кінця. Якщо вміст цих комірок рівний, то буфер порожній. Одному символу в буфері відповідає слово, у якому перший байт - скан-код клавіші, а другий - символ ASCII. Досліджувати дану функцію можна з використанням операції зчеплення (|) MS DOS. Для цього оформимо фрагмент коду для визначення наявності символу в буфері і його уведенні у вигляді окремої програми.
У командний рядок MS DOS необхідно ввести рядок:
prog_1.exe | prog_2.exe >p.txt
У результаті всіх цих дій буде створений файл p.txt, що і буде містити рядок str з файлу prog_1.asm.
функції BIOS для роботи з екраном
Робота з екраном засобами BIOS виробляється за допомогою набору функцій переривання 10h. За допомогою цих функцій підтримуються текстовий і графічний режими роботи монітора. У даному розділі будуть розглянуті деякі функції виводу тексту в текстовому режимі.
Установка відеорежиму (00h int 10h)
Будь-який дисплейний адаптер підтримує кілька текстових і графічних режимів. Перемикання між цими режимами виконується за допомогою функції 00h int 10h.
Вхід: АН = 00h установити відеорежим: AL - номер відеорежиму (якщо біт 7 регістра AL = 0, то екран очищається, у зворотному випадку (AL. 7=1) уміст екрана не змінюється).
Установка позиції курсору (02h int 10h)
Функція 02h дозволяє змінити позицію курсору й зробити її початкової для наступного виводу. Помітимо, що серед функцій MS DOS немає подібної функції й функцію 02h int 10h BIOS можна використати в комбінації з функціями MS DOS для організації форматованого виводу на екран.
Вхід: АН = 02h - установити позицію курсору: ВН = номер відеосторінки (залежить від використовуваного відеорежиму); DH = рядок (00h - верх); DL = до-" лонка (00h - лівого).
Одержання позиції курсору (03h int 10h)
Функція 03h дозволяє одержати поточну позицію курсору. Аналогічно сказанному вище, серед функцій MS-DOS немає подібної функції й функцію 03h > int 10h BIOS також можна використати в комбінації з функціями MS-DOS.
Вхід: АН = 03h — одержати позицію курсору; ВН - номер відеосторінки (залежить від використовуваного відеорежиму). Вихід: DH = рядок поточної позиції курсору (00h - верх); DL - колонка поточної позиції (00h - ліва); СН = номер початкового рядка курсору; CL = номер останнього рядка курсору.
Запис символу і його атрибута у відеопам'ять (09h int 10h)
Функція 09h призначена для запису ASCII-коду символу і його атрибута безпосередньо у відеопам'ять, причому зробити це можна з кількістю повторень, заданих у регістрі СХ.
Вхід: АН = 09h — запис символу і його атрибута в поточну позицію курсору: ВН = номер відеосторінки; AL = ASCII-код символу; BL = байт-атрибут; СХ = число повторень. Для виводу одного символу вміст регістра СХ повинне бути дорівнює 1. У текстовому режимі для СХ>1 вивід здійснюється до кінця поточного рядка, після чого переходить на інший рядок. Кодування байта-атрибута в цій і іншій функціях виробляється у відповідності з наступними таблицями.
Номера битов |
Значення |
7 |
Миготливий символ |
6..4 |
Колір фону |
3 |
Символ яскравого кольору |
2..0 |
Символ кольору |
Біти |
Кольори |
Яскравий колір |
000b |
Чорний |
Темно-сірий |
001b |
Синій |
Ясно-синій |
010b |
Зелений |
Ясно-зелений |
011b |
Голубой |
Світло-блакитний |
100b |
Червоний |
Ясно-червоний |
101b |
Пурпурний |
Світло-пурпурний |
110b |
Коричневий |
Жовтий |
111b |
Ясно-сірий |
Білий |
Читання символу і його атрибута з відеопам'яті (08h int 10h)
У пам'яті відеоадаптера кожний символ представлений двома байтами, що містять ASCII-код символу і його байт-атрибут. Функція 08h BIOS дозволяє прочитати код символу і його атрибут безпосередньо з відеопам'яті.
Вхід: АН = 08h — читання символу і його атрибута в поточній позиції курсору; ВН = номер відеосторінки. Вихід: AL = ASCII-код символу; АН = байт-атрибут. Нижче наведена програма, що встановлює курсор у задану позицію.
:prg05_04.asm. устанавливающая курсор у задану позицію.
.code main:
xorbh.bh
mov dh.10
movdl.10
movah.02h
int 10h установили позицію курсору (10.10) записуємо символ і атрибут у відеопам'ять
moval. "a"
mov bl,10001100b :атрибут - яскраво-червоний миготливий
movcx.5 ;повторити 5 разів
movah.09h
int 10h :прочитаємо символ з поточної позиції відеопам'яті:
mov ah,08h
int 10h : з'ясуємо поточну позицію курсору
хог bh.bh
mov ап.ОЗn
kint 10h установили позицію курсору (10.10)
:всі результати дивимося в отладчике
Важливо відзначити, що поточна позиція курсору після виконання функцій 08h і 09h залишилася незмінною. Звідси треба важливий вивід про те, що при використанні цих функцій необхідно також піклуватися й про рух курсору функцією 02h. BIOS надає функцію 0Eh, що виводить символ у режимі телетайпа, що припускає автоматичне коректування поточної позиції курсору після виводу символу.
Запис символу у відеопам'ять (0Ah int 10h)
Функція 0Ah призначена для запису ASCII-коду символу з поточним значенням атрибута в даній позиції безпосередньо у відеопам'ять, причому зробити це можна з кількістю повторень, заданих у регістрі СХ.
Вхід: АН = 0Ah — запис символу в поточну позицію курсору; ВН = номер відеосторінки; AL = ASCII-код символу; СХ = число повторень.
Аналогічно функції 09h поточна позиція курсору не змінюється.
Запис символу в режимі телетайпа (0Eh int 10h)
Функція 0Eh виводить символ у поточну позицію курсору з автоматичним її зсувом (на відміну від функцій 09h і 0Ah).
Вхід: АН = 0Eh — запис символу в поточну позицію курсору; ВН = номер відеосторінки; AL ¦¦ ASCII-код символу; СХ = число повторень. Запис символу в останню позицію рядка автоматично переводить курcop у першу позицію наступного рядка.
Вивід рядка (13h int 10h)
Ця функція з'явилася в BIOS комп'ютерів архітектури AT.
Вхід: АН = 13h вивід рядка (AT); AL = режим запису: біт 0 - після виводу курсор у кінець рядка; біт 1 - кожний символ у рядку представлений двома байтами: байтом з ASCII-кодом і байтом-атрибутом; біт 2..7 - резерв; ВН = номер відеосторінки; BL = байт атрибут, якщо рядок містить тільки символи (AL. 1=0); СХ = число символів у рядку; DH, DL = рядок і стовпець початку виводу рядка; ES: ВР - адреса в пам'яті початку рядка.
Зверніть увагу, що вміст рядка для виводу може бути двох типів: з байтом-атрибутом, що супроводжує кожний символ рядка, і без байта-атрибута. В останньому випадку рядок складається з одних кодів символів з єдиним значенням байта-атрибута, що вказують у регістрі BL. Як видно з міркування вище, багато функцій BIOS працюють безпосередньо з відеопам'яттю.
Переміщення у вікні нагору (06h int 10h)
Функція 06h дозволяє визначити на екрані вікно, у якому можливо прокрутити певну кількість рядків нагору. При такім прокручуванні верхні рядки зникають і знизу додаються порожні рядки.
Вхід: АН = 06h — переміщення рядків у вікні нагору; AL = число рядків для заповнення знизу; ВН = атрибут символів (кольори) у рядку для заповнення; СН і CL = рядок і стовпець верхнього лівого кута вікна; DH і DL = рядок і стовпець нижнього правого кута вікна.
Рядки для заповнення знизу мають кольори, певний у ВН. Якщо вказати AL=0, то вікно очиститься й заповниться рядками з кольорами, заданим байтом-атрибутом у ВН. Нижче наведена програма виводу декількох рядків на екран, після чого вона визначає вікно на екрані й прокручує його на кілька рядків нагору.
:prg05_05.asm - програма для роботи з вікном на екрані.
.data
String db "dfsh3453637869uioraepBBan"
Ien_str1ng »$-string
adr_stringdd string
. code
..........
movcx,25 ml: mov al ,1 :після виводу - курсор у кінець рядка
xorbh.bh :номер відеосторінки
movbl.7 : атрибут push ex
mov cx,len_string :довжина виведеного рядка
les bp.adr_string :адреса рядка в парі ES:BP
mov ah,l3h
int l0h
incdh ;рядок початку виводу
incdl : стовпець початку виводу pop ex
loop ml ¦.визначаємо й прокручиваем вікно нагору
mov al.4:4 рядка
mov bh. 0
mov ch, 5
mov cl .5.
mov dh. 10
mov dl.30
mov ah.06h
int 10h
Помітьте, що функція 06h досить гнучко працює з курсором. Переміщення у вікні вниз (07h int 10h) Функція 07h дозволяє визначити на екрані вікно, у якому можливо прокрутити певну кількість рядків униз. При такому прокручуванні нижні рядки зникають і зверху додаються порожні рядки.
Вхід: АН = 07h — переміщення рядків у вікні вниз; AL = число рядків для заповнення зверху; ВН = атрибут символів (кольори) у рядку для заповнення; СН і CL - рядок і стовпець верхнього лівого кута вікна; DH і DL = рядок і стовпець нижнього правого кута вікна.
Рядки для заповнення зверху мають кольори, певний у ВН. Якщо вказати А1_=0, то вікно очиститься й заповниться рядками з кольорами, заданим у ВН. Структура байта атрибута аналогічна описаної вище.
Контрольні запитання:
Функції BIOS для роботи з консоллю
Функції BIOS для роботи із клавіатурою
Формат конфігураційної ROM-таблиці:
Перевірка наявності символу (01h, 11h, 21h int 16h)
Запис символу в буфер клавіатури (05h int 16h)
Функції BIOS для роботи з екраном
Лекція 23 «Робота з портами засобами операційної системи»