• Ei tuloksia

8 9 10

♦MCALL RSUMSCуEXIT $Sу USIGSS y

000000 ibuff: . BLKW 15 ♦

У У

11 000004" OBUFF == IBUFF + 4

12 000036 122 MSG2 : ♦ASCII /RECEIV LOPETTAA.../

13 000022 SIZ2=. -MSG2

14 000060 122 EDSTRGÎ ♦ASCII /RECE IV ON VAS TAANOTTANUT TIEDOTî 15 000120 045 .ASCIZ /%N%8DXN%5D/

16 000133 msgbuf: ♦ BLKB 100.

17 ♦ EVEN

18 ♦ENABL LSB

19 У

20 У

21 У

22 000300 start: RCVDSC y IBUFF У VASTAANOTETAAN 23 000306 012700 MOV ♦ MSGBUFy RO у JA TULOSTETAAN

24 000312 012701 MOV ♦ ED3TRG y Rl У

25 000316 012702 MOV ♦OBUFFyR2 У

26 000322 004767 JSR PC y SEDMSG У

27 000326 QIOW$C 10.WVB y 5 y 1 У У У У•íMSGBUF у 100 ♦ у 40>

28 000334 012700 MOV ♦ OBUFFy RO У KERROTAAN ARVOT

29 000340 012701 MOV ♦ 13.y RI У

30 000344 061020

io $:

ADD (RO)y(RO)i У

31 000346 077102 SOB RI y 10$ У

32 000350 SDAT $C SEND yOBUFF У LÄHETETÄÄN TIETO

33 000356 RSUM$C SEND у HERÄTETÄÄN SEND

34 000364 QIOWSC 10♦WVB y 5 y 1 У У У У<MSG2 y SIZ2 у 40>

35 000372 EXITSS

36 000300" ♦ END START

DRS detected: о

гиAL MEMORY USEDî 1805 WORDS ( 8 PAGES) tMIC MEMORY: 16962 WORDS < 65 PAGES)

■■'SED time: 00:00:40

hv,lp:=:receiv

TIETO

КAHDEL

KK/TKO/PSc 1979-11-15

-23-.5 Keskeytysten käsittely

Keskeytykset ovat kahta perustyyppiä:

- prosessorin aiheuttamat keskeytykset

- ulkoisten laitteiden aiheuttamat keskeytykset.

Seuraavassa käsitellään käyttöjärjestelmän keskeytys­

ten käsittelyä. Käyttäjä voi myös määritellä omia keskeytyspalvelurutiinejaan, mutta niihin ei puututa tässä yhteydessä.

Prosessorikeskeytykset ovat yleensä synkronisia ja ne voidaan käsittää ohjelmiston aiheuttamiksi. Ulkoiset keskeytykset ovat asynkronisia, oheislaitteiden aiheuttamia keskeytyksiä.

Ulkoisilla laitteilla on laitteisto-osoitin laite­

kohtaiseen sanapariin muistissa. Sanapari sisältää prosessorin uuden tilasanan ja laitteen keskeytys pal- veluohjelman osoitteen.

KUVA 2.5 Laitteistokohtainen sanapari

keskeytyspalveluosoite uusi P S W

Keskeytyksen sattuessa ei siis tarvitse käydä lävitse kaikkia mahdollisia keskeytyksen aiheuttajia vaan tiedetään heti, mikä laite keskeytti. Kun prosessori keskeytetään, prosessorin tilasana (Processor Status Word, PS, PSW) ja ohjelmalaskuri (Program Counter, PC) työnnetään pinoon. Uusi PC ja PS otetaan ylläkuvatusta laitekohtaisesta sanaparista, joka si­

jaitsee muistissa keskeytysvektoreille varatulla alueella. Käsky RTI (Return from Interrupt) palaut­

taa alkuperäisen PS:n ja PC:n.

