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

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



НазваниеЛабораторна робота N6 Мета роботи Вивчення методики програмування переривань
Дата17.10.2016
Размер
ТипЛабораторна робота






Лабораторна робота 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. Ознайомлення з прикладом організації обробки переривань від зовнішніх пристроїв

      1. На прикладах підпрограм Setint8, Setint9, Userint8, Userint9, Retint8, Retint9 ознайомитись:

    1. З організацією "перехоплення" апаратних переривань (Setint8, Setint9).

    2. З організацією процедур користувача для обробки апаратних переривань від клавіатури (Userint9 - варіати 1 та 2) та таймера (Userint8 - варіант 3)

    3. Відновлення "перехоплених" векторів переривань (Retint8, Retint9).



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

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

Для вивчення процедури Vcount необхідно:

    1. Написати власну програму на мові Ассемблера з визовами процедури Vcount з різними фактичними параметрами

    2. Помістити у власну програму текст процедури Vcount

    3. Запускати власну программу з різними значеннями фактичних параметрів процедури Vcount під управлінням налагоджувача. Звернути увагу на порядок використання стека для збереження даних процедури.

ПРИМІТКА. Допускається створення та подальше використання власної процедури, аналогічної Vcount.


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

В моделі мультипрограмної системи використовуються такі стани задач (масив init):

  • Ready (0) - задача готова до початкового запуску

  • Execute (1)- задача виконується (виділені їй кванти часу не вичерпались)

  • Hesitation (2) - задача чекає на чергові кванти часу

  • Close (4)- задача закінчила свою роботу

  • Stop (8)- задача зупинена (їй не виділяються кванти часу)

  • Absent (16)- задача відсутня

В менеджері квантів (процедура Userint8) відпрацьовуються стани ^ Ready, Execute, Hesitation , стани Execute, Hesitation, Close встановлюються, задачі зі станами Close, Stop, Absent ігноруються. Стан Ready для всіх задач установлюється під час запуску моделі. Фонова задача має постійний статус типу Hesitation, вона запускається під час запуску моделі . Фонова задача виконується тільки при умові відсутності других задач, або при неможливості виконання інших задач, по тих чи інших причинах.

Виконання варіантів завдань може бути пов'язане із установкою та відпрацюванням станів ^ Stop і Absent, відпрацювання стану Close (перехід в стан Ready або Absent), заміною початкового стану задач із Ready на Absent, установка стану Ready і т.п.

    Для ознайомлення з роботою мультипрограмної системи необхідно:

    1. На основі програми п.4 створити exe-файл та, запустивши його, провести моделювання без змін у початковому файлі. (запуск 10 задач, всі задачі використовують по одному кванту часу, квант часу - період системного таймера). Закінчення роботи моделі наступає після виконання фонової задачі або при відтисканні клавіші Esc.

    2. Шляхом зміни розміру кванту часу (time_slice) у директиві equ добитися візуальної "одночасності" виконання задач.

    3. Провести експерименти по зміні кількості задач (max_prg не більше 16!) та зміні кількості квантів на різні задачі (масив clock)

    4. Провести експерименти п.п.b) та c) при зміні розрядності лічильника в процедурі Vcount




    1. ^ Виконання варіанту завдання

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

      1. ^ Послідовність дій для зупинки задачі.

  1. В випадку переривання від клавіатури. Якщо перервана задача не співпадає із задачею, яка зупиняється, то достатньо встановити статус Stop. Якщо перервана задача і задача, яку необхідно зупинити співпадають, то крім встановлення статусу Stop необхідно запустити фонову задачу, яка буде виконуватись до закінчення перерваного кванта часу.

  2. В випадку виклику обробника подій від мишки. Якщо перервана задача не співпадає із задачею, яка зупиняється, то достатньо встановить статус Stop. У протилежному випадку зупинка задачі не виконується.




      1. Послідовність дій для зняття задачі з виконання.

  1. В випадку переривання від клавіатури:

    1. установити для задачі, яка знімається, статус Absent

    2. заповнити нулями область відеопам'яті, яку вона використовувала

    3. якщо перервана задача й задача, яку необхідно зняти, співпадають, то необхідно запустити фонову задачу, яка буде виконуватись до закінчення перерваного кванта часу

  2. В випадку виклику обробника подій від мишки. Якщо перервана задача співпадає із задачею, яка знімається, то зняття задачі не виконується. Якщо не співпадає, то:

    1. установити для задачі, яка знімається, статус Absent

    2. заповнити нулями область відеопам'яті, яку вона використовувала




  1. Початковий модуль моделі мультипрограмної системи


