Инфоурок Другое КонспектыАппараттық және бағдарламалық құралдардың өзара әрекеттесуі, бағдарламалардың үзілуі

Аппараттық және бағдарламалық құралдардың өзара әрекеттесуі, бағдарламалардың үзілуі

Скачать материал

САБАҚ ЖОСПАРЫ

 

1.       Атаулы категориясы

1.1. Мамандығы мен біліктілігінің атауы

0104000 – «Кәсіптік білім беру»

010401 3 – «Өндірістік оқыту шебері, техник  программист»

1.2. Курсы, тобы

3 курс, 3 қысқ ПО-1, 3 қысқ ПО-2

1.3. Оқу модулінін/пәннің, менгеретін тараудын атауы

«Есептеу және микропроцессорлық техника негіздері»

1.4. Сабақтын тақырыбы

Аппараттық және бағдарламалық құралдардың өзара әрекеттесуі, бағдарламалардың үзілуі [1/3]

1. Басқару құрылғысы (БҚ)

2. Арифметико-логикалық құрылғы (АЛҚ)

3. Микропроцессорлық жады (МПЖ)

4. Микропроцессордың интерфейстік жүйесі

1.5. Сабақтын ұйымдастырушылық формасы

топтық

1.6. Білім алушылырдын тақырып бойынша қызметті орындау үшін қажетті білімі мен иемділігі

Арифметико-логикалық құрылғы, интерфейстік жүйесі және жадының құрлысы туралы үйрету.

1.7. Кәсіби және енбекпен қамтылуы үшін білігін біріктірудегі оқу сабағының мүмкіншілігі

Арифметико-логикалық құрылғы, интерфейстік жүйесі және жадының құрлысы туралы білу.

2. Сабақтың мақсаты

2.1. Студенттердін дәл осы сабақта үйренетін жұмысқа орналастырудын және жұмысты іздеудің келесі ептіліктерін жетілдіруге мүмкіндік береді

- тыңдай алу;

- серіктестермен қарым-қатынас жасай алу;

- басқалардың пікірін тыңдау;

 

2.2. Студентерді жаттықпа сабақтар барысында менгеретін кәсіптік ептілікке үйрету

- жұмыс орынын дұрыс ұйымдастыра алу;

- әдебиеттермен жұмыс істей алу;

- компьютерде жұмыс істей алу;

- ұжымда жұмыс істей алу;

- логикалық ойлау.

3. Сабақ қорытындысын сипаттау

3.1. Сабақтын аяғында білім алушылар білу және істуі қажет

Арифметико-логикалық құрылғы, интерфейстік жүйесі және жадының құрлысы туралы білікті болу.

3.2. Сапа белгілері

Арифметико-логикалық құрылғы, интерфейстік жүйесі және жадының құрлысы туралы білікті болу.

4. Жоспарлау фазасы

4.1. Оқу-әдестемелік жабдықтау, анықтамалық әдебиеттер тізімі

Амосов В.В. 13-15 бет

4.2. Техникалық жабдықтау, материалдар

Интерактивті тақта, сурет

4.3. Студенттер іс әрекетінін ретін сипаттау

Арифметико-логикалық құрылғы, интерфейстік жүйесі және жадының құрлысы түсінігін меңгеру;

4.4. Оқытушының ролі

- Берілген тақырып бойынша жаңа мағлұмат және түсініктер беру;

- Терминдерді және олардың қолданылу ретін түсіндіру.

5. Жоспарды жүзеге асыру

5.1. Сабақ жоспарынын сипаттамасы, оқытушы мен студенттер іс-әрекетінің мазмұны (кесте)

Кесте «Оқытушы мен студенттер өзара әрекетінің мазмұны мен оны ұйымдастыру»

6. Бағалау

6.1. Орындалған тапсырмалардың сапасын бағалау

Жаңа тақырыпты және терминдерді меңгеру деңгейін анықтау.

 

 

 

 

Оқытушы ______________ Д.С.Ахметкалиев

қолы                       аты-жөні

 

 

Оқытушы мен студенттер өзара әрекетінің мазмұны мен оны ұйымдастыру

 

Сабақтың негізгі кезендері

Әрекеттердін түрі мен реті

Студенттердін қызметі

Оқытушымен студентердін біріккен қызметі

Оқытушынын қызметі

Жекеше

Топтық

Топаралық

Кенес беру

Нұсқау

Бақылау

1.

Бағдарлау және жоспарлау кезені

Сабақтын тақырыбы мен мақсаты

 

Х

 

Х

 

Х

 

2.

Жұмысты орындау кезені

Жұмыс орынын дайындау

 

Х

 

 

Х

 

 

Материалдарды дайындау

 

Х

 

 

Х

 

 

Технологиялық барыс: конспектіллеу,

Конспектімен жұмыс,

Интерактивті тақтада жұмыс істеу,

Карточкалармен жұмыс.

 

 

Х

Х

 

Х

 

 

Х

 

 

 

 

 

Х

Х

 

Х

 

 

Х

 

 

 

Х

Х

 

Х

 

 

Х

3.

Аралық және сонғы нәтижені бағалау және талдау кезені

Сапа белгілері боынша бағалау:

Айырма сөйлемдер әдісі

Анаграмма

Сөз тендіктері

Артық термин

 

 

 

Х

Х

Х

Х

 

 

 

 

 

 

Х

Х

Х

Х

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Дәріс №3

Пән: Есептеу және микропроцессорлық техника негіздері

Курс тақырыбы: Электронды есептеуіш машиналарына, құрылғыларына жалпы сипаттама

Сабақ тақырыбы: Аппараттық және бағдарламалық құралдардың өзара әрекеттесуі, бағдарламалардың үзілуі

1.             Басқару құрылғысы (БҚ)

2.             Арифметико-логикалық құрылғы (АЛҚ)

3.             Микропроцессорлық жады (МПЖ)

4.             Микропроцессордың интерфейстік жүйесі

 

Микропроцессорлық жүйенің жұмыс режимдері

Жоғарыда айтылғандай, микропроцессорлық жүйе үлкен икемділікті қамтамасыз етеді, ол кез келген тапсырмаға реттеуге болады. Бұл икемділік функциялары процессоры арқылы орындалады бағдарламасы (бағдарламалық қамтамасыз ету, бағдарламалық қамтамасыз ету), анықталады жүйесі, орындауындағы фактісі негізінен. Аппараттық (аппараттық, аппараттық) кез келген тапсырма үшін өзгеріссіз қалады. бағдарламасы еске жүйесін жазу, сіз жабдықтың қолдау кез келген тапсырманы орындау үшін микропроцессорлық жүйені жасауға болады. Сонымен қатар, микропроцессорлық жүйе аппараттық модульдер ауыстыру ол өте оңай етеді автобус байланыстарды ұйымдастыру, мысалы, жаңа үлкен мөлшерін немесе жоғары жылдамдықпен үшін жады ауыстыру, I / O құрылғыны қосу немесе өзгерту, сайып келгенде, неғұрлым қуатты процессоры ауыстырылады. Ол сондай-ақ жүйенің икемділігін арттыруға, оның өмірін оған қойылатын талаптардың кез-келген өзгеруімен кеңейтуге мүмкіндік береді.

Бірақ микропроцессорлық жүйенің икемділігі осы арқылы ғана емес анықталады. жүйесі хост ақпарат алмасу режимі (автобус), яғни, жүйенің неғұрлым таңдау және жұмыс істеуін көмектесе тапсырмаға бапталған.

Кез-келген дамыған микропроцессорлық жүйе (оның ішінде компьютер) магистраль бойында үш негізгі айырбастау режимін қолдайды:

·          Ақпарат алмасу бағдарламасы;

·          Үзілістерді пайдалану арқылы үзу (үзу);

·          тікелей жадқа қол жеткізу арқылы алмасу (DMA, Direct Memory Access) немесе Тікелей Алмасу Жадысы.

Ақпаратты бағдарламалық алмасу кез-келген микропроцессорлық жүйеде бастысы болып табылады. Ол әрдайым қамтамасыз етіледі, онсыз басқа алмасу режимдері мүмкін емес. Бұл режимде процессор жүйелік магистралдың жалғыз иесі (немесе мастер, мастер) болып табылады. Бұл жағдайда ақпарат алмасудың барлық операциялары (циклдары) тек процессормен басталады, олар орындалатын бағдарламамен анықталған тәртіпте қатаң орындалады.

Процессор жадтан нұсқаулық кодтарын оқиды (таңдайды) және оларды орындайды, деректерді жадтан немесе кіріс / шығыс құрылғыдан оқиды, оларды өңдейді, деректерді жадыға жазады немесе кіріс / шығыс құрылғысына ауыстырады. Бағдарламаға сәйкес процессордың жолы сызықты, циклдік болуы мүмкін, ол өтулерді (секіруді) қамтуы мүмкін, бірақ ол үздіксіз және толықтай процессордың бақылауында болады. Процессор ешқандай бағдарламаға қатысы жоқ сыртқы оқиғаларға жауап бермейді (1.11-сурет). Омыртқаға арналған барлық сигналдар осы жағдайда процессормен бақыланады.

Программный обмен информацией.

Сурет. 1.11. Бағдарламалық ақпаратпен алмасу.

Микропроцессорлық жүйенің реакциясы кейбір сыртқы оқиғалар үшін, сыртқы сигнал келу үшін қажет болғанда, үзу алмасуы қолданылады. Компьютер жағдайында сыртқы оқиға, мысалы, пернетақта пернесін басу немесе жергілікті желідегі деректер бумасын енгізу болуы мүмкін. Компьютер тиісті түрде экрандағы таңбаны көрсету арқылы немесе желі арқылы алынған пакетті оқу және өңдеу арқылы жауап беруі тиіс.

Жалпы жағдайда сыртқы оқиғаға жауап үш түрлі жолмен ұйымдастырылуы мүмкін:

·          Оқиғаның пайда болуын тұрақты бақылау арқылы (жалаушаны немесе дауыс беруді сұрау әдісі деп аталатын);

·          Үзілісті пайдалану, яғни процессорды ағымдағы бағдарламаны орындаудан шұғыл қажет бағдарламаға жіберу;

·          Тікелей жадыға қол жеткізу арқылы, яғни, жүйедегі негізгі жүйеден ажыратылған кезде процессор қатыспайды.

