220 likes | 338 Views
Adresserum. A d r e s s e r u m. Adresserum: Det interval af adresser, der kan arbejdes med i den samme proces (fra 0 til største adresse) Lippiatt++: adresser fylder 8 bit adresserum: 0 - 256B Intel x86, x=4,5,.. Adresser fylder 32 bit adresserum: 0 - 4GB.
E N D
Adresserum A d r e s s e r u m • Adresserum: • Det interval af adresser, • der kan arbejdes med i • den samme proces • (fra 0 til største adresse) • Lippiatt++: • adresser fylder 8 bit • adresserum: 0 - 256B • Intel x86, x=4,5,.. • Adresser fylder 32 bit • adresserum: 0 - 4GB adresserum 32MB 4GB
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 ! • Faktisk er der ikke engang plads nok til en enkelt meget stor proces ! • Ide / håb: • Swapping: Processer der alligevel ikke kører kan flyttes .. • Paging: Del af procesbillede, der alligevel ikke bruges, kan flyttes ..
Paging • Da paging også er nødvendig hvis 1 isoleret proces er for stor til • RAM-lageret, antages for nemheds skyld at der kun er 1 proces • Løsninger: • eliminer problemet ved at begrænse adresserum (?) • opdel processen i sider hvoraf nogle gemmes på HD • Målsætninger for paging: • transparent (usynligt for programmør) • effektivt (minimer ind/ud-paging & anden administration) • undgå katastrofer når en del af processen mangler
Lippiat++(RAM str. = adr.rum) 0001=MOVE 0011=Reg nr. 3 11111111=Adr. 255 512B RAM IR 0001001111111111 256 ord 0001001111111111 1 ord = 2 byte
Lippiat++ (RAM str. < adr.rum) ??? IR 0001001111111111 256B RAM 0001001111111111 128 ord MMU 1 ord = 2 byte
Lippiat++ (RAM str. < adr.rum) Indholdet af virt. adr. 255 / 11111111 ligger i fysisk adr. 127 / (0)1111111 Side 3 (inde) Side 2 (ude) Ramme 1 Side 1 (inde) Ramme 0 Side 0 (ude) 256B RAM inddeles i to siderammer 512B proces inddeles i 4 sider, der alle gemmes på HD
Side-tabel (page table) • Indhold - for alle adresser i virtuelt adr.rum • skal tabellen kunne vise: • er adressen i RAM eller ej ? • hvis ja, hvor i RAM ? • Brug: • Alle referencer til virtuell adr.rum går via sidetabel • opslag skal være hurtigt • tabellen skal være lille (kunne være i MMU)
Design af sidetabel Sidenr. Siderammenr. Status 0 (irrelevant) Ude 1 0 Inde 2 (irrelevant) Ude 3 1 Inde • Ide til hurtigt opslag & transformation virt./fysisk adresse: • de første bit i en virtuel adresse er ens for alle adr. på samme side
Opslag i sidetabel MOVE .. 11111111 Sidenr. Siderammenr. Status 00 (irrelevant) 0 01 0 1 10 (irrelevant) 0 11 1 1 • MOVE .. 1111111 • Størrelse af sidetabel ?
Sidetabeller - andre spørgsmål • Hvad sker der når en side mangler i RAM-en • (når en virt.adr. tilhører en side der er "ude") ? • Page fault • Operativsystemet henter den manglende side, • og gemmer den "udsmidte" side (om nødvendigt). • Valg af sidestørrelse • f.eks. 4K • Store sidetabeller • kan ikke være i CPU/MMU • kan faktisk heller ikke være i RAM • flerniveau-sidetabeller (f.eks. 3)
Paging-algoritmer • Paging-algoritme = metode til at udvælge sider til "udsmidning" • Kriterier: • minimere antallet af page faults • effektivitet • Mulige forløb af programafvikling: • 333322221111000033332222 • 303020201010 • Principper: • approximer fremtidigt brug med hidtidig brug • ikke "retfærdighed" mellem processer Evt. page fault afhænger af paging algoritme Sammenlign FIFO og LRU (Least Recently Used)
"Second change" paging algoritmen implementeretmed circulær liste R-bit • Ide: en blanding af FIFO og LRU • Udsmidning af • ældste side • blandt sider der ikke brugt "for nylig" 1 1 0 0 RAM med fire siderammer
Paging vs. swapping • Paging vigtigere end swapping • swapping af hel proces tager lang tid • de fleste processer har dele som ikke bruges meget • Ud-swappet proces = ingen alm. sider i RAM, heller ikke sidetabel • Ud-swapning kan give bedre RAM-udnyttelse • udswapning af processer der har været inaktive i lang tid
Hvordan identificere kunderne ? 1 beskedkø til alle indkommende beskeder kunde Over- tjener filosof 1 beskedkø per kunde til status m.m. • Aftale mellem kunde/overtjener om hvad der er kundens ID • Formål: Information sendes fra filosof til den rigtige kunde • Overtjener kan trække numre fra talfølge • Kunde kan selv generere unikt ID • ((andre IPC-faciliteter order dette automatisk (sockets, kommer på senere kursus)))
Proces-id • Alle processer har forskelligt proces-id (0-32K). • Proces-id genbruges - men først når processen er død. • C-programmer kan læse egen proces-id med getpid(). // kundeid.c #include <stdio.h> struct besked { long int kunde_id; char txt[40]; }; main() { struct besked min_besked = {(long int)getpid(),"Hej, jeg vil gerne spise"}; printf("Beskedens kunde_id: %d \n",min_besked.kunde_id); printf("Beskedens txt: %s \n",min_besked.txt); };
Shellen • Findes i forskellige udgaver • /bin/sh • /bin/bash • /bin/csh • Default grænseflade til maskinen/operativsystemet • især til at starte processer • Jf. passwordfil • nielsj:xyzv¤#!&/(Ckjl:..:/home/nielsj:/bin/bash • Tekstbaseret modsat grafisk grænseflade • (lidt) mere besværlig at bruge • (meget) større udtrykskraft
Shellscripts Et shellscript er en fil med kommandoer der kan forstås og udføres af shellen. Shellscripts kan begynde med #!/bin/sh for at fortælle operativsystemet, at sciptet skal fortolkes af det angivne program (shellen). (Næsten) samme effekt af følgende: <prompt> Kommando <prompt> /bin/sh Fil hvis Fil indeholder Kommando <prompt> Fil hvis Fil indeholder #!/bin/sh samt Kommando
Shell-kommandoer til processtart • Basal start af proces • <program> // starter programmet hvis lovligt • kundeid • <program> <parametre> // do inkl. parametre • cc -o kundeid kundeid.c • Samtidighed • <program> & // kør program i "baggrund" • cc -o kundeid kunde.c & • Overlejring • exec <program> // overlejring (sjældent god ide) • exec kundeid
Kontrol af stdin/stdout ved processtart Omdirigering af output <program> ><fil> // omdirigering af stdout til fil ls -l >data.txt Omdirigering af input <program> <<fil> sort <data.txt Pipes <program> | <program> // omdir. af stdout og stdin
Shellscripts som programmeringssprog • Flere kommandoer kan sammensættes i sekvens • <kommando> ; <kommando> // kommandoer adskilles af ";" • cc -o kundeid kundeid.c ; kundeid • <kommando> // kommandoer kan også adskilles • <kommando> // vhja. linjeskift • cc -o kundeid kundid.c • exec kundeid • Streng-variable • <var>=<værdi> // tildeling, evt. oprettelse • $<var> // variablens værdi • min_pid=$$ // ($$ er procesid) • echo "$min_pid"
Shell-programmering: kommandolinjeparametre og betingelser • Læsning af kommandolinjeparametre vja. $0, $1, etc • #!/bin/bash • # run.sh • kildetekstfil=$1.c • program=$1 • echo "Oversætter kildeteksten i $kildetekstfil" • cc -o $program $kildetekstfil • echo "Oversættelse færdig" • echo "Kører programmet $program" • exec $program • Betingede kommandoer • if [ <betingelse> ]; then <en ell. flere kommandoer>; fi; • #!/bin/bash • if [ $# != 1 ] • then echo "skriv: run.sh objektfilnavn" • exit • fi • echo ..
Shell-programmering:løkker &brug af stdout fra andre processer • Løkker • For <var> in <list>; do <en ell. flere kommandoer>; done • for navn in peter ole poul; do echo "Hej $navn"; done • Brug af stdout fra andre processer • $(program) • For fil in $(ls); do ..; done