SOCS Hoofdstuk 4 Besturingssystemen 1 Inhoud Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Kosten en Baten 2 Inhoud Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Randapparaten In- en uitvoer-organisatievormen Randapparaat-besturingsroutines (stuurprogramma’s) Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Kosten en Baten 3 Invoer en uitvoer Besturingssysteem Besturen van Randapparaten Gebruikersprogramma Opdrachten geven, PO opvangen, fouten … Hoog-niveau opdrachten LEZ (= complexe operatie) Toetsaanslagen code Blanko’s, return-toets, ‘–’, Backspace Omzetten naar decimaal getal (ev. 10-complement) Tonen op scherm (‘echo’) 4 Randapparaten (Mechanisch gedeelte) Elektronisch gedeelte = Bestuurder (Controller, Adapter) Insteekkaart Vaak meerdere apparaten besturen 5 Randapparaten Buffer Speciale Registers Ptoestand Popdracht/geg. CVO Schijf bestuurder Bestuurder van drukker Poorten Bus Geheugenbestuurder Geheugen 6 Randapparaten Toestandspoort (Pt) Toestand v. (bestuurder) randapparaat (LEZEN) Opdracht en gegevenspoort (Pog) Opdracht aan bestuurder geven (SCHRIJVEN) Gegevens van (bestuurder) apparaat ophalen (LEZEN) 7 Randapparaten Lezen/schrijven uit/in “poorten” Twee methodes: Speciale instructies Twee verschillende adresruimtes: • Geheugenregisters • Poorten van randapparaten Inpassing in het geheugen Slechts 1 adresruimte 8 Randapparaten Speciale instructies INV Ri,Pxxxx Ri Pxxxx UTV Rj,Pyyyy Pyyyy Rj (INVoer) (UiTVoer) Pxxxx P0, P1, …, P9998, P9999 8199i9xxxx 8299j9yyyy Afspraak: Pt : t = even, Pog = Pt+1 9 Randapparaten Inpassing in het geheugen Poorten hebben een geheugenadres (vb. 9900..9909) Voordeel: geen speciale instructies nodig HIA Ri,xxxx BIG Rj,yyyy Nadeel: minder geheugen beschikbaar 10 Randapparaten Lezen/Schrijven speciale registers (poorten) Inpassing in het centrale geheugen 0000 … Geheugenregisters 9899 9900 P0 9901 P1 … 9909 Poorten P9 9910 … 9999 Geheugenregisters 11 Randapparaat Toestandspoort (Pt) Toestand van het randapparaat Alleen uitlezen Waarde Naam 0000000000 Klaar Bestuurder klaar voor nieuwe opdracht 0000000001 Bezig Toestel is bezig met uitvoering van een opdracht 0000000002 9999999999 Verklaring Gegevens Er zijn gegevens beschikbaar in de gegevenspoort Fout Er heeft zich een fout voorgedaan 12 PO-aanvraag Randapparaat Fout Bezig Klaar Gegevens 13 Randapparaat Fout: Onbestaande/foutieve opdracht Opdracht gegeven terwijl apparaat nog bezig is Apparaat heeft nieuwe gegevens terwijl vorige nog niet uitgelezen zijn Fout in het apparaat: Vb. papierlade leeg, inktpatroon leeg, … 14 Randapparaat Sommige overgangen: PO-aanvraag Interventie van het CVO gewenst Begintoestand Eindtoestand Verklaring ??? Fout CVO moet fout herstellen (herinitialisatie) Bezig Klaar CVO mag nieuwe opdracht geven Bezig Gegevens CVO moet gegevens inlezen (beschikbaar na opdracht) Klaar Gegevens CVO moet gegevens inlezen (beschikbaar zonder opdracht) 15 Randapparaat P0 0000000002 P1 0000000088 P2 P3 0000000000 0000000000 0000001000 R0 INV R0,P2 Pt Pog UTV R1,P3 INV R2,P1 UTV R3,P0 1000000020 R1 0000000050 R2 9999999999 R3 … 16 Randapparaat P0 0000000002 P1 0000000088 P2 0000000000 P3 0000000000 0000000000 0000001000 R0 INV R0,P2 UTV R1,P3 INV R2,P1 UTV R3,P0 1000000020 R1 0000000050 R2 9999999999 R3 … 17 Randapparaat P0 0000000002 P1 0000000088 P2 0000000000 0000000001 P3 1000000020 0000000000 R0 INV R0,P2 UTV R1,P3 INV R2,P1 UTV R3,P0 1000000020 R1 0000000050 R2 9999999999 R3 … 18 Randapparaat P0 0000000002 0000000000 P1 0000000088 P2 0000000001 0000000000 P3 1000000020 0000000000 R0 1000000020 R1 INV R0,P2 UTV R1,P3 INV R2,P1 UTV R3,P0 Niet toegelaten! (P0 = toestandspoort) 0000000088 0000000050 R2 9999999999 R3 … 19 C Lezen/Schrijven poorten Twee 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 P1 Constanten: #define KLAAR 0 #define BEZIG 1 #define GEG 2 #define FOUT -1 20 C PO-routine PO-routine voorstellen als ( C): interrupt po_routine() { Bewaar accumulatoren … Herstel accumulatoren } Niet te schrijven in C KTO i.p.v. KTG 21 In- en uitvoer organisatievormen Geprogrammeerd (met actief wachten) M.b.v. programma-onderbrekingen D.m.v. directe geheugentoegang M.b.v. speciale invoer/uitvoer-processoren M.b.v. satelliet-computers 22 Geprogrammeerde in/uitvoer Alle gegevenstransport via de processor Processor synchroniseert met randapparaat Nieuwe opdracht mag slechts gegeven als toestand = KLAAR Gegevens kunnen slechts uitgelezen worden als toestand = GEGEVENS Wachten tot juiste toestand Actief wachten = continu testen 23 Geprogrammeerde in/uitvoer int 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); 24 Geprogrammeerde in/uitvoer int Pt, Pog, opdracht, geg; Pt = 6; Pog = 7; opdracht = …; /* geven van opdracht */ while (getPort(Pt) != KLAAR); putPort(Pog, opdracht); Actief wachten /* lezen van gegevens */ while (getPort(Pt) != GEG); geg = getPort(Pog); Actief wachten 25 Geprogrammeerde in/uitvoer Gegevens inlezen Opdracht geven Actief Wachten CVO Randapparaat klaar bezig gegevens Toestand uitlezen 26 Geprogrammeerde in/uitvoer int Pt, Pog, opdracht, geg; Pt = 6; Pog = 7; opdracht = …; MEVA MEVA MEVA MEVA /* geven van opdracht */ while (getPort(Pt) != KLAAR); putPort(Pog, opdracht); LUS1: INV VGL.w VSP HIA UTV R0,P<Pt> R0,<KLAAR> NGEL,LUS1 R0,opd R0,P<Pog> LUS2: INV VGL.w VSP INV … opd: … R0,P<Pt> R0,<GEG> NGEL,LUS2 R0,P<Pog> /* lezen van gegevens */ while (getPort(Pt) != GEG); geg = getPort(Pog); Pt,6 Pog,7 KLAAR,0 GEG,2 27 Geprogrammeerde in/uitvoer MEVA MEVA MEVA MEVA Actief wachten Actief wachten Pt,6 Pog,7 KLAAR,0 GEG,2 LUS1: INV VGL.w VSP HIA UTV R0,P<Pt> R0,<KLAAR> NGEL,LUS1 R0,opd R0,P<Pog> LUS2: INV VGL.w VSP INV … opd: … R0,P<Pt> R0,<GEG> NGEL,LUS2 R0,P<Pog> 28 Geprogrammeerde in/uitvoer Voorbeeld: Scherm Toestandspoort = P2; Opdrachtpoort = P3 Opdracht Betekenis … 1000000ccc Druk een letter af op het scherm ccc: ASCII voorstelling van de letter … 29 Geprogrammeerde in/uitvoer char 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,P2 VGL.w R0,<KLAAR> VSP NGEL,LUS HIA R1,OPDR OPT R1,ZONE(R2+) UTV R1,P3 VGL R2,N VSP KL,LUS … OPDR: 1000000000 N: 100 ZONE: 0000000086 0000000111 … 30 Geprogrammeerde in/uitvoer Actief wachten Nuttige bevelen HIA.w R2,0 LUS: INV R0,P2 VGL.w R0,<KLAAR> VSP NGEL,LUS HIA R1,OPDR OPT R1,ZONE(R2+) UTV R1,P3 VGL R2,N VSP KL,LUS … OPDR: 1000000000 N: 100 ZONE: 0000000086 0000000111 … 31 Geprogrammeerde in/uitvoer Performantie Actief wachten 5 s Actief wachten Actief wachten Derde letter 1 ms Tweede letter Eerste letter Nuttig: 5/1000 = 0,5 % Scherm: 1000 tekens/s Drama: 1 MIPS 32 Geprogrammeerde in/uitvoer 100 letters 100 ms 1 MIPS computer: 0,5 % nuttig gebruik CVO 10 MIPS computer: 0,05 % nuttig gebruik 100 MIPS computer: 0,005% nuttig gebruik … 33 Geprogrammeerde in/uitvoer Voorbeeld 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 van toetsaanslag + lus < 10 bevelen Rendement < 0,005 % 34 Programma-onderbrekingen CVO test niet voortdurend de toestandspoort Bestuurder van randapparaat: Meldt aan CVO wanneer klaar met opdracht, gegevens beschikbaar, fout, … Geen actief wachten meer! Toepassing: gegevensdebiet eerder laag Zelfde voorbeeld: Scherm 100 letters afbeelden 1ste letter via vorige methode 35 Programma-onderbrekingen char zone[100] = { ‘v’, … }; int n = 100; int idx = 0; main () { /* eerste letter */ int cmd; while (getPort(2) != KLAAR); cmd = 1000000000 + zone[idx++]; putPort(3, cmd); /* doe iets anders */ … } /* volgende letters */ interrupt po_rout4 () { int cmd; /* bewaar accumulatoren */ if (getPort(2) == KLAAR) { if (idx < n) { cmd = 1000000000 + zone[idx++]; putPort (3, cmd); } } else { /* fout */ } /* herstel accumulatoren */ } 36 Programma-onderbrekingen interrupt po_rout4 () { int cmd; /* bewaar accumulatoren */ if (getPort(2) == KLAAR) { if (idx < n) { cmd = 1000000000 + zone[idx++]; putPort (3, cmd); } } else { /* fout */ } /* herstel accumulatoren */ } PO_R4: BIG BIG BIG INV VGL.w VSP HIA VGL VSP HIA OPT UTV BIG EINDE: HIA … KTO R0,BEWAAR R5,BEWAAR+1 R6,BEWAAR+2 R0,P<Pt> R0,<KLAAR> NGEL,FOUT R6,INDEX R5,AANTAL GEL,EINDE R5,OPDR R5,ZONE(R6+) R5,P<Pog> R6,INDEX R0,BEWAAR 37 Programma-onderbrekingen 17 bevelen / letter PO_R4: BIG BIG BIG INV VGL.w VSP HIA VGL VSP HIA OPT UTV BIG EINDE: HIA … KTO R0,BEWAAR R5,BEWAAR+1 R6,BEWAAR+2 R0,P<Pt> R0,<KLAAR> NGEL,FOUT R6,INDEX R5,AANTAL GEL,EINDE R5,OPDR R5,ZONE(R6+) R5,P<Pog> R6,INDEX R0,BEWAAR 38 Programma-onderbrekingen CVO en Bestuurder beide bezig Toestand uitlezen Nuttig werk CVO gebruikersprogr. PO Schermbestuurder klaar bezig Opdracht geven Letter afbeelden 39 Programma-onderbrekingen Performantie Extra overhead door PO Bewaar R0, R5, R6 … Herstel R0, R5, R6 Index 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! 40 Geprogrammeerde in/uitvoer Performantie Iets anders 17 s Nuttig werk!!! Iets anders Iets anders Derde letter 1 ms Tweede letter Eerste letter Scherm: 1000 tekens/s Drama: 1 MIPS 41 Programma-onderbrekingen Niet voor apparaten met hoog debiet Na KTO, onmiddellijk een nieuwe PO Geen tijd om iets anders te doen Risico dat PO-routine te lang duurt en gegevens verloren gaan 42 Transport via CVO CVO Schijf bestuurder Geheugenbestuurder Toestenbordbestuurder Geheugen 43 Transport via CVO CVO Schijf bestuurder Geheugenbestuurder Schermbestuurder Geheugen 44 Directe geheugentoegang DGT Engels: DMA (Direct Memory Access) Optimisatie van vorige schema CVO geeft opdracht aan bestuurder Bestuurder zorgt zelf voor het transport van/naar het geheugen Na transport: Bestuurder PO-aanvraag 45 Directe geheugentoegang Lezen … CVO Schijf bestuurder Bestuurder van drukker Geheugen- Opdracht bestuurder Geheugen Transport 46 Directe geheugentoegang Schrijven … CVO Opdracht Schijf bestuurder Bestuurder van drukker Geheugenbestuurder Transport Geheugen 47 Directe geheugentoegang Schijf: Kam Spoor Sector Cilinder (= alle sporen voor bep. positie kam) Lezen/Schrijven: 2 stappen a) Positioneer kam (+ selecteer kop) b) Lees/Schrijf # opeenvolgende sectoren 48 Directe geheugentoegang Voorbeeld: 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 49 Directe geheugentoegang Opdrachten voor de schijfbestuurder: Opdracht Betekenis … 100ttt0ccc Positioneer kam op cilinder ccc en activeer lees/schrijfkop ttt 200lll0sss Lees lll opeenvolgende sectoren vanaf sector sss 500000gggg gggg is het adres van de DGTgeheugenzone … 50 Directe geheugentoegang int 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,KOP VER R5,TDZD OPT R5,CIL OPT R5,P_OPD LUS: INV R0,P6 VGL.w R0,<KLAAR> VSP NGEL,LUS UTV R5,P7 | iets anders … … TDZD: 10000 KOP: 13 CIL: 37 P_OPD: 1000000000 51 Directe geheugentoegang interrupt po_rout6() { /* bewaar accumulatoren */ if (getPort(6) == KLAAR) { if (--inlezen == 0) lees( ); else /* anders */ … } else { /* fout */ … } /* herstel accumulatoren */ } void lees ( ) { /* geef &dgt_zone door */ … /* geef lees opdracht */ … } PO_R6: … | bewaar Ri INV R0,P6 VGL.w R0,<KLAAR> VSP NGEL,FOUT HIA R0,INLEZEN AFT.w R0,1 BIG R0,INLEZEN VSP NNUL,ANDERS SBR LEES SPR EINDE ANDERS: … EINDE: … | herstel Ri KTO FOUT: … 52 Directe geheugentoegang void 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_OPD OPT.a R5,DGT_ZONE UTV R5,P7 INV R0,P6 VGL.w R0,<KLAAR> VSP NGEL,FOUT HIA R5,AANTAL VER R5,TDZD OPT R5,SECTOR OPT R5,L_OPD UTV R5,P7 KTG D_OPD: 5000000000 L_OPD: 2000000000 TDZD: 10000 DGT_ZONE: RESGR 400 … 53 Directe geheugentoegang CVO en Bestuurder beide bezig Nuttig werk CVO progr. PO Schijfbest. klaar bezig Positioneer CVO en Bestuurder beide bezig Nuttig werk DGT-adres opdracht Leesopdracht Sectoren inlezen en in geheugen plaatsen 54 Directe geheugentoegang Bus kan niet gelijktijdig gebruikt worden! CVO Schijf bestuurder Geheugenbestuurder CVO of Bestuurder zal moeten wachten tot andere klaar is met geheugentoegang. Bestuurder van drukker Geheugen 55 Directe geheugentoegang Schijf: Geheugencyclus-diefstal CVO Geheugen Schijfbestuurder L1 L2 L1 S3 L4 L2 S1 S3 S2 L4 S1 S2 Cyclusdiefstal 56 Directe geheugentoegang Grote computerinstallaties: Aparte gegevenspaden + gespreid geheugen Geheugen (module 1) CPU Geheugenbestuurder Geheugen (module 2) Schijf bestuurder 57 Directe geheugentoegang Bestuurder heeft geen GEGEVENS-toestand Fout Bezig Klaar 58 Speciale in/uitvoer processoren Teveel tijd met I/O bezig! Kanaalbestuurder! Lees … Schrijf … … Lees … Schrijf … … Kanaalbestuurder (Speciale I/U Processor) CVO 59 Speciale in/uitvoer processoren Echte Rekenwerk … CVO Klaar! 60 Speciale in/uitvoer processoren Geheugenbestuurder CVO Kanaal bestuurder Speciale in/uitvoer processor Geheugen Mainframes Schijf bestuurder Drukker bestuurder Schijf bestuurder Drukker bestuurder 61 Speciale in/uitvoer processoren CVO Lijst met uit te voeren opdrachten opstellen = speciaal kanaalprogramma opstellen Doorspelen aan kanaalbestuurder Kanaalbestuurder Voert het kanaalprogramma uit Opdrachten geven aan bestuurders PO’s van bestuurders afhandelen (fouten, klaar, …) DGT verzorgen Als volledige kanaalprogramma afgewerkt: PO aanvragen Voordeel: CVO minder PO’s afhandelen CVO meer tijd voor ander werk 62 Speciale in/uitvoer processoren Opdrachten voor de kanaalbestuurder: Toestandpoort = P8, Opdracht/Geg.Poort = P9 Opdracht Betekenis … 200000gggg Begin uitvoering van het kanaalprogramma dat op adres gggg begint. … 63 Speciale in/uitvoer processoren Kanaalprogramma: Eigen machinetaal Vaak lange bevelen (veel argumenten) Voorbeeld: KAM KAM LEES BESTUURDER=7,SCHIJF=0,CIL=13,SPOOR=37 BESTUURDER=8,SCHIJF=1,CIL=200,SPOOR=18 6700370013 6810180200 BESTUURDER=7,SCHIJF=0,DGT_ADRES=6000,\ LENGTE=4,SECTOR=7 3700006000 SCHRIJF BESTUURDER=8,SCHIJF=1,DGT_ADRES=7000,\ 9000040007 LENGTE=2,SECTOR=24 4810008000 STOP 9000020024 9999999999 64 Speciale in/uitvoer processoren int 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_OPD OPT.a R5,KPROG LUS: INV R0,P8 VGL.w R0,<KLAAR> VSP NGEL,LUS UTV R5,P9 | Doe iets anders … KPROG: RESGR 100 K_OPD: 2000000000 65 Satellietcomputers Front-end Computer verbonden met in/uitvoer apparaten Back-end Computer verbonden met hulpgeheugens Back-end Hoofdcomputer Front-end 66 Satellietcomputers Front-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 … 67 Satellietcomputers Voordelen: Minder PO-en Hoofdcomputer meer tijd voor berekeningen Satellietcomputer hoeft niet snel te zijn Voordelen t.o.v. kanaalbestuurder: Satellietcomputers grotere varieteit randapparatuur Satellietcomputer ook gewone berekeningen Programmatuur eenvoudiger te vervangen Onafhankelijk van een fabrikant 68 Satellietcomputers Nadelen satellietcomputers Minder betrouwbaar Kans(defect) = Kans(Hoofdcomputer=defect) + Kans(Satellietcomputer=defect) Oplossing: Reserve (backup) computers Onderhoudscontract Idem voor kanaalbestuurders 69 Stuurprogramma Invoer/uitvoer = Complex Op hoogte van HOE besturen Indien met programma-onderbrekingen: Welke bevelen, bevelenopmaak, volgorde, … Weinig systematiek Soms standardisatie maar veel standaarden! Buffering + boekhouding Tijdsafhankelijke problemen Verloren gaan van gegevens, … 70 Stuurprogramma Voor elk soort randapparaat: Stuurprogramma (Engels: device driver) PO-routine Onderdeel v/h Besturingsprogramma (Operating System) Device driver uitgevoerd als: Gebruikersprogramma invoer/uitvoer apparaat PO vanwege het randapparaat PO-routine nog werk? device driver 71 Stuurprogramma’s PO-vectoren Gebruikersprogramma Niet rechtstreeks Geheugen PO-routine (schijf) PO-routine (scherm) stuurprogramma (schijf) stuurprogramma (scherm) Besturingsprogramma PO-routine (klavier) stuurprogramma (klavier) 72 Cursustekst Hoofdstuk 4: pag. 124 pag. 146 73