Мына үш әдіс келесі қарапайым мысал бола алады. Мысалы, сіз сүтті пешке қойып, өз таңғы асыңызды дайындайсыз. Әрине, сүттің қайнатылуы реакцияға және шұғылдануға тиіс. Оны қалай ұйымдастыруға болады? Бірінші тәсіл - бұл сүтті үнемі бақылап отыру, бірақ одан басқа ештеңе жасай алмайсыз. Бір уақытта басқа нәрсені жасай отырып, сүтті үнемі қарап отыру дұрысырақ болады. Бұл жалаушаны сұрау арқылы бағдарлама режимі. Екінші жолы - сүт қайнаған сүт кезінде дыбыстық сигнал бергіш, және басқа да нәрселерді істеуге оңай бір табаны астам орнату үшін. Сигналды естігенде сіз сүтті өшіресіз. Егер жауап бірінші жағдайда қарағанда баяу болады, сондықтан Алайда, сіз, ең алдымен, сіз істеу бастады қандай аяқтау қажет болуы мүмкін. Соңында, үшінші жолы қайнау сүт оттық сенсіз өшірілгенде, сондықтан шындық (бақылау пластиналар Табаға датчикті қосыңыз болып табылады, бұл жағдайда әрекетті орындау кезінде сіз емес, өйткені, DMA ұқсастығы, өте дәл емес, жұмысынан алшақтау).

Бірінші оқиға микропроцессорлық жүйеде процессордың сыртқы құрылғыға қосылған кіріс / шығыс құрылғыдан тұрақты түрде оқылуы арқылы жүзеге асырылады, оның әрекеті шұғыл түрде жауап беруі керек.

Екінші жағдайда, үзіліс режимінде процессор сыртқы құрылғыдан (жиі IRQ-Interrupt ReQuest деп аталады) үзіліс туралы сұрау алды, ағымдағы пәрменді орындауды тоқтатады және үзіліс қызметі режиміне көшеді. Үзіліс тәртібі орындалғанда үзілген бағдарламаға үзілген нүктеден қайтарылады (1.12-сурет).

Мұнда маңыздысы - барлық жұмыс, бағдарлама режимінде болғандай, процессор өзі жүзеге асырады, сыртқы оқиға уақытша оны уақытша тоқтатады. Сыртқы үзіліс оқиғасына жауап, әдетте бағдарлама режиміне қарағанда, баяуырақ болады. Бағдарламалық қамтамасыз алмасу жағдайында сияқты, онда барлық сигналдар омыртқаға процессорлар әсер етеді, яғни ол жолды толығымен бақылайды. Үзілістерді сақтау үшін жүйеге кейде үзіліс контроллерінің арнайы модулі енгізіледі, бірақ ол ақпарат алмасуға қатысады. Оның міндеті - сыртқы үзіліс сұрауларымен процессордың жұмысын оңайлату. Бұл контроллер әдетте жүйелік жүйедегі процессор арқылы бағдарламаланған.

Обслуживание прерывания.

Сурет. 1.12. Үзіліс қызметі.

Әрине, жүйенің жұмысын жеделдете алмай отыр. Оның қолданылуы сыртқы оқиғалардың басталуына дейін, сыртқы процестің туын үнемі сұраудан бас тартуға және басқа да міндеттермен процессорды иеленуге мүмкіндік береді.

Тікелей алмасу жадысы (DMA, ТАЖ) - жүйелік шина алмасу процессор жоқ өтетіндей түбегейлі екі бұрын талқыланды режимдерін айырмашылығы режим. қызмет көрсетуді талап сыртқы құрылғы, DMA режимі процессор жауап, қажет процессор DMA режимінде алмасу бастауға болады сұрау салушы құрылғыны көрсете отырып, барлық автобустар жылғы және өшіру ағымдағы команданы аяқтайды сигналдар.

Операция ТАЖ жадына немесе жадтан кіріс / шығыс құрылғысына I / O құрылғысынан ақпаратты беруге азайтады. ақпарат тасымалдау аяқталғанда, процессор үзілген нүктесіне ұзарту, үзіліп бағдарламасына қайтарады (сур. 1.13). Бұл үзіліс қызметін көрсету режиміне ұқсас, бірақ бұл жағдайда процессор алмасуға қатыспайды. қалуына, бағдарлама режимінде қарағанда айтарлықтай баяу DMA сыртқы іс-шара реакция жағдайда ретінде.

Бұл жағдайда жүйеге енгізу үшін қосымша құрылғы (ТАЖ контроллері) талап етіледі, бұл процессордың қатысуынсыз жүйенің негізгі жүйесінде толық алмасуды жүзеге асырады. Процессор алдымен осы ТАЖ контроллеріне ақпарат беруі керек және / немесе оны орналастыру керек болатын жер туралы хабарлауы керек. ТАЖ контроллері мамандандырылған процессор деп санауға болады, ол айырбастауға қатыспайтын, ақпарат алмайтын және оны шығармайтын ерекшеленеді (1.14-суретті қараңыз).

Обслуживание ПДП.

Сурет. 1.13. ТАЖ -ны жүргізу.

Информационные потоки в режиме ПДП.

Сурет. 1.14. ТАЖ режиміндегі ақпараттық ағындар.

Негізінде, ТАЖ контроллері DMA режиміне немесе бірнеше I / O құрылғысына қажет I / O құрылғысының бөлігі болуы мүмкін. Теориялық тұрғыдан, тікелей жадымен алмасу бағдарламалық жасақтамаға қарағанда деректерді беру жылдамдығын жоғарылата алады, себебі процессор арнайы DMA контроллеріне қарағанда деректерді баяулатады. Алайда, іс жүзінде бұл артықшылық үнемі іске асырылмайды. ТАЖ режиміндегі айырбас бағамы әдетте магистральдың мүмкіндіктері бойынша шектеледі. Сонымен қатар, DMA контроллерінің режимдерін программалық түрде көрсету қажеттілігі DMA режимінде жоғары деректер беру жылдамдығынан пайда жоғарылайды. Сондықтан ТАЖ режимі сирек қолданылады.

Егер жүйеде бұрыннан бар ТАЖ контроллері болса, онда бірқатар жағдайларда ол ТАЖ режимінде жұмыс істейтін кіріс / шығыс құрылғыларының жабдықтарын айтарлықтай жеңілдетеді. Мүмкін, бұл ТАЖ режимінің жалғыз артықшылығы.

Операциялық жүйенің ең маңызды функциясы жүйенің барлық аппараттық және бағдарламалық ресурстарын ұтымды пайдалануды ұйымдастыру болып табылады. Негізгі ресурстар: процессорлар, жады, сыртқы құрылғылар, деректер және бағдарламалар. Бірдей ресурстарға ие, бірақ әртүрлі ОЖ-мен басқарылатын компьютерлік жүйе әртүрлі дәрежедегі тиімділікпен жұмыс істей алады. Сондықтан операциялық жүйенің ішкі тетіктерін білу оның жедел мүмкіндіктерін және сипаттамаларын жанама түрде бағалауға мүмкіндік береді.

ОС-ның тұрғысынан ДК-ның аппараттық-қамтамассыз ету модельдері

Компьютерді құрайтын құрылғылар мен тораптар арасында кез-келген бағдарламаны орындау үшін ең маңыздысы - ЖЖҚ және орталық микропроцессор. Процессор мен жад арасындағы байланыс жүйелік интерфейс арқылы жүзеге асырылады: деректер шинасы, мекен-жайы және басқару (2.1-сурет).

http://bourabai.kz/os/img/image053.gif

2.1-сурет - Компьютерлік жүйелердің аппараттық құралдарының моделі

Үзіліс жүйесі

жүйесі өңдеу дереу орындалуы тиіс, кез келген компьютерлік оқиғаларға тез жауап береді, оның ең маңызды бөлігі болып табылады тоқтатады :. т.б. пернетақта немесе тінтуірдің батырмаларының басу машинасы таймерлер сигналдарды, жад істен, бізге жалпы осы жүйенің компоненттерін қарастырайық.
құл (сурет 2.2) - құрылғылар пайда аппараттық үзуге компьютерге немесе қосылған, оған енгізілген сигналдар шебері және екінші деп аталады, олардың бірі, тікелей, бірақ екі Үзу контроллері (
ҮК) арқылы процессор емес жеткізіледі. Екі контроллерлер сыртқы құрылғылардың рұқсат етілген санын арттыру үшін пайдаланылады. әрбір контроллер үзу бұл факт 8 құрылғылар ғана сигналдарды қызмет көрсете алады. қызмет ету көп контроллері құрылғылар бір желдеткіш пішіндес құрылымын қалыптастыру үшін біріктірілуі мүмкін.

http://bourabai.kz/os/img/image054.gif

2.2-сурет - жабдықты үзуді ұйымдастыру

IRQ1 ... IRQ7 және IRQ8 кіріс терминалдарына ... IRQ15 (үзіліс сұрауына Interrupt Request, үзіліс сұрауы үшін қысқа болып табылады), тоқтау сигналдары орын алатын құрылғы терминалдары қосылған. Мастер-контроллердің шығысы микропроцессордың INT-ге кіруіне және шебердің IRQ2 кірісіне құлдың шығуына байланысты. Контроллерлердің негізгі функциясы - сыртқы құрылғылардан үзуге сұраныстың сигналдарын микропроцессорлық үзілістердің бір кіруіне беру. Сонымен қатар, INT сигналына қосымша, контроллерлер микропроцессорға деректер желілері бойынша контроллерде қалыптастырылатын вектордың нөмірін тізбектің бірінде жазылған негізгі нөмірді енгізуді тоқтату туралы сұраныс ұсынылған енгізу жолының санымен қосу арқылы жібереді. Негізгі векторлардың саны компьютердің бастапқы жүктелуі кезінде автоматты түрде контроллерге енгізіледі. Негізгі контроллер үшін базалық вектор әрқашан 8, құл үшін - 70H. Осылайша, аппараттық кедергілерге тағайындалған векторлардың саны 8h ... Fh және 70h ... 77h ауқымында болады. Аппараттық үзу векторларының сандары желілік нөмірлерге немесе IRQ деңгейлеріне және олар арқылы белгілі бір компьютерлік құрылғыларға бір-бірімен байланысты.

Үзіліс сигналын алған процессор әдетте үзіліс процедурасы деп аталатын стандартты әрекеттердің бірізділігін орындайды. Мұнда біз процессордың үзіліс өңдеу бағдарламаларында үзілген өңдеу алгоритмдері туралы емес, сигналдарды тоқтату үшін ғана процессордың реакциясын ғана айтып отырмыз.

