Що таке перерви програмного та апаратного забезпечення та як вони обробляються?


43

Я не впевнений, чи розумію поняття апаратних та програмних перерв.

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

  1. Тоді які проблеми апаратного переривання? Це процес драйверів обладнання?
  2. Якщо так, то де запущений процес драйвера обладнання? Якщо він працює на процесорі, то йому не доведеться привертати увагу процесора через апаратне переривання, правда? Так це біжить в іншому місці?
  3. Чи апаратне переривання перериває центральний процесор безпосередньо, або він спочатку зв'язується з процесом ядра і процесом ядра, а потім контактами / перериває процесор?

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

  1. Які ресурси? Чи всі вони у формі запущених процесів? Наприклад, чи представляють процеси драйвера процесора та драйвери пам'яті ресурси процесора та пам'яті? Чи представляють у драйверах пристрої вводу / виводу ресурси вводу / виводу? Чи є інші запущені процеси, з якими хотіли б спілкуватися, також ресурси?
  2. Якщо так, то чи програмне забезпечення перериває зв'язок з процесами (які представляють ресурси) опосередковано через процес ядра? Чи правильно, що на відміну від апаратного переривання, програмне переривання ніколи не перериває процесор, а натомість перериває / контактує з процесом ядра?

Відповіді:


55

Апаратне переривання насправді не є частиною багатозадачності процесора, але може запустити його.

  1. Апаратні переривання випускаються такими апаратними пристроями, як диск, мережеві карти, клавіатури, годинники тощо. Кожен пристрій або набір пристроїв матиме власну лінію IRQ (Interrupt ReQuest). На основі IRQ процесор відправить запит у відповідний драйвер обладнання. (Драйвери апаратного забезпечення зазвичай підпрограми всередині ядра, а не окремий процес.)

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

  3. Апаратне переривання безпосередньо перериває процесор. Це призведе до запуску відповідного коду в процесі ядра. Для процесів, які потребують певного часу на обробку, код переривання може дозволити собі перервати інші апаратні переривання.

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

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

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

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

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

Відповідь на коментар:

  1. Для запитів вводу / виводу ядро ​​делегує роботу відповідному драйверу ядра. Підпрограма може поставити в чергу введення-виведення для подальшої обробки (звичайна для вводу-виводу диска) або виконати її негайно, якщо можливо. Черга обробляється драйвером, часто при реагуванні на апаратні перебої. Коли одне введення / виведення завершено, наступний елемент у черзі надсилається на пристрій.

  2. Так, програмне забезпечення переривання уникає кроку апаратної сигналізації. Процес, що генерує запит на програмне забезпечення, повинен бути поточно запущеним процесом, тому вони не переривають процесор. Однак вони переривають потік викликового коду.

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


Дякую! (1) Чи під час переривання програмного забезпечення операції вводу / виводу виконуються рутиною драйвера пристрою вводу / виводу в процесі ядра? (2) чи правильно, що шлях, через який переривається програмне забезпечення, на крок коротший, ніж шлях до апаратного переривання? Іншими словами, для переривання програмного забезпечення: програмна програма -> рутинна програма драйвера пристрою в процесі ядра; для апаратного переривання: апаратне забезпечення -> процесор -> рутинна програма драйвера пристрою в процесі ядра?
Тім

Дякую! Чи правильно, що апаратне переривання призводить до того, що процесор пересуває його поточний стан на стек, щоб драйвер апаратного забезпечення міг працювати на процесорі та пізніше відбивати перерваний процес на процесорі? Чи переривання програмного забезпечення також спричиняє, що процес, що працює на процесорі, буде висунутий у стек, щоб запитувана послуга могла бути запущена в процесорі?
Тім

Будь-яке переривання призведе до того, що стан буде натиснене на стек. Це дозволяє системі перезавантажити стан, коли це робиться з перериванням.
BillThor

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

Зазвичай зчитування вводу / виводу викликається синхронно, і процес не буде працювати, поки введення / виведення не завершиться. Для читань ви майже завжди цього бажаєте. Записи зазвичай відбуваються асинхронно, що дозволяє процесу продовжувати працювати.
BillThor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.