1 / 23

Almindelige ("hårde") links (i filsystemer med i-noder)

Almindelige ("hårde") links (i filsystemer med i-noder). pia:. jens:. opg.txt. opg.txt. 1 2. 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.

cole
Download Presentation

Almindelige ("hårde") links (i filsystemer med i-noder)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Almindelige ("hårde") links (i filsystemer med i-noder) pia: jens: opg.txt opg.txt 1 2 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

  2. Symbolske links (stadig i-noder) pia: jens: opg.txt opg.txt 1 1 pia jens /home/pia/opg.txt • <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.

  3. 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.

  4. Blokstørrelse • 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 K bytes/blok R omdr./millisek. B bytes/spor S søgetid (spor) i millisek

  5. Blok cache RAM Blok cache hd 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 ?

  6. Løsning (?) Systemkald: do_not_interrupt_me();

  7. 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 = 100 reservationer = 99

  8. 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"} .. Er filen låst ? Hvis ikke, så lås den ! Kritisk region Lås filen op igen

  9. Løsning: Låsning af filer • Udvider den almindelige adgangsregulering (jf. filers • beskyttelsesbits) • 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

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

  11. Problem: Race conditions ved evaluering af indgangsbetingelse til kritisk region Kontekst- skift ?!? Er filen låst ? Hvis ikke, så lås den ! .. 1. Læs fil 2. If (pladser = reservationer) .. • Løsning: • systemkald er atomiske • test og "låsning" udføres uden afbrydelse

  12. Kontrol af password ved login init • beder om brugernavn og password • password krypteres • krypteret password sammenlignes • hvis OK startes shell login shell

  13. /etc/passwd <prompt>ls -l /etc/passwd -????????? … root …. <prompt>cat /etc/passwd | grep root root:<krypteret password>:…:<hjemmekatalog>:/bin/bash • "Knækning" af password: • Alle kan kopiere password-filen og gætte passwords • med trial-and-error program.

  14. 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

  15. Oversættelse i C = egentlig oversættelse+ linkning myprogr.c myprogr.o myprogr cc -c myprogr.c cc -o myprogr myprogr.o cc -o myprogr myprogr.c • .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)

  16. Genbrug af C-funktion uden bibliotek getline.c getline.o cc -c getline.c myprogr.c myprogr.o myprogr 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)

  17. Genbrug af C-funktioner v.hj.a. biblioteker f1.c f2.o lib.a ar crv lib.a f1.o f2.o f2.c f2.o p.c p.o p cc -o p p.o lib.a • Ved at liste lib.a som parameter til linkningen • kommer de relevante definitionerne i lib.a med i p • (stadig statisk linkning)

  18. Arrays i C - erklæring og initialisering • // med angivelse af overgrænse • int 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´.

  19. Arrays i C - brug • // Kernighan/Ritchie s. 29: • #define MAXLINE 1000 • main (..) .. • 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 line getline s

  20. 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 peter@cbs.dk-bla-bla-..-bla-xy • Forudsætninger • bl.a. at C ikke har automatisk tjek af om et array-indeks er • udenfor arrayets grænser.

  21. Implementation af CALL og RETURN(med rekursion) [[SP]] <- [PC] [SP] <- [SP]-1 [PC] <- PR [SP] <- [SP]+1 [PC] <- [SP] !!!!!!!! CALL PR .. PR: .. RETURN • Retur-adresser for mere end et procedurekald gemmes • på stakken. • Indholdet af SP-registret er adressen på toppen af stakken.

  22. Brug af stakken til implementation af RETURN stak Plads til næste ret.adr. IR Returadresse Returadresse IP SP tekst (program) CALL .. data ?!?

  23. Stak i Linux Filnavn /bin/finger USER Environment- variable PATH CLASSPATH ... stak Parametre til programmet peter@cbs.dk-bla-bla-..-bla-xy SP Returadresse Returadresse tekst adresse på shellen data

More Related