Үзіліс процедурасына қатысатын компьютерлік жүйенің нысандары және олардың өзара әрекеті суретте көрсетілген. 2.3.

http://bourabai.kz/os/img/image055.jpg

2.3-сурет - үзудің сервистік қызметі

Жедел жадының ең басы OOOOH-дан 03FFN-ге дейінгі үзіліс векторларына - төрт байттық аудандарға тағайындалады, онда тоқтау өңдегіштерінің мекен-жайы сақталады (2.3-сурет). Әрбір вектордың екі жоғары дәрежелі байттарында өңдегішінің сегменттік мекенжайы жазылған, екі төменгісі - өңдегішінің кіру нүктесінің (салыстырмалы мекен-жайы) өзара байланысы. Векторлар, тиісті үзіліс сияқты, сандарға ие және 0-ден бастап вектор 0 мекен-жайдан бастап, 1-векторы 4 мекен-жайдан, вектор 2 -ден 8-ге дейін және т.б. Нөмірге ие вектор бар және, демек, n * 4-тен n * 4 + 3-ге дейінгі жады байттарын алады. Векторларға бөлінген жад аймағында барлығы 256 вектор бөлінген.

Үзіліс процедурасын белгілі бір санмен орындау үшін сигнал алған процессор процессордың үш регистрінің ағымдағы мазмұнын орындалатын бағдарламаның стексінде сақтайды: жалаулардың тізілімі, CS және IP. Соңғы екі нөмір үзілген бағдарламада толық қайтару мекенжайын құрайды. Содан кейін процессор CS және IP-ды тиісті үзу векторынан жүктейді, сол арқылы осы вектормен байланыстырылған тоқтату өңдегішіне ауысады.

Үзіліс ұстағыш әрқашан әртүрлі әрекеттерді орындайтын iret (үзіліс қайтару) пәрменімен аяқталады, ол сақталған сөздерді жинақтан шығарып, оларды IP және CS жазбаларына, сондай-ақ жалауша тіркеліміне қоюға мүмкіндік береді. Бұл негізгі бағдарламаға оралуына әкеліп соқтырады.

Іс жүзінде үзілістерді өңдеу сұраулары өзгеше болуы мүмкін. Жоғарыда сипатталған аппараттық құралдардан басқа, жиі сыртқы деп аталатын перифериялық құрылғылардан басқа, басқа да үзілістер түрлері бар: ішкі және бағдарламалық жасақтама.

Ішкі үзілістер процессордың сұлбалары арқылы іске асады, мысалы, белгілі бір жағдайлардың бірі болғанда, мысалы, бөлу операциясын нөлге дейін немесе жоқ пәрменді орындауға тырысқанда. Әрбір осы үзілістің артында белгілі бір вектор тіркелген, оның саны процессорға белгілі. Мысалы, 0-ге бөлінгеннен кейін 0 векторы бекітілген және жарамсыз команда 6 векторы болып табылады. Егер процессор осы жағдайлардың біреуімен кездессе, жоғарыда сипатталған үзік-үзік рәсімін осы жағдайға арналған үзу векторы арқылы жүзеге асырады.

Ақырында, үзілістердің тағы бір маңызды түрі - бағдарламалық жасақтаманың үзілуі. Олар int командасымен сандық дәлелмен шақырылады, ол процессормен үзу векторының саны ретінде өңделеді. Бағдарламада болса, мысалы, команда

int 13h

онда процессор бірдей үзу процедурасын орындау арқылы int командасының вирус нөмірі ретінде пайдаланылады. Бағдарламалық қамтамасыз етудің үзілістері, ең алдымен, жүйелік қызмет бағдарламаларын - DOS және BIOS функцияларын шақыру үшін пайдаланылады.

Процессордың сипатталған әрекеттері үзіліс процедурасын тудыратын себептер түбегейлі өзгеше болса да, ішкі, аппараттық және бағдарламалық қамсыздандырудың барлық түрлері үшін бірдей орындалады.

Үзіліс векторларының басым бөлігі белгілі бір әрекеттер үшін сақталған; олардың кейбіреулері автоматты түрде жүйелік бағдарлама адресімен толтырылады, жүйе қотарылады.

00h - ішкі үзіліс, 0-ке бөлу;
0lh - ішкі үзіліс, қадамдық орындау (TF = 1);
02h - шифрланған үзіліс (NMI процессорының шығысы);
08h - жүйенің таймерінен жабдықты үзу;
09h - пернетақтадан жабдықты үзу;
0Eh - дискета дискісінен жабдықты үзу;
10h - бағдарламалық жасақтаманың үзілуі, BIOS бейне жүйесін басқарады;
13h бағдарлама үзілімі, дискіні басқару үшін BIOS бағдарламасы;
16h бағдарламасының үзілуі, BIOS пернетақта басқару бағдарламалары;
1Dh - бұл вектор, BIOS-мен қолданылатын бейне параметрлері кестесінің мекенжайы;
 LH - бұл вектор, BIOS пайдаланатын дискета параметрлері кестесінің мекенжайы;
 21h - бағдарламаны үзу, DOS функциясының менеджері;
 22h - меншікті үзіліс, DOS қолданған үдерістің соңындағы өтпелі мекенжайы;
 23h - DOS арқылы қолданылатын <Ctrl> / C арқылы бағдарламаны үзу, тоқтату өңдегішті;
 25h - бағдарламалық үзіліс, абсолютті дискіні оқу (DOS функциясы);
 26h - бағдарламаны үзу, дискке абсолюттік жазу (DOS функциясы);
 60h ... 66h - пайдаланушы бағдарламалық қамтамасыз ету үзілістеріне арналған;
 68h ... 6Fh - бағдарламалық қамтамасыз етуді үзу, бос векторлар;
 70 сағат - нақты уақыттағы сағаттардан аппараттық үзіліс (батарея қуаты бар);
 76h - аппараттық қамтамасыз етуді қатты дискіден үзу;

Кестеден көріп отырғанымыздай, үзіліс векторлары шартты түрде келесі топтарға бөлінеді:
Ішкі процессордың үзік векторлары (0lh, 02h және т.б.);
Аппараттық үзілістердің векторлары (08h ... 0Fh және 70h ... 771i);
BIOS компьютерлік техникасына техникалық қызмет көрсету (10h, 13h, 16h және т.б.);
DOS бағдарламалары (21h, 22h, 23h және т.б.);
BIOS жүйелік кестелерінің мекенжайлары (1Dh, lEh және т.б.).

Мекенжайлар үзіліс векторларында сақталатын жүйелік бағдарламалар көбінесе жай диспетчерлер болып табылады, олар жүйелік функцияларды іске асыратын бағдарламалардың үлкен топтарына қол жеткізеді. Осылайша, BIOS бейне драйвері (векторы 10х) бейне режимін өзгертуге, меңзерді басқаруға, түс бояғыштарын орнатуға, қаріптерді жүктеуге және басқа да көптеген бағдарламаларды қамтиды. Әсіресе, осыған байланысты тән 21х векторы болып табылады, оның көмегімен DOS-тің барлық функциялары: экранға енгізу және шығару, каталог және дискідегі файлдарды сақтау, жады және процестерді басқару, уақыт қызметтері және т.б. Қажетті функцияны шақыру үшін, int командасын сәйкес нөмірмен ғана емес, сонымен қатар жүйені регистрлердің бірінде көрсету керек
(бұл үшін AN регистрі әрдайым пайдаланылады) деп аталады. Кейде «көпфункционалды» функциялар үшін субфункция нөмірін (AL тіркелімінде) көрсету қажет.

Өңдегіштері аппараттық үзуге

Үзілім өңдегіштері операциялық жүйенің компоненттері көптеген маңызды бөлігі болып табылады. Алдыңғы бөлімде көрсетілгендей, үзудің компьютерлік қосылған перифериялық құрылғылар (пернетақтасы, тінтуір, дөңгелектер, стандартты емес құрылғылар түсетін, (0, несуществующей команданы бөлуге тырысып) белгілі бір істен жағдайда микропроцессоры туындайтын, ішкі сыртқы бөлінеді

сериялық порттар) және бағдарламалық қамтамасыз ету, нақты санымен процессор командасы ИНТ жауап болып табылады. негізінен өңдеу керек, сыртқы және бағдарламалық қамтамасыз ету өтініште тоқтатады. қызмет жалпы принциптері және басқа да үзудің бірдей, бірақ өңдегіштер аппараттық үзу жұмыс істеуі үшін жағдайлар жабдықтарды үзу кездейсоқ уақытта келуге және кез келген нүктесінде ағымдағы бағдарламаны үзіліске мүмкін, бұл шын мәнінде негізінен байланысты елеулі ерекшеліктерін бар. кез келген жолмен, оның жүзеге асыру бағдарламасы (тоқтатуға) ағымдағы дұрыс жұмыс істеуін әсер етіп Үзілім өңдегіші жазылуы тиіс.

Бағдарламалық кешеннің құрылымы мен жұмыс істеуін схемалық түрде қарастырайық, оның құрамында кейбір аппараттық үзілістердің өз жұмысын қамтитын (2.4 сур.).

http://bourabai.kz/os/img/image056.gif

Сурет 2.4 - Бағдарламалық кешені үзіліс өңдегішпен жұмыс істеу

Үзіліс өңдегіші бағдарламаның бөлігі ретінде рәсім түрінде болуы мүмкін, немесе жай ғана кейбір бағдарламаның бір бөлігі болуы мүмкін (бастауыштың кіріс нүктесі) және үзіліс үзілісінен шығатын нұсқаулық.

Жұмыс бастаған бағдарлама, ең алдымен, үзіліс ұстағышын орнату үшін инициализациялау әрекеттерін орындау керек. Ең қарапайым жағдайда, бұл әрекеттер тиісті векторға өңдегішінің толық мекен-жайын (сегменттеу және есепке алу) кіреді. Өңдеуші бағдарламаның бөлігі болғандықтан, оның салыстырмалы мекенжайы белгілі; бұл оның рәсімінің атауы немесе кіріс нүктесінің белгісі. Сегменттің мекенжайы болсақ, өңдегіші бағдарламаның негізгі бөлігінің сегментіне ене алады, егер ол көлемі аз болса және бір сегментті алады, бірақ ол сондай-ақ тәуелсіз сегментті қалыптастыра алады. Кез келген жағдайда сегменттің мекенжайы ретінде тиісті сегменттің атауын пайдалануға болады.
Көп жағдайда, векторды баптаудан басқа, инициализациялау басқа әрекеттерді қамтиды: үзу векторының бастапқы мазмұнын сақтап, үзіліс контроллерінде қажетті үзіліс деңгейін ашып, құрылғыны өшіруді қосу пәрменін жіберу және тағы басқалар.

