У чым розніца паміж BIOS, DOS і перапынкам у рэжыме рэальнага часу з пункту гледжання мовы зборкі?


адказ 1:

Гэта цудоўнае пытанне, пра які ніхто на самай справе шмат не думае. Адказ просты: «Перапыненне ў рэжыме рэальнага часу» не выразна выконваецца кодам. Ён быў узняты альбо як кіраванне выключэннем, альбо як знешняе прылада, якое ўсталёўвала лінію перапынку на працэсары. BIOS і перапыненне АС - гэта ў асноўным умова выкліку ярлыкоў, якія можна выкарыстоўваць у асемблеры.

Калі выклікаецца або спрацоўвае перапыненне, сегмент кода, паказальнік інструкцыі і рэгістр сцягоў перамяшчаюцца ў стэк. Нумар перапынку вымаецца з шыны, і працэсар шукае новы адрас выканання ў вектарнай табліцы перапынення. І па гэтым адрасе пачынаецца выкананне кода. Гэта як міжгародні званок.

Для знешняга кіравання перапынкамі Google APIC або PIC, Advanced Programmable Interrupt Controller. Арыгінальныя ПК пастаўляліся з версіяй кантролера Intel 8259. З пункту гледжання мовы зборкі, ваш код працуе належным чынам і раптам спрацоўвае перапыненне без вашага ведама (ці любога кода, які вы неадкладна выканалі). Пасля завяршэння перапынення ўсе рэестры, сцягі і важная частка стэка аднаўляюцца, і ваш код нават не ведае, што гэта адбываецца і працягвае працаваць. Знешнія перапынкі таксама могуць быць замаскіраваны. Калі сцяг CL на працэсары ачышчаны камандай CLI, гэтыя знешнія перапынкі спрацоўваюць толькі ў тым выпадку, калі гэта "немаскіраваны перапыненне" (NMI). Часам гэта важна пры напісанні блакавання памяці, і вы хочаце пераканацца, што ніякі іншы код або тэма не перарывае вашу працу.

Я б яшчэ назваў гэта апрацоўкай выключэнняў, перапынкам у рэжыме рэальнага часу. Як і ў выпадку з перашкодамі, якія кантралююцца звонку, тут і тут галоўнае. Але гэта яшчэ называецца TRAP. Тэхнічна перапыненне адбываецца знутры працэсара з-за стану, якое вы справакавалі праграмным забеспячэннем. Успомніце такія рэчы, як дзяленне на нуль альбо няспраўнасць старонкі. Гэта было зроблена не прама праз напісаны вамі код, але ўскосна. І тое ж трэба зрабіць неадкладна. У гэтым выпадку перапыненне МОЖЕ адрэгуляваць значэнне альбо змяніць сцяг, але звычайна з мэтай выправіць памылку, каб працягнуць выкананне альбо паведаміць праграме, што выкананне не можа працягвацца, і праграме можа спатрэбіцца неадкладна выйсці быць. Гэтыя выключэнні звязаны з заявай, якое выклікала памылку. Вы не можаце схаваць гэтыя перапынкі.

Перапынкі BIOS або OS таксама называюцца TRAP, але яны выклікаюцца відавочна. Яны не ў рэжыме рэальнага часу. Вы не можаце вярнуцца адразу. Вы можаце працягваць працаваць, пакуль не скончыце задачу. Напрыклад, змесціце INT 3 (адладчык запуску) непасрэдна ў свой код, і ваш код можа быць выкананы не праз некалькі хвілін. Біёс перабояў відавочна ў біёсе, і перабоі ў аперацыйнай сістэме часта замяняюць біяс перапынкі сваімі ўласнымі. Часта (але менш у ахоўных аперацыйных сістэмах) нават прыкладанне ўсталёўвае свае ўласныя перапынкі. З пункту гледжання праграмавання вы проста вызываеце код і мяркуеце, што рэестры могуць мяняцца і праходзіць некаторы час. І часта вяртаецца значэнне перадаецца ў рэгістры.