.386

;======================================================

; МОДЕЛЬ МУЛЬТИПРОГРАМНОЇ СИСТЕМИ

;======================================================

max_prg equ 10 ;максимальна кількість "одночасно"

; виконуваних задач

time_slice equ 65535; кількість мікросекунд, виділених на один

; квант часу (максимальне значення 65535)


_^ ST SEGMENT WORD STACK 'stack' use16

dw 32000 dup (?)

top label word

dw 100 dup (?);резерв для помилок

; анти переповнення стека

_ST ENDS


_DATA SEGMENT WORD PUBLIC 'DATA' use16


@ms_dos_busy dd (?) ; логічна адреса ознаки зайнятості MS-DOS


int8set db 0 ;ознака перехоплення переривання від таймера

int9set db 0 ;ознака перехоплення переривання від клавіатури


fon equ max_prg ; ознака фонової задачі;

fonsp label word ;адреса збереження SP фонової задачі

sssp dd top ;логічна адреса стека фонової задачі


; масив значень SP для задач, (для стека кожної задачі відведено 1000 слів)

;задані початкові значення

stp dw 1000,2000,3000,4000

dw 5000,6000,7000,8000

dw 9000,10000,11000,12000

dw 13000,14000,15000,16000


nprg dw 0 ;номер активної задачі (від 0 до

;max_prg-1)

; або ознака фонової задачі (fon)


; масив стану задач

init db 16 dup (0)


; масив дозволеного числа квантів задач

clock db 16 dup (1)


; масив лічильників квантів задач

clockt db 16 dup (0)


screen_addr dw 16 dup (0) ; адреса (зміщення від початку відеосторінки)

; області введення на екран значень задачі


; масив імен задач

names label word

db '0T1T2T3T4T5T6T7T8T9TATBTCTDTETFT'


clk dw 0 ;лічильник переривань від таймера


^ _DATA ENDS


_TEXT SEGMENT BYTE PUBLIC 'CODE' use16

ASSUME CS:_TEXT,DS:_DATA


;------------------------------------------------------------

; процедура "перехоплення" переривання від таймера (int8)

;------------------------------------------------------------

setint8 PROC


;------------------------------------------------------------

mov al,int8set

or al,al ; контроль "перехоплення" перехоплень

jnz zero_8 ;

MOV AH,35H ; отримати вектор переривання

MOV AL,8 ; переривання від таймера (8)

INT 21H ; значення що повертається:

; es:bx - логічна адреса системної процедури

; обробки переривання від таймера


mov cs:int8ptr,bx ; зберегти логічну адресу системної

mov cs:int8ptr+2,es ; процедури в сегменті кодів


mov dx,offset userint8 ;формування в ds:dx логічної

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

push cs ; для обробки переривань від таймера

pop ds


MOV AH,25H ; встановити вектор

MOV AL,8 ; переривання від таймера

INT 21H ; ds:dx - покажчик на користувацьку

; процедуру оброб. переривання від ;таймера


mov ax,time_slice ; встановити задану величину кванту часу

out 40h,al ; 40h - адреса 8-розрядного порта таймера,

; через який задають період таймера

; спочатку молодший байт,

; а потім старший


jmp $+2 ; стандартний метод узгодження швидкісного

; процесора з більш повільним зовнішнім

; пристроєм. Припускаємо, що

; "безглузда" команда jmp очищує буфер

; попередньої вибірки команд і, тим самим,

; уповільнює роботу процесора. Тим часом

