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

Preview:

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

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

peter@cbs.dk-bla-bla-..-bla-xy

...Parametretil programmet

SP

Filnavn

Recommended