Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань



Скачати 332.49 Kb.
Сторінка1/3
Дата конвертації10.12.2016
Розмір332.49 Kb.
  1   2   3




Лабораторна робота N6

Мета роботи

Вивчення методики програмування переривань від зовнішніх пристроїв, ознайомлення з організацією мультипрограмних систем.



Необхідні апаратні і програмні засоби:

  • ПЭОМ на мікропроцесорі 80х86, Pentium ;

  • операційна система Windows, додаток Far;

  • макроассемблер МАSM (файл masm. exe), або TASM (файл tasm. exe)

  • редактор зв'язків (компоновщик) LINK (файл link. exe), або TLINK (файл tlink.exe)

  • налагоджувач AFD (файл afd. exe), або TDEBUG (файл td. exe),;

  • редактор текстів - додаток Блокнот.



Інформаційні матеріали:

  • лекції по курсу "Системне програмування";

  • посібник з мови Ассемблера, (наприклад, кн. ASSEMBLER. Учебный курс. В.Юров, С.Хорошенко,Санкт-Петербург,1999,Урок 15, Прерывания. стор.377-406);

  • посібник з програмування зовнішніх пристроїв ПЕОМ (наприклад, кн. Assembler. С.В.Зубков, М.,1999, Раздел 5.10 "Программирование на уровне портов ввода-вывода", п. 5.10.1 "Клавиатура", п.5.10.5 "Таймер", п.5.10.10. "Контроллер прерываний"

  1. Зміст роботи

В даній лабораторній роботі студенти на прикладі процедур, поданих в початковому програмному модулі, вивчають методику створення та використовування процедур обробки переривань від зовнішніх пристроїв, методику безпосередньої роботи із зовнішніми пристроями ПЕОМ через регістри зовнішніх пристроїв, методику організації процедур із повторним входженням, методику організації мультипрограмних систем. Результатом виконання лабораторної роботи є проведення експериментів на моделі мультипрограмної системи та її модифікація згідно з завданням.


  1. Довідкові дані

    1. Суть переривань від зовнішніх пристроїв.

    Послідовність дій, які відбуваються в ПЕОМ при обробці переривань від зовнішніх пристроїв полягає в наступному:

  1. В результаті функціонування зовнішнього пристрою (наприклад, при натисканні або відтисканні клавіш клавіатури, або із системного таймера через проміжки часу приблизно в 65,5 млсек) на контролер переривання поступає сигнал, в результаті якого контролер може сформувати для процесора сигнал "Запит переривання".

  2. Процесор закінчує виконання чергової команди програми (в деяких випадках, в залежності від чергової команди процесор безумовно виконує ще одну команду - див. п.f).

  3. Процесор аналізує ознаку дозволу на переривання (if), яка міститься в регістрі ознак (flags). Якщо if=0 процесор ігнорує запит і продовжує виконувати програму

  4. Якщо if=1 процесор подає на контролер переривання сигнал "Підтвердження запиту"

  5. Одержавши сигнал "Підтвердження запиту", контролер переривань передає процесору байт даних N (N - номер вектора переривань), значення якого ідентифікує зовнішній пристрій, наприклад в MS-DOS N=8 для таймера і N=9 для клавіатури.

  6. Процесор записує в стек вміст регістра ознак, після чого встановлює if=0, та записує в стек вміст регістрів CS та IP. При запису в стек використовується логічна адреса SS:SP, тобто стек програми, яка переривається. Якщо запит на переривання з'явиться під час виконання команди запису в сегментний регістр SS (наприклад, під час виконання команди MOV SS,AX), то в результаті повна логічна адреса стека може бути помилковою, оскільки залишиться "старе" значення SP. Для унеможливлення такої помилки в разі появи сигналу "Запит переривання" під час виконання любої команди запису в сегментний регістр SS, сигнал "Підтвердження запиту" формується після виконання іще однієї команди, якою, звісно, повинна бути команда завантаження регістра SP. А взагалі заміну повної логічної адреси стека рекомендується виконувати за допомогою команди LSS SP,mem32, де mem32 - адреса повної логічної адреси нового стека.

  7. Процесор завантажує регістр IP значенням слова пам'яті по адресі 0000:N*4, а регістр CS - значенням слова пам'яті по адресі 0000:N*4+2. Таким чином в реальному режимі перші 1000 байт ОЗП призначаються для таблиці, яку називають таблицею векторів переривань. Таблиця містить 256 рядків по 4 байта на рядок. Кожний рядок таблиці переривань використовується для зберігання повної логічної адреси (слово для сегментної складової та слово для зміщення в сегменті) процедури обробки переривань. Самі ж процедури обробки переривань можуть розміщуватись в любій області ОЗП. Оскільки байт N ідентифікує зовнішній пристрій, то в свою чергу рядки (вектори) також можуть ідентифікувати зовнішні пристрої

  8. Процедура обробки переривань повинна закінчуватись командою IRET. Ця команда відновлює із стека вміст регістра ознак, включаючи попередній стан ознаки дозволу на переривання (if), який згідно з п.d) повинен дорівнювати 1, а також завантажує зі стека регістри IP та CS.

    1. Використання апаратних переривань, пріоритети.

    В комп'ютерних системах переривання від зовнішніх пристроїв використовується для забезпечення ефективного програмного управління асинхронними процесами обміну даними з зовнішніми пристроями та організації мультипрограмних режимів. Під асинхронністю в даному випадку мається на увазі той факт, що початок (або закінчення, або і те і друге) обміну даних між зовнішніми та іншими пристроями ЕОМ відбувається, здебільшого, по ініціативі зовнішнього пристрою. Наприклад, введення даних із клавіатури або із мережі. При відсутності механізму переривань в програмах необхідно організовувати постійні опитування зовнішніх пристроїв, щоб не "прозівати" момент обміну. Реалізація таких опитувань, навіть при невеликій кількості зовнішніх пристроїв, призводить до не ефективного використання ЕОМ та ускладнює структуру програм.

    При наявності механізму переривань організація обміну з зовнішніми пристроями спрощується, крім того підвищується ефективність використання ресурсів обчислювальної системи за рахунок мультипрограмного режиму, який дозволяє відмовитись від непродуктивних тривалих опитувань. При використанні спеціальних масивів невеликого розміру (буферів введення-виведення даних), механізм переривань дозволяє підвищити ефективність використання ресурсів обчислювальної системи навіть в одно програмному режимі, що реалізовано в MS-DOS. Наприклад, системна процедура обробки переривань від клавіатури заносить введені дані в системний клавіатурний буфер і закінчує свою роботу. Прикладні програми фактично вводять дані не з клавіатури, а із системного клавіатурного буфера. Прикладна програма буде знаходитись в стані очікування даних з клавіатури лише в випадку пустого буфера. Така організація дозволяє зменшить ймовірність непродуктивного очікування. При цьому існує можливість переповнення клавіатурного буфера, коли по тих чи інших причинах прикладна програма не поспіває забрати дані із буфера. В MS-DOS переповнення клавіатурного буфера супроводжується звуковим сигналом. Як правило, це є свідченням наявності помилок в прикладній програмі або помилок в діях оператора ЕОМ.



    При організації роботи з зовнішніми пристроями ЕОМ виникає також проблема узгодження з допустимим часом реакції - максимально можливим відрізком часу з моменту надходження сигналу запиту від зовнішнього пристрою на контролер переривань до моменту виконання команд управління та обміну даних з зовнішнім пристроєм. Перевищення фактичного часу реакції над допустимим призводить до втрат даних і/чи до збою в функціонуванні зовнішнього пристрою. Зовнішні пристрої можуть мати широку гаму допустимого часу реакції - від практично безкінечного до декількох десятків тактів центрального процесора. При функціонуванні комп'ютерної системи існує далеко не нульова ймовірність "одночасної" появи запитів на переривання від декількох зовнішніх пристроїв. Під "одночасною" появою запитів будемо мати на увазі як дійсно одночасну їх появу (що мало ймовірно, але можливо), так і їх появу при умові, що виконується процедура обробки переривання попереднього запиту (що значно ймовірніше). Очевидно, що можливість переривання виконуваної процедури обробки переривань залежить від співвідношення допустимого часу реакції відповідних зовнішніх пристроїв - пристрою, процедура переривання якого виконується, та пристрою, який подав сигнал запиту на переривання . Тому всі зовнішні пристрої по величині допустимого часу реакції розділяють на рівні пріоритетів - найбільш пріоритетними вважаються пристрої з найменшим допустимим часом реакції і навпаки. Пріоритетне управління перериваннями виконується на апаратному рівні за допомогою контролера переривань. Контролер переривань по сигналу від зовнішнього пристрою формує запит на переривання лише при умові, що не виконується процедура обробки переривань від пристрою з тим самим або більшим пріоритетом.

    1. Вимоги до процедур обробки переривань.

      1. Вміст всіх регістрів, включаючи сегментні регістри на початку роботи процедури вважаються невизначеними, так як в загальному випадку може бути перервана яка завгодно програма після якої завгодно команди, де переривання дозволені. Виключенням з цього правила є регістри SS та SP, оскільки в механізмі переривання використовується стек перерваної програми.

      2. Вміст всіх РЗП, а також сегментних регістрів, які використовуються в процедурі, повинен бути збережений (наприклад в стеці). Якщо в процедурі обробки переривань необхідно використовувати значний розмір стека, то необхідно перейти на свій стек, оскільки в перерваній програмі значний розмір стека може бути не передбачений. Перед поверненням з процедури обробки переривань необхідно відновити вміст регістрів. Якщо використовувався свій стек, то необхідно перейти на стек перерваної програми.

    ЗАУВАЖЕННЯ. Перехід на новий стек означає виконання команди (команд) завантаження вмісту регістрів SS та SP

      1. При переході на процедуру обробки переривань if=0, тому необхідно, по можливості, чим скоріше виконати команду STI (встановить if=1), яка дозволить переривання самої процедури обробки переривань. Це необхідно для забезпечення нормальної роботи комп'ютерної системи. Пріоритетність переривань від зовнішніх пристроїв визначається, як відзначалось вище, допустимим часом реакції і встановлюється операційною системою шляхом програмування контролера переривань. Непродумане блокування переривань (при if=0 блокуються переривання любих пріоритетів) може призвести до перевищення часу реакції над максимально допустимим, особливо для найбільш пріоритетних зовнішніх пристроїв.

      2. Контролер переривань запам'ятовує факт подання на процесор чергового вектора переривань і блокує формування сигналу запитів на переривання того самого або нижчого рівнів пріоритету. Виконання команди IRET (закінчення процедури обробки переривання) розблокування не виконує. Тобто і надалі переривання того самого і нижчого рівня пріоритету будуть заблоковані. Це означає, що надалі заблоковані будуть і переривання від зовнішнього пристрою, який тільки що був обслужений. Для розблокування необхідно послати на контролер відповідні дані. Такими даними є код 20h, який в ПЕОМ необхідно подать на порт з адресою 20h, наприклад

    Mov al,20h

    Out 20h,al



    1. "Перехоплення" переривань.

    Операційні системи мають в своєму складі процедури обробки переривань від усіх стандартних зовнішніх пристроїв ПЕОМ. При роботі програм операційної системи встановлюються відповідні вектори в таблиці векторів переривань. В реальному режимі процесорів 80х86 та Pentium інші програми мають можливість безпосереднього доступу як до зовнішніх пристроїв так і до таблиці векторів переривань. Нехай, наприклад, користувач бажає самостійно вводить дані з клавіатури ПЕОМ (N=9). Він повинен створити власну процедуру обробки переривань від клавіатури (нехай вона має назву Userint9), зберегти серед своїх даних системний вектор переривань від клавіатури та записати свій. По закінченню роботи своєї програми необхідно відновити системний вектор. Вказані дії можуть бути виконані, наприклад, наступним чином

    Xor ax,ax

    Mov gs,ax

    Mov si,9*4

    Mov eax,gs:[si]

    Mov syst_vec_9,eax ; збереження системного вектора

    Mov x,offset userint9

    Mov gs:[si],ax ;встановити зміщення процедури

    ;користувача в векторі переривань



    Mov ax,seg userint9

    Mov gs:[si+2],ax ;встановити сегментну складову логічної

    ;адреси процедури користувача

    ;в векторі переривань

    ...

    ...

    Mov eax,syst_vec_9

    Mov si,9*4

    Mov gs:[si],eax ;відновлення системного вектора

    Розглянутий приклад організації перехоплення переривань має той недолік, що "перехоплення" відбувається "за спиною" операційної системи. В результаті операційна система не повідомлена про проведене "перехоплення" і може його трактувати як пошкодження таблиці векторів переривань з примусовим відновленням "правильного" вектора. Щоб цього не сталось в MS-DOS реалізовані спеціальні функції для одержання вектора переривань (функція 35h) та встановлення вектора переривань (функція 25h). За допомогою цих функцій MS-DOS веде облік "перехоплених" переривань. Приклад використання таких функцій з детальними коментаріями наведений в моделі багатопрограмної системи (процедури Setint8, Setint9). По закінчені своєї роботи програма користувача повинна відновити системні вектори переривань (процедури Retin8, Retint9).



    При перехопленні переривань можливі наступні варіанти організації процедури користувача та її взаємодії з системною процедурою.

    По першому із них системна процедура обробки переривань не використовується, а процедура користувача повністю бере на себе всі дії по обслуговуванню зовнішнього пристрою. До таких дій належать подання на зовнішній пристрій необхідних команд управління для проведення та завершення сеансу зв'язку, що потребує вивчення алгоритму функціонування зовнішнього пристрою. Крім того на контролер переривань необхідно подать згідно з п.2.3.4 команду розблокування переривань поточного та нижчого пріоритетів. Вказані дії виконані в процедурі Userint9 при введені з клавіатури символу Esc. При цьому системна процедура обробки переривань від клавіатури не викликається, тобто від операційної системи "приховується" факт натиснення клавіші Esc. При самостійній роботі з клавіатурою необхідно сформувати імпульс, який подається на клавіатуру (через 7-й розряд порта 61h) і який інформує клавіатуру про завершення введення даних. Без такого імпульсу подальша робота клавіатури буде заблокована.

    В другому варіанті мінімізується вплив процедури користувача на обробку переривань від зовнішнього пристрою. Тобто, по стану зовнішнього пристрою процедура користувача визначає, що черговий сеанс зв'язку з зовнішнім пристроєм її не стосується, а тому необхідно передати управління системній процедурі обробки переривання від даного зовнішнього пристрою. Управління на системну процедуру передається за допомогою команди JMP, забезпечуючи тим самим повернення в перервану програму безпосередньо із системної процедури. В процедурі Userint9 даний варіант реалізується при натисканні любої клавіші клавіатури крім клавіші Esc. Якщо натиснута люба друга клавіша, то процедура користувача тільки "спостерігає" за зовнішнім пристроєм, а всі дії покладаються на системну процедуру.

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



    1. Повторне входження

    Наявність механізму апаратних переривань може призвести до ефекту повторного входження, суть якого полягає в наступному. Оскільки процедура обробки переривань від деякого пристрою Devicex (нехай процедура називається Pdevx) сама може також бути перервана, то її робота може бути ще не закінченою, а пристрій Devicex знову подає сигнал запиту на переривання. Якщо такий запит буде підтверджений процесором, то процедура Pdevx обробки переривань буде запущена повторно, хоча попередній її запуск ще до кінця не виконаний. В результаті можливі помилки наступних класів:

  • a) помилки в управлінні пристроєм Devicex

  • b) помилки при продовжені виконання перерваної процедури Pdevx із-за можливої "порчі" даних в загальних областях пам'яті попереднім виконанням цієї ж процедури

    Проблема повторного входження стосується не тільки безпосередньо процедур обробки переривань, а і любих других процедур, які викликаються із процедур обробки переривань і допускають своє переривання.

    Для запобігання можливим помилкам в функціонуванні комп'ютерних систем із-за повторного входження використовуються апаратно-програмні та програмні методи.

    До апаратно-програмних методів відноситься блокування контролером переривань запитів на переривання поточного і нижчого пріоритетів. Таким чином, команди розблокування, які подані в п.2.3.4 повинні виконуватись безпосередньо перед поверненням в перервану програму, після завершення сеансів управління та зв'язку з зовнішнім пристроєм та обробки даних. Даний метод гарантує блокування повторних входжень безпосередньо для процедур обробки переривань, але не запобігає повторному входженню процедур, які викликаються із процедур обробки переривань.

    До програмних методів відноситься створення процедур, які дозволяють повторне входження або створення та використанні ознаки зайнятості процедур. Процедуру з повторним входженням можна створити при умові, що вона не змінює глобальні дані. Локальні дані, які можуть змінюватись під час виконання процедури розміщують в стеці, що унеможливлює вплив повторного входження на попередні. Прикладом організації процедури з повторним входженням є процедура Vcount із початкового модуля мультипрограмної моделі.



    Якщо процедура змінює глобальні дані, то її повторне входження може призвести до помилок. В даному випадку при входженні в процедуру установлюється ознака її зайнятості. Перед поверненням із процедури, ознака скидається. Таким чином, для запобігання повторному входженню, необхідно перед викликом аналізувати ознаку зайнятості. Подібний механізм реалізовано в MS-DOS. Звернення до функцій MS-DOS можна розглядати як виклик процедур, які в своїй більшості не забезпечують повторне входження. Прикладні програми досить часто використовують функції операційної системи, тому існує значна ймовірність їх переривання. Але в процедурах обробки переривань також може виникнуть необхідність використання функцій операційної системи. Тому в MS-DOS реалізована функція за номером 34h, яка видає адресу ознаки зайнятості. Звичайно, що цю функцію необхідно використовувати поза процедурами обробки переривань і до "перехоплення" переривань, якщо користувацька процедура обробки переривань використовує функції MS-DOS. В моделі мультипрограмної системи користувацька процедура обробки переривань від клавіатури (userint9) при відтисканні клавіші Esc повинна забезпечить завершення роботи всієї програми шляхом використання функції MS-DOS 4ch. При цьому аналізується ознака зайнятості і, якщо MS-DOS зайнята, то завершення роботи моделі не відбувається, а робота процедури userint9 завершується. Тут використано психологічний фактор - якщо завершення роботи моделі не відбулось, то користувач напевно натисне ще декілька раз клавішу Esc, а за цей час MS-DOS звільниться. В інших випадках реакція на зайнятість MS-DOS може бути значно складнішою, але необхідно пам’ятати, що програмне очікування звільнення MS-DOS буде безкінечним.



    1. Організація одно процесорних мультипрограмних систем.

    При організації мультипрограмних систем використовують переривання від зовнішніх пристроїв, основним серед яких можна вважати таймер. Таймер з деякою частотою подає на контролер переривань запити на переривання. Період між двома запитами будемо називати квантом часу. При стандартній настройці таймера ПЕОМ квант часу дорівнює приблизно 56 млсек. Сучасні ПЕОМ спроможні виконати за цей час значну кількість команд. Якщо кожній із програм (в подальшому - задач) регулярно виділяти по кванту часу то тим самим досягається ефект "одночасного" їх виконання. Управління задачами покладається на частину процедури обробки переривань від таймера, яку будемо називати менеджером квантів. Основною особливістю процедури обробки переривань від таймера при мультипрограмній обробці є можливість повернення по команді IRET не в поточну перервану задачу, а в іншу задачу, яка була перервана раніше. Для цього необхідне динамічне управління стеком процесора, тобто вмістом регістра SP (ESP), або в загальному випадку вмістом регістрів SS та SP(ESP). Таким чином алгоритм обробки переривань від таймера при організації мультипрограмної обробки повинен мати наступні пункти:

  1. Збереження в стеку перерваної задачі (де вже містяться ознаки та адреса повернення) вмісту регістрів загального призначення і, по необхідності, сегментних регістрів.

  2. Збереження в спеціально виділеній області пам'яті вмісту регістра SP або регістрів SS та SP(ESP).

  3. Вибір в менеджері квантів наступної задачі

  4. Відновлення раніше збереженого вмісту регістра SP(ESP) або SS та SP(ESP) для вибраної задачі.

  5. Відновлення зі стека вибраної задачі вмісту регістрів.

  6. Виконання команди IRET

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



    При обробці переривань від інших зовнішніх пристроїв можуть виникнути умови, при яких продовження перерваної задачі неможливий, а квант часу ще не вичерпаний. Можливі так же випадки, коли ні одна із задач не може бути вибрана менеджером квантів. Для таких випадків передбачається спеціальна задача, яку називають фоновою. Така задача має самий низький пріоритет і виконується при умові, що в відповідний момент часу не може виконуватись ніяка інша задача. Інколи в якості фонової задачі використовують наступну послідовність команд:

    Loop_label:

    sti

    jmp loop_label



  1. Порядок виконання роботи.

Робота виконується на основі поданого в п.4 початкового програмного модуля у такій послідовності:

  • Ознайомлення з прикладом організації обробки переривань від зовнішніх пристроїв

  • Ознайомлення з прикладом організації процедури з повторним входженням

  • Ознайомлення з прикладом організації мультипрограмного режиму.

  • Виконання варіанту завдання



  1   2   3


База даних захищена авторським правом ©lecture.in.ua 2016
звернутися до адміністрації

    Головна сторінка