І ў адрозненне ад выкліку, пасля яго заканчэння неабходна ачысціць перапыненне, і інструкцыя IRET атрымлівае сегмент кода, паказальнік інструкцыі і сцягі са стэка прыкладання і працягвае выкананне ў гэтым месцы.


адказ 2:

Усе перапынкі маюць адно агульнае: як з імі звяртаюцца. У гэтым выпадку працэсар перарывае бягучую паслядоўнасць каманд, захоўвае яе стан у машынным стэку і выконвае працэдуру перапынку, вызначаную аперацыйнай сістэмай. Тады ён можа аднавіць стан са стэка і працягнуць з перапыненым кодам альбо адмяніць праграму. Якая з 256 магчымых працэдур перапынку выклікаецца, залежыць ад падзеі, якая выклікала перапыненне: перапыненне ў рэжыме рэальнага часу (асінхроннае перапыненне) выклікаецца знешняй падзеяй: націснутая клавіятура, перамешчана мыш, пастаўлены галачкі. Апаратная прылада адпраўляе запыт перапынення на чып APIC, які чакае працэсара выканаць бягучую інструкцыю, а затым APIC загадвае CPU захаваць свой статус і прыняць неабходныя меры: захаванне націснутага знака ў буферы клавіятуры, перамяшчэнне Указальнік мышы на экране, асвяжаючы кампутарны час. Сінхроннае перапыненне (выключэнне) часцей за ўсё выклікана памылкамі праграмавання, напрыклад. B. дзяленнем на нуль, счытванне памяці з неіснуючага адраса і выкананне недапушчальнай каманды. У гэтым выпадку працэдура перапынку паведамляе пра паведамленне пра памылку. Перапыненне выкліку (запыт ад службы аперацыйнай сістэмы) выклікае праграміст зборкі (або кампілятар) з машыннай інструкцыяй INT. Вашы працэдуры праводзяцца ў BIOS або ўсталёўваюцца пры загрузцы аперацыйнай сістэмы. Гэта адзіны тып перапынення, які ўплывае на праграмістаў-аматараў (калі яны не пішуць аперацыйную сістэму або прашыўку BIOS). Усе 256 перабояў дакументаваны тут: Табліца перапынкаў


адказ 3:

Усе перапынкі маюць адно агульнае: як з імі звяртаюцца. У гэтым выпадку працэсар перарывае бягучую паслядоўнасць каманд, захоўвае яе стан у машынным стэку і выконвае працэдуру перапынку, вызначаную аперацыйнай сістэмай. Тады ён можа аднавіць стан са стэка і працягнуць з перапыненым кодам альбо адмяніць праграму. Якая з 256 магчымых працэдур перапынку выклікаецца, залежыць ад падзеі, якая выклікала перапыненне: перапыненне ў рэжыме рэальнага часу (асінхроннае перапыненне) выклікаецца знешняй падзеяй: націснутая клавіятура, перамешчана мыш, пастаўлены галачкі. Апаратная прылада адпраўляе запыт перапынення на чып APIC, які чакае працэсара выканаць бягучую інструкцыю, а затым APIC загадвае CPU захаваць свой статус і прыняць неабходныя меры: захаванне націснутага знака ў буферы клавіятуры, перамяшчэнне Указальнік мышы на экране, асвяжаючы кампутарны час. Сінхроннае перапыненне (выключэнне) часцей за ўсё выклікана памылкамі праграмавання, напрыклад. B. дзяленнем на нуль, счытванне памяці з неіснуючага адраса і выкананне недапушчальнай каманды. У гэтым выпадку працэдура перапынку паведамляе пра паведамленне пра памылку. Перапыненне выкліку (запыт ад службы аперацыйнай сістэмы) выклікае праграміст зборкі (або кампілятар) з машыннай інструкцыяй INT. Вашы працэдуры праводзяцца ў BIOS або ўсталёўваюцца пры загрузцы аперацыйнай сістэмы. Гэта адзіны тып перапынення, які ўплывае на праграмістаў-аматараў (калі яны не пішуць аперацыйную сістэму або прашыўку BIOS). Усе 256 перабояў дакументаваны тут: Табліца перапынкаў