Жұмысшы орнатқаннан кейін бағдарлама одан әрі жұмыс істей бастайды. Үзіліс болған жағдайда, процессор жалаушаларды және ағымдағы бағдарлама мекен-жайын стекке сақтайды, өңдегішінің мекен-жайын вектордан шығарып, бақылауды оның кіріс нүктесіне өткізеді. Әрдайым, бағдарлама өңдеушісі жұмыс істеп тұрған кезде, басты бағдарлама, әрине, тұр. Соңғы iret командасы жинақта сақталған деректерді шығарады және басқаруды жұмысын жалғастыра алатын үзілген бағдарламаға қайтарады. Кейінгі үзілістер сол қалпында қызмет етеді.

Үзіліс ұстағышының функциялары шешілетін тапсырмаға және үзу сигналдары қабылданатын құрылғының тағайындалған жеріне байланысты. Пернетақтадан үзіліс болған жағдайда үзіліс өңдегішінің тапсырмасы басылған кілт кодын қабылдау және сақтау болып табылады. Тінтуірдің үзілуі оның қозғалысын көрсетеді, ол экрандағы курсорды жаңартуды қажет етеді. Қызмет көрсетілетін құрылғы физикалық орнату болса, үзіліс сигналы орнатудың орнату жадынан компьютер жадына көшірілуі қажет деректердің белгілі бір мөлшерін жинақтағанын көрсетуі мүмкін. Қалай болғанда да, үзіліс жасаушы қарапайым бағдарлама болуы керек, оған компьютер уақыты көп қажет емес.

Бағдарламалық кешеннің құрылымы мен жұмыс істеуін схемалық түрде қарастырайық, оның құрамында кейбір аппараттық үзілістердің өз жұмысын қамтитын (2.4 сур.).
Үзіліс өңдегіші бағдарламаның бөлігі ретінде рәсім түрінде болуы мүмкін, немесе жай ғана кейбір бағдарламаның бір бөлігі болуы мүмкін (бастауыштың кіріс нүктесі) және үзіліс үзілісінен шығатын нұсқаулық.

Жұмыс бастаған бағдарлама, ең алдымен, үзіліс ұстағышын орнату үшін инициализациялау әрекеттерін орындау керек. Ең қарапайым жағдайда, бұл әрекеттер тиісті векторға өңдегішінің толық мекен-жайын (сегменттеу және есепке алу) кіреді. Өңдеуші бағдарламаның бөлігі болғандықтан, оның салыстырмалы мекенжайы белгілі; бұл оның рәсімінің атауы немесе кіріс нүктесінің белгісі. Сегменттің мекенжайы болсақ, өңдегіші бағдарламаның негізгі бөлігінің сегментіне ене алады, егер ол көлемі аз болса және бір сегментті алады, бірақ ол сондай-ақ тәуелсіз сегментті қалыптастыра алады. Кез келген жағдайда сегменттің мекенжайы ретінде тиісті сегменттің атауын пайдалануға болады.

Көп жағдайда, векторды баптаудан басқа, инициализациялау басқа әрекеттерді қамтиды: үзу векторының бастапқы мазмұнын сақтап, үзіліс контроллерінде қажетті үзіліс деңгейін ашып, құрылғыны өшіруді қосу пәрменін жіберу және тағы басқалар.

Жұмысшы орнатқаннан кейін бағдарлама одан әрі жұмыс істей бастайды. Үзіліс болған жағдайда, процессор жалаушаларды және ағымдағы бағдарлама мекен-жайын стекке сақтайды, өңдегішінің мекен-жайын вектордан шығарып, бақылауды оның кіріс нүктесіне өткізеді. Әрдайым, бағдарлама өңдеушісі жұмыс істеп тұрған кезде, басты бағдарлама, әрине, тұр. Соңғы iret командасы жинақта сақталған деректерді шығарады және басқаруды жұмысын жалғастыра алатын үзілген бағдарламаға қайтарады. Кейінгі үзілістер сол қалпында қызмет етеді.

Үзіліс ұстағышының функциялары шешілетін тапсырмаға және үзу сигналдары қабылданатын құрылғының тағайындалған жеріне байланысты. Пернетақтадан үзіліс болған жағдайда үзіліс өңдегішінің тапсырмасы басылған кілт кодын қабылдау және сақтау болып табылады. Тінтуірдің үзілуі оның қозғалысын көрсетеді, ол экрандағы курсорды жаңартуды қажет етеді. Қызмет көрсетілетін құрылғы физикалық орнату болса, үзіліс сигналы орнатудың орнату жадынан компьютер жадына көшірілуі қажет деректердің белгілі бір мөлшерін жинақтағанын көрсетуі мүмкін. Қалай болғанда да, үзіліс жасаушы қарапайым бағдарлама болуы керек, оған компьютер уақыты көп қажет емес.

Өтініш өңдегішін үзілістердің нәтижесінде бақылауды алу үшін оның мекен-жайы тиісті үзу векторына орналастырылуы керек. Бұл жағдайда, вектордың бастапқы мазмұны жойылады, және үзуге бағдарламасы аяқталған соң алынған болса, бақылау жады ғана нәрселер туралы орналасқан болуы мүмкін, онда мекен-жайы беріледі өте жағымсыз жағдай, онда болады.

Сондықтан, стандартты техника - вектордың түпнұсқа мазмұнын жадыда сақтап, бағдарлама тоқтатылғанға дейін қалпына келтіру.
Үзіліс векторын оқу және толтыру қарапайым мобильдік пәрмендер арқылы орындалса да, бұл үшін арнайы берілген DOS функцияларын пайдалану қажет. 35х саны бар функция векторды оқу үшін қолданылады. Векторлық нөмірі AL тіркеліміне орналастырылады. Функция вектордың түпнұсқа мазмұнын ES: BX регистрлеріндегі жұптарда қайтарады (ES сегментінің мекенжайы және BX офсетінде деп болжауға болады). Деректер сегментіндегі вектордың түпнұсқалық мазмұнын сақтау үшін екі ескі ұяшық ескі_08 қамтамасыз етілген. Осы ұяшықтың төменгі сөзінде (нақты мекенжайы old_08), ескі (ескі ескі +8) нақты мекенжайы - сегмент мекенжайы сақталады. Осы ұяшықтан тұратын сөздерді шешу үшін, біз аудармашыға жасушаның алғашқы мәлімдемесін уақытша ұмытып кетуіне себеп болатын және оны екі бөлек сөз ретінде қарастыруға мүмкіндік беретін ptr дескриптор сөзін қолдануға тиіспіз. Егер бастапқы вектордың екі 16-биттік ұяшығын алсақ, мысалы:

old_08_ofTs dw 0; ығысу үшін

old_08_seg dw 0; сегменттелген адрес үшін

онда олар ешқандай дескрипторсыз шешілуі мүмкін.

Бастапқы векторды сақтағаннан кейін, біздің өңдегішінің мекенжайын орнатуға болады. DOS-дағы векторды орнату үшін 25-ші функция берілген, ол AL тіркелімінде орнатылатын вектордың санын және оның ДС тіркелім жұптарындағы толық мекен-жайын талап етеді.

Бағдарлама аяқталмас бұрын, сіз векторға 8-егжей-тегжейлі жазылыңыз, ескі ескі сөздік өрісінде сақталған жүйе өңдеушісі. DS: DX регистрлерінде векторды орнату функциясын 25 сағат бұрын шақырған кезде, осы екі сөздік өрістің мазмұнын енгізу керек. Бұл операция бір Lds пәрменімен орындалады, егер DX тіркелгісін бірінші операнд ретінде көрсетсеңіз және екінші мекенжайыңыз екі есе ұяшықтың мекенжайы ретінде көрсетілсе, біздің жағдайда old_08.

Шығарушы агентінің соңында стандартты әрекеттерді қарастырайық

Біз бұған дейін өңдеушінің соңғы командасы үзіліссіз бағдарламаға басқаруды қайтаратын iret командасы болатынын айтқан болатынбыз. Дегенмен, бұған дейін тағы бір міндетті міндеттеме жасау қажет: үзіліс контроллеріне үзу туралы бұйрық жіберіңіз. Факт үзіліс контроллері процессорға үзіліс сигналын INT жібереді, бұл үзіліс тудырғаннан бастап, IRQ нөмірлерінің артуына қарай соңғы үзіліс жолдарын блоктайды. Осылайша, мысалы, IRQ6 сызығында (дискета) келіп жатқан үзіліс 6 және 7-жолдарда одан әрі үзуді тоқтатады.

Кез келген аппараттық үзілістен кейінгі өңдеуіш үзіліс контроллерін оны аяқтамас бұрын құлыптауы керек, әйтпесе бүкіл үзу жүйесі сәтсіз болады. Ажыратуды 20h коды бар пәрменді үзу контроллеріне тағайындалған екі порттың біріне жіберу арқылы орындау қажет. Мастер - контроллер үшін бұл пәрмен 20h портына жіберіледі,
A0х портына дейін. Осылайша, біз нақты уақыттағы сағаттардан (IRQ8 үзу сызығы, векторы 70h, slave контроллері) үзіліс жасап алсаңыз, онда үзілудің соңғы командасы келесідей болады:

mov AL, 20h; Аяқтауды тоқтату пәрмені

A0h, AL, біз оны құл порты портына жібереміз

Командалардың көрсетілген реті кейде бұйрық немесе EOI пәрмені деп аталады (үзілістің соңынан үзудің соңы).

Қарастырылған мысал елеулі кемшіліктерге ие. Біздің өңдеушінің мекен-жайын 8 үзіліс векторына жазу арқылы біз вектордың түпнұсқалық мазмұнын қайта жазып, түпнұсқа, жүйелік өңдегішті (логикалық жоспарда) жойдық. Іс жүзінде, бұл жүйенің сағатын біздің бағдарламамыздың ұзақтығына дейін тоқтатады, ал жүйеде таймерді үзуді қолданатын басқа бағдарламалар бар болса, олар дұрыс жұмысын тоқтатады. Бұл кемшіліктерді жою өте қарапайым: әр процестің сигналына жауап ретінде, екеуі де өңдеушілер жүйелі түрде белсендірілуі үшін процессорды жүйемен байланыстырған жөн. Ұстағыштарды байланыстыру әдісін қарастырыңыз.