Ulkoisiin keskeytyksiin liittyy prosessorin priori- teettitaso PR4, PR5, PR6 tai PR7. Prioriteettitaso PR4 on näistä matalin ja PR7 korkein. Ulkoiset keskeytykset ovat täten priorisoitavissa ja ne voidaan tarvittaessa peittää; keskeytykset sallitaan vain, jos keskeyttäjän prioriteetti on suurempi kuin prosessorin nykyinen prioriteetti.

KK/TKO/PSc 1979-11-15

-24-Prosessorikeskcytyksiä ei voida peittää, vaan ne käsitellään aina välittömästi. Tärkein proses- sorikeskeytyksen aiheuttaja on käsky EMT (Emulator Trap ) .

Keskeytyksen käsittely käyttöjärjestelmässä suori­

tetaan seitsemän rutiinityypin avulla.

Nämä rutiinityypit ovat :

- Interrupt Service Routines - Trap Service Routines

- The Interrupt Save Routine (INTSV) - The Directive Save Routine (DIRSV) - The Interrupt Exit Routine (INTXT) - The Directive Exit Routine (DIRXT) - The Fork Processor (FORK).

Keskeytysten käsittelyrutiinit voivat olla suori­

tuksessa kolmella eri prioriteettitasolla : priori- teettitasolla 7, keskeytyksen aiheuttajan prioriteet­

titasolla ja Fork-tasolla 1. prioriteetitasolla 0.

Toimenpiteet, joihin keskeytyksen sattuessa ryhdytään, riippuvat keskeytyksen lajista ja siitä, missä systeemin tilassa oltiin, kun keskeytys sattui.

Systeemin tilaa osoittaa STKDP (Stack Depth Indica­

tor):

STKDP = 1 : käyttäjätilassa STKDP <= 0 : systeemitilassa.

Pääsääntöisesti prosessorikeskeytyksiä ilmenee vain käyttäjätilassa, mutta laitekeskeytyksiä sattuu sekä käyttäjä- että systeemitilassa.

Keskeytysten käsittelytapa ratkaistaan seuraavasti :

1 Käyttäjä

-L -L d .

Systeemi

Ulkoinen 1 2

Prosessori 3 4

Keskeytys :

KK/TKO/PSc 1 979-1 1-1 5

-25-(1) Käyttäjätilassa tapahtuva ulkoinen keskeytys

- Prosessorin tilasana (PS) ja ohjelmalaskuri (PC) työnnetään pinoon.

- Aloitetaan keskeytys palvelurut iini .

- Jos keskeytyksen palvelu kestäisi yli 100 mikrosekuntia (järjestelmän konventio), ei koko keskeytyksen käsittelyä voida hoitaa prioriteettitasoila 7 eli keskeytykset kiel­

lettynä, vaan on siirryttävä keskeytyksen aiheuttajan prioriteettitasolle. Tämä tapahtuu rutiinin Interrupt Save (IU TSV) avulla. INTSV tallettaa rekisterit RЦ ja R5, dekrementoi STKDP:n arvoa, vaihtaa pinon systeemipinoksi, jos STKDP:n arvo on nolla, ja lataa uuden prioriteettiarvon, joka annetaan INTSV:n kutsussa.

(2) Systeemitilassa tapahtuu ulkoinen keskeytys

- Hoidetaan kuten (1). INTSVrssä ei kuitenkaan tarvitse koskaan vaihtaa pinoa, koska ollaan jo systeemitilassa.

(3) Käyttäjätilassa tapahtuu prosessorikeskeytys

- Prosessorin tilasana (PS) ja ohjelmalaskuri (PC) työnnetään pinoon.

- Aloitetaan keskeytyspalvelurutiini .

- Jos keskeytys on käsky EMT, työnnetään sys­

teemikutsun (direktiivin) parametrit käyttäjän pinoon ennen EMT:n suorittamista.

- Keskeytyspalvelurutiini kutsuu Directive Save rutiinia (DIRSV), joka suorittaa periaatteessa samat toimenpiteet kuin IЫ T S V, mutta tallettaa kaikki rekisterit.

