Чи використовуються переривання для означення того, що вихід готовий чи введення завершено? [зачинено]


-2

Концепції операційної системи кажуть:

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

  • цей результат завершений, або
  • що вхідні дані доступні, або
  • що виявлено збій.

Чи використовуються переривання для означення того, що вихід готовий чи введення завершено?

Якщо ні, то чи потрібно їх позначати іншим способом?

Дякую.


1
Що введення має навіть означати? Переривання - це сигнали з будь-якого пристрою до центрального процесора, тому вони можуть сказати: "Я написав ваш буфер у позиції пам'яті x на диск / мережу / папір, ви можете знову використовувати його для інших цілей". З іншого боку, "вихід готовий" - це процесор, який каже пристрою: "Будь ласка, візьміть дані у позиції x та надішліть їх на диск / мережу / папір та повідомте мене, як тільки я можу повторно використати цю пам'ять"; такий вид сигналізації здійснюється не через переривання, а через порти IO
Хаген фон Ейтцен

Відповіді:


1

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

Вони можуть бути як апаратними (наприклад: напруга вказує на стан), так і програмними (наприклад: користувач натискає Ctrl+ C).

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

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


У межах інтегральної мікросхеми часто можливі перерви з цілком конкретними значеннями, наприклад:

  • UART (тобто: послідовні порти)
    • Кадр отримано - це може означати, що хост тепер повинен зняти корисний набір цього кадру з реєстру периферійного пристрою та зберегти його до появи іншого кадру, замінивши перший.
    • Кадр надіслано - це може означати, що хост тепер може безкоштовно подавати нові дані в реєстр периферійних пристроїв, внаслідок чого передається інший кадр
  • Таймери
    • ШІМ
      • Лічильник обернувся або досяг його верхньої межі - використовується для скидання сигналу ШІМ
      • Лічильник досяг свого порівняльного значення - використовується для встановлення ШІМ-сигналу
    • Планування - використовується для попередження запущеного завдання та планування іншого
  • Divide by Zero - Щось намагалося змусити Всесвіт вибухнути, і його зупинили ... Це переривання дозволяє здійснити певні поправки чи виправлення (наприклад: припинення програми).

Коли дискретні (окремі) компоненти потребують зв’язку, тоді переривання може зажадати певної взаємодії для розшифровки - головним чином через кількість взаємозв'язків та штифтів вводу / виводу, які вимагалися б інакше. Наприклад:

  • Годинник реального часу - При отриманні переривання, хост буде опитувати один з його регістрів, і може визначити , що « Alarm 2 » був запущений. Результат цього залежить від системи.
  • Звукова карта
    • Звукова карта може мати буфер, що дозволяє хосту видавати блоки звуку, які карта буде відтворюватися без нагляду. Якщо цей буфер закінчується, хост повинен надати більше даних, інакше буфер занизиться (закінчиться) ...
    • Якщо переривання не обслуговуються під час, то ви можете почути повторюється фрагмент аудіо, як показано тут , при збої системи примусового

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


1

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

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

Матеріал, який ви цитували, правильний, наскільки це йдеться, але мені здається, це дуже спрощений погляд.

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

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

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

Але ми не обов'язково хочемо перервати лише тоді, коли всі буфери виконані! Було б краще, якби нас повідомили, коли, скажімо, буфер знизився до лише 20% або 10%. Коли ми отримаємо таке переривання, ми помістимо більше буферів у FIFO (звичайно, зупиняючись, коли воно буде повно). Якщо ми отримали переривання лише тоді, коли FIFO був порожнім, була б невелика затримка, перш ніж ми зможемо отримати наступний буфер до нього для передачі, таким чином зменшивши пропускну здатність. Давши нам перерву, коли FIFO буде "порожнім", ми можемо усунути цю затримку.

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