Жүйе өңдеушісіне салыстырылатын бағдарлама өңдегішін инициализациялау кезінде, бұрынғы сияқты, жүйе өңдегішінің мекенжайын бағдарламаға сақтап, бағдарлама өңдегішінің мекенжайын үзу векторына орналастырыңыз. Тек өңдегішінің бағдарламасы өзгереді, оның басталуы келесідей болуы керек:

; Жүйемен бірге қолданба өңдегішінің кластері
new_08:
pushf; 0travlyaem стек сөзінде жалаушалар
CS: old_08; B жүйелік өңдегіші
    ; Бағдарлама өңдеушінің жалғасы
қайғы

Бағдарламаны үзуге арналған өңдегіштер

Бағдарламалық үзудің INT пәрменін үзуге обработчика мекенжайы болып табылады операнд вектор бірқатар туындаған. Int командасы, ең алдымен, жүйе құралдарын шақыруға арналған стандартты механизм ретінде қолданылады. немесе басқа бір компьютердің аппараттық басқару үшін жауапты топтар BIOS функцияларын - INT 21h пәрмені көптеген DOS функцияларын қараңыз мүмкіндік береді және INT 10h, INT 13H немесе INT 16h командалары, бері. Мұндай жағдайларда, өңдегіштер дайын жүйесінің бағдарламалық және бағдарламалау міндеті тиісті санымен INT пайдалана отырып, пәрменді қажетті бағдарламалық қамтамасыз ету құралдарын тек қоңырау шалу үшін болып табылады үзу.

Алайда, кейбір ерекше жағдайларда, бағдарламашы өз жүйесімен қызмет көрсететін өз үзіліс ұстағышын жазуы керек. Мысалға, мысалы, сыртқы бағдарламамен қарым-қатынас жасау үшін әдетте 2Ф үзіліс қолданатын резиденттік бағдарламаларды басқару жүзеге асырылады. Әрбір резидентура бағдарламасы, іс-қимыл, оның үлесін орындау арқылы, оның мекен-жайы, бұрын 2Fh вектор болды, және олардың деректер салаларында обработчик сақталған, «алдыңғы» үшін бақылауды өтіп өз қалуына обработчик, бар. Тағы бір мысал - өңдегіштері аппараттық үзудің BIOS ұстап үшін қолма-қол ақша бағдарламалардың ешқайсысы осы үзу пайдаланбаған кезде рет анықтау үшін, және, демек, өңдегіші өзі пайдалана алады тоқтатады.

Ақыр соңында, бағдарлама бағдарламашы тегін векторларының бірін пайдалана алады, тиісті үзілістің өз жұмысын жазады және оны тұрғынға жадында қалдыра алады. Осыдан кейін, кез-келген бағдарлама осы өңдегішті int-пәрменімен шақырады, ол жалпы пайдалану үшін резиденттік бағдарлама болады.

 

Тема курса:  Понятие электронно вычислительной машины и принципы организации ее работы

Тема урока: Аппаратное и программное обеспечение

 

Режимы работы микропроцессорной системы

Как уже отмечалось, микропроцессорная система обеспечивает большую гибкость работы, она способна настраиваться на любую задачу. Гибкость эта обусловлена прежде всего тем, что функции, выполняемые системой, определяются программой (программным обеспечением, software), которую выполняет процессор. Аппаратура (аппаратное обеспечение, hardware) остается неизменной при любой задаче. Записывая в память системы программу, можно заставить микропроцессорную систему выполнять любую задачу, поддерживаемую данной аппаратурой. К тому же шинная организация связей микропроцессорной системы позволяет довольно легко заменять аппаратные модули, например, заменять память на новую большего объема или более высокого быстродействия, добавлять или модернизировать устройства ввода/вывода, наконец, заменять процессор на более мощный. Это также позволяет увеличить гибкость системы, продлить ее жизнь при любом изменении требований к ней.

Но гибкость микропроцессорной системы определяется не только этим. Настраиваться на задачу помогает еще и выбор режима работы системы, то есть режима обмена информацией по системной магистрали ( шине ).

Практически любая развитая микропроцессорная система (в том числе и компьютер) поддерживает три основных режима обмена по магистрали:

  • программный обмен информацией;
  • обмен с использованием прерываний (Interrupts);
  • обмен с использованием прямого доступа к памяти (ПДП, DMA — Direct Memory Access).

Программный обмен информацией является основным в любой микропроцессорной системе. Он предусмотрен всегда, без него невозможны другие режимы обмена. В этом режиме процессор является единоличным хозяином (или задатчиком, Master) системной магистрали. Все операции (циклы) обмена информацией в данном случае инициируются только процессором, все они выполняются строго в порядке, предписанном исполняемой программой.

Процессор читает (выбирает) из памяти коды команд и исполняет их, читая данные из памяти или из устройства ввода/вывода, обрабатывая их, записывая данные в память или передавая их в устройство ввода/вывода. Путь процессора по программе может быть линейным, циклическим, может содержать переходы (прыжки), но он всегда непрерывен и полностью находится под контролем процессора. Ни на какие внешние события, не связанные с программой, процессор не реагирует (рис. 1.11). Все сигналы на магистрали в данном случае контролируются процессором.

Программный обмен информацией.


Рис. 1.11. Программный обмен информацией.

Обмен по прерываниям используется тогда, когда необходима реакция микропроцессорной системы на какое-то внешнее событие, на приход внешнего сигнала. В случае компьютера внешним событием может быть, например, нажатие на клавишу клавиатуры или приход по локальной сети пакета данных. Компьютер должен реагировать на это, соответственно, выводом символа на экран или же чтением и обработкой принятого по сети пакета.

В общем случае организовать реакцию на внешнее событие можно тремя различными путями:

  • с помощью постоянного программного контроля факта наступления события (так называемый метод опроса флага или polling);
  • с помощью прерывания, то есть насильственного перевода процессора с выполнения текущей программы на выполнение экстренно необходимой программы;
  • с помощью прямого доступа к памяти, то есть без участия процессора при его отключении от системной магистрали.

Проиллюстрировать эти три способа можно следующим простым примером. Допустим, вы готовите себе завтрак, поставив на плиту кипятиться молоко. Естественно, на закипание молока надо реагировать, причем срочно. Как это организовать? Первый путь — постоянно следить за молоком, но тогда вы ничего другого не сможете делать. Правильнее будет регулярно поглядывать на молоко, делая одновременно что-то другое. Это программный режим с опросом флага. Второй путь — установить на кастрюлю с молоком датчик, который подаст звуковой сигнал при закипании молока, и спокойно заниматься другими делами. Услышав сигнал, вы выключите молоко. Правда, возможно, вам придется сначала закончить то, что вы начали делать, так что ваша реакция будет медленнее, чем в первом случае. Наконец, третий путь состоит в том, чтобы соединить датчик на кастрюле с управлением плитой так, чтобы при закипании молока горелка была выключена без вашего участия (правда, аналогия с ПДП здесь не очень точная, так как в данном случае на момент выполнения действия вас не отвлекают от работы).

Первый случай с опросом флага реализуется в микропроцессорной системе постоянным чтением информации процессором из устройства ввода/вывода, связанного с тем внешним устройством, на поведение которого необходимо срочно реагировать.

Во втором случае в режиме прерывания процессор, получив запрос прерывания от внешнего устройства (часто называемый IRQ — Interrupt ReQuest), заканчивает выполнение текущей команды и переходит к программе обработки прерывания. Закончив выполнение программы обработки прерывания, он возвращается к прерванной программе с той точки, где его прервали (рис. 1.12).

Здесь важно то, что вся работа, как и в случае программного режима, осуществляется самим процессором, внешнее событие просто временно отвлекает его. Реакция на внешнее событие по прерыванию в общем случае медленнее, чем при программном режиме. Как и в случае программного обмена, здесь все сигналы на магистрали выставляются процессором, то есть он полностью контролирует магистраль. Для обслуживания прерываний в систему иногда вводится специальный модуль контроллера прерываний, но он в обмене информацией не участвует. Его задача состоит в том, чтобы упростить работу процессора с внешними запросами прерываний. Этот контроллер обычно программно управляется процессором по системной магистрали.

Обслуживание прерывания.


Рис. 1.12. Обслуживание прерывания.

Естественно, никакого ускорения работы системы прерывание не дает. Его применение позволяет только отказаться от постоянного опроса флага внешнего события и временно, до наступления внешнего события, занять процессор выполнением каких-то других задач.

Прямой доступ к памяти (ПДП, DMA) — это режим, принципиально отличающийся от двух ранее рассмотренных режимов тем, что обмен по системной шине идет без участия процессора. Внешнее устройство, требующее обслуживания, сигнализирует процессору, что режим ПДП необходим, в ответ на это процессор заканчивает выполнение текущей команды и отключается от всех шин, сигнализируя запросившему устройству, что обмен в режиме ПДП можно начинать.

Операция ПДП сводится к пересылке информации из устройства ввода/вывода в память или же из памяти в устройство ввода/вывода. Когда пересылка информации будет закончена, процессор вновь возвращается к прерванной программе, продолжая ее с той точки, где его прервали (рис. 1.13). Это похоже на режим обслуживания прерываний, но в данном случае процессор не участвует в обмене. Как и в случае прерываний, реакция на внешнее событие при ПДП существенно медленнее, чем при программном режиме.

Понятно, что в этом случае требуется введение в систему дополнительного устройства (контроллера ПДП), которое будет осуществлять полноценный обмен по системной магистрали без всякого участия процессора. Причем процессор предварительно должен сообщить этому контроллеру ПДП, откуда ему следует брать информацию и/или куда ее следует помещать. Контроллер ПДП может считаться специализированным процессором, который отличается тем, что сам не участвует в обмене, не принимает в себя информацию и не выдает ее (рис. 1.14).

Обслуживание ПДП.


Рис. 1.13. Обслуживание ПДП.

Информационные потоки в режиме ПДП.


Рис. 1.14. Информационные потоки в режиме ПДП.