(4) Systeemitilassa tapahtuu prosessorikeskeytys Vain kaksi keskeytystyyppiä ovat sallittuja:

TRAP-käsky ja jännitehäiriö.

TRAP-käsky simuloi FORK-prosessin luomista ja varmistaa systeemin tietokantojen käsittelyn pe­

räkkäisesti. Jännitehäiriö on itseasiassa ul­

koinen keskeytys, joka ei ole koskaan peitettävissä ja käsitellään siksi kuten proses­

sorikeskeytys. Kiellettyjen keskeytysten sat­

tuessa järjestelmän toiminta lopetetaan. TRAP- käsky n ja jännitehäiriön käsittelyyn ei niiden erikoistapauksen luonteen vuoksi puututa tässä.

KK/TKÛ/PSc 1979-11-15

-26-Pal ve lua odottavien keskeytysten lukumäärän yläraja on myös riippuvainen keskeytyslajista. Proscs- sorikeskeytyksiä voi olla palvelua jonottamassa vain yksi, koska prosessorikeskeytys tapahtuu pääsääntöisesti käyttäjätilasta ja järjestelmä on käyttäjätilassa vain, jos systeemitilassa ei ole mitään tekemistä. Systeemitilassa voi tapahtua vain ulkoisia keskeytyksiä. Palveltavien keskeytysten jonon pituus on siis käyttäjätilassa korkeintaan yk­

si, mutta systeemitilassa useampiakin keskeytyksiä voi olla odottamassa.

Systeemitilassa on useampien peräkkäisten keskeytys­

ten käsittelyn ongelmat rekursion ja tietokantojen suhteen ratkaistu järjestämällä operaatiot pe­

räkkäisiksi. Systeemin tietokannoilla tarkoitetaan järjestelmään kiinteästi kuuluvia tietorakenteita, jotka sisältävät tiedot prosesseista, muistin käytöstä ja oheislaitteista.

Järjestelmän tavoitteena on toimia keskeytettävissä mahdollisimman suuren osan ajasta. Järjestelmä ei ole keskeytettävissä, jos keskeytystä käsitellään prioriteettitasolla 7, keskeyttäjän prioriteetti on alempi kuin suoritettavan keskeytyksen prioriteetti tai systeemi päivittää tietokantaansa, jonka kon- sistenssia ei voida ylläpitää kieltämättä keskeytyk­

siä.

Usein keskeytysten käsittely vaatii enemmän aikaa kun edellä mainittu 100 mikrosekunttia. Kun prosessi on vaihtanut prioriteettinsä keskeyttäjän prioriteetti- tasolle, se voi jatkaa suoritustaan tällä tasolla 500 mikrosekuntia. Työväline, jolla keskeytystenkäsitte- lyrutiinit jaetaan ei-keskeytettäviin ja keskeytet­

täviin osiin, on FORK PROCESSOR.

Fork on sisäinen aliohjelma, joka järjestää systeemin tietokantoihin tapahtuvat operaatiot peräkkäisiksi.

Peräkkäisrakenteena käytetään aliohjelmaan liittyvää listaa, FORK LIST, jota käsitellään fifo-periaat- teella.

Keskeytysten käsittelyohjelmille asetetaan seuraavat vaatimukset: muut rekisterit, paitsi R4 ja R5 on säilytettävä ja palautettava, jos niitä käytetään, keskeytyksettä voidaan suorittaa korkeintaan 20 käskyä ja kaikki muutokset systeemin tietokantoihin suoritetaan FORK PROCESSORin kautta. Keskeytyksen käsittelyohjelman on kutsuttava FORKia, kun se haluaa siirtyä keskeytettävästä tilasta ei-keskeytettävään tilaan tai muuttaa systeemin tietokantaa.

KK/TKO/PSc 1979-11-15

