Upload
cole
View
23
Download
0
Embed Size (px)
DESCRIPTION
Almindelige ("hårde") links (i filsystemer med i-noder). pia:. jens:. opg.txt. opg.txt. 1 2. pia. ln /home/pia/opg.txt /home/jens/opg.txt hård link: ny post får i-node-nummer på eksisterende i-node link-count bruges til at beslutte hvornår filen skal slettes. - PowerPoint PPT Presentation
Citation preview
Almindelige ("hårde") links (i filsystemer med i-noder)
opg.txt
jens: pia:
<prompt>ln /home/pia/opg.txt /home/jens/opg.txt
• hård link: ny post får i-node-nummer på eksisterende i-node• link-count bruges til at beslutte hvornår filen skal slettes
opg.txt
1 2
pia
Symbolske links (stadig i-noder)
opg.txt
jens: pia:
<prompt>ln -s /home/pia/opg.txt /home/jens/opg.txt
• symbolsk link: ny post får ny i-node og ny blok, som indeholder filnavn.• efter sletning af /home/pia/opg.txt peger link-filen på ikke-eksisterende fil.
opg.txt
1
pia/home/pia/opg.txt
1
jens
Tjek af konsistens af filsystem
Blok-konsistens: For hver blok udregn:• X = antal filer der bruger blokken• Y = antal gange blokken optræder i listen over ledige blokke.• Krav: X+Y=1.
Fil-konsistens: For hver fil• X = antal kataloger der indeholder filen• Krav: X = "link count" i filens i-node.
Blokstørrelse
K bytes/blokR omdr./millisek.B bytes/sporS søgetid (spor) i millisek
Fordelen ved små blokke:• mindre spild i en fils sidste blok
Fordelen ved store blokke:• tidsforbrug til at finde og læse 1 blok (jf. Tanenbaum s. 171):
S + (1/2)*R + (K/B)*R
Blok cache
Blok cache hdRAM
read ..
write ..
read: læser fra cache i stedet for hd• hvis blokken ikke er i cache, læses den fra hd write: skriver til cache i stedet for hd• hvor tit skal en "dirty blok" i cachen skrives ud på hd-en ?
Løsning (?)
Systemkald:
do_not_interrupt_me();
Problem: race conditions
Program "MitProgram"
Pseudokode 1: Hvis reservation < pladser, så reserver
Pseudokode 2:1. Læs fil 2. If (pladser = reservationer) 3. then skriv på stdout: "fully booked"4. else {skriv på stdout: "OK";5. skriv i fil: "reservationer = 100"}
Fil "MineData":
pladser = 100reservationer = 99
Kritisk region - påbegyndes kun hvis fil ikke er låst
Program
Pseudokode 1: Hvis reservation < pladser, så reserver
Pseudokode 2:..1. Læs fil 2. If (pladser = reservationer) 3. then skriv på stdout: "fully booked"4. else {skriv på stdout: "OK";5. skriv i fil: "reservationer = 100"}..
Kritiskregion
Er filen låst ?Hvis ikke,så lås den !
Lås filenop igen
Løsning: Låsning af filer
Udvider den almindelige adgangsregulering (jf. filersbeskyttelsesbits)• en fil kan være låst for en proces, som om processen ellers har ret til at læse/skrive i filen
Fleksibilitet: • låsning af en del af en fil• delte låse
Frivillighedsprincip
Systemkald til låsning
Unix systemkald dedikeret til låsning • fcntl(..)• diverse faciliteter til findelt låsning m.m.• yderligere konvention om navngivning af låse m.m. ikke nødvendig
Det almindelige systemkald open (eller creat) kan også bruges• en ekstra fil bruges som låsefil• låsefilen er tom• hvis låsefilen "MineData.lock" findes, er filen "MineData" låst• .. = open("MineData.lock",… | O_EXCL,..)
..1. Læs fil 2. If (pladser = reservationer)
..
Er filen låst ?Hvis ikke,så lås den !
Problem: Race conditions ved evaluering af indgangsbetingelse til kritisk region
Kontekst-skift ?!?
Løsning: • systemkald er atomiske• test og "låsning" udføres uden afbrydelse
Kontrol af password ved login
init
loginshell
• beder om brugernavn og password• password krypteres • krypteret password sammenlignes• hvis OK startes shell
/etc/passwd
<prompt>ls -l /etc/passwd -????????? … root ….
<prompt>cat /etc/passwd | grep rootroot:<krypteret password>:…:<hjemmekatalog>:/bin/bash
"Knækning" af password:• Alle kan kopiere password-filen og gætte passwords med trial-and-error program.
Genbrug af klasser/funktioner
Java:• Klasser samles i pakker (og evt. jar-filer)• Genbrugs-program (inkl. packageerklæring) oversættes• Bruger-program (inkl. importsætning) oversættes
g.java g.class
b.java b.class
Oversættelse i C = egentlig oversættelse
+ linkning
myprogr.c myprogr.o myprogrcc -c myprogr.c cc -o myprogr myprogr.o
• .o-filer = objektfiler = maskinkode men ikke linket, dvs. har hverken definitioner eller adresser på eksterne funktioner• flaget -c betyder: spring link-fasen over• flaget -o betyder: placer output i den angivne fil (første parameter)• hvorvidt cc -o er oversættelse eller oversættelse+linkning afgør oversætteren ud fra endelsen af inputfil (anden parameter)
cc -o myprogr myprogr.c
Genbrug af C-funktion uden bibliotek
getline.c
myprogr.c
getline.o
myprogr.o myprogr
cc -c getline.c
cc -c myprogr.c cc -o myprogr myprogr.o getline.o
• Ved at liste getline.o som parameter til linkningen kommer definitionerne i getline.o med i myprogr (statisk linkning)
Genbrug af C-funktioner v.hj.a. biblioteker
f2.c
p.c
f2.o
p.o p
ar crv lib.a f1.o f2.o
• Ved at liste lib.a som parameter til linkningen kommer de relevante definitionerne i lib.a med i p (stadig statisk linkning)
f1.c f2.o lib.a
cc -o p p.o lib.a
Arrays i C - erklæring og initialisering
// med angivelse af overgrænseint a[10]; char b[256];
// uden angivelse af overgrænse (skal fremgå implicit)int c[] = {2,4,8,16,32,64,128,256,512,1024}; char e[] = "hello\n"; char d[] = {´h´, ´e´, ´l´, ´l´, ´o´, ´\n´, ´\0´};int getline(char s[],..) // prototype & def. af fkt.
• Der kan erklæres arrays af alle typer.• Første element har altid indeks 0.• Arrays er ikke klasser - et array har ikke tilknyttet felter/metoder.• Tekststrenge repræsenteres som array af tegn afsluttet med ´\0´.
Arrays i C - brug
// Kernighan/Ritchie s. 29:#define MAXLINE 1000main (..) .. char line[MAXLINE]; while … getline(line,MAXLINE) .. // kald
int getline(char s[],int lim) .. // def.
• Arrays parameteroverføres via pointer (jf. objektreferencer i Java). • Ingen tjek af array-grænser.
main
getline
line
s
Internet-ormen
Cracker: • vil udføre et program - f.eks. sekvensen xy på en maskine hvor han ikke er oprettet som bruger• kan kalde programmer f.eks. "finger" på maskinen fra fjern maskine• x = "start unix shell", y = "der gør det og det"
Ide:• kald "finger" med for en for lang parameter, der ender på "xy": finger [email protected] Forudsætninger • bl.a. at C ikke har automatisk tjek af om et array-indeks er udenfor arrayets grænser.
Implementation af CALL og RETURN
(med rekursion)
CALL PR..
PR: ..RETURN
• Retur-adresser for mere end et procedurekald gemmes på stakken.• Indholdet af SP-registret er adressen på toppen af stakken.
[[SP]] <- [PC] [SP] <- [SP]-1[PC] <- PR
[SP] <- [SP]+1[PC] <- [SP] !!!!!!!!
Brug af stakken til implementation af RETURN
IR
IP
SP
stak
tekst(program)
data
Plads til næste ret.adr.
Returadresse Returadresse
CALL ..
?!?
Stak i Linux
stak
Returadresse Returadresse
adresse på shellentekst
data
/bin/finger
USER
PATH
CLASSPATH
Environment-variable
...Parametretil programmet
SP
Filnavn