На головну

Переривання і цикл команди

  1.  MS DOS. КОМАНДИ робота з каталогами
  2.  Внутрішні команди DOS
  3.  Вставлені команди і маркування
  4.  Вставлені команди і маркування.
  5.  Вставлені команди.
  6.  Вибірка і виконання команди
  7.  Інші зовнішні команди

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

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

З точки зору програми користувача, переривання - це не що інше, як порушення нормальної послідовності виконання. Після завершення обробки переривання робота відновлюється (рис. 1.6). Таким чином, програма користувача не повинна включати в себе який-небудь спеціальний код, щоб пристосовуватися до переривань. За припинення програми користувача і відновлення її роботи з того самого місця, в якому вона була перервана, відповідають процесор і операційна система.

Щоб узгодити переривання з програмою, в цикл команди додається цикл переривання (див. Рис. 1.7, порівняйте з рис. 1.2). У циклі переривання процесор перевіряє наявність сигналів переривань, які свідчать про що відбулися переривання. При надходженні переривання процесор призупиняє роботу з поточною програмою і виконує обробник переривань. Обробники переривань зазвичай входять до складу операційної системи. Як правило, ці програми визначають природу переривання і виконують необхідні дії. Наприклад, у використовуваному прикладі обробник повинен визначити, який з контролерів вводу-виводу згенерував переривання; крім того, він може передавати управління програмою, яка повинна вивести дані на пристрій вводу-виводу. Коли обробник переривань завершує свою роботу, процесор відновлює виконання програми користувача з того місця, де вона була перервана.

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

Щоб оцінити виграш в ефективності, розглянемо тимчасову діаграму (рис. 1.8), яка ілюструє хід процесів, показаних на рис. 1.5,а и б. У ситуації, показаної на рис. 1.5,б і 1.8, передбачається, що для виконання операцій введення-виведення потрібно порівняно короткий час, т. е. менше, ніж час обробки команд, які розташовані в програмі користувача між операціями запису. Більш типовим, особливо для таких повільних пристроїв, як принтер, є випадок, коли операції введення-виведення займають набагато більше часу, ніж потрібно для виконання послідовності команд користувача. Така ситуація показана на рис. 1.5,в. У цьому випадку програма користувача дійде до наступного виклику WRITE ще до завершення операції введення-виведення, породженої попереднім викликом. В результаті в цьому місці програма користувача буде припинена. Після завершення обробки попередньої операції введення-виведення прийде черга обробити нове звернення до процедури WRITE, і будуть запущені нові операції введення-виведення. На рис. 1.9 представлена ??діаграма виконання програми в середовищі без переривань і з перериваннями для описаного випадку. Як видно, в такій ситуації виграш в ефективності все одно існує, так як частина часу, протягом якого виконуються операції введення-виведення, перекривається виконанням команд користувача.

Обробка переривань

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

1. Пристрій посилає процесору сигнал переривання.

2. Перед тим як відповісти на переривання, процесор повинен завершити виконання поточної команди (див. Рис. 1.7). '

3. Процесор проводить перевірку наявності переривання, виявляє його і посилає пристрою, що надіслав це переривання, що повідомляє сигнал про успішне прийняття. Цей сигнал дозволяє пристрою зняти свій сигнал переривання.


4. Тепер процесору потрібно підготуватися до передачі управління оброблювачу переривань. Спочатку необхідно зберегти всю важливу інформацію, щоб надалі можна було повернутися до того місця поточної програми, де вона була припинена. Мінімальна необхідна інформація - це слово стану програми і адреса черговий виконуваної команди, який знаходиться в програмному лічильнику. Ці дані заносяться в системний керуючий стек.


5. Далі в програмний лічильник процесора завантажується адреса входу програми обробки переривань, яка відповідає за обробку даного переривання. Залежно від архітектури комп'ютера і пристрої операційної системи може існувати як одна програма для обробки всіх переривань, так може бути і своя програма обробки для кожного пристрою і кожного типу переривань. Якщо для обробки переривань є кілька програм, то процесор повинен визначити, до якої з них слід звернутися. Ця інформація може міститися в первісному сигналі переривання; в іншому випадку для отримання необхідної інформації процесор повинен по черзі опитати всі пристрої, щоб визначити, яке з них відправило переривання.

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


6. Вміст програмного лічильника і слово стану переривається програми вже зберігаються в системному стеці. Однак це ще не вся інформація, що має відношення до стану виконуваної програми. Наприклад, потрібно зберегти вміст регістрів процесора, так як ці регістри можуть знадобитися оброблювачу прериваній- Тому необхідно зберегти всю інформацію про стан програми. Зазвичай обробник переривань починає свою роботу із запису в стек вмісту всіх регістрів. Інша інформація, яка повинна бути збережена, обговорюється в главі 3, "Опис процесів і управління ними". На рис. 1-11, а показаний простий приклад, в якому програма користувача переривається після виконання команди з осередку N. Вміст всіх регістрів, а також адреса наступної команди (7V + 1), в сумі становлять М слів, заносяться в стек. Покажчик стека при цьому оновлюється, вказуючи на нову вершину стека. Оновлюється і програмний лічильник, вказуючи на початок програми обробки переривання.

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

8. Після завершення обробки переривань з стека витягуються збережені раніше значення, які знову заносяться в регістри, відновлюючи таким чином той стан, в якому вони перебували до переривання (див., Наприклад, рис. 1.11,6). ^ -

9. Останній етап - відновлення з стека слова стану програми і вмісту програмного лічильника. В результаті наступною буде виконуватися команда перерваної програми.

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




 Огляд комп'ютерних систем |  ОСНОВНІ ЕЛЕМЕНТИ |  РЕГІСТРИ ПРОЦЕСОРА |  Регістри, доступні користувачеві |  Керуючі регістри і регістри стану |  ВИКОНАННЯ КОМАНД |  Вибірка і виконання команди |  багатозадачність |  Ієрархія запам'ятовуючих пристроїв |  Принципи роботи кеша |

© um.co.ua - учбові матеріали та реферати