; зовнішній пристрій буде готовий

;прийняти наступний байт

nop


mov al,ah ; (старший байт)

out 40h,al


pop ds


mov int8set,0ffh ; заборона повторних входжень

zero_8:

ret

int8ptr dw 2 dup (?)

setint8 ENDP


;--------------------------------------------------------------------------

; Процедура відновлення вектора переривання від таймера

;--------------------------------------------------------------------------

retint8 PROC

;--------------------------------------------------------------------------

push ds

push dx


mov al,0ffh ; відновити нормальну роботу

out 40h,al ; системного таймера

jmp $+2

nop

out 40h,al

mov dx,cs:int8ptr

mov ds,cs:int8ptr+2


MOV AH,25H ; відновити початковий вектор

MOV AL,8 ; переривання від таймера

INT 21H ; ds:dx - вказівник (логічна адреса)

;на початкову (системну) процедуру

; оброб. переривання від таймера

pop dx

pop ds

mov int8set,0h ; дозвіл наступних "перехоплень"

ret

retint8 ENDP


;------------------------------------------------------------

setint9 PROC

;-----------------------------------------------------------

; процедура "перехоплення" переривання від клавіатури (int9)

;------------------------------------------------------------

mov al,int9set

or al,al

jnz zero_9

MOV AH,35H ; отримати вектор переривання

MOV AL,9 ; переривання від клавіатури (9)

INT 21H ;значення що повертається:

; es:bx - вказівник на системну процедуру

; обробки переривання від клавіатури


mov cs:int9ptr,bx ; зберегти в сегменті кодів вказівник

mov cs:int9ptr+2,es ; на системну процедуру


mov dx,offset userint9

push ds

push cs ; ds:dx - вказівник на процедуру користувача

pop ds ; оброб. переривання від клавіатури


MOV AH,25H ; встановити вектор "перехоплення"

MOV AL,9 ; переривання від клавіатури (9)

INT 21H ;

pop ds


mov int9set,0ffh ; заборона повторних входжень


zero_9:

ret

int9ptr dw 2 dup (?)

setint9 ENDP


;--------------------------------------------------------------------------

; Процедура відновлення попереднього (системного)

; вектора переривання від клавіатури

;--------------------------------------------------------------------------

retint9 PROC

push ds

push dx

mov dx,cs:int9ptr ; ds:dx - покажчик на початкову (системну)

mov ds,cs:int9ptr+2 ; процедуру обробки переривання від

; клавіатури


MOV AH,25H ; встановити вектор системної процедури

MOV AL,9 ; обробки переривання від клавіатури

INT 21H ;

;

pop dx

pop ds

mov int9set,0h ; дозвіл наступних "перехоплень"

ret

retint9 ENDP


;-----------------------------------------------------------------------------------------------

; Процедура обробки переривань від клавіатури,

; викликається при любому натисканні або відтисканні клавіш клавіатури,

; здійснює повернення в MS-DOS після відтискання клавіші Esc

;------------------------------------------------------------------------------------------------

userint9 proc far

;----------------------------------------------------------------------------

esc_key equ 01h ; скан-код клавіші esc

pusha

push es

in al,60h ; ввести скан-код - розряди 0-6

mov ah,al ; 7-ий розряд дорівнює 0 при натисканні

and al,7fh ;клавіші, 1- при відтисканні


push ax ; al - "чистий" скан-код (без ознаки

; натискання - відтискання)

push 2600

call show ; відображення скан-коду на екрані


cmp al,esc_key

je ui9010


; (варіант 2)

pop es

popa

jmp dword ptr cs:int9ptr ; перехід на системну

;процедуру обробки

;переривань від клавіатури, яка

;виконає всі необхідні дії, включаючи

;повернення в перервану програму


; (варіант 1)

; САМОСТІЙНЕ ВИРІШЕННЯ ПРОБЛЕМ З КЛАВІАТУРОЮ


ui9010:

mov bx,ax

in al,61h ;біт 7 порта 61h призначений для введення

; ; підтверджуючого імпульсу в клавіатуру ПЕОМ.