В принципе контроллер ПДП может входить в состав устройства ввода/вывода, которому необходим режим ПДП или даже в состав нескольких устройств ввода/вывода. Теоретически обмен с помощью прямого доступа к памяти может обеспечить более высокую скорость передачи информации, чем программный обмен, так как процессор передает данные медленнее, чем специализированный контроллер ПДП. Однако на практике это преимущество реализуется далеко не всегда. Скорость обмена в режиме ПДП обычно ограничена возможностями магистрали. К тому же необходимость программного задания режимов контроллера ПДП может свести на нет выигрыш от более высокой скорости пересылки данных в режиме ПДП. Поэтому режим ПДП применяется редко.

Если в системе уже имеется самостоятельный контроллер ПДП, то это может в ряде случаев существенно упростить аппаратуру устройств ввода/вывода, работающих в режиме ПДП. В этом, пожалуй, состоит единственное бесспорное преимущество режима ПДП.

 

 

Важнейшей функцией операционной системы является организация рационального использования всех аппаратных и программных ресурсов системы. К основным ресурсам могут быть отнесены: процессоры, память, внешние устройства, данные и программы. Располагающая одними и теми же ресурсами, но управляемая различными ОС, вычислительная система может работать с разной степенью эффективности. Поэтому знание внутренних механизмов операционной системы позволяет косвенно судить о ее эксплуатационных возможностях и характеристиках.

Модель аппаратного обеспечения ПЭВМ с точки зрения ОС

Среди устройств и узлов, входящих в состав компьютера, наиболее важными для выполнения любой программы является оперативная память и центральный микропроцессор. Взаимосвязь между процессором и памятью осуществляется посредством системного интерфейса: шин данных, адреса и управления (рисунок 2.1).

http://bourabai.kz/os/img/image053.gif

Рисунок 2.1 – Модель аппаратного обеспечения ВС

Система ввода-вывода

Система ввода-вывода, т. е. комплекс средств обмена информацией с внешними устройствами, является важнейшей частью архитектуры процессора и машины в целом. К системе ввода-вывода можно отнести и способы подключения к системной шине различного оборудования, и процедуры взаимодействия процессора с этим оборудованием, и команды процессора, предназначенные для обмена данными с внешними устройствами.

Непрерывное совершенствование микропроцессоров и стремление максимально повысить производительность всей вычислительно системы привело к существенному усложнению внутренней организации компьютеров: повышению разрядности шин, появлению внутренних быстродействующих магистралей обмена данными, использованию кэш-буферов для ускорения обмена с памятью и дисками и проч. Если, однако, отвлечься от важных с точки зрения производительности, но несущественных для программиста деталей, то логическую схему современного компьютера можно представить традиционным образом, в виде системной шины (магистрали), к которой подключаются сам микропроцессор и все устройства компьютера (рис. 1.13).

Системная шина представляет собой, в сущности, набор линий — проводов, к которым единообразно подключаются все устройства компьютера. В более широком плане в понятие системной шины следует включить электрические и логические характеристики сигналов, действующих на линиях шины, их назначение, а также правила взаимодействия этих сигналов при выполнении тех или иных операций на шине — то, что обычно называют протоколами обмена информацией. Сигналы, распространяющиеся по шине, доступны всем подключенным к ней устройствам, и в задачу каждого устройства входит выбор предназначенных ему сигналов и обеспечение реакции на них, соответствующей протоколу обмена.

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

рес и, если этот адрес принадлежит памяти, принимает с линий данных поступившие данные и заносит их в соответствующую ячейку памяти. Описанная процедура отражает выполнение процессором команды типа

mov mem,AX

где mem — символическое обозначение ячейки памяти, принадлежащей сегменту данных программы.

Если процессор, выполняя команду типа

mov AX,mem

должен прочитать данное из памяти, он выставляет на линии адресов требуемый адрес и ожидает поступления данных. Устройство управления памятью, расшифровав поступивший адрес и убедившись в наличии такого адреса в памяти, отыскивает в памяти требуемую ячейку, считывает из нее данные и выставляет их на линии данных. Процессор снимает дан-

ные с шины и отправляет их в указанный в команде операнд (в данном случае в регистр АХ).

Описанные процедуры записи и чтения справедливы не только по отношении к памяти; для всех остальных устройств компьютера они выглядят точно так же. За каждым устройством закреплена определенная группа адресов, на которые оно должно отзываться. Обнаружив свой адрес на магистрали, устройство, в зависимости от заданного процессором направления

передачи данных, либо считывает с магистрали поступившие данные, либо, наоборот, устанавливает имеющиеся в нем данные на магистраль.

Все устройства компьютера можно условно разбить на  две категории. Представителем одной категории является видеобуфер, входящий в видеосистему компьютера. Устройство управления видеобуфером настроено на две группы адресов, которые как бы продолжают адреса, относящиеся к оперативной памяти. Действительно, адрес последнего байта оперативной памяти составляет 9FFFFh, а уже следующий адрес AOOOOh является адресом первого байта графического видеобуфера. Графический видеобуфер занимает 64 Кбайт адресного пространства до адреса AFFFFh (реально немного меньше, но в плане рассматриваемого вопроса это не имеет значения). Текстовый видеобуфер расположен на некотором расстоянии от графического и занимает 32 Кбайт, начиная с адреса BSOOOh. Таким образом, адреса оперативной памяти и памяти видеобуфера разнесены и не перекрываются.

Ко второй категории устройств можно отнести все устройства, адреса которых перекрываются с адресами оперативной памяти. Например, за контроллером клавиатуры закреплены два адреса: 60h и 61h. По адресу 60h выполняется чтение кода нажатой клавиши, а адрес 61h используется для управления работой контроллера. И тот, и другой адрес имеются в оперативной памяти и, таким образом, возникает проблема распознавания устройства, к которому происходит обращение. Аналогичная ситуация наблюдается и со многими другими устройствами компьютера. Например, контроллер прерываний (КПП), служащий для объединения сигналов прерываний от всех устройств компьютера и направления их на единственный вход прерывания микропроцессора, управляется через два адреса. Поскольку в состав машины всегда включают два контроллера, для них выделяются две пары адресов. Во всех компьютерах типа IBM PC контроллерам прерываний назначаются адреса 20h-21h и A0h-Alh, которые так же отвечают и некоторым байтам оперативной памяти.

Проблема идентификации устройств с перекрывающимися адресами имеет два аспекта: аппаратный и программный. Идентификация устройств на системной шине осуществляется с помощью сигнала ЧтВУ/ЗпВУ, который генерируется процессором в любой операции записи или чтения. Однако значение этого сигнала зависит от категории адресуемого устройства. При обращении к памяти или видеобуферу процессор устанавливает значение сигнала ЧтОП/ЗпОП. Таким образом осуществляется аппаратное разделение устройств «типа памяти» и устройств «ввода-вывода».

Программное разделение устройств реализуется с помощью двух наборов команд процессора — для памяти и для устройств ввода-вывода. В первую группу команд входят практически все команды процессора, с помощью которых можно обратиться по тому или иному адресу — команды пересылки mov и movs, арифметических действий add, inul и div, сдвигов rol, ror, sal и sar, анализа содержимого байта или слова test и многие другие, фактически в эту группу команды входит большинство команд процессора. Вторую группу команд образуют специфические команды ввода-вывода. В МП 86 их всего две — команда ввода in и команда вывода out.

Наличие двух категорий адресов устройств дает основание говорить о существовании двух адресных пространств — пространства памяти, куда входит сама память, а также видеобуферы и ПЗУ, и пространства вводавывода (пространства портов), куда входят адреса остальной аппаратуры компьютера. При этом, если объем адресного пространства памяти составляет 1 Мбайт (а в защищенном режиме 4 Гбайт), то адресное пространство портов гораздо меньше — его размер составляет всего 64 Кбайт. Эта величина определяется форматом команд ввода-вывода. Адрес адресуемого порта должен быть записан в регистр DX (и ни в какой другой) и, таким образом, максимальное значение этого адреса составляет величину FFFFh. Реально из 64 Кбайт адресного пространства портов используется лишь очень малая часть.

Система прерываний

Система прерываний любого компьютера является его важнейшей частью, позволяющей быстро реагировать на события, обработка которых должна выполнятся немедленно: сигналы от машинных таймеров, нажатия клавиш клавиатуры или мыши, сбои памяти и пр. Рассмотрим в общих чертах компоненты этой системы.

Сигналы аппаратных прерываний, возникающие в устройствах, входящих в состав компьютера или подключенных к нему, поступают в процессор не непосредственно, а через два контроллера прерываний (КПП), один из которых называется ведущим, а второй — ведомым (рисунок 2.2). Два контроллера используются для увеличения допустимого количества внешних устройств. Дело в том, что каждый контроллер прерываний может обслуживать сигналы лишь от 8 устройств. Для обслуживания большего количества устройств контроллеры можно объединять, образуя из них веерообразную структуру.

http://bourabai.kz/os/img/image054.gif

Рисунок 2.2 – аппаратная организация прерываний

К входным выводам IRQ1...IRQ7 и IRQ8...IRQ15 (IRQ — это сокращеие от Interrupt Request, запрос прерывания) подключаются выводы уст ройств, на которых возникают сигналы прерываний. Выход ведущего контроллера подключается к входу INT микропроцессора, а выход ведомого — к входу IRQ2 ведущего. Основная функция контроллеров — передача  сигналов запросов прерываний от внешних устройств на единственный вход прерываний микропроцессора. При этом, кроме сигнала INT, контроллеры передают в микропроцессор по линиям данных номер вектора, который образуется в контроллере путем сложения базового номера, записанного в одном из его регистров, с номером входной линии, по которой поступил запрос прерывания. Номера базовых векторов заносятся в контроллеры автоматически в процессе начальной загрузки компьютера. Для ведущего контроллера базовый вектор всегда равен 8, для ведомого – 70Н. Таким образом, номера векторов, закрепленных за аппаратными прерываниями, лежат в диапазонах 8h...Fh и 70h...77h. Очевидно, что номера векторов аппаратных прерываний однозначно связаны с номерами линий, или уровнями IRQ, а через них – с конкретными устройствами компьютера.

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

Объекты вычислительной системы, принимающие участие в процедуре прерывания, и их взаимодействие показаны на рисунке. 2.3.

http://bourabai.kz/os/img/image055.jpg

Рисунок 2.3 – процедура обслуживания прерывания