-27-FORKin kutsuminen tapahtuu IЫ T S V : n kautta. FORK tar­

vitsee myös erityisen FORK BLOCKin, jonka se liittää FORK LISTaan. FORK LIST on siis lista niistä sys- teemirutiineista, jotka odottavat suorituksensa päättämistä tai pääsyä systeemin tietokantoihin.

Itseasiassa FORK LIST on toissijainen keskeytysjono, jota käsitellään fifо-periaatteella silloin, kun sys- teemipino on tyhjä. FORK BLOCK sisältää kutsuvan prosessin R4,R5 ja PC:n, jotka tiedot riittävät prosessin uudelleen käynnistämiseksi. FORK sijoittaa FORK BLOCKin FORK LISTaan ja kutsuu INTXTiä.

Systeemitilasta poistuminen tapahtuu keskeytyslajista riippuen joko rutiinin Interrupt Exit (INTXT) tai Directive Exit (DIRXT) kautta. Poistumisrutiinit poistavat peräkkäin kaikki alkiot systeemipinosta ja sen jälkeen FORK LISTasta. Järjestelmän pyrkimyksenä on saattaa kaikki keskeneräiset työt päätökseen niin pian kuin mahdollista. Kun systeemipino ja FORK LIST on käsitelty palataan käyttäjätilaan.

INTXT inkrementoi STKDP:n, palauttaa rekisterit R4 ja R5 ja suorittaa paluun. Jos paluun pitäisi tapahtua käyttäjätilaan, tarkistetaan ensin, onko FORK LIST tyhjä. Jos FORK-lista ei ole tyhjä, talletetaan re­

kisterit R0 - R3 ja kutsutaan DIRXTiä.

DIRXT käynnistää FORK LISTassa olevat työt uudelleen yksitellen, valitsee uuden suoritettavan prosessin, jos ajoitusosoitin (rescheduling pointer, RQSCH) on asetettu ja palaa korkeimman prioriteetin omaavaan prosessiin, jonka tiedot löytyvät systeemipinosta.

Käyttöjärjestelmän rakenne on luonteeltaan pe­

räkkäinen, joten erityisiä synkronointimekanismeja ei tarvita. Rutiinit, jotka on laadittu järjestelmän konventioiden mukaisesti suorittavat systeemin tietokannan päivitykset peräkkäin, eikä niiden tar­

vitse erikseen huolehtia tietokannan varaamisesta yk­

sityiseen käyttöönsä.

KK/TKO/PSc 1979-11-15

-28-KUVA 2 .6 Keskeytysten käsittely kaaviona

keskeytys

yli 100ys

<y l L ä tarvitaa

INTXT/DIRXT keskeytyksen

käsittely PRO

kutsutaan INTSV/DIRSV

kutsutaan FORKia

keskeytyksen käsittely PR laite keskeytyksen käsittely PR7

tulo palvelu--rutii niin

< RT1 )

KK/TKU/PSc 1979-11-15

-29-.6 Systeemikutsut

Systeemikutsuilla (sys teemidirekt iiveillä) tarkoite­

taan käskyjä, joilla prosessi pyytää käyttöjärjestel­

mältä palveluja.

Systeemikutsu on makro, jolla on mahdollisesti ar­

gumentteja .

Systeemikutsujen toteutus koostuu kahdesta osasta : 1. Parame tril ohkon (Directive Parameter Block, DPB)

luominen.

2. EMT 377 - käskyn suoritus, joka aiheuttaa prosessorikeskeytyksen, jonka käyttöjärjestelmä palvelee.

Systeemikutsun parametrilohko sisältää kutsun tunnis­

tamiseksi tarvittavat tiedot ja muut mahdolliset ar­

gumentit. DPB voidaan tallettaa pinoon tai prosessin data-alueelle.

KUVA 2.7 Systeemikutsun parametrilohko

DPBSZ DIC

direktiivin argumentit

DPBSZ

DPB: n koko DIC

