SOCS

78
1 SOCS Hoofdstuk 4 Besturingssysteme n

description

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 - PowerPoint PPT Presentation

Transcript of SOCS

1

SOCS

Hoofdstuk 4

Besturingssystemen

2

Inhoud

Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Kosten en Baten

3

Inhoud

Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden

Halttoestand en uitvoeringstoestand Probleemtoestand en supervisietoestand Geprivilegieerde bevelen Supervisie-oproep De volledige bevelencyclus

Multiprogrammatie …

4

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)

5

Halt-, Uitvoeringstoestand

H/U S/P CCONV OVI SOI BT

GPF WEK DRKG IN UIT SCH OVL SPL MFT

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

0: Halttoestand1: Uitvoeringstoestand

Alleen 4de stapbevelencyclus

Volledigebevelencyclus

6

Halt-, Uitvoeringstoestand

Halt-Halt-toestandtoestand

Uitvoerings-Uitvoerings-toestandtoestand

STP

KTOKTO

Anderbevel

Programma-onderbreking

3001111200

Stapel

7100100298

Stapel

7

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,TAAKBIG R0,TEDOEN

… | eerste taak…

HIA R0,TEDOENVGL.w R0,-1

VSP GEL,NIETS

SPR 0(R0)

NIETS: STP

TEDOEN:-1

8

Halt-, Uitvoeringstoestand

Beter: lijst met taken Taak afgewerkt: volgende uit lijst Lijst leeg: STP

TAAK1: ……

TAAK2: ……

TAAK3: ……

NULL

9

Probleem-, Supervisietoestand

Besturingsprogramma

Gebruikersprogramma

Ik mag allesIk mag niet alles!

CVO moet weten welk programma uitgevoerd wordt!

10

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

11

Halt-, Uitvoeringstoestand

H/U S/P CCONV OVI SOI BT

GPF WEK DRKG IN UIT SCH OVL SPL MFT

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

0: Supervisietoestand1: Probleemtoestand

CVO voert besturings-programma uit

CVO voert gebruikers-programma uit

12

Halt-, Uitvoeringstoestand

Halt-Halt-toestandtoestand

Uitvoerings-Uitvoerings-toestandentoestanden

STP

KTO

KTOAnderbevel

Programma-onderbreking

3001111200

Stapel

Probleem-Toestand (1)

SupervisieToestand (0)

KTO

0110100132

Stapel

Niet-gepriv.bevel

PO

5100100298

Stapel

PO

13

DRAMA bevelenDRAMA bevelen

Geprivilegieerde bevelen

Probleemtoestand: Niet alle bevelen toegelaten!

INV, UTV,INV, UTV,MKH, MKL, MKH, MKL, TSM, TSO,TSM, TSO,STP, KTOSTP, KTO

HIA, BIGHIA, BIGOPT, AFT, VER, OPT, AFT, VER, DEL, MOD, VGLDEL, MOD, VGL

SPR, VSP, SPR, VSP, SBR, KTG,SBR, KTG,

ONDOND

Geprivilegieerdebevelen

Niet-geprivilegieerdebevelen

14

Geprivilegieerde bevelen

UitgevoerdUitgevoerdPOPO99

UitgevoerdUitgevoerdUitgevoerdUitgevoerd

Probleem-Probleem-toestandtoestand

Supervisie-Supervisie-toestandtoestand

Niet-Niet-geprivilegieerdgeprivilegieerdbevelbevel

GeprivilegieerdGeprivilegieerdbevelbevel

15

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., …)

16

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

17

Supervisie-oproep

