Міністерство освіти та науки України НУ ”Львівська політехніка” Методичні вказівки до циклу лабораторних робіт з курсу “Системне програмування” для студентів базового напрямку 6.0915 “Комп`ютерна інженерія” Затверджено на засіданні кафедри електронних обчислюваних машин Протокол № 14 від 2 квітня 1996 року
Львів – 1996 Методичні вказівки до циклу лабораторних робіт з курсу “Системне програмування” для студентів базового напрямку “Комп`ютерна інженерія” /Упор. Л.О.Березко, Т.В.Кицмей, Р.І.Беген. – Львів:НУЛП. – 21с. Упорядники : Л.О.Березко,к.т.н., доц. Т.В.Кицмей, к.ф.-м.н.,ст.викл. Р.І.Беген, асист.
Відповідальний за випуск : А.О.Мельник, д.т.н.,проф. Рецензенти : В.В.Троценко,к.т.н., доц. К.М. Обельовська,к.т.н., доц. Лабораторна робота №1 (4 години) Назва роботи : Ввід інформації з клавіатури. Мета роботи : Ознайомитись з можливостями організації вводу з клавіа- тури в комп`ютерах сімейства ІВМ РС. Загльні положення Ввід інформації в комп`ютер може бути виконаний на трьох рівнях: зверненням до функцій операційної системи (МS DOS); зверненням до функцій BIOS; фізичним безпосереднім доступом до апаратних засобів. Перший рівень дозволяє пропускати клавіатурний ввід через через інста- льованні драйвери ,забезпечує контроль за клавішами Crtl-C ( Crtl–Break) та стандартну для операційної системи обробку помилок . Другий рівень дозволяє програмі слідкувати за натиском усіх, а не тільки символьних клавіш , виконувати керування апаратурою клавіатури і інш. Третій рівень – ( безпосередній доступ до буферу клавіатури )значно під- вищує продуктивність програми. В деяких випадках необхідна імітація натиску клавіш клавіатури з записом кодів безпосередньо у буфер. При цьому фізично натиск клавіш не відбивається. Так будуються ,наприклад, демонстрційні програми. Коротко зупинимось на апаратних засобах персонального комп`ютера для вводу з клавіатури. Клавіатура вміщує вбудований мікропроцесор. Він при кожному натисканні клавіші визначає її порядковий номер ( скенд-код ) і розміщує його в порт спеціальної електронної схеми – програмованого переферійного інтерфейсу (ППІ). Скенд-код у перших 7 бітах вміщує порядковий номер натиснутої клавіши, а восьмий біт дорівнє “о” , якщо клавіша була натиснута (прямий скенд-код), та дорівнює “1”,якщо клавіша була відпущена (зворотній скенд-код). Коли скенд-код записаний у порт 60h , схема ППІ видає сигнал “підтвердження” повідомляючи мікропроце- сор клавіатури про те, що код прийнято. Якщо клавіша натиснута довше деякого часу затримки ( delay value ), мікропроцесор клавіатури починає генерувати з заданою частотою (typenic) прямий скенд-код натиснутої клавіші.Коли скенд-код прийнятий схемою ППІ,аппаратура комп`ютера генерує переривання 9.Стандартний обробник переривання 9 – це програма ,що входить до BIOS ISR аналізує скенд-код, та по спеціальним правилам перетворює його ( ISR – Interrupt Servise Routine – програма обслуговування переривання ). Буфер BIOS для запису кодів клавіш займає 32 байта пам`яті з адреси 40:1ЕН (1086 в 10 с/г). Запис йнформації до буферу виконує ISR BIOS переривання 9 , читаня – функції ISR BIOS переривання 16Н. Буфер клавіатури розрахований на 15 натискань клавш , що генерують двохбайтні коди , і тому має 30 байт для кодів клавіш та два додаткових байта , які резервуються під двохбайтовий код для клавіші ENTER. Буфер організовується як кільцева черга , доступ до якої виконується за допомогою покажчика “голови” (head-pointer),адреса якого 40:1АН ( 1050 в с/г), та покажчика “хвоста” (tail pointer) адреса якого 40:1СН(1052 в с/г). Значення, що записані у покажчиках дорівнюють зміщення до слова , де буде записаний обробником переривання 9 код клавіші ,що буферизується, т.т. перше вільне слово буфера. Покажчик “годови” задає зміщення слова , яке буде повернуте запиту буферизованого вводу з клавіатури , зробленого операційного систимою або BIOS. Буфер для клавіатури – це класичний приклад використання кільцевого кільцевого буферу для органіції асихронної взаємодії програм за схемою “виробник-споживач”. Одна з програм (ISR BIOS переривання 9)“виробляє” інформацію , тобто , вона є процесом–виробником. Програма , що виконується , через функцію АН=00Н переривання 16Н BIOS “споживає” інформацію,тобто є процесом-споживачем.Асинхронність взаємодії означає що запис до буферу нової їнформації та читання з нього відбувається у випадкові,не зв`язані моменти часу. Тому що “виробник” постійно аналізує наявність переповнення буферу ,не відбувється перевизначення не прочи- таних ще “споживачем” кодів клавіатури . Тобто при переповненні буферу “виробник” блокується до того часу , доки “споживач” не прочитає одне або декілька слів з буферу .Якщо ж буфер пустий і виконується спроба читання інформації, функція АН=00Н переривання 16Н BIOS переходить до безконечного циклу , умовою якого є нерівність між собою покажчиків “голови” і “хвоста”. Фактично , біжуча програма , що виконує ввід з клавіатури, блокується , не даючи “споживати” неіснуючу ще інформацію. Перший рівень вводу з клавіатури Послідовність дій системи при вводі з клавіатури така: функція MS-DOS викликає драйвер клавіатури,передаючи йому запит на ввід одного символу з буферу клавіатури; драйвер,виконуючи запит, звертається до потрібної функції перерива- ння 16Н BIOS; ISR BIOS переривання 16Н читає з буферу клавіатури потрібне слово та передає його в драйвер; драйвер повертає байт (звичайно молодший) в MS-DOS. Таким чином , функції MS-DOS та функції бібліотеки Turbo C, що спираються на них,слабо залежать від особливостей апаратури, оскільки система ізольована від неї двома шарами програмного забезпечення – драйверами та BIOS. Для вводу з клавіатури використовується такі функції MS-DOS: АН = 01Н – ввід з очікуванням з стандартного пристрою вводу (клавіатури); АН = 06Н – ввід-вивід з консолі; АН = 07Н – ввід з консолі з очікуванням без “відлуння” на екран; АН = 08Н – подібна до попередньої , крім реакції на натискання Crtl-Break (викликається переривання 23Н); АН = ОАН – буферизований ввід рядка з консолі; АН = ОВН – перевірка стану стандартного вводу; АН = ОСН – ввід з клавіатури з чисткою буфера; АН = 3FH – функція префіксного читання з файлу або пристрою. Бібліотечні функції Turbo C для роботи з файлами можна поділити на дві групи: потокові та префіксні. Потокові функції виконують додаткову буферизацію інформації, що приводить до подвійної буферизації інфор- мації: на рівні бібліотечної функції та на рівні MS-DOS. Префіксні функції не виконують додаткову буферизацію , а одразу звертаються до префіксних функцій MS-DOS. Початкові функції більш ефективні при перенесенні інформації між файлом та Сі-програмою по символам та рядкам. Префіксні функції – блок-орієнтовані функції і їх використа ння дає виграш в продуктивності при перенесені одразу цілої групи байтів за одне звертання до функції. Розглянуті функції MS-DOS для вводу з клавіатури можна викликати одразу з Сі-програми через такі функції Тurbo C, як geninterrupt(), int86(), intr(), та інші ,або нявно функціями вводу Turbo C. Bелика група функцій Turbo C для вводу з клавіатури – це функції потокового та префіксного вводу. Використовуючи функції вводу, прототи- пи яких розміщені у файлі stdio.h, неможливо виконати , наприклад, не відображення символів і т.ін. Для виконання таких дій використовуються функції Turbo C,прототипи яких ро