Головна

Опитування пристроїв і переривання. Виняткові ситуації і системні виклики

  1.  C. Питання 41. Показники стану, руху і використання основних фондів
  2.  I. ДО ІСТОРІЇ ПИТАННЯ
  3.  I. Розбір основних питань теми.
  4.  I. Лютнева революція і національне питання
  5.  II. Жовтнева революція і національне питання
  6.  II. Надзвичайні ситуації на хімічно небезпечних об'єктах економіки та при використанні хімічної зброї
  7.  III. Конфлікт як тип важкій ситуації

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

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

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

3. Процесор записує дані в порт регістра вхідних даних.

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

5. Коли контролер зауважує, що біт готовності команди встановлено, він встановлює біт зайнятості.

6. Контролер аналізує код команди в регістрі управління і виявляє, що це команда виведення. Він бере дані з регістру вхідних даних і ініціює виконання команди.

7. Після завершення операції контролер обнуляє біт готовності команди.

8. При успішному завершенні операції контролер обнуляє біт помилки в регістрі стану, при невдалому завершенні команди встановлює його.

9. Контролер скидає біт зайнятості.

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

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

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

У найпростішому випадку для реалізації механізму переривань необхідно до наявних у нас шинам локальної магістралі додати ще одну лінію, що сполучає процесор і пристрої введення-виведення - лінію переривань. По завершенні виконання операції зовнішній пристрій виставляє на цю лінію спеціальний сигнал, за яким процесор після виконання чергової команди (або після завершення чергової ітерації при виконанні ланцюгових команд, тобто команд, що повторюються циклічно із зсувом по пам'яті) змінює свою поведінку. Замість виконання чергової команди з потоку команд, він частково зберігає вміст своїх регістрів і переходить на виконання програми обробки переривання, розташованої по заздалегідь обумовленому адресою. При наявності тільки одного лінії переривань процесор при виконанні цієї програми повинен опитати стан всіх пристроїв введення-виведення, щоб визначити від якого саме пристрою прийшло переривання (polling переривань!), Виконати необхідні дії (наприклад, вивести в цей пристрій чергову порцію інформації або перевести відповідний процес зі стану очікування в стан готовність) І повідомити пристрою, що переривання оброблено (зняти переривання).

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

Коли ми з вами розглядали кооперацію процесів і взаємовиключення, ми говорили про існування критичних секцій всередині ядра операційної системи, при виконанні яких необхідно виключити всякі переривання від зовнішніх пристроїв. Для заборони переривань, а, точніше, для несприйнятливості процесора до зовнішніх переривань, зазвичай існують спеціальні команди, які можуть маскувати (забороняти) всі або деякі з переривань пристроїв введення-виведення. У той же час, певні кризові ситуації в обчислювальній системі (наприклад, невиправна помилка в роботі оперативної пам'яті), повинні вимагати її негайної реакції. Такі ситуації викликають переривання, які неможливо замаскувати або заборонити і які надходять в процесор по спеціальній лінії шини переривань, званої лінією немаскованих переривань (NMI - Non-Maskable Interrupt).

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

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

Для зовнішніх переривань характерні наступні особливості:

§ Зовнішнє переривання виявляється процесором між виконанням команд (або між ітераціями в разі виконання ланцюгових команд).

§ Процесор при переході на обробку переривання зберігає частину свого стану перед виконанням наступної команди.

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

Виняткові ситуації виникають під час виконання процесором команди. До їх числа відносяться ситуації переповнення, ділення на нуль, звернення до відсутньої сторінки пам'яті (див. Частину III) і т.д. Для виняткових ситуацій характерно наступне:

§ Виняткові ситуації виявляються процесором під час виконання команд.

§ Процесор при переході на виконання виняткової ситуації зберігає частину свого стану перед виконанням поточної команди.

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

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

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

§ Процесор при виконанні програмного переривання зберігає свій стан перед виконанням наступної команди.

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

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

13.1.4. Прямий доступ до пам'яті (Direct Memory Access - DMA).

Використання механізму переривань дозволяє розумно завантажувати процесор в той час, коли пристрій введення-виведення займається своєю роботою. Однак запис або читання великої кількості інформації з адресного простору вводу-виводу (наприклад, з диска) призводять до великої кількості операцій введення-виведення, які повинен здійснювати процесор. Для розвантаження процесора від операцій послідовного виведення даних з оперативної пам'яті або послідовного введення в неї був запропонований механізм прямого доступу зовнішніх пристроїв до пам'яті - ПДП або Direct Memory Access - DMA. Давайте коротко розглянемо, як працює цей механізм.

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

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

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




 Структура обчислювальної системи |  Що таке ОС |  Коротка історія еволюції обчислювальних систем |  Системні виклики |  виняткові ситуації |  Монолітне ядро |  Листкові системи (Layered systems) |  Віртуальні машини |  Мікроядерна архітектура. |  змішані системи |

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