SOCSHoofdstuk 4Besturingssystemen
InhoudInleidingProgrammatoestandswoordProgramma-onderbrekingenInvoer en uitvoer Randapparaten In- en uitvoer-organisatievormen Randapparaat-besturingsroutines (stuurprogrammas)ProcessortoestandenMultiprogrammatieSoorten BesturingssystemenTaken van een besturingssysteemKosten en Baten
Invoer en uitvoerBesturingssysteemBesturen van Randapparaten Opdrachten geven, PO opvangen, fouten GebruikersprogrammaHoog-niveau opdrachtenLEZ (= complexe operatie)Toetsaanslagen codeBlankos, return-toets, , BackspaceOmzetten naar decimaal getal (ev. 10-complement)Tonen op scherm (echo)
Randapparaten(Mechanisch gedeelte)Elektronisch gedeelte = Bestuurder (Controller, Adapter) Insteekkaart Vaak meerdere apparaten besturen
RandapparatenCVOSchijf bestuurderBestuurder van drukker
Geheugen
Geheugen- bestuurderBus
RandapparatenToestandspoort (Pt)Toestand v. (bestuurder) randapparaat (LEZEN)Opdracht en gegevenspoort (Pog)Opdracht aan bestuurder geven (SCHRIJVEN)Gegevens van (bestuurder) apparaat ophalen (LEZEN)
RandapparatenLezen/schrijven uit/in poorten Twee methodes: Speciale instructies Twee verschillende adresruimtes: Geheugenregisters Poorten van randapparaten Inpassing in het geheugen Slechts 1 adresruimte
RandapparatenSpeciale instructiesINV Ri,Pxxxx (INVoer) Ri PxxxxUTV Rj,Pyyyy (UiTVoer) Pyyyy Rj Pxxxx P0, P1, , P9998, P9999
8199i9xxxx8299j9yyyy Afspraak: Pt : t = even, Pog = Pt+1
RandapparatenInpassing in het geheugenPoorten hebben een geheugenadres (vb. 9900..9909)Voordeel: geen speciale instructies nodig HIA Ri,xxxx BIG Rj,yyyyNadeel: minder geheugen beschikbaar
RandapparatenLezen/Schrijven speciale registers (poorten)Inpassing in het centrale geheugen
0000
98999900990199099910
9999
RandapparaatToestandspoort (Pt) Toestand van het randapparaat Alleen uitlezen
WaardeNaamVerklaring0000000000KlaarBestuurder klaar voor nieuwe opdracht0000000001BezigToestel is bezig met uitvoering van een opdracht0000000002GegevensEr zijn gegevens beschikbaar in de gegevenspoort9999999999FoutEr heeft zich een fout voorgedaan
RandapparaatKlaarGegevensBezigFout
RandapparaatFout:Onbestaande/foutieve opdrachtOpdracht gegeven terwijl apparaat nog bezig isApparaat heeft nieuwe gegevens terwijl vorige nog niet uitgelezen zijnFout in het apparaat: Vb. papierlade leeg, inktpatroon leeg,
RandapparaatSommige overgangen: PO-aanvraag Interventie van het CVO gewenst
CVO moet gegevens inlezen (beschikbaar zonder opdracht)GegevensKlaarCVO moet gegevens inlezen(beschikbaar na opdracht)GegevensBezigCVO mag nieuwe opdracht gevenKlaarBezigCVO moet fout herstellen (herinitialisatie)Fout???
RandapparaatINV R0,P2
UTV R1,P3
INV R2,P1
UTV R3,P0INV R0,P2
RandapparaatINV R0,P2
UTV R1,P3
INV R2,P1
UTV R3,P0UTV R1,P30000000000
RandapparaatINV R0,P2
UTV R1,P3
INV R2,P1
UTV R3,P0INV R2,P10000000001
RandapparaatINV R0,P2
UTV R1,P3
INV R2,P1
UTV R3,P0UTV R3,P000000000000000000000Niet toegelaten! (P0 = toestandspoort)0000000088
Lezen/Schrijven poortenTwee C-functies: int getPort(int poortnr) void putPort (int poortnr, int waarde)Voorbeeld: a = getPort(0); // lees poort P0 in putPort (1, b); // kopieer b in poort P1Constanten: #define KLAAR 0 #define BEZIG 1 #define GEG 2 #define FOUT -1C
PO-routinePO-routine voorstellen als ( C): interrupt po_routine() {
}CBewaar accumulatorenHerstel accumulatorenKTOi.p.v. KTG
In- en uitvoer organisatievormenGeprogrammeerd (met actief wachten)M.b.v. programma-onderbrekingenD.m.v. directe geheugentoegangM.b.v. speciale invoer/uitvoer-processorenM.b.v. satelliet-computers
Geprogrammeerde in/uitvoerAlle gegevenstransport via de processorProcessor synchroniseert met randapparaatNieuwe opdracht mag slechts gegeven als toestand = KLAARGegevens kunnen slechts uitgelezen worden als toestand = GEGEVENS (GEG)Wachten tot juiste toestand Actief wachten = continu testen
Geprogrammeerde in/uitvoerint Pt, Pog, opdracht, geg;Pt = 6; Pog = 7;opdracht = ;
/* geven van opdracht */while (getPort(Pt) != KLAAR);putPort(Pog, opdracht);
/* lezen van gegevens */while (getPort(Pt) != GEG);geg = getPort(Pog);Alleen als bestuurder klaar is voor een opdracht!Alleen als gegevens beschikbaar zijn!
Geprogrammeerde in/uitvoerint Pt, Pog, opdracht, geg;Pt = 6; Pog = 7;opdracht = ;
/* geven van opdracht */while (getPort(Pt) != KLAAR);putPort(Pog, opdracht);
/* lezen van gegevens */while (getPort(Pt) != GEG);geg = getPort(Pog);
Geprogrammeerde in/uitvoerCVO Randapparaat klaar bezig gegevensOpdracht gevenGegevens inlezenToestand uitlezen
Geprogrammeerde in/uitvoerint Pt, Pog, opdracht, geg;Pt = 6; Pog = 7;opdracht = ;
/* geven van opdracht */while (getPort(Pt) != KLAAR);putPort(Pog, opdracht);
/* lezen van gegevens */while (getPort(Pt) != GEG);geg = getPort(Pog);MEVA Pt,6MEVA Pog,7MEVA KLAAR,0MEVA GEG,2
opd:
Geprogrammeerde in/uitvoerint Pt, Pog, opdracht, geg;Pt = 6; Pog = 7;opdracht = ;
/* geven van opdracht */while (getPort(Pt) != KLAAR);putPort(Pog, opdracht);
/* lezen van gegevens */while (getPort(Pt) != GEG);geg = getPort(Pog);MEVA Pt,6MEVA Pog,7MEVA KLAAR,0MEVA GEG,2
LUS1:INVR0,PVGL.wR0,VSPNGEL,LUS1
opd:
Geprogrammeerde in/uitvoerint Pt, Pog, opdracht, geg;Pt = 6; Pog = 7;opdracht = ;
/* geven van opdracht */while (getPort(Pt) != KLAAR);putPort(Pog, opdracht);
/* lezen van gegevens */while (getPort(Pt) != GEG);geg = getPort(Pog);MEVA Pt,6MEVA Pog,7MEVA KLAAR,0MEVA GEG,2
LUS1:INVR0,PVGL.wR0,VSPNGEL,LUS1HIAR0,opdUTVR0,P
opd:
Geprogrammeerde in/uitvoerint Pt, Pog, opdracht, geg;Pt = 6; Pog = 7;opdracht = ;
/* geven van opdracht */while (getPort(Pt) != KLAAR);putPort(Pog, opdracht);
/* lezen van gegevens */while (getPort(Pt) != GEG);geg = getPort(Pog);MEVA Pt,6MEVA Pog,7MEVA KLAAR,0MEVA GEG,2
LUS1:INVR0,PVGL.wR0,VSPNGEL,LUS1HIAR0,opdUTVR0,P
LUS2:INV R0,PVGL.w R0,VSP NGEL,LUS2 opd:
Geprogrammeerde in/uitvoerint Pt, Pog, opdracht, geg;Pt = 6; Pog = 7;opdracht = ;
/* geven van opdracht */while (getPort(Pt) != KLAAR);putPort(Pog, opdracht);
/* lezen van gegevens */while (getPort(Pt) != GEG);geg = getPort(Pog);MEVA Pt,6MEVA Pog,7MEVA KLAAR,0MEVA GEG,2
LUS1:INVR0,PVGL.wR0,VSPNGEL,LUS1HIAR0,opdUTVR0,P
LUS2:INV R0,PVGL.w R0,VSP NGEL,LUS2INV R0,Popd:
Geprogrammeerde in/uitvoerMEVA Pt,6MEVA Pog,7MEVA KLAAR,0MEVA GEG,2
LUS1:INVR0,PVGL.wR0,VSPNGEL,LUS1HIAR0,opdUTVR0,P
LUS2:INV R0,PVGL.w R0,VSP NGEL,LUS2INV R0,Popd:
Geprogrammeerde in/uitvoerVoorbeeld: Scherm Toestandspoort = P2; Opdrachtpoort = P3
OpdrachtBetekenis1000000cccDruk een letter af op het scherm ccc: ASCII voorstelling van de letter
Geprogrammeerde in/uitvoerchar zone[100] = { v, };int n = 100;int idx = 0;int cmd;
do {while (getPort(2) != KLAAR);cmd = 1000000000 + zone[idx++];putPort (3, cmd);} while (idx < n);HIA.w R2,0 LUS: INV R0,P2VGL.w R0,VSP NGEL,LUSHIA R1,OPDROPT R1,ZONE(R2+)UTV R1,P3VGL R2,NVSP KL,LUSOPDR:1000000000 N:100ZONE:00000000860000000111| cmd R1; idx R2
Geprogrammeerde in/uitvoerHIA.w R2,0 LUS:INV R0,P2VGL.w R0,VSP NGEL,LUSHIA R1,OPDROPT R1,ZONE(R2+)UTV R1,P3VGL R2,NVSP KL,LUSOPDR:1000000000 N:100ZONE:00000000860000000111
Geprogrammeerde in/uitvoerPerformantieActief wachtenEerste letterTweede letterActief wachtenActief wachtenDerde letterScherm: 1000 tekens/sDrama: 1 MIPSNuttig:5/1000 = 0,5 %
Geprogrammeerde in/uitvoer100 letters 100 ms1 MIPS computer: 0,5 % nuttig gebruik CVO10 MIPS computer: 0,05 % nuttig gebruik100 MIPS computer: 0,005% nuttig gebruik
Geprogrammeerde in/uitvoerVoorbeeld 2: inlezen van toetsaanslagen Geen opdracht nodig Toetsaanslag: Pt == GEGEVENS Aanduiding toets in Pog Performantie? Gebruiker: 5 letters/s 1 letter / 200 ms 1 MIPS machine Inlezen toetsaanslag + organ. lus < 10 bevelen Rendement < 0,005 %
Programma-onderbrekingenCVO test niet voortdurend de toestandspoortBestuurder van randapparaat:Meldt aan CVO wanneer klaar met opdracht, gegevens beschikbaar, fout, Geen actief wachten meer!Toepassing: gegevensdebiet eerder laagZelfde voorbeeld:Scherm100 letters afbeelden1ste letter via vorige methode
Programma-onderbrekingenchar zone[100] = { v, };int aantal = 100;int idx = 0;main (){int cmd; /* eerste letter */while (getPort(2) != KLAAR);cmd = 1000000000 + zone[idx++];putPort(3, cmd);/* doe iets anders */}/* volgende letters */interrupt po_rout4 (){int cmd;/* bewaar accum. */ if (getPort(2) == KLAAR) {if (idx < aantal) {cmd = 1000000000 + zone[idx++];putPort (3, cmd);}} else { /* fout */ }/* herstel accum. */ }
Programma-onderbrekingeninterrupt po_rout4 (){int cmd;/* bewaar accumulatoren */if (getPort(2) == KLAAR) {if (idx < aantal) {cmd = 1000000000 + zone[idx++];putPort (3, cmd);}} else { /* fout */ }/* herstel accumulatoren */}PO_R4:BIG R0,BEWAARBIG R5,BEWAAR+1BIG R6,BEWAAR+2INV R0,P2VGL.w R0,VSP NGEL,FOUTHIA R6,IDXVGL R6,AANTALVSP GEL,EINDEHIA R5,OPDROPT R5,ZONE(R6+)UTV R5,P3BIG R6,IDXEINDE:HIA R0,BEWAARKTO| cmd R5; idx R6
Programma-onderbrekingenPO_R4:BIG R0,BEWAARBIG R5,BEWAAR+1BIG R6,BEWAAR+2INV R0,P2VGL.w R0,VSP NGEL,FOUTHIA R6,IDXVGL R6,AANTALVSP GEL,EINDEHIA R5,OPDROPT R5,ZONE(R6+)UTV R5,P3BIG R6,IDXEINDE:HIA R0,BEWAARKTO
Programma-onderbrekingenCVO gebruikersprogr. PO Schermbestuurder klaar bezigOpdracht gevenNuttig werkToestand uitlezenLetter afbeelden
Programma-onderbrekingenPerformantie Extra overhead door PO Bewaar R0, R5, R6 Herstel R0, R5, R6 Index Idx in geheugen bewaren 17 instructies / letter 17 s Scherm: 1 ms / letter Overige tijd: 983 s besteden aan de uitvoering van een ander programma = 983 instructies!
Programma-onderbrekingenPerformantieIets andersEerste letterTweede letterDerde letterScherm: 1000 tekens/sDrama: 1 MIPSIets andersIets anders
Programma-onderbrekingenNiet voor apparaten met hoog debietNa KTO, onmiddellijk een nieuwe POGeen tijd om iets anders te doenRisico dat PO-routine te lang duurt en gegevens verloren gaan
Transport via CVOCVOSchijf bestuurderToestenbord- bestuurder
Geheugen
Geheugen- bestuurder
Transport via CVOCVOSchijf bestuurderScherm- bestuurder
Geheugen
Geheugen- bestuurder
Directe geheugentoegangDGTEngels: DMA (Direct Memory Access)Optimisatie van vorige schemaCVO geeft opdracht aan bestuurderBestuurder zorgt zelf voor het transport van/naar het geheugenNa transport: Bestuurder PO-aanvraag
Directe geheugentoegangCVOSchijf bestuurderBestuurder van drukker
Geheugen
Geheugen- bestuurderLezen OpdrachtTransport
Directe geheugentoegangCVOSchijf bestuurderBestuurder van drukker
Geheugen
Geheugen- bestuurderSchrijven OpdrachtTransport
Directe geheugentoegangKamSpoorSectorCilinder (= alle sporen voor bep. positie kam)Lezen/Schrijven: 2 stappenPositioneer kam (+ selecteer kop)Lees/Schrijf # opeenvolgende sectorenSchijf:
Directe geheugentoegangVoorbeeld: DRAMA-Schijf Toestandspoort = P6; Opdrachtpoort = P7 300 cilinders elke cilinder: 40 sporen (40 koppen) elk spoor: 50 sectoren elke sector: 100 getallen van 10 cijfers Alfanumerische informatie (3 cijfers/letter) Per sector 100 getallen 3 letters/getal 300 letters 1000 letters inlezen 4 opeenvolgende sectoren
Directe geheugentoegangOpdrachten voor de schijfbestuurder:
OpdrachtBetekenis100ttt0cccPositioneer kam op cilinder ccc en activeer lees/schrijfkop ttt200lll0sssLees lll opeenvolgende sectoren vanaf sector sss500000gggggggg is het adres van de DGT-geheugenzone
Directe geheugentoegangint inlezen;main(){/* positioneer kam */int cmd = 1000000000 + kop * 10000 + cil;while (getPort(6) != KLAAR);putPort (7, cmd);inlezen = 1;/* doe iets anders */}MAIN:HIA R5,KOPVER R5,TDZDOPT R5,CILOPT R5,P_OPDLUS:INV R0,P6VGL.w R0,VSP NGEL,LUSUTV R5,P7HIA.w R0,1BIG R0,INLEZEN| doe iets anders TDZD:10000KOP:13CIL:37P_OPD:1000000000
Directe geheugentoeganginterrupt po_rout6() {/* bewaar accum. */ if (getPort(6) == KLAAR) {if (--inlezen == 0) lees( );else /* anders */ } else { /* fout */ }/* herstel accum. */ }void lees ( ){/* geef &dgt_zone door *//* geef lees opdracht */}PO_R6: | bewaar RiINV R0,P6VGL.w R0,VSP NGEL,FOUTHIA R0,INLEZENAFT.w R0,1BIG R0,INLEZENVSP NNUL,ANDERSSBR LEESSPR EINDEANDERS:EINDE: | herstel RiKTOFOUT:
Directe geheugentoegangvoid lees ( ) {/* geef & dgt_zone door */int cmd = 5000000000 + (int) &zone;putPort(7,cmd);/* geef lees-opdracht */if (getPort(6) == KLAAR) {cmd = 2000000000 +aantal * 10000 +sector;putPort (7,cmd);} else { /* fout */ }}LEES:HIA R5,D_OPDOPT.a R5,DGT_ZONEUTV R5,P7INV R0,P6VGL.w R0,VSP NGEL,FOUTHIA R5,AANTALVER R5,TDZDOPT R5,SECTOROPT R5,L_OPDUTV R5,P7KTGD_OPD:5000000000L_OPD:2000000000TDZD:10000DGT_ZONE:RESGR 400
Directe geheugentoegangCVO progr. PO Schijfbest. klaar bezigLees-opdrachtNuttig werkSectoren inlezen en in geheugen plaatsenPositioneerDGT-adres opdrachtNuttig werk
Directe geheugentoegangCVOSchijf bestuurderBestuurder van drukker
Geheugen
Geheugen- bestuurderBus kan niet gelijktijdig gebruikt worden!CVO of Bestuurder zal moeten wachten tot andere klaar is met geheugentoegang.
Directe geheugentoegangSchijf: Geheugencyclus-diefstalCVO Geheugen Schijfbestuurder L1L2S1S3S2L4
Directe geheugentoegangGrote computerinstallaties: Aparte gegevenspaden + gespreid geheugenCPU
Directe geheugentoegangBestuurder heeft geen GEGEVENS-toestandKlaarBezigFout
Speciale in/uitvoer processorenKanaalbestuurder!Lees Schrijf CVOKanaalbestuurder (Speciale I/U Processor)Teveel tijd met I/O bezig!
Speciale in/uitvoer processorenCVOKlaar!Echte Rekenwerk
Speciale in/uitvoer processorenCVOKanaal bestuurderMainframesSpeciale in/uitvoer processor
Speciale in/uitvoer processorenCVOLijst met uit te voeren opdrachten opstellen = speciaal kanaalprogramma opstellenDoorspelen aan kanaalbestuurderKanaalbestuurderVoert het kanaalprogramma uit Opdrachten geven aan bestuurders POs van bestuurders afhandelen (fouten, klaar, ) DGT verzorgenAls volledige kanaalprogramma afgewerkt: PO aanvragenVoordeel:CVO minder POs afhandelenCVO meer tijd voor ander werk
Speciale in/uitvoer processorenOpdrachten voor de kanaalbestuurder: Toestandpoort = P8, Opdracht/Geg.Poort = P9
OpdrachtBetekenis200000ggggBegin uitvoering van het kanaal- programma dat op adres gggg begint.
Speciale in/uitvoer processorenKanaalprogramma: Eigen machinetaal Vaak lange bevelen (veel argumenten) Voorbeeld:KAMBESTUURDER=7,SCHIJF=0,CIL=13,SPOOR=37KAMBESTUURDER=8,SCHIJF=1,CIL=200,SPOOR=18LEESBESTUURDER=7,SCHIJF=0,DGT_ADRES=6000,\ LENGTE=4,SECTOR=7SCHRIJFBESTUURDER=8,SCHIJF=1,DGT_ADRES=7000,\LENGTE=2,SECTOR=24STOP6700370013 681018020037000060009000040007481000800090000200249999999999
Speciale in/uitvoer processorenint kanaalprogr[100];main(){/* stel kanaalprogramma op */int cmd = 2000000000 + (int) &kanaalprogr;while (getPort(8) != KLAAR);putPort (9, cmd);/* doe iets anders */}
MAIN: | kanaalprog.HIA R5,K_OPDOPT.a R5,KPROGLUS:INV R0,P8VGL.w R0,VSP NGEL,LUSUTV R5,P9| Doe iets andersKPROG:RESGR 100K_OPD:2000000000
SatellietcomputersFront-end Computer verbonden met in/uitvoer apparatenBack-end Computer verbonden met hulpgeheugens
SatellietcomputersFront-end: Verbonden met 100-den terminals Invoer van toetsenborden: Inlezen toetsaanslagen Lokaal editeren (backspace, ) Op scherm tonen wat ingetypt is Als lijn volledig doorsturen naar hoofdcomputer Uitvoer naar schermen
SatellietcomputersVoordelen:Minder PO-en Hoofdcomputer meer tijd voor berekeningenSatellietcomputer hoeft niet snel te zijnVoordelen t.o.v. kanaalbestuurder:Satellietcomputers grotere varieteit randapparatuurSatellietcomputer ook gewone berekeningenProgrammatuur eenvoudiger te vervangenOnafhankelijk van een fabrikant
SatellietcomputersNadelen satellietcomputersMinder betrouwbaarKans(defect) = Kans(Hoofdcomputer=defect) + Kans(Satellietcomputer=defect)Oplossing: Reserve (backup) computers OnderhoudscontractIdem voor kanaalbestuurders
StuurprogrammaInvoer/uitvoer = Complex Op hoogte van HOE besturen Welke bevelen, bevelenopmaak, volgorde, Weinig systematiek Soms standardisatie maar veel standaarden! Indien met programma-onderbrekingen: Buffering + boekhouding Tijdsafhankelijke problemen Verloren gaan van gegevens,
StuurprogrammaVoor elk soort randapparaat:Stuurprogramma (Engels: device driver)PO-routine Device driver uitgevoerd als: Gebruikersprogramma invoer/uitvoer apparaat PO vanwege het randapparaat PO-routine nog werk? device driver
StuurprogrammasGeheugenGebruikers-programmaPO-routine (schijf)stuurprogramma (schijf)PO-routine (scherm)stuurprogramma (scherm)PO-routine (klavier)stuurprogramma (klavier)PO-vectorenNiet rechtstreeks
CursustekstHoofdstuk 4: pag. 124 pag. 146
Top Related