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