; Клавіатура блокується поки не надійде

; підтверджуючий імпульс

;

mov ah,al

or al,80h ; |

out 61h,al ; виведення на клавіатуру └───┐

jmp $+2 ; |

mov al,ah |

out 61h,al ; підтверджуючого імпульсу ┌───┘


mov al,20h ; розблокувати в контролері переривання

; проходження запитів на переривання

;поточного та меншого рівнів пріоритету,

out 20h,al ; що забезпечить можливість наступного

;переривання від клавіатури


mov ax,bx

cmp ah,al ; перевірка події переривання - від натискання

; чи від відтискання клавіші клавіатури

je ui9040

;відтискання клавіші


ui9020:

push es

les bx, @ms_dos_busy ; es:bx - адреса ознаки

;зайнятості MS-DOS

mov al,es:[bx] ; ax - ознака зайнятості MS-DOS

pop es

or al,al ; перевірка

; якщо була перервана робота MS-DOS

;в "невдалий" момент

jnz ui9040 ; то не можна від неї вимагати

; виконання ряду функцій

; (в загальному випадку MS-DOS

; не забезпечує повторне входження)


call retint8

call retint9

mov ax,4c00h

int 21h ; ЗАКІНЧИТИ РОБОТУ

; БАГАТОПРОГРАМНОЇ МОДЕЛІ

ui9040:

pop es ; відновити стек перерваної програми

popa

iret ; закінчити обробку переривання

userint9 endp

;------------------------------------------------------------

; процедура обробки переривання від таймера

; (менеджер квантів)

; коди стану задач (використовуються в масиві init)

ready equ 0 ; задача завантажена в пам’ять і

; готова до початкового запуску

; статус встановлюється поза менеджером квантів

execute equ 1 ; задача виконується

hesitation equ 2 ; задача призупинена і чекає своєї черги

close equ 4 ; виконання задачі завершено

stop equ 8 ; задача зупинена

; статус встановлюється і змінюється

; поза менеджера квантів

absent equ 16 ; задача відсутня


;------------------------------------------------------------

userint8 PROC far

;------------------------------------------------------------

pushad ;збереження РОН в стеку перерваної задачі

push ds


; (варіант 3)

pushf ;програмна імітація апаратного переривання

;ВІДМІТИМО - ознака дозволу на переривання (if) апаратурою скинута в 0.


call cs:dword ptr int8ptr

;виклик системної процедури обробки переривання int8,

;яка, між іншим, розблокує 8-ме переривання в контролері переривань

;але апаратні переривання не можливі, оскільки if=0


mov ax,_data ;в перерваній програмі вміст сегментного регістра

mov ds,ax ;ds в загальному випадку може бути любим


inc clk ; програмний лічильник переривань від таймера

push clk ; може бути корисним при вивченні моделі

push 2440

call show ; виведення на екран значення лічильника


xor esi,esi

mov si,nprg

cmp si,fon ; перервана задача фонова ?

je disp005


; перервана задача не фонова

cmp clockt[si],1 ; є ще не використані кванти ?

jc disp010


dec clockt[si] ; зменшити лічильник квантів

pop ds

popad ; продовжити виконання перерваної задачі

iret


disp005: ; перервана задача фонова

mov fonsp,sp

mov nprg,max_prg-1 ; забезпечити перегляд задач з 0-вої

mov cx,max_prg ; max_prg - max кількість задач

jmp disp015


disp010: ; перервана задача не фонова

mov stp[esi*2],sp

mov init[si],hesitation ; призупинити поточну задачу

mov cx,max_prg


disp015:

; визначення задачі, якій необхідно передати управління

mov di,max_prg+1

sub di,cx

add di,nprg

cmp di,max_prg

jc disp018

sub di,max_prg

disp018:

xor ebx,ebx

mov bx,di

;push bx

;push 3220

;call show

; сх пробігає значення max_prg,max_prg-1,...,2,1

; bx пробігає значення nprg+1,nprg+2,...,max_prg-

;1,0,...,nprg

;

