23
links (i filsystemer med i- noder) opg.txt jens: pia: rompt>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

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

  • 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

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

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

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

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

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

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.

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

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

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

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 ?

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

Løsning (?)

Systemkald:

do_not_interrupt_me();

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

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

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

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

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

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

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

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

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

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

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

Kontrol af password ved login

init

loginshell

• beder om brugernavn og password• password krypteres • krypteret password sammenlignes• hvis OK startes shell

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

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

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

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

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

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

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

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)

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

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

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

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

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

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

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

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.

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

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] !!!!!!!!

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

Brug af stakken til implementation af RETURN

IR

IP

SP

stak

tekst(program)

data

Plads til næste ret.adr.

Returadresse Returadresse

CALL ..

?!?

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

Stak i Linux

stak

Returadresse Returadresse

adresse på shellentekst

data

/bin/finger

USER

PATH

CLASSPATH

Environment-variable

[email protected]

...Parametretil programmet

SP

Filnavn