Hoofdstuk 4 Besturingssystemen SOCS Hoofdstuk 4 Besturingssystemen
Inhoud Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Kosten en Baten
Inhoud Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Halttoestand en uitvoeringstoestand Probleemtoestand en supervisietoestand Geprivilegieerde bevelen Supervisie-oproep De volledige bevelencyclus Multiprogrammatie …
Processortoestanden Als CVO niets te doen? Oplossing: Geen programma om uit te voeren Huidige programma wacht op gegevens Oplossing: Actief wachten LUS: SPR LUS Nadeel: DGT-transporten worden gestoord “Halttoestand” Alleen 4de stap van bevelencyclus (nagaan of PO-aanvraag mag optreden)
Halt-, Uitvoeringstoestand 0 1 2 3 4 5 6 7 8 9 H/U S/P CC ONV OVI SOI BT 10 11 12 13 14 15 16 17 18 19 GPF WEK DRK G IN UIT SCH OVL SPL MFT Alleen 4de stap bevelencyclus 0: Halttoestand 1: Uitvoeringstoestand Volledige bevelencyclus
Halt-, Uitvoeringstoestand Ander bevel Programma-onderbreking Halt- toestand Uitvoerings- toestand KTO STP KTO 7100100298 Stapel 3001111200 Stapel
Halt-, Uitvoeringstoestand int * tedoen = (int *) –1; main() { /* twee taken te doen */ tedoen = &andere_taak; /* begin eerste taak */ … if (tedoen == (int *) –1) { /* stop */ } else { /* begin taak */ } MAIN: HIA.a R0,TAAK BIG R0,TEDOEN … | eerste taak … HIA R0,TEDOEN VGL.w R0,-1 VSP GEL,NIETS SPR 0(R0) NIETS: STP TEDOEN: -1
Halt-, Uitvoeringstoestand Beter: lijst met taken Taak afgewerkt: volgende uit lijst Lijst leeg: STP TAAK1: … … TAAK2: … TAAK3: … NULL
Probleem-, Supervisietoestand Ik mag alles Ik mag niet alles! Gebruikersprogramma Besturingsprogramma CVO moet weten welk programma uitgevoerd wordt!
Probleem-, Supervisietoestand Correcte werking van computer garanderen: Verhinderen: gebruiker zelf apparaten aanstuurt Onderscheid tussen: Gebruikersprogramma Besturingsprogramma Twee toestanden: Supervisietoestand (monitortoestand) CVO voert Besturingsprogramma uit Probleemtoestand CVO voert Gebruikersprogramma uit
Halt-, Uitvoeringstoestand 0 1 2 3 4 5 6 7 8 9 H/U S/P CC ONV OVI SOI BT 10 11 12 13 14 15 16 17 18 19 GPF WEK DRK G IN UIT SCH OVL SPL MFT CVO voert besturings-programma uit 0: Supervisietoestand 1: Probleemtoestand CVO voert gebruikers-programma uit
Halt-, Uitvoeringstoestand Programma- onderbreking Ander bevel KTO 5100100298 Stapel Uitvoerings- toestanden Supervisie Toestand (0) STP Halt- toestand PO PO KTO KTO 0110100132 Stapel 3001111200 Stapel Probleem- Toestand (1) Niet- gepriv. bevel
Geprivilegieerde bevelen Probleemtoestand: Niet alle bevelen toegelaten! DRAMA bevelen HIA, BIG OPT, AFT, VER, DEL, MOD, VGL SPR, VSP, SBR, KTG, OND INV, UTV, MKH, MKL, TSM, TSO, STP, KTO Geprivilegieerde bevelen Niet-geprivilegieerde bevelen
Geprivilegieerde bevelen Probleem- toestand Supervisie- toestand Niet-geprivilegieerd bevel Geprivilegieerd bevel Uitgevoerd Uitgevoerd PO9 Uitgevoerd
Supervisie-oproep Gebruikerprogramma: Niet rechtstreeks randapparaten aanspreken Hulp vragen aan besturingsprogramma Mag wel geprivilegieerde bevelen uitvoeren Supervisietoestand! Overgang afdwingen: Geprogrammeerde PO (OND) = supervisor call, system call Operand = ‘dienst’ Mogelijk extra argumenten (via stapel, acc., …)
Supervisie-oproep Dienst- nummer Dienst 1 Lees getal in R0 in 2 Druk R0 af op scherm 3 Naar nieuwe lijn op scherm 4 Huidige datum + tijd in R0 … 9999 Stop de uitvoering van dit programma Verschillend van besturingsprogramma tot besturingsprogramma
1000 x 4 + 1 = 4001 supervisie-oproepen /* lees 1000 getallen in en druk getal, getal^2 af */ main() { int k, x; for (k=0; k<1000; k++) { x = getint(); printint(x); printint(x*x); } MAIN: HIA.w R1,0 FOR: VGL.w R1,1000 VSP GRG,EFOR LEZ DRU VER R0,R0 NWL OPT.w R1,1 SPR FOR EFOR: STP OND 1 | LEZ OND 2 | DRU OND 2 | DRU OND 3 | NWL OND 9999 | STP 1000 x 4 + 1 = 4001 supervisie-oproepen
Behandelingsroutine voor supervisie-oproepen | Gebruikersprogramma MAIN: … OND 2 … PO_R1: BIG R0,BEWAAR … BIG R9,BEWAAR+9 | welke dienst? HIA R0,0(R9) MOD R0,TDZD Gebruikers- programma 0123 0125 0124 … 6199990002 AFT.w R0,1 HIA R1,0(R0) MOD R1,TDZD DST1: VGL.w R1,1 VSP NGEL,DST2 R9 8999 9000 0110000125 0000000000 Stapel SBR LEZ_PROC SPR TERUG1
Behandelingsroutine voor supervisie-oproepen PO_R1: BIG R0,BEWAAR … BIG R9,BEWAAR+9 | welke dienst? HIA R0,0(R9) MOD R0,TDZD AFT.w R0,1 HIA R1,0(R0) MOD R1,TDZD DST1: VGL.w R1,1 VSP NGEL,DST2 SBR LEZ_PROC SPR TERUG1 DST2: VGL.w R1,2 VSP NGEL,DST3 SBR DRU_PROC SPR TERUG DST3: … TERUG: HIA R0,BEWAAR TERUG1: HIA R1,BEWAAR+1 … HIA R9,BEWAAR+9 KTO BEWAAR: RESGR 10 TDZD: 10000
Behandelingsroutine voor supervisie-oproepen Supervisie- toestand | Gebruikersprogramma MAIN: … OND 2 … Probeemtoestand (1) PO_R1: … SBR DRU_PROC KTO OND 2 (2) (6) PO-vectoren (3) (5) (4) DRU_PROC: … UTV R5,P3 KTG LEZ_PROC: … INV R0,P1 KTG LEZ_PROC: … INV R0,P1 KTG LEZ_PROC: … INV R0,P1 KTG
Supervisie-oproep Voordelen: Programmeur geen laag-niveau details Complexe taken correct uitgevoerd Buffering en boekhouding Timing, fouten opvangen, … echo-transmissie, lokaal editeren, … Optimisaties mogelijk Actief wachten vermijden Uitgesteld wegschrijven Vooraf inlezen Vooraf intypen (type ahead) …
Bevelencyclus int skip_uitvoering; while (true) { if (PTW[1] == 1) { /* uitvoeringstoest. */ /* haal bevel op */ … /* analyseer bevel */ … skip_uitvoering = 0; if (PTW[2] == 1 && gepriv(fc)) { PO_vlag[9] = 1; skip_uitvoering = 1; } if (! skip_uitvoering) { /* voeruit */ switch (fc) { … case STP: PTW[1] = 0; break; … } } } /* if (PTW[1] == 1) */
Bevelencyclus if (PTW[10] != 1) { /* G masker af */ int onv = PTW[0]; int k; /* Toeg. PO? */ for (k=9; k>onv; k--) if ((PO_vlag[k] && ((k == 1) || ! PTW[10+k])) break; if (k > onv) { /* POk */ opStapel(PTW, 0, 9); PTW[0] = k; /* ONV */ PO_vlag[k] = 0; /* uitv. + superv. */ PTW[1] = 1; PTW[2] = 0; vulin( Geheugen[9990+k] % 10000,PTW,6,9); } } /* if (G-masker) */ } /* while */
Inhoud Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie Principe Doorvoer STP-bevel Besturingsprogramma Opstarten van de computer Soorten Besturingssystemen …
Multiprogrammatie Randapparaten traag t.o.v. CVO Actief wachten: heel onefficient PO en DGT: CVO kan iets anders doen Iets anders? /* lees sector in */ while (getPort(6) != KLAAR); putPort (7, cmd); /* doe iets anders */ … Programma heeft die gegevens nodig. Dit moet een ander programma zijn.
Principe tijd PO6 PO6 PROG_B PROG_A Besturingsprog PO_ROUT1 PO_ROUT6 Schijf bezig PROG_B PROG_A Besturingsprog PO_ROUT1 PO_ROUT6 halt KTO PO6 KTO OND 73 OND 73 KTO OND 73 KTO I/O (A) klaar I/O (B) gestart STP I/O (A) gestart PO6 I/O (A) klaar I/O (A) gestart tijd PO6 PO6 Lezen van schijf: OND 73
Principe Monoprogrammatie Multiprogrammatie Programma’s sequentieel uitgevoerd Slechts 1 programma tegelijk geladen Multiprogrammatie = Gelijktijdig (afwisselend) uitvoeren van verschillende programma’s CVO ‘bezig’ houden Veel programma’s nooit werkloos
Doorvoer 2 Identieke programma: Uitvoering: Initialisatie 100 ms 4 x (100 ms wachten invoer + 100 ms rekenen) 100 ms wegschrijven = totaal 1 s Uitvoering: Monoprogrammatie (na elkaar) Multiprogrammatie
Doorvoer Monoprogrammatie Doorvoer: 1 prog/s 1 2 Multiprogrammatie 1 Prog_A Prog_B halt Monoprogrammatie Doorvoer: 1 prog/s 1 2 Prog_A Prog_B halt Multiprogrammatie 1 1,1 Doorvoer: ±2 prog/s
Doorvoer Vorige figuur Realiteit Prog_A Prog_B halt Prog_A Prog_B PO_R1 PO_R6 halt Start I/O I/O klaar Prog_A Prog_B halt Prog_A Prog_B PO_R1 PO_R6 halt Start I/O I/O klaar
Werkloos? Zelden processor 100% bezighouden Merk op: Zwaar belast: 90 .. 95 % Licht belast: 10 .. 30 % Merk op: Hoge multiprogrammatiegraad (= aantal programma’s in geheugen) Processor weinig (of niet) werkloos Elk programma slechts fractie van beschikbare tijd lijkt dat de processor traag werkt
STP-bevel Geprivilegieerd Alleen besturingsprogramma (BP) weet of er nog taken zijn Gebruikersprogramma aan BP vragen om gestopt te worden Programma uit geheugen verwijderen Ander programma inbrengen?
Boekhouding Voor elk programma: gegevensstructuur Inhouden van accumulatoren BT, CC, OVI, … (eerste deel PTW) Gebruikt bij programmawisseling R0 R1 … R9 PTW Progr. A R0 R1 … R9 PTW Progr. B R0 R1 … R9 PTW Progr. C
Opstarten van de computer Programma in ROM uitvoeren Lader(s) inladen (bootstrap) besturingsprogramma inladen Hoofdprogramma van besturingsprogramma: Gegevensstructuren initialiseren Op zoek naar werk Gebruikersprogramma’s of (geen werk) STP Besturingsprogramma alleen nog via PO geactiveerd
Inhoud Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Kosten en Baten
Soorten besturingssystemen Algemeen Nut (general purpose) Specifiek Doel (dedicated, embedded) Niet-interactief Interactief Reële tijd (real time) = Stapelverwerking (batch system) Vaste tijdslimieten 1 Gebruiker (Single User) Meerdere gebruikers (Multi-User) (Time sharing)
Inhoud … Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Geheugenbeheer Processorbeheer Het beheer van de randapparaten Bestandenbeheer Informatiebeheer Boekhouding Kosten en Baten
Taken/diensten besturingsprogramma Geheugenbeheer Waar elk programma in het geheugen Processorbeheer Aan welk programma zal CVO werken? Beheer in/uitvoer Besturen van alle randapparaten Bestandenbeheer Bestanden bijhouden op hulpgeheugens Informatiebeheer
Geheugenbeheer Multiprogrammatie meerdere programma’s gelijktijdig in geheugen Verschillende algoritmes: Aaneengesloten, gepagineerd, … A B C E BP D A1 A2 A3 B1 B2 B3 PB1 PB2 PB3 PB4 E1 E2 D1 D2 C1 HW: verspreide delen als 1 geheel laten voorkomen
Geheugenbeheer Verschillende programma’s bescherming In uitvoering E BP D Resultaat correct ? Privacy geschonden?
Geheugenbeheer Geen geheugenbescherming: MAIN: HIA.a R0,LABEL BIG R0,9991 OND 1 LABEL: … INV R0,P2 UTV R1,P3 …
Geheugenbeheer PO_R1: BIG R0,BEWAAR … PO-vectoren PO_R1: BIG R0,BEWAAR … MAIN: HIA.a R0,LABEL BIG R0,9991 OND 1 LABEL: … INV R0,P2 UTV R1,P3 … HIA.a R0,LABEL BIG R0,9991
Geheugenbeheer PO_R1: BIG R0,BEWAAR … PO-vectoren PO_R1: BIG R0,BEWAAR … MAIN: HIA.a R0,LABEL BIG R0,9991 OND 1 LABEL: … INV R0,P2 UTV R1,P3 … OND 1
Geheugenbeheer PO_R1: BIG R0,BEWAAR … PO-vectoren PO_R1: BIG R0,BEWAAR … MAIN: HIA.a R0,LABEL BIG R0,9991 OND 1 LABEL: … INV R0,P2 UTV R1,P3 … … INV R0,P2 In supervisortoestand!
Geheugenbeheer Geen geheugenbescherming: MAIN: HIA R0,9991 HIA R1,INSTR BIG R1,0(R0) OND 1 INSTR: SPR LABEL LABEL: … INV R0,P2 UTV R1,P3
Geheugenbeheer PO_R1: BIG R0,BEWAAR … PO-vectoren 9991 PO_R1: BIG R0,BEWAAR … MAIN: HIA R0,9991 HIA R1,INSTR BIG R1,0(R0) OND 1 INSTR: SPR LABEL LABEL: … INV R0,P2 UTV R1,P3 HIA R0,9991 HIA R1,INSTR BIG R1,0(R0)
Geheugenbeheer PO_R1: BIG R0,BEWAAR … SPR LABEL PO-vectoren PO_R1: BIG R0,BEWAAR … SPR LABEL MAIN: HIA R0,9991 HIA R1,INSTR BIG R1,0(R0) OND 1 INSTR: SPR LABEL LABEL: … INV R0,P2 UTV R1,P3 OND 1
Geheugenbeheer PO_R1: BIG R0,BEWAAR … SPR LABEL PO-vectoren PO_R1: BIG R0,BEWAAR … SPR LABEL MAIN: HIA R0,9991 HIA R1,INSTR BIG R1,0(R0) OND 1 INSTR: SPR LABEL LABEL: … INV R0,P2 UTV R1,P3 … INV R0,P2 In supervisortoestand!
Geheugenbescherming < Geheugen ondergrens Prog. A bovengrens CVO Geheugenbeheer eenheid Ondergrens Bovengrens < bus Adres Ja Ja Neen Neen
Geheugenbescherming < HIA R0,455 Geheugen Prog. A CVO 0200 1234 Prog. A CVO Geheugenbeheer eenheid 0200 1234 455 455 < Ja Ja bus
Geheugenbescherming < BIG R0,9991 Prog. A CVO 0200 1234 Prog. A CVO Geheugenbeheer eenheid 0200 1234 9991 < Ja Adres! bus Neen
Geheugenbeheer Besturingsprogramma: tabel met vrij/bezet Beginadres Lengte Toegekend aan … 0000 1140 A 1060 Vrij 2200 2253 B 4453 76 4529 1271 C 5800 1150 D 6950 50 7000 3000 Besturings-programma
Processorbeheer Meerdere programma’s wie processor? Keuze gebaseerd op: Hoogdringendheid (prioriteit) Beurtrol … Sommige programma’s aan het wachten …
Processorbeheer Klaar om uitgevoerd te worden Gekozen klaar uitvoering Supervisie-oproep (I/O) passief wachten Supervisie-oproep (STOP) I/O klaar Nog niet in het geheugen gebracht afgewerkt
Processorbeheer Besturingssysteem: tabel met info programma’s Prog. Toestand Prio R0 … PTW A klaar 10 0000001234 0110000123 B 7 0000002341 0110011232 C wacht 3 0000000000 0110004434 D 1 9999999999 0110006545 E passief 15 ???
Processorbeheer Timesharing systeem: meerdere gebruikers Tijd eerlijk verdelen Respons-tijd (reactie-tijd): Elke gebruiker: Indruk persoonlijke computer ter beschikking
Processorbeheer Te Doen: Practicum Perl Practicum BvP SOCS studeren Vakantiebrochures Karweien thuis
Processorbeheer Te Doen: Practicum Perl Practicum BvP SOCS studeren Vakantiebrochures Karweien thuis
Processorbeheer Te Doen: Klaar! Practicum Perl Practicum BvP SOCS studeren Vakantiebrochures Karweien thuis Klaar!
Processorbeheer Te Doen: Practicum Perl Practicum BvP SOCS studeren Vakantiebrochures Karweien thuis Enz.
Processorbeheer Vóór: CVO gebruikersprogramma: Twee mogelijkheden: Wekker zetten Twee mogelijkheden: Gebruikersprogramma doet supervisor-oproep wachten Wekker afzetten Volgende taak kiezen + eerst wekker instellen Wekker loopt af Huidige taak tijdelijk uitstellen
Processorbeheer Wekker: Opdrachtpoort: P9 P9 interval Wekker actief: interval > 0 wekker actief (telt af) interval <= 0 wekker inactief Wekker actief: Elke s: P9 P9 – 1 Indien P9 == 0 PO_vlag[3] 1
Processorbeheer Besturingsprogramma: … | Stel wekker in HIA R1,interval UTV R1,P9 | Herstel accumulatoren HIA R0,bewaar+0 HIA R1,bewaar+1 … HIA R9,bewaar+9 KTO bewaar: RESGR 10 interval: 1000
Principe tijd PO6 PROG_A PROG_B PROG_C PROG_D PO_ROUT1 PO_ROUT2 halt KTO KTO KTO PO6 KTO OND 73 KTO KTO Kies Prog. Kies Prog. I/O (A) gestart Kies Prog. Kies Prog. Kies Prog. tijd PO6 Lezen van schijf: OND 73
Beheer van randapparaten Besturingsprogramma: Toestand van elk apparaat bijhouden Opdrachten bijhouden indien apparaat bezig Bezig (lezen) CVO: Iets anders Schrijven op schijf in wachtrij
Beheer van randapparaten Apparaat Toestand Opdrachten Scherm bezig A Schrijf “xyz = …” Toetsenbord klaar Beschikbaar 12345, abcde Drukker --- Schijf Schrijf cil:4,…, Data B Lees cil:6,…,Adres Schijf2 defect
Bestandenbeheer Bestand = ‘container’ voor informatie (bron)programma’s, teksten, gegevens, … = Hoog-niveau concept Gebruiker/programma hoeft plaats niet te kennen (alleen naam) Besturingsprogramma houdt bestanden bij op hulpgeheugen
Bestandenbeheer Inhoudstafel Socs.doc Prog.java Spel Naam Lengte Plaats Prog.java 19820 Cil:8/spoor:4/sec:2-7 Socs.doc 98172 Cil:2/spoor:5/sec:32-59 Spel 8729 Cil:1/spoor:8/sec:11-13
Informatiebeheer Besturingsprogramma houdt heel wat informatie bij Huidige datum/tijd Wie werkt op het systeem? Programma’s in uitvoering Beschikbare schijfruimte … Opvragen via supervisie-oproepen Voorbeeld OND 100 | R0dag,R1maand,R2jaar
Informatiebeheer Bijhouden van de tijd M.b.v. circuit dat regelmatige PO aanvraagt vb. Om de 20 ms (freq. van lijnspanning) Referentiedatum + tijd opvragen bij opstarten # PO-en tellen huidige datum en tijd berekenen Referentie datum + tijd Huidige datum + tijd # PO-en 24 april 2002 1.002.100 24 april 2002 10:00:00 20.042 s later 15:34:02 Niet nauwkeurig (PO uitstellen, missen, …)
Informatiebeheer Bijhouden van de tijd DRAMA: Klok v/d 2de soort Kristal-oscillator Onder spanning zeer nauwkeurig periodisch signaal Signaal naar tel-circuit geleid Eenmalig initialiseren Vaak batterij klok blijft doorlopen DRAMA: Klok v/d 2de soort Poort P8 Inhoud = # 1/10 s sinds 1 januari 1990 (00:00)
Informatiebeheer Samenwerkende programma’s Informatie uitwisselen = Communicatie A B | zend(B,boodschap) OND 234 | boodsch = ontvang(A) OND 235 A B Besturingssysteem
Boekhouding Ten behoeve van facturatie Commercieel systeem Statistieken t.b.v. computersysteemplanning Knelpunten Afregelen (Tunen)
Inhoud Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Kosten en Baten Baten Kosten Uiteindelijk rendement
Baten Gebruiksvriendelijkheid Correcte werking Efficienter Geprivilegieerde bevelen, … Efficienter
Kosten Apparatuur Programmatuur Overhead aan tijd CVO complexer: PO, GBE, … Groot centraal geheugen (besturingsprogramma, multiprogrammatie) Voldoende randapparaten Programmatuur Verschillende manjaren Overhead aan tijd PO toestand bewaren (+ later herstellen) Extra controles (of geoorloofd) Deels gecompenseerd door tijdswinst (multiprogrammatie, optimisaties, …)
Rendement 80% processortijd: BP 20% processortijd: gebuikersprogramma 80% apparatuur: beheer van apparatuur 20% apparatuur: uitvoeren van bevelen 75% programma: organisatie (lussen, …) 25% programma: rekenen 0,2 * 0,2 * 0,25 = 0,01 = 1 % echte rekenwerk
Cursustekst Hoofdstuk 4: pag. 146 einde