swapping og paging
DESCRIPTION
Swapping og paging. Flytning af processer (swapping) eller dele af processer (paging) mellem arbejdslager og fjernlager. Baggrund: På den ene side skal arbejdslager rumme alle processers procesbillede aht. hurtig overførsel af instruktioner og data til CPU. - PowerPoint PPT PresentationTRANSCRIPT
Swapping og paging
Flytning af processer (swapping) eller dele af processer (paging)mellem arbejdslager og fjernlager.
Baggrund:• På den ene side skal arbejdslager rumme alle processers procesbillede aht. hurtig overførsel af instruktioner og data til CPU. • På den anden side har arbejdslageret ikke plads nok til alle processerne !
Ide / håb:• Swapping: Processer der alligevel ikke kører kan flyttes ..• Paging: Del af procesbillede, der alligevel ikke bruges, kan flyttes ..
I/o-tunge processer => multitasking
Cpu: I/o: 20% 80%
Mindst fem samtidige processerfor at udnytte cpu-en
Sandsynlighedsmodel for cpu-udnyttelse
Antal processer Sandsynlighed for ledig cpu
1 0,8
2 0,8 * 0,8 = 0,64
5 0,8*0,8*0,8*0,8*0,8 = ca. 0,32
n 0,8 i n'te
Antagelser Tanenbaum s. 76-77:• Alle processer har 80% ledighed• Processers ledighed er indbyrdes uafhængig
Konklusion på model
Vigtigt at få plads til mange processer i arbejdslager.• Køb ekstra RAM !• Udnyt hele arbejdslageret.• Swapping.• Paging.• Optimer ved at processer med samme program deles om tekst-segment• Optimer ved at bruge multitrådning.
Udnyt hele arbejdslageret
Processer vokser • stak-segment: rekursive procedurekald. • data-segment: plads til data• f.eks. et tekstbehandlingsprogram som bruges til et redigere et dokument som bliver større og større
Ikke nok RAM til at alle processer på forhånd kan allokeres "nok" RAM.
Dynamisk allokering af plads til processer:• en proces kan tildeles mere plads i løbet af dens liv• (men i rimeligt store portioner ad gangen)
Virtuelle vs. fysiske adresser
Assembler:LOAD N R1 // [R1] <- [N] ADD R1 RO // R1 indeholder allerede 3STORE R1 N // [N] <- [R1]
Alle processer tror de har maskinen for sig selv • I assembler/maskin-program er adressen på variablen i lagt fast en gang for alle, ved oversættelsen.• Udgør den virtuelle adresse på variablen !
Processerne deles rent faktisk om cpu og RAM, • derfor skelnes mellem virtuel adresse og fysisk adresse.
C:i = i+3;
Fysisk adr. = virtuel adr. + base
LOAD N R1 // [R1] = [N+base] ADD R1 RO // R1 indeholder allerede 3STORE R1 N // [N+base] = [R1]
Her ligger processen
rent faktisk
Her tror processen den ligger
base
N
N+baseCpu kan bruge et registermed base som lægges tilalle adresser.
Forudsætninger:• flere samtidige processer• den enkelte proces lagres sammenhængende
"Swap disk"
Hvis en proces helt (swapping) eller delvist (paging) midlertidigter slettet fra arbejdslageret, skal stak- og data-segmenterne gemmes på harddisken. (Evt. også tekst-segment).
"Swap disk" ell. "swap space" er Linux-slang for et antal blokkesom reserveres til dette formål.
ProgramProcesskabelse
proces
swapping,paging
RAM HD
Dele af procesgemt på "swap disk"
Problemer som skal løses ved swapping
Finde plads i arbejdsplager til nye og ind-swappede processer
Finde plads på swapdisk til ud-swappede processer
Hvis et operativsystem bruger swapping uden paging allokeres sammenhængende plads i arbejdslageret.• Hurtigere programafvikling (register med offset tilstrækkelig) • Dårlig udnyttelse af arbejdslager (mange "huller").
Lageradministration med hægtede lister
Bruges til allokering af sammenhængende plads i arbejdslageret til ny eller ind-swappet proces
((Kan også bruges til at holde styr på data-segmentet for den
enkelte proces))
Valgmulighed mellem first-fit, next-fit, best-fit, m.fl.
P 0 5 H ? 3
P=procesStartadr.
LængdeHægte
Opgave 1: overtjeneren
1. (Svær) Modificer og udvid din løsning af filosofproblemet med et overtjenerprogram og et kundeprogram.
Ideen med opgaven er at du skal lave et program som kan håndtere flere samtidige klienter, som tilgår de samme ressourcer - i forenklet form det samme problem som skal løses af en webserver med en e-handelsløsning.
I opgaven er overtjenerens formål at modtage kunder. Overtjeneren er den første proces der startes. Derefter startes et eller flere kundeprogrammer. Hvert kundeprogram sender en besked (via en beskedkø) til overtjeneren gående ud på at kunden gerne vil spise.
..
Hvilke processer skal der være ?
kundeOver-tjener
filosof filosof
kunde
Besked:Jeg søger enplads ved bordet
Filosofprocesstartes hvis der er plads
Beskedersendes tilbagemed status("spiser", "tænker")
Opdeling i kunde/filosof • påtvunget for at det skal ligne ehandels-server etc. !• I kan genbruge jeres gamle filosoffer
Overtjener: lytter til beskedkø
// overtjener.c
..{opret beskedkø} // navn på kø kendt af kunde ..while (TRUE) { // eller while(OPEN) ?? msgrcv(..); // bloker indtil der er besked help_customer(..);};..help_customer(..) { // parametre ? if ({der er ikke plads}) {afvis kunden}; // kan forbedres ! else { {marker plads som optaget}; // og evt. antal retter pid = fork(); switch(pid) { Case -1: {error}; exit(1); Case 0: {start filosof} // nyt program eller p-kald? } }}..
Hvilke beskedkøer ?
kundeOver-tjener
filosof
1 beskedkø til alleindkommende beskeder
1 beskedkø per kundetil status m.m.
• Hvordan aftale kunde-afhængig beskedkø ?• Forbedringer til at håndtere "alle pladser optaget" ?
Arrays og pointerechar txt[] = "hello world!\n";; // skaber txt[0].. txt[14] samt txt // hvor txt er adressen på txt[0]
putchar(txt[0]); // vi vil se det 1. Tegn !putchar(txt[13]); // vi vil se det 14. Tegn ! // txt[13] findes ved at lægge 13 til txt
putchar(*(txt)) // samme som txt[0]putchar(*(txt + 13)) // samme som txt[13]
• Navnet på et array (txt) er en adresse, nemlig adressen på array-ets første element (txt[0]) og har således lighedspunkter med en pointer.
• C tillader "pointer-aritmetik" både med pointere og arraynavne.
Beregning af længden af en streng
// naturligt program
int strlen(char s[]) { int pos; for (pos=0; s[pos] != '\0'; pos++); // s + pos lægges sammen i hver iteration return pos;}
// optimeret med pointer-aritmetik
int strlen(char *s) { char *pos; for (pos = s; *pos != '\0'; pos++); // .. hvilket er sparet væk her ! return (pos - s);}