Direktiivin identifikaatio koodi

Direktiivin identifikaatiokoodi, DIC, on aina pariton luku. Jos DPB luodaan prosessin data-alueelle, sen osoite työnnetään pinoon direktiivin kutsussa. Jos DPB työnnetään kokonaan pinoon, jää pinon päällimmäiseksi sana, joka sisältää DICin. DIC on aina pariton, kun taas osoite on aina parillinen, joten pinon päällimmäinen sana sisältää aina tiedon parametrilohkon sijainnista.

KK/TKO/PSc 1979-11-15

-30-Direktiivin identifikaatiokoodille, DICille, varattu tila, 1 tavu, rajoittaa mahdollisten direktiivien määrän 128 : aan. Tällä hetkellä niistä on käytetty hieman yli 50.

Direktiivin kutsu on muotoa : XXXX$Y.

XXXX korvataan direktiivin nimellä ja Y määrittelee direktiivin muodon . Direktiiveistä on yleensä toteu­

tettu kolme erilaista muotoa :

Y muoto

tyhjä DPB prosessin data-alueella, direktiivin suoritus

DIR$ direktiivillä S DPB pinossa

C DPB pinossa data-alueella

XXXX$-muoto vain luo direktiivin parametrilohkon, muoto on siis tarkoitettu käytettäväksi data-alueella määrittelynä. XXXX$-muoto on erityisen hyödyllinen, jos samaa direktiiviä käytetään useamman kerran.

Makron suoritus tapahtuu koodialueella olevan DIR$-makron avulla, joka suorittaa direktiivin prosessoinnin toisen osan : EMT 377 - käskyn.

XXXX$S-muoto työntää direktiivin parametrilohkon pi­

noon ja suorittaa EMT 377 - käskyn. XXXX$S-muoto luo DPB : n vasta suoritusaikana, kun muut muodot luovat sen jo käännösvaiheessa. Jos prosessin on oltava vapaakäyntinen, on direktiiveistä käytettävä XXXX$S- muotoja.

XXXX$C-muoto tuottaa direktiivin parametrilohkon erilliseen ohjelmasektioon $DPB$$. DPB: n luomisen jälkeen palataan kutsussa määriteltyyn ohjelmasek- tioon, työnnetään DPB: n osoite pinoon ja suoritetaan EMT 377 - käsky. XXXX$C-muodon käyttö on suositelta­

vaa, mikäli ohjelman ei tarvitse olla vapaakäyntinen ja makro suoritetaan vain kerran.

KK/TKO/PSc 1 979-1 1-1 5

-31-ESIME RKKI 2.4: Systeemikoraento jen eri muodot

Prosessit DIRE, DIRES ja DIREC havainnollistavat sitä, miten eri muodot laventuvat käännösvaiheessa, eli miten eri systeemikutsut itseasiassa on toteutet­

tu .

Kaikki ohjelmat kirjoittavat rivin tekstiä rivikir- joittimelle käyttäen QlO-makroa.

QIO$-muodolla luodaan direktiivin parametrilohko ohjelman data-alueelle ja direktiivin prosessoinnin toinen osa, EMT 377 -käsky suoritetaan DIR$-direlctiivillä.

QlU$S-muoto työntää parametrit pinoon ja suorittaa lopuksi EMT 377 -käskyn.

QIO$C-muoto taas luo parametrilohkon omaan oh je 1- masektioonsa ja parametrilohkon osoite työnnetään pi­

noon ennen EMT 377 -käskyn suoritusta.

Ohjelmalistauksessa ne rivit, joiden alussa on rivi- numerointi, ovat varsinaisia ohjelmarivejä.

Rivinuinerottomat rivit ovat kääntäjän tuottamaa koodia.

1

MACRO МНЮ 03-0СТ-79 13Î38 PAGE 1 LIITE 2-1

SYSTEEMIDIREKTIIVI QI0$

.TITLE DIRE