Самое начало оперативной памяти от адреса OOOOН до 03FFН отводится под векторы прерываний — четырехбайтовые области, в которых хранятся адреса обработчиков прерываний (рисунок 2.3). В два старшие байта каждого вектора записывается сегментный адрес обработчика, в два младшие — смещение (относительный адрес) точки входа в обработчик. Векторы, как и соответствующие им прерывания, имеют номера, причем вектор с номером 0 располагается, начиная с адреса 0, вектор 1 — с адреса 4, вектор 2 — с адреса 8 и т.д. Вектор с номером и занимает, таким образом, байты памяти от n*4 до n*4+3. Всего в выделенной под векторы области памяти помещается 256 векторов.

Получив сигнал на выполнение процедуры прерывания с определенным номером, процессор сохраняет в стеке выполняемой программы текущее содержимое трех регистров процессора: регистра флагов, CS и IP. Два последних числа образуют полный адрес возврата в прерванную программу. Далее процессор загружает CS и IP из соответствующего вектора прерываний, осуществляя, тем самым, переход на обработчик прерывания, связанный с этим вектором.

Обработчик прерываний всегда заканчивается командой iret (interrupt return, возврат из прерывания), выполняющей обратные действия — извлечение из стека сохраненных там слов и помещение их назад в регистры IP и CS, а также в регистр флагов. Это приводит к возврату в основную программу в ту самую точку, где она была прервана.

В действительности запросы на обработку прерываний могут иметь различную природу. Помимо описанных выше аппаратных прерывания от периферийных устройств, называемых часто внешними, имеются еще два типа прерываний: внутренние и программные.

Внутренние прерывания возбуждаются цепями самого процессора при возникновении одной из специально оговоренных ситуаций, например, при выполнении операции деления на ноль или при попытке выполнить несуществующую команду. За каждым из таких прерываний закреплен определенный вектор, номер которого известен процессору. Например, за делением на 0 закреплен вектор 0, а за неправильной командой — вектор 6. Если процессор сталкивается с одной из таких ситуаций, он выполняет описанную выше процедуру прерывания, используя закрепленный за этой ситуацией вектор прерывания.

Наконец, еще одним чрезвычайно важным типом прерываний являются программные прерывания. Они вызываются командой int с числовым аргументом, который рассматривается процессором, как номер вектора прерывания. Если в программе встречается, например, команда

int 13h

то процессор выполняет ту же процедуру прерывания, используя в качестве номера вектора операнд команды int. Программные прерывания при меняются в первую очередь для вызова системных обслуживающих программ — функций DOS и BIOS.

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

Большая часть векторов прерываний зарезервирована для выполнения определенных действий; часть из них автоматически заполняется адресами системных программ при загрузке системы.

00h —внутреннее прерывание, деление на 0;

0lh —внутреннее прерывание, пошаговое выполнение (при TF=1);

02h —немаскируемое прерывание (вывод NMI процессора);

08h —аппаратное прерывание от системного таймера;

09h —аппаратное прерывание от клавиатуры;

0Eh —аппаратное прерывание от гибкого диска;

10h — программное прерывание, программы BIOS управления видеосистемой;

13h —программное прерывание, программы BIOS управления дисками;

16h —программное прерывание, программы BIOS управления клавиатурой;

1Dh —не вектор, адрес таблицы видеопараметров, используемой BIOS;

 lEh —не вектор, адрес таблицы параметров дискеты, используемой BIOS;

 21h —программное прерывание, диспетчер функций DOS;

 22h —профаммное прерывание, адрес перехода при завершении процесса, используемый     DOS;

 23h —программное прерывание, обработчик прерываний по <Ctrl>/C, используемый DOS;

 25h — программное прерывание, абсолютное чтение диска (функция DOS);

 26h —программное прерывание, абсолютная запись на диск (функция DOS);

 60h...66h — зарезервировано для программных прерываний пользователя;

 68h...6Fh — программные прерывания, свободные векторы;

 70h —аппаратное прерывание от часов реального времени (с питанием от аккумулятора);

 76h —аппаратное прерывание от жесткого диска;

Как видно из таблицы, векторы прерываний можно условно разбить на следующие группы:

векторы внутренних прерываний процессора (0lh, 02h и др.);

векторы аппаратных прерываний (08h...0Fh и 70h...771i);

программы BIOS обслуживания аппаратуры компьютера (10h, 13h, 16h и др.);

программы DOS (21h, 22h, 23h и др.);

адреса системных таблиц BIOS (1Dh, lEh и др.).

Системные программы, адреса которых хранятся в векторах прерываний, в большинстве своем являются всего лишь диспетчерами, открывающими доступ к большим группам программ, реализующих системные функции. Так, видеодрайвер BIOS (вектор 10h) включает программы смены видеорежима, управления курсором, задания цветовой палитры, загрузки шрифтов и многие другие. Особенно характерен в этом отношении вектор 21h, через который осуществляется вызов практически всех функций DOS: ввода с клавиатуры и вывода на экран, обслуживания файлов каталогов и дисков, управления памятью и процессами, службы времени и т.д. Для вызова требуемой функции надо не только выполнить команду int с соответствующим номером, но и указать системе в одном из регист-

ров (для этой цели всегда используется регистр АН) номер вызываемой функции. Иногда для «многофункциональных» функций приходится указывать еще и номер подфункции (в регистре AL).

Обработчики аппаратных прерываний

Обработчики прерываний являются важнейшей составной частью многих компонетов операционной системы. Как было показано в предыдущем разделе прерывания разделяются на внутренние, возникающие в самом микропроцессоре в случае определенных сбоев (попытка деления на 0, несуществующая команда), внешние, приходящие из периферийного оборудования (клавиатура, мышь, диски, нестандартные устройства, подключенные к компь-

ютеру) и программные, являющиеся реакцией процессора на команду INT с тем или иным номером. В прикладных программах приходится обрабатывать, главным образом, внешние и программные прерывания. Общие принципы обслуживания тех и других прерываний одинаковы, однако условия функционирования обработчиков аппаратных прерываний имеют значительную специфику, связанную, главным образом, с тем, что прерывания от аппаратуры приходят в произвольные моменты времени и могут прервать текущую программу в любой ее точке. Обработчик прерывания должен быть написан таким образом, чтобы его выполнение ни в какой степени не отразилось на правильном функционировании текущей (прерываемой) программы.

Рассмотрим схематически структуру и функционирование программного комплекса, включающего собственный обработчик какого-либо аппаратного прерывания (рисунок 2.4).

http://bourabai.kz/os/img/image056.gif

Рисунок 2.4 - Функционирование программного комплекса с обработчиком прерываний

Обработчик прерываний может входить в состав программы в виде процедуры, или просто являться частью программы, начинающейся с некоторой метки (входной точки обработчика) и завершающейся командой выхода из прерывания iret.

Программа, начиная свою работу, прежде всего должна выполнить инициализирующие действия по установке обработчика прерываний. В простейшем случае эти действия заключаются в занесении в соответствующий вектор полного адреса (сегмента и смещения) обработчика. Поскольку обработчик входит в состав программы, его относительный адрес известен; это имя его процедуры или метка входной точки. Что же касается сегментного адреса, то обработчик может входить в сегмент основной части программы, если она невелика по объему и занимает один сегмент, но может образовывать и самостоятельный сегмент. В любом случае в качестве сегментного адреса можно использовать имя соответствующего сегмента.

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

Установив обработчик, программа может приступить к дальнейшей работе. В случае прихода прерывания, процессор сохраняет в стеке флаги и текущий адрес программы, извлекает из вектора адрес обработчика и передает управление на его входную точку. Все время, пока выполняется программа обработчика, основная программа, естественно, стоит. Завершающая обработчик команда iret извлекает из стека сохраненные там данные и возвращает управление в прерванную программу, которая может продолжить свою работу. Последующие прерывания обслуживаются точно так же.

Функции обработчика прерываний зависят от решаемой задачи и назначения того устройства, от которого поступают сигналы прерываний. В случае прерываний от клавиатуры задача обработчика прерываний — принять и сохранить код нажатой клавиши. Прерывания от мыши свидетельствуют о ее перемещении, что требует обновления положения курсора на экране. Если обслуживаемым устройством является физическая установка, то сигнал прерывания может говорить о том, что в установке накоплен определенный объем данных, которые надо перенести из памяти установки в память компьютера. В любом случае обработчик прерываний должен быть программой несложной, для выполнения которой не требуйся много машинного времени.

Рассмотрим схематически структуру и функционирование программного комплекса, включающего собственный обработчик какого-либо аппаратного прерывания (рисунок 2.4).

Обработчик прерываний может входить в состав программы в виде процедуры, или просто являться частью программы, начинающейся с некоторой метки (входной точки обработчика) и завершающейся командой выхода из прерывания iret.

Программа, начиная свою работу, прежде всего должна выполнить инициализирующие действия по установке обработчика прерываний. В простейшем случае эти действия заключаются в занесении в соответствующий вектор полного адреса (сегмента и смещения) обработчика. Поскольку обработчик входит в состав программы, его относительный адрес известен; это имя его процедуры или метка входной точки. Что же касается сегментного адреса, то обработчик может входить в сегмент основной части программы, если она невелика по объему и занимает один сегмент, но может образовывать и самостоятельный сегмент. В любом случае в качестве сегментного адреса можно использовать имя соответствующего сегмента.

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

Установив обработчик, программа может приступить к дальнейшей работе. В случае прихода прерывания, процессор сохраняет в стеке флаги и текущий адрес программы, извлекает из вектора адрес обработчика и передает управление на его входную точку. Все время, пока выполняется программа обработчика, основная программа, естественно, стоит. Завершающая обработчик команда iret извлекает из стека сохраненные там данные и возвращает управление в прерванную программу, которая может продолжить свою работу. Последующие прерывания обслуживаются точно так же.

Функции обработчика прерываний зависят от решаемой задачи и назначения того устройства, от которого поступают сигналы прерываний. В случае прерываний от клавиатуры задача обработчика прерываний — принять и сохранить код нажатой клавиши. Прерывания от мыши свидетельствуют о ее перемещении, что требует обновления положения курсора на экране. Если обслуживаемым устройством является физическая установка, то сигнал прерывания может говорить о том, что в установке накоплен определенный объем данных, которые надо перенести из памяти установки в память компьютера. В любом случае обработчик прерываний должен быть программой несложной, для выполнения которой не требуйся много машинного времени.

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

Поэтому стандартной методикой является сохранение в памяти исходного содержимого вектора и восстановление этого содержимого перед завершением программы.

