Elektrotehnički fakultet 

Operativni sistemi 1

u Beogradu

Čas 3

Mehanizam prekida

On receipt of the interrupt, the kernel saves its 

current context 

(a frozen image of what the process was doing)

determines the cause of the interrupt, and service the interrupt.

Maurice J. Bach

Primer

: U isto vreme se radi download (u pozadini) i kucanje teksta u 

Wordu.   Ili   svira   muzika   i   bilo   koji   drugi   interaktivni   program   (Word, 

Visual Studio, Eclipse, …)

Struktura OS

DOS:

Teorija

<

Slika CPUa i nekoliko periferija koje su zakačene preko IRQ linija

>

<

Slika 8086ice i kontrolera periferije 8259A

>

Pojmovi

-

Prekid

-

Adresa prekidne rutine, ili kraće prekida (

interrupt pointer

)

-

Tabela adresa prekidnih rutina (

Interrupt vector table

)

-

Dozvola i zabrana izvršenja prekida:  

Interrupt flag

  i

  Trap flag  

PSW registru

Kod 8086ice kada se dogodi prekid, 

hardver

 izvršava sledeću proceduru:

Operativni sistemi 1                Copyright 

 2006 Miloš Milovanović                 

Mart 2006

1 / 21

Elektrotehnički fakultet 

Operativni sistemi 1

u Beogradu

- Određuje se broj prekida N

- Registri PSW, CS i IP se stavljaju na stek u tom redosledu

- Resetuju se bitovi IF i TF iz registra PSW

- Stavlja se sadržaj memorijske lokacije 4*N u registar IP i sadržaj 

lokacije 4*N+2 u registar CS (

interrupt pointer

 se smešta u PC)

Da bi se izvršio povratak iz prekidne rutine, potrebno je izvršiti (softverski) 

naredbu  

IRET

, koja će pokupiti sa steka registre koje je hardver sačuvao 

prilikom obrađivanja prekida.

Zad 0.

 Napisati program na C jeziku koji broji događaje koje je generisala 

tastatura. Broj prekida na koji je zakačena tastatura je 9h. Adresa registra 

podataka tastature je 60h, a kontrolnog registra je 61h. Adresa kontrolnog 

registra kontrolera periferije je 20h.

#include

 <stdio.h>

volatile

 

int

 cntr = 0;

void

 interrupt keyboardISR(){

asm {

    in      al, 60h        

//; Get scan code

}

                

       //;

    

++cntr;

     

         

  //; Process event

                

                //;

    //; Protokol završetak obrade prekida.

    //; Obaveštava se periferija kontroler prekida da je

    //; prekid obrađen

    asm {

        in      al, 61h  

//; Send acknowledgment without

        or      al, 10000000b   

//;   modifying the other 

  //    bits.

        out     61h, al         

//;

        and     al, 01111111b   

//;

        out     61h, al         

//;

Operativni sistemi 1                Copyright 

 2006 Miloš Milovanović                 

Mart 2006

2 / 21

background image

Elektrotehnički fakultet 

Operativni sistemi 1

u Beogradu

  asm {  

cli

push es

push ax

mov ax,0

          mov es,ax

// vraća originalnu rutinu rutinu

push word ptr oldKbdSEG

          pop word ptr es:0026h

          push word ptr oldKbdOFF

          pop word ptr es:0024h

pop ax

pop es

sti

  }

}

void

 doSomething(){

  asm sti

  

for

 (

int

 i = 0; i < 10; ++i) {

  

printf("main %d ", i);

for

 (

int

 j = 0; j< 30000; ++j)

for

 (

int

 k = 0; k < 30000; ++k);

  }

  printf("Tastatura je generisala %d dogadjaja! ", cntr);

}

int

 main(){

  inic();

Operativni sistemi 1                Copyright 

 2006 Miloš Milovanović                 

Mart 2006

4 / 21

Elektrotehnički fakultet 

Operativni sistemi 1

u Beogradu

  doSomething();

  

  restore();

 

  

return

 0;

}

Zad   1.

  Napisati   program   na   C   jeziku   koji   prekida   izvršenje   glavnog 

programa na svakih 5s i ispisuje na ekran odgovarajuću poruku. Prekid od 

timer-a

 se generiše 18.2 puta u sekundi. Ovaj prekid se nalazi na broju 1Ch.

Rešenje:

#include

 <iostream.h>

volatile

 

int

 brojac = 100;

// prekidna rutina

void

 interrupt timer(){

     

if

 (--brojac==0) {

          brojac = 100;

cout << "..........................." << endl;

}

}

unsigned

 oldTimerOFF, oldTimerSEG; 

// stara prekidna rutina

// postavlja novu prekidnu rutinu

void

 inic(){

  asm{

  cli

  push es

  push ax

  mov ax,0   

// inicijalizuje rutinu za tajmer

       mov es,ax

Operativni sistemi 1                Copyright 

 2006 Miloš Milovanović                 

Mart 2006

5 / 21

background image

Želiš da pročitaš svih 21 strana?

Prijavi se i preuzmi ceo dokument.

Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.

Slični dokumenti