790 likes | 930 Views
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
E N D
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? • 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)
ONV H/U S/P CC OVI SOI BT G GPF WEK DRK IN UIT SCH OVL SPL MFT 0: Halttoestand 1: Uitvoeringstoestand Halt-, Uitvoeringstoestand 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Alleen 4de stapbevelencyclus Volledigebevelencyclus
Anderbevel Programma-onderbreking PO STP KTO 3001111200 7100100298 Stapel Stapel Halt-, Uitvoeringstoestand STP? Halt-toestand Uitvoerings-toestand PO? KTO? ander? KTO
NULL TAAK1: … … TAAK2: … … TAAK3: … … Halt-, Uitvoeringstoestand • Lijst met taken • Taak = functie (op einde KTG) • Taak afgewerkt: volgende uit lijst • Lijst leeg: STP
struct taak { int * beginAdres; struct taak * volgendeTaak; } struct taak * taken = (struct taak *) -1; main() { taken = maakTakenLijst(); while (taken != (struct taak *) –1) { int * taak = taken->beginAdres; taken = taken->volgendeTaak; /* start uitvoering taak */ } } MAIN: … | creeer taken … WHILE: HIA R0,TAKEN VGL.w R0,-1 VSP GEL,STOP HIA R1,0(R0) | adres HIA R0,1(R0) | volg. BIG R0,TAKEN SBR 0(R1) | start … SPR WHILE STOP: STP TAKEN: -1 Halt-, Uitvoeringstoestand
Gebruikersprogramma Besturingsprogramma Probleem-, Supervisietoestand Ik mag alles Ik mag niet alles! 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
ONV H/U S/P CC OVI SOI BT G GPF WEK DRK IN UIT SCH OVL SPL MFT 0: Supervisietoestand 1: Probleemtoestand Halt-, Uitvoeringstoestand 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CVO voert besturings-programma uit CVO voert gebruikers-programma uit
Programma-onderbreking Anderbevel KTO STP PO KTO PO Niet-gepriv.bevel 3001111200 5100100298 0110100132 Stapel Stapel Stapel Halt-, Uitvoeringstoestand Uitvoerings-toestanden SupervisieToestand (0) Halt-toestand KTO Probleem-Toestand (1)
Geprivilegieerde bevelen • Probleemtoestand: • Niet alle bevelen toegelaten! DRAMA bevelen HIA, BIGOPT, AFT, VER, DEL, MOD, VGLSPR, VSP, SBR, KTG,OND INV, UTV,MKH, MKL, TSM, TSO,STP, KTO Geprivilegieerdebevelen Niet-geprivilegieerdebevelen
Geprivilegieerdbevel Niet-geprivilegieerdbevel Supervisie-toestand Probleem-toestand Geprivilegieerde bevelen 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 Verschillend van besturingsprogramma tot besturingsprogramma
/* 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 DRU NWL OPT.w R1,1 SPR FOR EFOR: STP R1 R0 Supervisie-oproep OND 1 | LEZ OND 2 | DRU OND 2 | DRU OND 3 | NWL OND 9999 | STP 1000 x 4 + 1 = 4001 supervisie-oproepen
| Gebruikersprogramma MAIN: … OND 2 … PO_R1: BIG R0,BEWAAR … BIG R9,BEWAAR+9 | welke dienst? … 0123 Gebruikers-programma 6199990002 0124 … 0125 8999 0110000125 Stapel 9000 0000000000 R9 Behandelingsroutine voorsupervisie-oproepen 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_PROCSPR TERUG1
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 Behandelingsroutine voorsupervisie-oproepen DST2: VGL.w R1,2 VSP NGEL,DST3 SBR DRU_PROC SPR TERUG DST3: … TERUG: HIA R0,BEWAARTERUG1: HIA R1,BEWAAR+1 … HIA R9,BEWAAR+9 KTO BEWAAR: RESGR 10 TDZD: 10000
PO_R1: … SBR DRU_PROC KTO (2) (1) (3) PO-vectoren (5) (6) (4) Behandelingsroutine voorsupervisie-oproepen Supervisie-toestand Probeemtoestand | Gebruikersprogramma MAIN: … OND 2 … OND 2 xxx_PROC: … … … KTG DRU_PROC: … UTV R5,P3 … KTG yyy_PROC: … … … 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) • …
int skip_uitvoering; while (true) { if (PTW[1] == 1) { /* uitvoeringstoest. */ /* STAP 1: haal bevel op */ … /* STAP 2: analyseer bevel */ fc = BR % 100000000; … skip_uitvoering = 0; if (PTW[2] == 1 && gepriv(fc)) { /* probleemtoestand */ PO_vlag[9] = 1; skip_uitvoering = 1; } /* STAP 3: voer uit */ if (! skip_uitvoering) { switch (fc) { case 11: /* HIA */ reg[acc] = OR; break; … case 99: /* STP */ PTW[1] = 0; break; }}} /* if (PTW[1] == 1) */ Bevelencyclus
/* --------------------- STAP 4: toegelaten programma- onderbreking? -------------------- */ 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 */ Bevelencyclus
Inhoud • Inleiding • Programmatoestandswoord • Programma-onderbrekingen • Invoer en uitvoer • Processortoestanden • Multiprogrammatie • Principe • Doorvoer • STP-bevel • Besturingsprogramma • Opstarten van de computer • Soorten Besturingssystemen • …
Programma heeft diegegevens nodig. Dit moet een anderprogramma zijn. 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 */ …
PROG_B PROG_A Besturingsprog PO_ROUT1 PO_ROUT6 halt OND 73 OND 73 OND 73 KTO KTO PO6 KTO KTO STP PO6 tijd PO6 PO6 Principe Schijfbezig I/O (A) klaarI/O (B) gestart I/O (A) gestart I/O (A) gestart I/O (A) klaar Lezen van schijf: OND 73
Principe • Monoprogrammatie • 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: • Initialisatie 100 ms • 4 x (100 ms wachten invoer + 100 ms rekenen) • 100 ms wegschrijven • = totaal 1 s • Uitvoering: • Monoprogrammatie (na elkaar) • Multiprogrammatie
Doorvoer Prog_A Prog_B halt Monoprogrammatie Doorvoer: 1 prog/s 1 2 Multiprogrammatie Prog_A Prog_B halt Doorvoer: ±2 prog/s 1,1 1
Prog_A Prog_B halt Prog_A Prog_B PO_R1 PO_R6 halt Prog_A Prog_B halt Prog_A Prog_B PO_R1 PO_R6 halt Doorvoer Vorige figuur Realiteit StartI/O I/O klaar StartI/O I/O klaar
Werkloos? • Zelden processor 100% bezighouden • Zwaar belast: 90 .. 95 % • Licht belast: 0 .. 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 omgestopt te worden • Programma uit geheugen verwijderen • Ander programma inbrengen?
R0R1 … R9 PTW R0R1 … R9 PTW R0R1 … R9 PTW Progr. A Progr. B Progr. C Boekhouding • Voor elk programma: gegevensstructuur • Inhouden van accumulatoren • BT, CC, OVI, … (eerste deel PTW) • Gebruikt bij programmawisseling
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 POgeactiveerd
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) Vastetijdslimieten 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
A B E BP A2 D1 BP1 B3 A1 E1 BP2 D C1 B1 D2 BP3 C E2 A3 B2 BP4 Geheugenbeheer • Multiprogrammatie meerdere programma’s gelijktijdig in geheugen • Verschillende algoritmes: • Aaneengesloten, gepagineerd, … HW: verspreide delenals 1 geheel laten voorkomen
A B E BP D C Geheugenbeheer • Verschillende programma’s bescherming In uitvoering Resultaatcorrect ? Privacygeschonden?
Niet toegestaanin probleem-toestand Geheugenbeheer • Geen geheugenbescherming: Elk programma kan in supervisor-mode uitvoeren! MAIN: … … … LABEL: … INV R0,P2 UTV R1,P3 …
PO-vectoren Uitvoeren inSupervisor-toestand! Geheugenbeheer PO_R1: BIG R0,BEWAAR … MAIN: … … … LABEL: … INV R0,P2 UTV R1,P3 …
PO-vectoren Geheugenbeheer PO_R1: BIG R0,BEWAAR … MAIN: HIA.a R0,LABEL BIG R0,9991 … LABEL: … INV R0,P2 UTV R1,P3 …
PO-vectoren Geheugenbeheer PO_R1: BIG R0,BEWAAR … MAIN: HIA.a R0,LABEL BIG R0,9991 … LABEL: … INV R0,P2 UTV R1,P3 … OND 1
PO-vectoren In supervisortoestand! Geheugenbeheer 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
Geheugenbeheer • Geen geheugenbescherming: IV tegen overschrijven beschermen Onvoldoende! MAIN: HIA R0,9991 HIA R1,INSTR BIG R1,0(R0) OND 1 INSTR: SPR LABEL LABEL: … INV R0,P2 UTV R1,P3
PO-vectoren Geheugenbeheer 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,9991HIA R1,INSTRBIG R1,0(R0)
PO-vectoren Geheugenbeheer 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
PO-vectoren In supervisortoestand! Geheugenbeheer 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
ondergrens bovengrens < Adres Ja Ja bus Neen Neen Geheugenbescherming Geheugen Prog. A CVO Geheugenbeheer eenheid Ondergrens Bovengrens