Хотя и чтение, и заполнение вектора прерываний можно выполнить с помощью простых команд mov, однако предпочтительнее использовать специально предусмотренные для этого функции DOS. Для чтения вектора используется функция с номером 35h. В регистр AL помещается номер вектора. Функция возвращает исходное содержимое вектора в паре регистров ES:BX (легко догадаться, что в ES сегментный адрес, а в ВХ смещение). Для хранения исходного содержимого вектора в сегменте данных предусмотрена двухсловная ячейка old_08. В младшем слове этой ячейки (с фактическим адресом old_08) будет хранится смещение, в старшем (с фактическим адресом old_08+2) — сегментный адрес. Для того, чтобы обратиться к словам, составляющим эту ячейку, приходится использовать описатель word ptr, который как бы заставляет транслятор на время забыть о начальном объявлении ячейки и позволяет рассматривать ее, как два отдельных слова. Если бы мы отвели для исходного вектора две 16-битовые ячейки, например:

old_08_ofTs   dw 0 ;Для смещения

old_08_seg    dw 0 ;Для сегментного адреса

то  к ним можно было бы обращаться без всяких описателей.

Сохранив исходный вектор, можно установить в нем адрес нашего обработчика. Для установки вектора в DOS предусмотрена функция 25h .Она требует указания номера устанавливаемого вектора в регистре AL, а его полного адреса  в паре регистров DS:DX.

Перед завершением программы необходимо поместить в вектор 8 адрес исходного, системного обработчика, который был сохранен в двухсловном поле old_08. Перед вызовом функции 25h установки вектора в регистры DS:DX надо занести содержимое этого двухсловного поля. Эту операцию можно выполнить одной командой Lds, если указать в качестве ее первого операнда регистр DX, а в качестве второго — адрес двухсловной ячейки, в нашем случае old_08.

Рассмотрим стандартные действия по завершению самого обработчика прерываний. Выше уже говорилось, что последней командой обработчика должна быть команда iret, возвращающая управление в прерванную программу. Однако перед ней необходимо выполнить еще одно обязательное действие — послать в контроллер прерываний команду конца прерываний. Дело в том, что контроллер прерываний, передав в процессор сигнал прерывания INT, блокирует внутри себя  линии прерываний, начиная с той, которая вызвала данное прерывание, и до последней  в порядке возрастания номеров IRQ. Таким образом, прерывание, пришедшее, например по линии IRQ6  (гибкий диск) заблокирует дальнейшую обработку прерываний по линиям 6 и 7.

Любой обработчик аппаратных прерываний обязан перед своим завершением снять блокировку в контроллере прерываний,иначе вся система прерываний выйдет из строя. Снятие блокировки осуществляется посылкой команды с кодом 20h в один из двух портов, закрепленных за контроллером прерываний. Для ведущего контроллера эта команда посылается в порт 20h, для ведомого —

в порт A0h. Таким образом, если бы мы обрабатывали прерывания от часов реального времени (линия прерываний IRQ8, вектор 70h, ведомый контроллер), то команда конца прерывания выглядела бы так:

mov AL,20h     ; Команда конца прерывания

out  A0h,AL    ;Пошлем ее в порт ведомого ;контроллера

Указанную последовательность команд иногда называют приказом, или командой EOI (от end of interrupt, конец прерывания).

Рассмотренный пример имеет существенный недостаток. Записав в вектор прерываний 8 адрес нашего обработчика, мы затерли исходное содержимое вектора и тем самым ликвидировали (в логическом плане) исходный, системный обработчик. Практически это приведет к тому, что на время работы нашей программы остановятся системные часы, и если в системе есть какие-то другие программы, использующие прерывания от таймера, они перестанут работать должным образом. Ликвидировать указанный недостаток очень просто: надо «сцепить» наш обработчик с системным так, чтобы в ответ на каждый сигнал прерывания активизировались последовательно оба обработчика. Рассмотрим методику сцепления обработчиков.

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

;Сцепление прикладного обработчика с системным

new_08:

pushf                  ;0тправляем в стек слово флагов

call   CS:old_08  ;B системный обработчик

    ; Продолжение программы обработчика

iret

Обработчики программных прерываний

Программные прерывания вызываются командой int, операндом которой служит номер вектора с адресом обработчика данного прерывания. Команда int используется прежде всего, как стандартный механизм вызова системных средств. Так, команда int 21h позволяет обратиться к многочисленным функциям DOS, а команды int 10h, int 13h или int 16h — к группам функций BIOS, отвечающим за управление теми или иными аппаратными средствами компьютера. В этих случаях обработчики прерываний представляют собой готовые системные программы, и в задачу программиста входит только вызов требуемого программного средства с помощью команды int с подходящим номером.

В некоторых специальных случаях, однако, программисту приходится писать собственный обработчик прерывания, которое уже обслуживается системой. Таким образом, например, осуществляется управление резидентными программами, которые для связи с внешним миром обычно используют прерывание 2Fh. В каждой резидентной программе имеется собственный обработчик этого прерывания, который, выполнив свою долю действий, передает управление «предыдущему», адрес которого находился ранее в векторе 2Fh, и был сохранен обработчиком в своих полях данных. Другой пример — перехват прерываний BIOS в обработчиках аппаратных прерываний с целью обнаружения моментов времени, когда ни одна из наличных программ не использует данное прерывание и, следовательно, сам обработчик может им воспользоваться.

Наконец, прикладной программист может воспользоваться одним из свободных векторов, написать собственный обработчик соответствующего прерывания и оставить его резидентным в памяти. После этого любые программы могут с помощью команды int вызывать этот обработчик, который, таким образом, становится резидентной программой общего пользования.

Резидентные программы

Большой класс программ, обеспечивающих функционирование вычислительной системы (драйверы устройств, оболочки DOS, русификаторы, интерактивные справочники и др.), должны постоянно находиться в памяти и мгновенно реагировать на запросы пользователя, или на какие-то события, происходящие в вычислительной системе. Такие программы носят названия программ, резидентных в памяти (Terminate and Stay Resident, TSR), или просто резидентных программ. Сделать резидентной можно как программу типа .СОМ, так и программу типа .ЕХЕ, однако поскольку резидентная программа должна быть максимально компактной, чаще всего в качестве резидентных используют программы типа .СОМ.

Программы, предназначенные для загрузки и оставления в памяти, обычно состоят из двух частей (секций) — инициализирующей и рабочей (резидентной). В тексте программы резидентная секция размещается в начале, инициализирующая — за ней.

При первом вызове программа загружается в память целиком и управление передается секции инициализации, которая заполняет или модифицирует векторы прерываний, настраивает программу на конкретные ти, так как он известен DOS. Для определения размера резидентной секции ее можно завершить предложением вида

ressize=$-main

где main — смещение начала программы, а при вызове функции 31h в

регистр DX заслать результат вычисления выражения (ressize+10Fh)/16.

Разность $ — main представляет собой размер главной процедуры. Однако перед главной процедурой размещается префикс программы, имеющий размер lOOh байт, который тоже надо оставить в памяти. Далее, при целочисленном делении отбрасывается остаток, т.е. происходит округление результата в сторону уменьшения. Для компенсации этого дефекта можно прибавить к делимому число 15 = Fh. Деление всего этого выражения на 16 даст требуемый размер резидентной части программы в параграфах (возможно, с небольшим кусочком секции инициализации величиной до 15 байт).

Функция 31h, закрепив за резидентной программой необходимую для ее функционирования память, передает управление командному процессору COMMAND.COM, и вычислительная система переходит, таким образом, в исходное состояние. Наличие программы, резидентной в памяти, никак не отражается на ходе вычислительного процесса за исключением того, что уменьшается объем свободной памяти. Одновременно может быть загружено несколько резидентных программ.

Для того, чтобы активизировать резидентную программу, ей надо как-то передать управление и, возможно, параметры. Как правило, активизация резидентной программы осуществляется с помощью механизма прерываний.

Кроме того, специально для взаимодействия с резидентными программами в DOS предусмотрено мультиплексное прерывание 2Fh.

Рассмотрим типичную структуру резидентной программы и системные средства оставления ее в памяти. Как уже отмечалось, резидентные программы чаще всего пишутся в формате -СОМ:

code                 segment

assume CS:text,DS:text

org   lOOh

main                 proc

jmp init          ;Переход на секцию инициализации

;Данные резидентной секции программы

entry:                    ;Точка входа при активизации

;Текст резидентной секции программы

iret

main                 endp

ressize=S-myproc          ; Размер (в байтах) резидентной секции

init                   proc                ;Секция инициализации

mov DX,(ressize+10Fh)/16 .Размер в параграфах

mov AX,3100h     ;Функция «завершить и

int   2lh            ;оставить в памяти»

init                   endp

code                 ends

end  main

 

При первом запуске программы с клавиатуры управление передается на начало процедуры main (первый байт после префикса программы). Командой jmp осуществляется переход на секцию инициализации, в которой, в частности, подготавливаются условия для дальнейшей активизации программы уже в резидентном состоянии. Последними строками секции инициализации вызывается функция 31h, которая выполняет завершение программы с оставлением в памяти указанной ее части. С целью экономии памяти секция инициализации располагается в конце программы и отбрасывается при ее завершении.

Содержательная часть резидентной программы, начинающаяся с метки entry, активизируется, как уже отмечалось выше, с помощью аппаратного или программного прерывания и заканчивается командой iret. Таким образом, резидентная программа имеет по крайней мере две точки входа. После загрузки программы в память командой оператора, вводимой на командной строке, управление передается в точку, указанную в поле завершающего текст программы оператора end (начало процедуры main). Для программ типа .СОМ эта точка входа должна соответствовать самой первой строке программы, идущей вслед за префиксом программы. Поскольку при загрузке программы должна выполниться ее установка в памяти, первой командой программы всегда является команда перехода на секцию инициализации и установки.

После установки в памяти резидентная программа остается пассивной и никак не проявляет своего существования, пока не будет активизирована предусмотренным в ней для этого способом. Эта вторая точка вызова обозначена меткой Entry.

 

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал
Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

5 937 241 материал в базе

Материал подходит для УМК

Скачать материал

Другие материалы

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 23.06.2022 42
    • DOCX 128.5 кбайт
    • Оцените материал:
  • Настоящий материал опубликован пользователем Ахметкалиев Данияр Серикканович. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    • На сайте: 2 года и 6 месяцев
    • Подписчики: 0
    • Всего просмотров: 933
    • Всего материалов: 5

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой