Чим відрізняються BIOS, DOS від перерви в режимі реального часу з точки зору мови складання?


Відповідь 1:

Це чудове запитання, про яке насправді ніхто багато не думає. Проста відповідь: «Переривання в режимі реального часу» - це не явно виконаний кодом. Він спрацьовував або як обробник винятків, або як зовнішній пристрій, що встановлював лінію переривання на процесорі. BIOS і переривання ОС - це, в основному, швидкий виклик, який можна використовувати в асемблері.

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

Для зовнішніх переривань переглядайте google APIC або PIC, який є розширеним програмованим контролером переривань. Оригінальний ПК постачався з деякою версією контролера Intel 8259. З точки зору мови складання, ваш код працює просто чудово, і тоді раптом, без вашого відома (або будь-якого коду, який ви негайно виконали), запускається переривання. Коли переривання буде зроблено, всі регістри, прапори та значуща частина стека відновлюються, і ваш код навіть не знає, що це відбувається, і зберігає право на виконання. Зовнішні переривання також можуть бути «замасковані», тобто якщо прапор переривання на процесорі очищено інструкцією CLI, то ці зовнішні переривання не відбудуться, якщо вони не є «Не маскуючим перериванням» (NMI). Іноді це важливо під час запису блокувань пам'яті, і ви хочете переконатися, що жоден інший код або потік не перериває те, що ви робите.

Я б все ще називав обробку винятків, переривання в режимі реального часу. У тому, що так само, як і зовні керовані переривання, час є сутнісним. Але це ще називається ТРАП. Технічно переривання відбувається зсередини процесора через певний стан, який ви викликали через програмне забезпечення. Подумайте про такі речі, як поділ на нуль або помилка сторінки. Це сталося не Прямо через код, який ви написали, а опосередковано. І аналогічно треба негайно впоратися. Переривання в цьому випадку МОЖЕ скорегувати якесь значення або змінити якийсь прапор, але зазвичай з наміром виправити помилку, продовжити виконання або повідомити програму про те, що виконання не може продовжуватися, і програму, можливо, доведеться негайно припинити. Ці винятки повертаються до тієї самої інструкції, яка спричинила помилку. Ви не можете замаскувати ці переривання.

Переривання BIOS або OS також називаються TRAP, але вони явно викликаються. Вони не в режимі реального часу. Вони можуть не повернутися відразу. Вони можуть продовжувати виконувати, поки не закінчать своє завдання. Прямо у своєму коді, наприклад, ви розміщуєте INT 3 (Trigger Debugger), і ваш код може не виконуватись хвилин. Біосні переривання явно є в Біосі, а переривання ОС часто замінюють перерви Біоса своїми. І часто (але рідше в захищеній ОС) навіть програма встановлює власні перерви. З точки зору програмування, ви просто викликаєте код, і ви повністю очікуєте, що регістри можуть бути змінені, і може пройти деяка кількість часу. І часто повернене значення передається в регістри.

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


Відповідь 2:

Усі переривання мають одне спільне: як вони поводяться. Коли вони відбудуться, процесор порушить поточну послідовність інструкцій, збереже його стан на стеку машини і виконає процедуру переривання, встановлену операційною системою. Тоді він може відновити статус із стека та продовжити код, який був перерваний, або він може перервати програму тощо. Який із 256 можливих процедур переривання викликається, залежить від події, яка спричинила переривання: в режимі реального часу (асинхронний) переривання запускається зовнішньою подією: натиснута клавіатура, миша переміщена, годинник поставлений. Апаратний пристрій надсилає запит на переривання в чіп APIC, який чекає, поки процесор завершить поточну інструкцію, а потім APIC командує процесором, щоб зберегти його статус і виконати необхідні дії: збереження натиснутого символу в буфер клавіатури, переміщення курсору миші на екран, оновлення комп'ютера time.Synchronnous переривання (виняток) найчастіше викликається помилками програмістів, такими як поділ на нуль, зчитування пам'яті з неіснуючої адреси, намагання виконати недійсну інструкцію. У цьому випадку звичайна програма переривання повідомляє про помилку. Виклик переривання (запит на службу ОС) викликається програмістом (або компілятором) з машинною інструкцією INT. Їх підпрограми є провідними в BIOS або встановлюються при завантаженні ОС. Це єдиний вид переривання, що стосується програмування монтажу (якщо тільки вони не записують операційну систему або прошивку BIOS). Усі 256 перерв тут задокументовані: Таблиця стрибків переходів


Відповідь 3:

Усі переривання мають одне спільне: як вони поводяться. Коли вони відбудуться, процесор порушить поточну послідовність інструкцій, збереже його стан на стеку машини і виконає процедуру переривання, встановлену операційною системою. Тоді він може відновити статус із стека та продовжити код, який був перерваний, або він може перервати програму тощо. Який із 256 можливих процедур переривання викликається, залежить від події, яка спричинила переривання: в режимі реального часу (асинхронний) переривання запускається зовнішньою подією: натиснута клавіатура, миша переміщена, годинник поставлений. Апаратний пристрій надсилає запит на переривання в чіп APIC, який чекає, поки процесор завершить поточну інструкцію, а потім APIC командує процесором, щоб зберегти його статус і виконати необхідні дії: збереження натиснутого символу в буфер клавіатури, переміщення курсору миші на екран, оновлення комп'ютера time.Synchronnous переривання (виняток) найчастіше викликається помилками програмістів, такими як поділ на нуль, зчитування пам'яті з неіснуючої адреси, намагання виконати недійсну інструкцію. У цьому випадку звичайна програма переривання повідомляє про помилку. Виклик переривання (запит на службу ОС) викликається програмістом (або компілятором) з машинною інструкцією INT. Їх підпрограми є провідними в BIOS або встановлюються при завантаженні ОС. Це єдиний вид переривання, що стосується програмування монтажу (якщо тільки вони не записують операційну систему або прошивку BIOS). Усі 256 перерв тут задокументовані: Таблиця стрибків переходів