/* 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,0FOR: VGL.w R1,1000

VSP GRG,EFORLEZDRUVER R0,R0DRUNWLOPT.w R1,1SPR FOR

EFOR: STP

OND 1 | LEZOND 2 | DRU

OND 2 | DRU

OND 3 | NWL

OND 9999 | STP

1000 x 4 + 1 = 4001 supervisie-oproepen1000 x 4 + 1 = 4001 supervisie-oproepen

18

Behandelingsroutine voorsupervisie-oproepen

| Gebruikersprogramma

MAIN: …

OND 2

PO_R1:BIG R0,BEWAAR…BIG R9,BEWAAR+9

| welke dienst?

00123123

01250125

00124124

…6199990002

89998999

9000900001100001250000000000

Gebruikers-programma

StapelR9R9

HIA R0,0(R9)MOD R0,TDZDAFT.w R0,1HIA R1,0(R0)MOD R1,TDZD

DST1: VGL.w R1,1VSP NGEL,DST2SBR LEZ_PROCSPR TERUG1

19

Behandelingsroutine voorsupervisie-oproepen

PO_R1:BIG R0,BEWAAR…BIG R9,BEWAAR+9

| welke dienst?HIA R0,0(R9)MOD R0,TDZDAFT.w R0,1HIA R1,0(R0)MOD R1,TDZD

DST1: VGL.w R1,1VSP NGEL,DST2SBR LEZ_PROCSPR TERUG1

DST2: VGL.w R1,2VSP NGEL,DST3SBR DRU_PROCSPR TERUG

DST3: …TERUG: HIA R0,BEWAARTERUG1: HIA R1,BEWAAR+1

…HIA R9,BEWAAR+9

KTO

BEWAAR: RESGR 10

TDZD: 10000

20

Behandelingsroutine voorsupervisie-oproepen

| GebruikersprogrammaMAIN: …

OND 2…

DRU_PROC:…UTV R5,P3…KTG

LEZ_PROC:…INV R0,P1…KTG

LEZ_PROC:…INV R0,P1…KTG

LEZ_PROC:…INV R0,P1…KTG

PO-vectorenPO-vectoren

PO_R1: …

SBR DRU_PROC

KTO

(1)

(2)

(3)

(4)

(5)(6)

ProbeemtoestandSupervisie-

toestand

OND 2

21

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) …

22

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) */

23

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 */

24

Inhoud Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie

Principe Doorvoer STP-bevel Besturingsprogramma Opstarten van de computer

Soorten Besturingssystemen …

25

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 */

Dit moet een anderprogramma zijn.

Programma heeft diegegevens nodig.

26

Principe

PROG_B

PROG_A

Besturingsprog

PO_ROUT1

PO_ROUT6

halttijd

ON

D 7

3

ON

D 7

3 ON

D 7

3

KT

O

KT

O

KT

O

KT

O

ST

P

PO

6

PO

6

Lezen van schijf: OND 73 PO

6P

O6

I/O (A) gestart

I/O (A) gestart

I/O (A) klaar

Schijfbezig

I/O (A) klaar

I/O (B)gestart

27

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

28

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

29

DoorvoerProg_A

Prog_B

halt

Prog_A

Prog_B

halt

1 2

1 1,1

Monoprogrammatie

Multiprogrammatie

Doorvoer: 1 prog/s

Doorvoer: ±2 prog/s

30

DoorvoerProg_A

Prog_B

halt

Prog_A

Prog_B

PO_R1

PO_R6

halt

Prog_A

Prog_B

PO_R1

PO_R6

halt

Prog_A

Prog_B

halt

StartI/O

I/Oklaar

I/Oklaar

StartI/O

RealiteitVorige figuur

31

Werkloos?

Zelden processor 100% bezighouden 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

32

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?

33

Boekhouding

Voor elk programma: gegevensstructuur Inhouden van accumulatoren BT, CC, OVI, … (eerste deel PTW)

Gebruikt bij programmawisseling

R0R1

R9

PTWPro

gr.

A

R0R1

R9

PTWPro

gr.

B

R0R1

R9

PTWPro

gr.

C

34

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

35

Inhoud

Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Kosten en Baten

36

Soorten besturingssystemen

Algemeen Nut(general purpose)

Specifiek Doel(dedicated,embedded)

Niet-interactief Interactief

1 Gebruiker(Single User)

Meerdere gebruikers(Multi-User)

(Time sharing)

= Stapelverwerking(batch system)

Reële tijd(real time)

Vastetijdslimieten

37

Inhoud

… Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem

Geheugenbeheer Processorbeheer Het beheer van de randapparaten Bestandenbeheer Informatiebeheer Boekhouding

Kosten en Baten

38

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

39

Geheugenbeheer

Multiprogrammatie meerdere programma’s gelijktijdig in geheugen

Verschillende algoritmes: Aaneengesloten, gepagineerd, …

A B

C

E

BPD

A1

A2

A3

B1

B2

B3

PB1

PB2

PB3

PB4

E1

E2

D1

D2C1

HW: verspreide delenals 1 geheel laten voorkomen

40

Geheugenbeheer

Verschillende programma’s bescherming

AB

C

E

BP

D

In uitvoering

Resultaatcorrect ?

Privacygeschonden?

41

Geheugenbeheer

Geen geheugenbescherming:

MAIN: HIA.a R0,LABELBIG R0,9991OND 1

LABEL:…

INV R0,P2UTV R1,P3…

42

Geheugenbeheer

MAIN: HIA.a R0,LABELBIG R0,9991OND 1

LABEL:…

INV R0,P2UTV R1,P3…

PO-vectorenPO-vectoren

PO_R1:BIG R0,BEWAAR…

HIA.a R0,LABEL BIG R0,9991

43

Geheugenbeheer

MAIN: HIA.a R0,LABELBIG R0,9991OND 1

LABEL:…

INV R0,P2UTV R1,P3…

PO-vectorenPO-vectoren

PO_R1:BIG R0,BEWAAR…

OND 1

44

Geheugenbeheer

MAIN: HIA.a R0,LABELBIG R0,9991OND 1

LABEL:…

INV R0,P2UTV R1,P3…

PO-vectorenPO-vectoren

PO_R1:BIG R0,BEWAAR…

INV R0,P2 In supervisortoestand!

45

Geheugenbeheer

Geen geheugenbescherming:

MAIN: HIA R0,9991HIA R1,INSTRBIG R1,0(R0)OND 1

INSTR:SPR LABEL

LABEL:…

INV R0,P2UTV R1,P3

46

Geheugenbeheer

MAIN: HIA R0,9991HIA R1,INSTRBIG R1,0(R0)OND 1

INSTR:SPR LABEL

LABEL:…

INV R0,P2UTV R1,P3

PO-vectorenPO-vectoren

PO_R1:BIG R0,BEWAAR…

HIA R0,9991HIA R1,INSTRBIG R1,0(R0)

9991

47

Geheugenbeheer

MAIN: HIA R0,9991HIA R1,INSTRBIG R1,0(R0)OND 1

INSTR:SPR LABEL

LABEL:…

INV R0,P2UTV R1,P3

PO-vectorenPO-vectoren

PO_R1:BIG R0,BEWAAR…

OND 1

SPR LABEL

48

Geheugenbeheer

MAIN: HIA R0,9991HIA R1,INSTRBIG R1,0(R0)OND 1

INSTR:SPR LABEL

LABEL:…

INV R0,P2UTV R1,P3

PO-vectorenPO-vectoren

PO_R1:BIG R0,BEWAAR…

INV R0,P2

SPR LABEL

In supervisortoestand!

49

Geheugenbescherming

Geheugen

Prog. A

ondergrens

bovengrens

CVOGeheugenbeheer eenheid

bus

Ondergrens

Adres

Bovengrens

<Ja Ja

Neen Neen

50

Geheugenbescherming

Geheugen

Prog. A0200

1234

CVO

455

Geheugenbeheer eenheid

bus

0200

<

1234

Ja Ja

HIA R0,455

455

51

Geheugenbescherming

Geheugen

Prog. A0200

1234

CVO

9991

Geheugenbeheer eenheid

bus

0200

<

1234

Ja

Neen

BIG R0,9991

Adres!

52

Geheugenbeheer

Besturingsprogramma: tabel met vrij/bezet

Beginadres Lengte Toegekend aan …

0000 1140 A

1140 1060 Vrij

2200 2253 B

4453 76 Vrij

4529 1271 C

5800 1150 D

6950 50 Vrij

7000 3000 Besturings-programma

53

Processorbeheer

Meerdere programma’s wie processor? Keuze gebaseerd op:

Hoogdringendheid (prioriteit) Beurtrol …

Sommige programma’s aan het wachten …

54

Processorbeheer

afgewerkt

klaar

wachten

uitvoering

passief

Klaar om uitgevoerd te worden

Nog niet in het geheugen gebracht

I/O klaar

Gekozen

Supervisie-oproep (I/O)

Supervisie-oproep (STOP)

55

Processorbeheer

Besturingssysteem: tabel met info programma’s

Prog. Toestand Prio R0 … PTW

A klaar 10 0000001234 … 0110000123

B klaar 7 0000002341 … 0110011232

C wacht 3 0000000000 … 0110004434

D klaar 1 9999999999 … 0110006545

E passief 15 ??? … ???

56

Processorbeheer

Timesharing systeem: meerdere gebruikers Tijd eerlijk verdelen Respons-tijd (reactie-tijd): Elke gebruiker:

Indruk persoonlijke computer ter beschikking

57

Processorbeheer

Te Doen:1. Practicum Perl2. Practicum BvP3. SOCS studeren4. Vakantiebrochures5. Karweien thuis

58

Processorbeheer

Te Doen:1. Practicum Perl2. Practicum BvP3. SOCS studeren4. Vakantiebrochures5. Karweien thuis

59

Processorbeheer

Te Doen:1. Practicum Perl2. Practicum BvP3. SOCS studeren4. Vakantiebrochures5. Karweien thuis Klaar!

60

Processorbeheer

Te Doen:1. Practicum Perl2. Practicum BvP3. SOCS studeren4. Vakantiebrochures5. Karweien thuis

Enz.

61

Processorbeheer

Vóór: CVO gebruikersprogramma: Wekker zetten

Twee mogelijkheden: Gebruikersprogramma doet supervisor-oproep

wachten Wekker afzetten Volgende taak kiezen + eerst wekker instellen

Wekker loopt af Huidige taak tijdelijk uitstellen Volgende taak kiezen + eerst wekker instellen

62

Processorbeheer

Wekker: Opdrachtpoort: P9 P9 interval

interval > 0 wekker actief (telt af) interval <= 0 wekker inactief

Wekker actief: Elke s: P9 P9 – 1

Indien P9 == 0 PO_vlag[3] 1

63

Processorbeheer

Besturingsprogramma:…| Stel wekker inHIA R1,intervalUTV R1,P9| Herstel accumulatorenHIA R0,bewaar+0HIA R1,bewaar+1…HIA R9,bewaar+9KTO

bewaar: RESGR 10interval: 1000

64

PrincipePROG_A

PROG_B

PROG_C

PROG_D

PO_ROUT1PO_ROUT2

PO_ROUT6

halt tijd

ON

D 7

3

KT

O

KT

O

KT

O

KT

O

KT

O

Lezen van schijf: OND 73 PO

6P

O6

KiesProg. I/O (A)

gestartKies Prog.

KiesProg. Kies

Prog.KiesProg.

KT

O

65

Beheer van randapparaten

Besturingsprogramma: Toestand van elk apparaat bijhouden Opdrachten bijhouden indien apparaat bezig

Bezig (lezen)

CVO: Iets anders

Schrijven op schijf in wachtrij

66

Beheer van randapparatenApparaat Toestand Opdrachten

Scherm bezig A

Schrijf “xyz = …”

Toetsenbord klaar Beschikbaar

12345, abcde

Drukker klaar ---

Schijf bezig A

Schrijf cil:4,…, Data

B

Lees cil:6,…,Adres

Schijf2 defect ---

67

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

68

Bestandenbeheer

Prog.java

Socs.doc

Spel

Inhoudstafel

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

69

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

70

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

24 april 2002

10:00:00

1.002.100

# PO-en

15:34:02

Referentiedatum + tijd

24 april 2002

Huidigedatum + tijd

20.042 s later

Niet nauwkeurig (PO uitstellen, missen, …)

71

Informatiebeheer

Bijhouden van de tijd 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)

72

Informatiebeheer

Samenwerkende programma’s Informatie uitwisselen = Communicatie

A B

A B

| zend(B,boodschap)OND 234

| boodsch = ontvang(A)OND 235

Besturingssysteem

73

Boekhouding

Ten behoeve van facturatie Commercieel systeem

Statistieken t.b.v. computersysteemplanning Knelpunten Afregelen (Tunen)

74

Inhoud

Inleiding Programmatoestandswoord Programma-onderbrekingen Invoer en uitvoer Processortoestanden Multiprogrammatie Soorten Besturingssystemen Taken van een besturingssysteem Kosten en Baten

Baten Kosten Uiteindelijk rendement

75

Baten

Gebruiksvriendelijkheid Correcte werking

Geprivilegieerde bevelen, … Efficienter

76

Kosten

Apparatuur 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, …)

77

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

78

Cursustekst

Hoofdstuk 4: pag. 146 einde