cmp init[bx],ready

je disp100 ; перехід на початковий запуск задачі


cmp init[bx],hesitation

je disp020 ; перехід на відновлення роботи

; наступної задачі

loop disp015


; відсутні задачі, які можна запустить

; (перезапустити), тому

;

mov sp,fonsp ; установлюємо стек фонової задачі

mov nprg,fon

pop ds ; із стека фонової задачі відновлюємо

popad ; вміст регістрів

iret ; повернення в фонову задачу


disp020:

; відновлення роботи наступної задачі

;push bx

;push 2480

;call show

mov nprg,bx

mov sp,stp[ebx*2]

mov al,clock[bx]

mov clockt[bx],al ; встановити дозволену

; кількість квантів

mov init[bx],execute ; стан задачі - задача виконується


pop ds

popad

iret


disp100:

; першопочатковий запуск задачі

mov nprg,bx

mov sp,stp[ebx*2]

mov al,clock[bx]

mov clockt[bx],al ; встановити дозволену

; кількість квантів

mov init[bx],execute


push names[ebx*2] ; ім'я задачі

push screen_addr[ebx*2] ; адреса "вікна" для задачі на екрані

push 22 ; розрядність лічильника

call Vcount ; запуск


xor esi,esi

mov si,nprg ; на ax - номер задачі, яка

; завершила свою роботу в межах

; чергового кванту часу

mov init[si],close

mov sp,fonsp

mov nprg,fon

pop ds

popad

iret ; повернення в фонову задачу


userint8 ENDP

;-

; Vcount - процедура для моделювання незалежних задач

; вхідні параметри:

; 1-й - ім'я задачі (два символа) [bp+8]

; 2-й - зміщення в відеосторінці "вікна" задачі [bp+6]

; 3-й - кількість двійкових розрядів лічильника [bp+4]

; Виконувані дії:

; при запуску:

; - дозволяє переривання

; - створює в стеку 10-байтну область для локальних даних

; - розміщує в цю область по адресі [bp-2] статок від ділення

; 3-го параметра на 32 (фактична розрядність лічильника -

; перестраховка від помилок в завданні розрядності)

; - записує в цю область по адресу [bp-6] маску з числом

; одиниць в молодших розрядів рівним фактичній

; розрядності лічильника

; - записує в нуль в 4-х байт ний лічильник по адресу [bp-10]


; в подальшому в циклі:

; - виводить показники лічильника на екран

; - збільшує значення лічильника на 1

; завершення задачі після переходу лічильника

; з стану "всі одиниці" в стан всі 0


^ Vcount proc near

push bp

mov bp,sp

sub sp,10 ;формування в стеку області для

;збереження даних

sti


push es

mov ax,0b800h

mov es,ax


mov ax,[bp+4] ;ax = кількість розрядів лічильника

and ax,31 ;ax=ax mod 32 (для перестраховки)

mov [bp-2],ax ;по [bp-2] кількість розр. лічильника

;<32

mov cx,ax

mov eax,001b

shl eax,cl

dec eax ; eax - маска с числом 1 рівним

; кількості розрядів лічильника

mov [bp-6],eax


mov dword ptr [bp-10],0 ; скидання лічильника


mov di,[bp+6] ; вивід імені задачі

mov dx,[bp+8]

mov ah,1011b

mov al,dh

cld

stosw

mov al,dl

stosw


std ;підготовка до виводу лічильника

add di,cx ;починаючи с молодших розрядів

add di,cx

mov bx,di

xor edx,edx


l20: ;вивід показників лічильника в двоїчному

;форматі

mov di,bx

mov cx,[bp-2]

mov ah,1010b ; 1010b атрибут символу, атрибут фона - 0

; (чорний)

l40:

mov al,'0'

shr edx,1

jnc l60

mov al,'1'

l60:

stosw

loop l40


inc dword ptr [bp-10] ; +1 в лічильник

mov edx,dword ptr [bp-10]

and edx,[bp-6] ; перевірка на 0

jnz l20


pop es

add sp,10

mov ax,[bp+8]

and ax,0fh

cli

pop bp

ret 6

Vcount endp


;=====

show proc near

push bp

mov bp,sp

pusha

push es

mov ax,0b800h

mov es,ax


std

ls20:

mov di,[bp+4]

mov bx,[bp+6]

mov cx,4

mov ah,0ah

ls40:

mov al,bl

and al,00001111b

cmp al,10

jl ls100

add al,7

ls100:

add al,30h

stosw

shr bx,4

loop ls40


pop es

popa

pop bp

ret 4

show endp

;------------------------------------------------------------

;------------------------------------------------------------

;------------------------------------------------------------

begin:

mov ax,_data

mov ds,ax


mov ax,3 ; задати текстовий режим 80 на 25

int 10h


mov ah,10h ; відключити режим миготіння

mov al,3

mov bl,0

int 10h


mov cx,max_prg

xor esi,esi

mov bx,4

b10:

mov screen_addr[esi*2],bx ; заповнення таблиці

; адрес виводу для задач

mov init[si],ready ; першопочаткове заповнення

; таблиці стану задач

add bx,80

inc si

loop b10

;SETINT

cli ; заборона переривань

mov ah,34h

int 21h ;es:bx - адреса ознаки зайнятості MS-DOS

mov word ptr @ms_dos_busy,bx

mov word ptr @ms_dos_busy+2,es


call setint8 ;"перехоплення" int8

call setint9 ;"перехоплення" int9


lss sp,sssp ; стек фонової задачі

mov nprg,fon

push 'FN'

push 1800

push 30

call Vcount ; запуск фонової задачі

; в процедурі Vcount установлюється дозвіл

;на переривання і при чергових перериваннях

; від таймера менеджер квантів (userint8)

; буде запускать інші задачі

;

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


call retint8 ; відновлення системних векторів

call retint9

sti

mov ax,4c00h

int 21h

^ _TEXT ENDS


end begin



  1. Завдання на лабораторну роботу.

    1. Варіанти простих завдань:

  1. Для всіх задач: при натисненні на відповідну клавішу клавіатури задача зупиняється, при наступному натисненні клавіші вона продовжує свою роботу.

  2. Для всіх задач: при натисненні на відповідну клавішу клавіатури задача зупиняється, при відпусканні клавіші вона продовжує свою роботу

  3. Для всіх задач: при натисненні на відповідну клавішу всі задачі, окрім вибраної клавішою, зупиняються. Якщо вибрана задача була попередньо зупинена, то вона продовжує свою роботу.

  4. Для всіх задач: при натисненні на відповідну клавішу клавіатури задача знімається з виконання

  5. При натисненні на клавішу Pause/Break зупинити всі задачі (крім фонової), при відпусканні клавіші Pause/Break всі задачі продовжують свою роботу

  6. При натисненні на клавішу Pause/Break зняти всі задачі (крім фонової)

  7. При натисненні на клавішу Pause/Break зупинити всі задачі з парними номерами, при відпусканні клавіші Pause/Break всі задачі продовжують свою роботу.

  8. При натисненні на клавішу Pause/Break зупинити всі задачі, які мають стан Hesitation, при відпусканні клавіші Pause/Break всі зупинені задачі продовжують свою роботу

  9. Для всіх задач: при натисненні на відповідну клавішу клавіатури забезпечити початковий запуск задачі

  10. При натисненні на клавішу Pause/Break забезпечити початковий запуск всіх задачі крім фонової.

  11. При натисненні на ліву клавішу мишки всі задачі зі станом Hesitation зупиняються, при наступному натисненні на ліву клавішу задачі продовжують свою роботу

  12. При натисненні на ліву клавішу мишки зняти задачу, в області виведення результатів (модель вікна) якої знаходиться курсор мишки.

  13. При натисненні на праву клавішу мишки збільшити на константу дозволену кількість квантів (але не більше 255) для задачі, в області виведення якої знаходиться курсор миші.

  14. Встановити для всіх задач під час запуску моделі по 200 дозволених квантів. При натисненні на праву клавішу мишки зменшити на константу дозволену кількість квантів (але не менше 1) для задачі, в області виведення якої знаходиться курсор миші.

  15. При натисненні на праву клавішу мишки забезпечити початковий запуск задачі, в області виведення якої знаходиться курсор миші

  16. Якщо курсор миші знаходиться в області виведення фонової задачі, то при натисненні на ліву клавішу мишки зупиняються всі задачі, крім задачі зі станом Execute та фонової.

  17. Якщо курсор миші знаходиться в області виведення фонової задачі, то при натисненні на праву клавішу мишки зняти всі задачі, крім задачі зі станом Execute та фонової.

  18. Для всіх задач: при натисненні на відповідну клавішу клавіатури збільшується на константу кількість дозволених квантів задачі (але не більше 255).

  19. Встановити для всіх задач під час запуску моделі по 200 дозволених квантів. Для всіх задач: при натисненні на відповідну клавішу зменшити на константу дозволену кількісь (але не менше 1) квантів задачі.

  20. Встановити для всіх задач під час запуску моделі статус Absent. При натисненні на відповідну клавішу клавіатури запустити задачу, якщо вона була не запущена.

  21. Встановити для всіх задач під час запуску моделі статус Absent. При натисненні на праву клавішу миші запустити задачу, якщо вона не запущена і курсор миші знаходиться на області виведення задачі.

  22. При натисненні на клавішу Del зняти всі задачі, які мають статус Hesitation.

  23. При натисненні на клавішу Del зняти всі задачі, які мають номер більший за 5.

  24. Забезпечити різну розрядність лічильника для різних задач. При натисненні на клавішу F2 перезапустити задачі, які мають стан Close.

  25. Встановити для всіх задач під час запуску моделі статус Absent. При натисанні на клавішу F3 запустити задачі з парними номерами, а при відтисканні - з непарними.

  26. При натисканні на клавішу F6 збільшити на 1 максимальну кількість задач (але не більше 16). Новій задачі встановити стан Ready

  27. При натисканні на клавішу F8 зменшити на 1 максимальну кількість задач (але не менше 1).

  28. При натисканні на клавішу F7 збільшити на константу доволену кількість квантів (але не більше 255) для всіх задач з парними номерами.

  29. При відпусканні клавіші F7 збільшити в два рази доволену кількість квантів (але не більше 255) для всіх задач з непарними номерами.

  30. Встановити для всіх задач під час запуску моделі по 128 дозволених квантів. Для всіх задач: при відпусканні відповідної клавіші зменшити в два рази дозволену кількісь (але не менше 1) квантів задачі.

  31. Установити для всіх задач під час запуску моделі статус Absent. При натисненні на відповідну клавішу клавіатури в довільному порядку запускати задачі, забезпечуючи 50 процентів часу для задачі, яка була запущена першою.

    1. Варіанти ускладнених завдань

  1. Шляхом натиснення відповідної клавіші клавіатури виконується вибір задачі. Наступні натиснення клавіші "+" із правої групи клавіш клавіатури призводить до початкового запуску задачі, якщо вона була відсутня, або до запуску задачі, якщо вона була зупинена, або до збільшення на 1 дозволеної кількості квантів задачі. Наступне натиснення клавіші "-" приводить до зменшення на 1 дозволеної кількість квантів задачі, якщо дозволена кількість квантів більша за 1, або до зупинки задачі, якщо дозволена кількість квантів дорівнює 1, або до зняття задачі, якщо вона була зупинена.

  2. Якщо курсор миші знаходиться на області виведення задачі, то натиснення на праву клавішу миші призводить до початкового запуску задачі, якщо вона була відсутня, або до запуску задачі, якщо вона була зупинена, або до збільшення на 1 дозволеної кількості квантів задачі, а натиснення на ліву клавішу миші приводить до зменшення на 1 дозволеної кількості квантів задачі, якщо дозволена кількість квантів більша за 1, або до зупинки задачі, якщо дозволена кількість квантів дорівнює 1, або до зняття задачі, якщо вона була зупинена.

  3. Додати стан "згорнута" у моделі багатопрограмної обробки. Якщо задача знаходиться в стані "згорнута" , то вона виконується, але результати на екран не виводяться. Реалізувати управління станом "згорнута" з клавіатури.

  4. Додати стан "згорнута" у моделі багатопрограмної обробки. Якщо задача знаходиться в стані "згорнута" , то вона виконується, але результати на екран не виводяться. Реалізувати управління станом "згорнута" за допомогою мишки.

  5. Відключити в моделі менеджер квантів, реалізувати можливі стани задач і ручне управління ними з клавіатури.

  6. Відключити у моделі менеджер квантів, реалізувати можливі статуси задач і ручне управління ними за допомогою мишки.

  7. Процедуру Vcount доповнити параметром напрямку лічби (додавання чи віднімання 1). При початковому запуску задачі задавати напрямок додавання. В менеджері клавіатури при натисненні відповідної клавіші забезпечити зміну напрямку лічби на протилежний.

    39 Т3:=T2+T1;



  1. ^ Питання для перевірки:

a.Чи можна по запиту від зовнішнього пристрою перервать виконання команди.

b.Що являє собою вектор переривань, його структура

c.Як встановлюється взаємозв'язок між зовнішнім пристроєм та процедурою обробки апаратних переривань.

d.Суть перехоплення переривань.

e.Довести експериментальним шляхом, що переривання безпосередньо після команди запису в регістр SS неможливе.

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

g.Як забезпечити візуальну одночасність виконання задач.

h.Чому в менеджері мишки не можна передавати управління на фонову задачу, а в менеджері клавіатури можна.

i.Які зміни необхідно ввести в менеджер квантів, щоб можна було зупинять задачі за допомогою мишки, коли номер перерваної задачі і номер задачі, яка зупиняється, співпадають.



Похожие:

Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота №1 розв’язування нелінійних рівнянь мета роботи
Мета роботи: уточнення коренів нелінійних рівнянь методами половинного ділення, хорд, дотичних, січних та простої ітерації
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота №4 наближене розв’язування звичайних диференціальних рівнянь методом послідовних наближень мета роботи
Мета роботи: знайти три послідовних наближення звичайного диференціального рівняння (здр) та провести оцінку третього наближення...
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота №5
Мета роботи надбання практичних навичок оцінки динаміки і структури власного капіталу підприємства та пошук резервів збільшення власного...
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота №5 Тема: Робота з таблицями Ціль: Освоїти основні прийоми роботи з таблицями Час: 2 год
У процесі підготовки до заняття студент в обов'язковому порядку повинний виконати наступні завдання
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота №6 Тема: Робота з формулами Ціль: Освоїти основні прийоми роботи з формулами Час: 2 год
У процесі підготовки до заняття студент в обов'язковому порядку повинний виконати наступні завдання
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота №3 Робота з таблицею ascii
Ознайомитись з командами умовного те безумовного переходу, арифметичними діями в асемблері, отримати уяву про побудову циклів, поглибити...
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота 1 Методи пошуку у просторі станів
Дослідження методів пошуку рішень у просторі станів. Програмування базових алгоритмів пошуку рішень, що застосовуються у системах...
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconУрок №18. Тема: Підсумкове заняття з теми «Базові поняття програмування. Засоби візуальної розробки програм»
Мета: Узагальнити та систематизувати знання учнів з теми «Базові поняття програмування. Засоби візуальної розробки програм»; здійснити...
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота №1 Тема: Робота з електронними таблицями
У процесі підготовки до заняття студент в обов'язковому порядку повинний виконати наступні завдання
Лабораторна робота N6 Мета роботи Вивчення методики програмування переривань iconЛабораторна робота №4 Тема: Робота з колонками. Границя І заливка тексту Ціль
У процесі підготовки до заняття студент в обов'язковому порядку повинний виконати наступні завдання
Разместите ссылку на наш сайт:
Уроки, сочинения


База данных защищена авторским правом ©izlov.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
связаться с нами