You are on page 1of 294

dr Dragan Miliev

Redovni profesor, Elektrotehniki fakultet u Beogradu


dmilicev@etf.rs, www.rcub.bg.ac.rs/~dmilicev

Operativni sistemi 1

Poetni kurs

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 1


Sadraj

I Uvod
II Osnovi arhitekture raunara
III Upravljanje procesima
IV Upravljanje memorijom
V Ulazno/izlazni sistemi
VI Fajl sistemi
VII Zakljuak

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 2


I Uvod

O predmetu
Pojam, namena i funkcije operativnih sistema
Istorijat i vrste operativnih sistema

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 3


Glava 1: O predmetu

Sadraj, ciljevi i preduslovi


Organizacija nastave
Praktian rad
Kolokvijumi
Ispit
Literatura
Kontakti

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 4


Sadraj, ciljevi i preduslovi
Sadraj:
Namena i funkcije operativnih sistema
Osnovni koncepti operativnih sistema
Osnovni algoritmi, problemi i reenja
Principi funkcionisanja, projektovanja i implementacije
Ciljevi:
Upoznati se sa namenom, funkcijama, konceptima i principima
funkcionisanja, projektovanja i implementacije operativnih sistema
Stei opte, fundamentalno znanje primenjivo na operativne
sisteme uopte, nevezano ni za jedan konkretan sistem
Osposobiti se za razumevanje i korienje postojeih i
projektovanje sopstvenih specijalizovanih sistema
Mnogim ljudima su OS magija: ovaj kurs ih demistifikuje!

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 5/294


Sadraj, ciljevi i preduslovi
Preduslovi:
Poznavanje korienja raunara i osnovnih delova
hardvera i softvera (Praktikum iz korienja raunara)
Dobro poznavanje osnovnih principa i tehnika
proceduralnog i OO programiranja
Poznavanje osnova arhitekture raunara
Dobro savladano gradivo predmeta: Programiranje 1 i 2,
Praktikum iz programiranja, Objektno orijentisano
programiranje 1, Algoritmi i strikture podataka, Osnovi
raunarske tehnike, Arhitektura raunara
Vetina u programiranju na jezicima C i C++
Samostalan, praktian i kontinuiran rad:
operativni sistemi se nabolje mogu razumeti
konstruiui sopstveni!
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 6/294
Organizacija nastave i praktian rad
Predavanja: 2 asa nedeljno
Vebe:
2 asa nedeljno
zadaci za razumevanje koncepata i algoritama
diskusija, demonstracije i konsultacije
Praktian samostalan rad:
obavezan domai zadatak (projekat)
student samostalno izgrauje i integrie delove jednog
malog, ali potpuno funkcionalnog operativnog sistema
radi se i brani samostalno, usmeno i na raunaru
ulazi u konanu ocenu sa 30% plus 10% bonusa

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 7/294


Kolokvijumi
3 kolokvijuma
ukupno nose 40 poena: 15+15+10 poena
sloeniji, obimniji, konstruktivni zadaci
rade se sa dozvoljenom literaturom
svaki kolokvijum traje 1,5 sat
moe se nadoknaditi bilo koji od prva dva kolokvijuma (jedan ili
oba), ali samo u jednom terminu godinje za nadoknadu (prvi
ispitni rok ili nadoknada kolokvijuma ili ispit, ali ne oba)
za prolaz je potrebno u zbiru prikupiti bar 40% poena sa
kolokvijuma

Kol. # SI IR
1 U redovnom terminu 1. kol. SI U redovnom terminu 2. kol. SI
2 U redovnom terminu 2. kol. SI U redovnom terminu 2. kol. SI
3 U redovnom terminu junskog roka U redovnom terminu junskog roka

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 8/294


Ispit
Pismeni ispit:
pre pismenog ispita se mora predati kompletno uraen domai
zadatak
moe se polagati u svakom zvaninom ispitnom roku
ukupno nosi 30 poena
kratka pitanja, jednostavni zadaci za proveru osnovnog znanja i
razumevanja gradiva
traje 1,5 sat
radi se bez dozvoljene literature i bilo kakvih pomagala
za prolaz je potrebno prikupiti bar 50% poena sa pismenog dela
Usmeni ispit:
odbrana domaih zadataka
teorijska i praktina pitanja i usmeni odgovori

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 9/294


Literatura
Referentne knjige:
Silberschatz, A., Galvin, P., Gagne, G.: Operating System
Concepts, 7th ed., John Wiley and Sons
www.os-book.com
www.wiley.com/college/silberschatz
B. orevi, D. Pleskonji, N. Maek, Operativni sistemi
koncepti, Mikro knjiga, 2005.
Univerzitetski kursevi:
Stanford University: www.stanford.edu/class/cs140/
University of Washington:
www.cs.washington.edu/education/courses/451/
Koristan materijal:
D. Miliev, Programiranje u realnom vremenu, skripta za
predavanja, ETF, http://prv.etf.rs

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 10/294


Kontakti
Sajt predmeta:
http://os.etf.rs
Nastavnik: prof. dr Dragan Miliev
dmilicev@etf.rs
www.rcub.bg.ac.rs/~dmilicev
Asistenti:
ivojin utran, zika@etf.rs
Milana Prodanov, milana@etf.rs
Uro Radenkovi, uki@etf.rs

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 11/294


Glava 2: Pojam, namena i funkcije OS

ta je operativni sistem?
Zato postoje OS?
Osnovni zadaci i funkcije OS
ta sve obuhvata OS?

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 12


ta je operativni sistem?
User 1 User 2 User n

Compiler Text processor Database system

System and Application Programs

Operating System

Hardware

OS je program koji slui kao posrednik izmeu


korisnika, odnosno njegovih programa,
i raunarskog hardvera
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 13/294
Zato postoje OS?
OS postoje jer su oni razuman nain da se rei
problem izgradnje upotrebljivog raunarskog
sistema
Aplikativni programi obuhvataju neke zajednike
operacije, kao to su operacije sa U/I ureajima
Upravo te zajednike operacije upravljanja HW
resursima raunara skupljene na jedno mesto i
pogodne za upotrebu od strane vie programa
ine OS
ini aplikacije prenosivim apstrahujui HW

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 14/294


Osnovni zadaci i funkcije OS
Osnovni zadaci OS:
Uiniti raunarski sistem pogodnim za upotrebu:
lake sa njim nego bez njega
Postii efikasnost raunarskog sistema: posebno vano
za velike, serverske sisteme koje deli mnogo korisnika
Osnovne funkcije OS:
upravljanje resursima: CPU, OM, I/O, ... konano i
ogranieno uiniti (prividno) neogranienim
zatita raunarskih resursa od nepravilne upotrebe ili
zloupotrebe

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 15/294


ta sve obuhvata OS?
Razliita shvatanja opsega operativnih sistema:
Tradicionalno shvatanje:
kernel (jezgro) program koji obavlja osnovne funkcije OS i
uvek se nalazi u memoriji
skup uslunih sistemskih programa
shell (koljka) komandni ili grafiki korisniki interfejs (GUI)
prema funkcijama OS
Moderno shvatanje: sve ovo i jo
luksuzan GUI
skup uslunih aplikativnih programa
programi za Internet usluge
...
Sve to proizvoa isporui pod tim nazivom.
Primer: Microsoft Windows

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 16/294


Glava 3: Istorijat i vrste OS

Paketni sistemi
Sistemi sa vremenskom raspodelom
Personalni raunarski sistemi
Multiprocesorski sistemi
Distribuirani sistemi
Sistemi za rad u realnom vremenu

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 17


Paketni sistemi
Paketni sistemi (batch system):
prvi raunari 1960-ih i 70-ih
ulazni ureaji: ita kartica i magnetne trake
izlazni ureaj: linijski tampa, bua kartica i magnetne trake
nema interakcije sa korisnikom korisnik pripremi posao (job)
za obradu (program+ulazni podaci), operater to postavi na
sistem, pokrene izvravanje i vrati korisniku rezultat (izlazni
podaci ili izvetaj o greci)
OS
OS je sasvim jednostavan:
jedini zadatak je prei sa jednog posla na drugi
User
stalno prisutan u memoriji Job
Operater pravi paket (batch) srodnih poslova i pokree
ih kao grupu

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 18/294


Paketni sistemi
Problem: CPU je esto neiskorien ekajui na I/O
operaciju:
CPU execution
CPU ciklusi: mikrosekunde ili nanosekunde
I/O operation
Odziv I/O ureaja: milisekunde ili sekunde
time

Uvoenje diskova omoguilo je direktan pristup


pojedinanom poslu, bez potrebe njihove sekvencijalizacije
Rasporeivanje poslova (job scheduling): iz skupa
raspoloivih poslova (pool), izabrati onaj ili one koji e se
uitati u memoriju i izvravati
Multiprogramiranje (multiprogramming): izvravati vie
poslova upredo; dok jedan eka na zavretak I/O
operacije, CPU izvrava drugi posao

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 19/294


Multiprogramiranje
Generiki oblik posla:
begin time
compute;
I/O;
Job 1
compute;
I/O; Job 2
...
end. Job 3

OS CPU 1 2 3 1 2 1 3
I/O 1 2 3 1 2
Job 1

Job 2 CPU execution


I/O operation
Job 3
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 20/294
Multiprogramiranje
Otvorena pitanja:
kako iz skupa svih poslova izabrati one koji e se uitati u memoriju
i izvravati job scheduling
kako smestiti poslove razliite veliine u memoriju
memory management
kada posao koga CPU trenutno izvrava zatrai I/O operaciju,
kako izabrati sledei koga e CPU izvravati CPU scheduling
kako prei sa izvravanja jednog na izvravanje drugog posla
context switch
kako opsluivati zahteve za I/O operacijom na deljenom ureaju
I/O device scheduling
kako spreiti da jedan posao sluajno ili namerno ugrozi memorijski
sadraj drugog protection
kako se izbaviti iz situacije kada jedan program krene u
beskonanu petlju - preemption
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 21/294
Sistemi sa raspodelom vremena
Paketni sistemi omoguuju efikasno deljenje resursa, ali
nisu interaktivni (ne interaguju sa korisnikom tokom rada)
Posao sada, osim na zavretak I/O operacije sa ureajem,
moe da eka i na (re)akciju korisnika preko tastature ili
mia
Vreme ljudske reakcije je reda ~1/2 do najmanje ~1/7
sekunde. Vreme reakcije raunara na akciju korisnika je
tipino kratko (reda nekoliko desetina ili stotina ms)
Vano za interaktivne sisteme je vreme odziva (response
time) sistema na akciju korisnika treba da bude reda
slinog kao i vreme ljudske reakcije, tj. do ~1s

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 22/294


Sistemi sa raspodelom vremena
Generiki oblik interaktivnog procesa:
loop
wait for user input; CPU execution
compute reaction; User action
display result;
end. time

Proc 1
Proc 2

Proc 3

User 1
User 2 Response time
User 3

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 23/294


Sistemi sa raspodelom vremena
Generiki oblik interaktivnog procesa:
loop
wait for user input; CPU execution
compute reaction; User action
display result;
end. time

Proc 1
Proc 2

Proc 3

User 1
User 2 Response time
User 3

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 24/294


Sistemi sa raspodelom vremena
Uoptenje principa multiprogramiranja na interaktivne
viekorisnike sisteme
raspodela vremena (time-sharing, multitasking)
Ideja: osim kada sam zatrai I/O operaciju, posao moe da
izgubi procesor i kada mu istekne dodeljeno CPU vreme
OS dodeljuje CPU vreme svakom poslu i relativno esto
preuzima procesor
Rezultat: svaki korisnik ima utisak da raunar radi samo za
njega sa dovoljno dobrim i ujednaenim vremenom odziva,
a raunar opsluuje vie korisnika
Program koji je uitan u memoriju i izvrava se uporedo sa
drugim programima naziva se proces (process)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 25/294


Sistemi sa raspodelom vremena
Otvorena pitanja: ista kao i kod multiprogramiranja, i jo:
Da bi se posao izvravao sa razumnim vremenom odziva, potrebno
je ponekad izbacivati delove posla iz memorije i ubacivati delove
drugog posla, poto ne mogu svi celi da stanu. Posao nije uvek ceo
u memoriji.
Tehnika koja ovo omoguava virtuelna memorija (virtual
memory).
Fajl sistem
Upravljanje diskovima
Poetak 1960-ih. ira upotreba 1970-ih.
Danas su svi viekorisniki interaktivni sistemi opte
namene ovakvi!

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 26/294


Sistemi sa raspodelom vremena
Razlikovati pojam programa od procesa: proces predstavlja izvravanje
nekog programa nad datim skupom podataka. Vie procesa moe biti
aktivirano nad istim programom
Primeri kombinacija:
monoprogramski, monoprocesni: specijalizovani ili ugraeni (embedded)
sistem za upravljanje nekim HW sistemom
multiprogramski, monoprocesni: personalni raunar starije generacije koji
moe imati u memoriji i izvravati samo jedan program u jednom trenutku;
stariji paketni sistemi
monoprogramski, multiprocesni: specijalizovani sistem posebne namene sa
vie korisnika
multiprogramski, multiprocesni: sistemi sa raspodelom vremena,
svi moderni OS opte namene
Viekorisniki sistem:
samo jedan korisnik u datom trenutku (npr. personalni sistem)
vie korisnika u jednom trenutku; implicitno multiprocesni

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 27/294


Personalni raunarski sistemi
Poeci 1970-ih: monoprocesni, monokorisniki
Dananji: multiprocesni, jedno- ili viekorisniki
Aspekt efikasnosti upotrebe manje vaan nego
ranije (jedan ili malo korisnika u jednom trenutku)
Vaniji aspekti:
interaktivnost
vreme odziva
multitasking
pogodnost upotrebe
umreavanje i pristup Internetu
zatita
pouzdanost
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 28/294
Multiprocesorski sistemi
CPU CPU ... CPU

OM
Vie procesora sa deljenom memorijom
Ciljevi:
poveati propusnu mo (throughput) koliina uraenog posla u
jedinici vremena; panja: poveanje nije linearno!
uteda zbog deobe periferijskih ureaja
poveanje pouzdanosti tolerancijom otkaza (fault tolerance)
Simetrini i asimetrini sistemi
Asimetrini sistemi:
specijalizovani I/O mikroprocesori (npr. za disk, tastaturu)
master/slave sistemi
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 29/294
Distribuirani sistemi
Skup procesora bez zajednike memorije,
povezanih komunikacionom mreom:
specijalizovani homogeni distribuirani sistemi
lokalne mree (Local Area Network, LAN)
mree ireg podruja (Wide Area Network, WAN)
Internet
Svi moderni OS podravaju umreavanje:
moduli za komunikacione protokole (TCP/IP, PPP)
Internet usluge
pristup fajlovima preko mree (distribuirani fajl sistemi)
Distribuirani OS: OS koji na distribuiranom sistemu
stvara utisak jedinstvenog skupa dosupnih resursa
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 30/294
Sistemi za rad u realnom vremenu
Sistem za rad u realnom vremenu (real-time
system, RTS): sistem za koga nije samo vano da
rezultat bude logiki ispravan, ve i da je
proizveden na vreme
Hard RTS: definisani vremenski rokovi moraju da
budu ispotovani, inae e doi do traginih
posledica po ivote i zdravlje ljudi, materijalna
sredstva ili ivotnu sredinu
Soft RTS: definisane vremenske rokove treba
potovati, ali je dopustivo da se oni ponekad i
prekorae, sve dok su performanse sistema u
okvirima zadovoljavajueg

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 31/294


Sistemi za rad u realnom vremenu
Karakteristike Hard RTS OS:
ne postoje HW i SW komponente koje bi unosile neodreenost u
vremenske karakteristike (kanjenja, vreme odziva): diskovi,
virtuelna memorija
nema raspodele vremena
procesi su periodini ili sporadini
rasporeivanje je veoma strogo i karakteristino (po prioritetima ili
po vremenskom roku)
nijedan OS opte namene nema karakteristike potrebne za hard
RTS
Karakteristike Soft RTS OS:
mora postojati podrka za rasporeivanje po prioritetima i kontrolu
vremenskih rokova
mnogi moderni OS imaju ovakvu podrku

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 32/294


II Osnovi arhitekture raunara

Elementi arhitekture procesora


Mehanizam prekida
Ulaz/Izlaz
Virtuelna memorija
Memorijska hijerarhija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 33


Glava 4: Elementi arhitekture
procesora

Aritmetiko-logika jedinica
Programski dostupni registri
Programski broja
Izvravanje instrukcije
Naini adresiranja
Potprogrami i stek
Kontekst procesora

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 34


Aritmetiko-logika jedinica
ALU (Arithmetic-Logic Unit) je logika mrea koja izvrava
aritmetiku ili logiku operaciju zadatu kontrolnim
signalima nad jednim ili dva binarna operanda i proizvodi
binarni rezultat.
5 (0011)
3 (0101) 3 (0010)
2 (0011)

5 (0011)
3 (0101) 3 (0010)
2 (0011)

ADD (10)
MUL (00)

8 (0110)
6 (1000)

8 (0110)
6 (1000)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 35/294


Programski dostupni registri
Registri koji se mogu referencirati u
instrukcijama. uvaju svoj sadraj od R0
jedne do druge instrukcije R1
Registri za podatke (data registers): R2
registri koji se iskljuivo ili dominantno R3
koriste za smetanje operanada i rezultata ...
instrukcija R15
Registri za adrese (address registers):
registri koji se iskljuivo ili dominantno
koriste za smetanje adresa operanada i
rezultata instrukcija koji se inae nalaze u
memoriji
RISC procesori: ortogonalna arhitektura,
svi registri su ravnopravni, mogu se
koristiti i za adrese i za podatke -
registarski fajl
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 36/294
Programski broja
Programski broja (program counter, PC) je registar ija vrednost predstavlja
memorijsku adresu instrukcije koja je naredna za izvravanje

int a,b,c,d; // R1,R2,R3,R4 00A0 ...


... 0000
00A1
d=c-(a+b)*c ADD R0,R1,R2
00A2 0102
R0 00A3 0200
MUL R0,R0,R3
R1
R2 0000
0102
0200
0003
0104
0300 00A4 0003
R3
... 00A5 0104 SUB R4,R3,R0
R15
00A6 0300
00A1
00A2
00A3
00A4
00A5
00A6 00A7 ...
00A8 ...
00A9 ...
RD 00AA ...
PC = 00A6
00A1
00A7
00A2
00A3
00A4
00A5
WR 00AB ...
CPU 00AC ...
00AD ...
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 37/294
Izvravanje instrukcije
Read Mem @PC

PC = PC+1
Instruction Fetch
Decode
Instruction
Execution Yes
More?

Interrupt
Handling
Fetch Operands

Compute Result

Store Result
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 38/294
Naini adresiranja
Neposredno (immediate): operand (samo izvorini) je
neposredno zapisan u samoj instrukciji:
LOAD ...,#0F1Ah
LOAD ...,#Const
Registarsko direktno (register direct): operand je u registru
koji je zapisan u instrukciji:
LOAD R2,...
Memorijsko direktno (memory direct): operand je u
memoriji na adresi koja je zapisana u instrukciji:
LOAD ...,[0F1Ah]
LOAD ...,[VarX]

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 39/294


Naini adresiranja
Registarsko indirektno (register indirect): operand je u
memoriji na adresi koja je zapisana u registru koji je
zapisan u instrukciji:
LOAD ...,[R0]
Registarsko indirektno sa pomerajem (register indirect with
displacement): operand je u memoriji na adresi koja se
dobija sabiranjem sadaja registra koji je zapisan u
instrukciji i konstante koja je zapisana u instrukciji:
LOAD ...,0F1Ah[R0]
LOAD ...,VarX[R0]

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 40/294


Potprogrami i stek
Kako kodovati sledeu funkciju?
int factoriel (int n) { 6
if (n==0) return 1;
else return n*factoriel(n-1);
} fact(2)?
fact(3)
Poenta: u datom trenutku
postoji vie poziva fact(2)
2
(inkarnacija, aktivacija,
izvravanja, instancijalizacija) 1 fact(1)?
iste funkcije (izvravanja istog
programskog koda)
fact(1)
factoriel(). 1
Svaka do njih ima svoj primerak
(inkarnaciju, instancu) fact(0)?
fact(0)
podatka (argumenta) n.
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 41/294
Potprogrami i stek
Problemi:
Ako se isti potprogram poziva sa vie mesta i to rekurzivno, kako znati gde
se vratiti?
Ako se isti potprogram poziva rekurzivno, kako da isti kod uvek radi sa
odgovarajuom inkarnacijom svojih lokalnih podataka i argumenata?
Ideja:
Prilikom poziva potprograma, pamtiti (redosledom poziva) mesto odakle je
potprogram pozvan, kako bi se izvravanje moglo tamo vratiti (Ivica i
Marica)
Prilikom povratka iz potprograma, uvek uzimati poslednju sauvanu adresu
povratka i tamo skoiti; izbaciti tu adresu iz spiska
Struktura koja podrava ovaj protokol - stek (stack):
linearno ureena struktura sa dve operacije
operacija push smeta datu vrednost na vrh steka (na kraj liste)
operacija pop uzima vrednost sa vrha steka (sa kraja liste) i izbacuje je
sa steka
I lokalni podaci se mogu uvati na steku, po istom principu.
Potprogram treba da adresira podatke relativno u odnosu na vrh steka!
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 42/294
Potprogrami i stek
Primer: pronalaenje puta kroz lavirint
B
A

C-S
A
B-N
E
Push A - N
Pop
Push B - E
Push C - S

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 43/294


Potprogrami i stek
Implementacija steka na nivou procesora:
Jedan od registara opte namene izdvaja se da slui kao pokaziva
vrha steka (stack pointer) . Njegova vrednost predstavlja adresu
lokacije u memoriji gde je poslednji stavljeni podatak (ili prva
slobodna lokacija). Npr. neka je to R15
Operacija push, npr. Push R0:
INC R15 ; stek raste na gore
STORE [R15],R0
Operacija pop, npr. Pop R0:
LOAD R0,[R15]
DEC R15
Posebna podrka procesora: postoji poseban,
specijalizovani registar koji slui kao pokaziva steka SP i
posebne instrukcije Push i Pop:
PUSH R0
POP R0

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 44/294


Potprogrami i stek
int factoriel (int n) { SP Return addr (H)
if (n==0) return 1; Return addr (L)
else return n*factoriel(n-1); n
}

Fact: LOAD R1,#n[SP] ; R1:=n; #n=-2 (11...110b)


CMP R1,#0 ; if (n==0)
JMPNE Else
Then: LOAD R0,#1 ; R0 is result
POP PC ; return
Else: SUB R0,R1,#1 ; R0:=n-1
PUSH R0 ; call factoriel(n-1)
CALL Fact ; PUSH PC, JMP Fact
POP R1 ; pop argument
LOAD R1,#n[SP] ; R1:=n
MUL R0,R1,R0 ; R0:=n*factoriel(n-1)
POP PC ; return

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 45/294


Kontekst procesora
Pitanje: kako prei sa izvravanja jednog procesa na
izvravanje drugog procesa?
Zahtev: sauvati sve to je potrebno za povratak izvravanja
naputenog procesa
Proces: izvravanje jednog programa nad datim podacima
Kontekst procesora (processor execution context): sve
vrednosti iz procesorskih registara koje je potrebno sauvati
da bi se izvravanje nastavilo od mesta naputanja:
Mesto u programu na kome se stalo - PC
Podaci u procesoru registri opte namene
Lokalni podaci potprograma i trag izvravanja sve na steku SP
Prelazak sa izvravanja jednog procesa na drugi promena
konteksta (context switch):
sauvati kontekst koji se naputa
povratiti kontekst na koji se prelazi
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 46/294
Kontekst procesora sp rn
...
Jednostavna promena konteksta: r1
void yield (void* cur, void* next) { r0
asm { ret addr
push r0 cur
push r1 next
...
push rn
mov r0,#cur[sp]
mov [r0],sp
mov r0,#next[sp]
mov sp,[r0]
pop rn
...
pop r1
pop r0 sp rn
pop pc ; return ...
} r0
} ret addr
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 47/294
Kontekst procesora
Sinhrona, eksplicitna promena konteksta
korutine (coroutines):
void* pA = ...;
void* pB = ...;
void* pC = ...;

void A () { void B () { void C () {


... ... ...
yield(pA,pB); yield(pB,pC); yield(pC,pA);
... ... ...
yield(pA,pC); yield(pC,pB);
... ... ...
} } }
Problem: kako uspostaviti polazni kontekst?

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 48/294


Glava 5: Mehanizam prekida

emu prekidi?
Pojam prekida
Obrada prekida
Odreivanje adrese prekidne rutine
Maskiranje prekida
Prioritiranje prekida
Izvori prekida

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 49


emu prekidi?
Kada bi procesor samo izvravao program iz memorije,
kako da ima informaciju da se neto u okruenju desilo:
zavrena I/O operacija
isteklo vreme izvravanja dodeljeno procesu
dogodio se dogaaj na koji treba reagovati
(npr. taster, mi, senzor)
doao je trenutak aktivacije periodinog procesa
itd.?
Jedan nain je da procesor po potrebi izvrava instrukcije
kojima ispituje da li se to dogodilo i eka da se dogodi ako
nije
Problem: neefikasnost procesor izvrava jalove
instrukcije ekajui na dogaaj, a mogao bi da radi neki
drugi koristan posao

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 50/294


Pojam prekida
Ideja: procesor radi neki drugi posao, a dogaaj se
signalizira posebnim HW signalom koji predstavlja zahtev
za prekid (interrupt request)
Kada stigne zahtev za prekid, procesor zavrava tekuu
instrukciju, uva kontekst na steku i prelazi na izvravanje
posebnog programa za obradu prekida prekidne rutine
(interrupt routine)
Vano: procesor uvek zavrava izvravanje tekue
instrukcije pre nego to pree na obradu spoljanjeg
zahteva za prekid izvravanje instrukcije je atomino!
Kada zavri prekidnu rutinu, procesor se vraa na mesto
gde je prekinuto izvravanje, kao iz najobinijeg
potprograma
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 51/294
Pojam prekida ...
load r1,#1
add r0,r1,r2
mul r3,r0,r3
IRQ0
store [2300h],r3
IRQ1 ...
...
IRQ2
...
IRQ3 ...
...
...
load r0,[ff00h]
store [r1],r0
add r1,r1,#1
iret
CPU
...
...
...
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 52/294
Obrada prekida
0
IRQ IRQ IRQ?
FF
Ne
Prihvatiti?
CPU
Sauvaj kontekst na steku

Odredi adresu prekidne rutine A

Maskiraj prekide

PC:=A

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 53/294


Odreivanje adrese prekidne rutine
Vie naina, ali najei je putem vektor tabele
(interrupt vector table, IVT)
IVT je oblast u memoriji koja sadri vektore adrese
prekidnih rutina. Svaki ulaz broj N u tabeli odreuje adresu
prekidne rutine za prekid sa brojem N IVT preslikava broj
prekida N u adresu njegove prekidne rutine
...
... A = Mem[IVT+N*S]
IVT 0A00 Entry 0
0010 A adresa prekidne rutine (vektor)
7F16 Entry 1 IVT adresa poetka IVT
2003 N broj prekida
200A Entry 2 S veliina ulaza u IVT
1735
...

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 54/294


Odreivanje adrese prekidne rutine
Kako se odreuje broj prekida N?
Fiksno: svakom signalu zahteva za prekid dodeljen je
hardverski definisan broj N
Poseban registar periferijskog ureaja sadri broj
prekida N dodeljen toj periferiji. Kada prihvati prekid sa
date linije, procesor oitava taj registar da bi dobio N.
Broj se moe upisati u registar periferije programski
(tipino pri inicijalizaciji sistema)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 55/294


Maskiranje prekida
Mogue je programskim putem zabraniti spoljanje prekide
maskiranje (interrupt masking)
Poseban programski dostupan jednobitni registar dozvoljava ili ne
dozvoljava prihvatanje spoljanjih prekida
Ovim registrom obino manipuliu posebne instrukcije:
INTE ; Interrupt Enable, STI Set Interrupt
INTD ; Interrupt Disable, CLI Clear Interrupt
Neki procesori omoguuju i selektivno maskiranje prekida sa
pojedinanih linija: poseban programski dostupan registar maske
(interrupt mask register, IMR) svakim svojim razredom omoguava ili
ne prekid sa odreene linije
Prekid se prihvata samo ako nije selektivno ili golobalno maskiran
Prilikom prihvatanja prekida, prekidi se maskiraju, da se ne bi
ugneivali prekidna rutina je podrazumevano (ali ne uvek) atomina
atominost obezbeuje HW

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 56/294


Prioritiranje prekida
Neki procesori omoguavaju prioritiranje prekida
(interrupt prioriting): svakom prekidu dodeljen je
prioritet (priority)
Prekid se prihvata samo ako se trenutno ne
izvrava prekidna rutina za prekid vieg prioriteta
Prema tome, uslov za prihvatanje prekida:
da nije maskiran (globalno ili selektivno)
da nije u toku prekidna rutina vieg prioriteta

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 57/294


Izvori prekida
Izvori prekida: hardverski ili softverski
Hardverski prekidi:
spoljanji (external) - dolaze po signalima koji ulaze u CPU od
strane:
I/O ureaja (tipino maskirajui): zavretak rada, greka u operaciji
vremenskih brojaa (timer), periodino ili u odreeno vreme (tipino
maskirajui)
ureaja za nadzor ispravnosti rada hardvera (napon napajanja, greka
u memoriji itd., tipino nemaskirajui)
unutranji (internal) dolaze kao posledica greke u izvravanju
same instrukcije izuzeci (exception):
nedozvoljen kod instrukcije (illegal instruction code)
nedozvoljen nain adresiranja (illegal addressing mode)
prekoraenje (overflow), deljenje nulom (division by zero) ili druga
aritmetika greka
stranina greka (page fault) adresirana lokacija virtuelne memorije
nije trenutno u fizikoj memoriji

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 58/294


Izvori prekida
Softverski prekidi (zamke, trap) - posebna instrukcija
(TRAP, INT) sa parametrom N rezultuje istim ponaanjem
kao da je stigao spoljanji zahtev za prekid sa brojem N:
TRAP 1Ch
Prelazi se na izvravanje prekidne rutine sa vektorom iz
IVT ulaza N
Upotreba: pozivi usluga (servisa, potprograma) van
adresnog prostora programa pozivaoca
tipino usluga OS (sistemski pozivi)
Prenos parametara:
preko registara procesora
neki registar procesora sadri adresu bloka podataka u memoriji
gde se nalaze parametri

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 59/294


Glava 6: Ulaz/Izlaz

Generiki model I/O ureaja


Uposleno ekanje
Korienje prekida
Direktan pristup memoriji (DMA)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 60


Generiki model I/O ureaja
Rd Wr

Control
Start

Device

Status
Ready?
Ready

Data

CPU

Device Control
Addr Data
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 61/294
Generiki model I/O ureaja
Problem: Kako CPU da sazna da je I/O ureaj zavrio
zadatu operaciju i spreman je za sledeu?
Dva naina:
Uposleno ekanje (busy waiting) ili prozivanje (polling):
CPU oitava statusni registar ureaja, ispituje bit spremnosti i
ponavlja to isto sve dok bit spremnosti ne bude postavljen
Mehanizam prekida (interrupt): signal sa bita spremnosti je
povezan na ulaz za prekid procesora; kada ureaj postane
spreman, procesor dobija prekid i u prekidnoj rutini zadaje novu
operaciju

Status

IRQ Ready
CPU Device

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 62/294


Uposleno ekanje
Init_Transfer; load r1,#BlockAddr
loop load r2,#Count
Wait_for_Ready; store [Ctrl],#00..1b; Start
Transfer_Data; Wait: load r0,[Status]
Prepare_for_Next; and r0,r0,#100..0b; Ready?
if last then exit; jz Wait
end loop; load r0,[Data]
Stop_Transfer; store [r1],r0

inc r1
dec r2
jnz Wait

store [Ctrl],#0; Stop

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 63/294


Korienje prekida
Problem uposlenog ekanja: dok eka na zavretak I/O
operacije, CPU izvrava jalove instrukcije u petlji
neiskorien za druge poslove Useful execution
Wait for I/O operation
time

Korienje prekida:
CPU zada I/O operaciju, a onda izvrava neki drugi posao,
nezavisan od zadate I/O operacije
kada zavri operaciju i bude spreman za sledeu,
ureaj generie prekid
u prekidnoj rutini CPU zadaje novu operaciju i vraa se
na prekinuti posao

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 64/294


Korienje prekida
Main:
Init_Transfer;
Do_something_else;
Wait_for_end_of_transfer;

Interrupt_Routine:
Transfer_Data;
Prepare_for_Next;
if last then Stop_Transfer;

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 65/294


Korienje prekida CPU
Main IntR
I/O Device

Main:
load r1,#BlockAddr
load r2,#Count
load r3,#0; End Flag
store [Ctrl],#00..1b; Start
...
Wait: cmp r3,#1; End of transfer?
jnz Wait
...
IntR: load r0,[r1]
store [Data],r0
inc r1
dec r2
jnz Ret
load r3,#1
store [Ctrl],#0; Stop
Ret:iret ; Interrupt return
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 66/294
Direktan pristup memoriji (DMA)
DMA (Direct Memory Access) kontroler je poseban ureaj
specijalizovan da sam obavlja transfer bloka podataka sa ili
na periferijski ureaj, na zahtev procesora
Procesor samo zada parametre transfera (adresu i veliinu
bloka) i potom radi neki drugi posao, nezavisan od
transfera
DMA sam interaguje sa I/O ureajem na isti nain kao to
bi to procesor radio (polling ili korienjem signala ready
hand-shaking) i prenosi podatke
Kada zavri prenos, DMA postavlja svoj indikator zavretka
u statusnom registru
Kako da procesor zna da je DMA zavrio prenos?
Isto kao i ranije:
ispitivanjem indikatora u statusnom registru DMA (busy waiting)
signal zavretka prenosa generie procesoru zahtev za prekid
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 67/294
Direktan pristup memoriji (DMA)
Main:
Main:
store [DMAAddr],#BlockAddr
Init_Transfer;
store [DMACount],#Count
Do_something_else; load r1,#0; End Flag
Wait_for_end_of_trans; store [IOCtrl],#00..1b; Start
store [DMACtrl],#10..0b; Start
Interrupt_Routine: ...
Wait: cmp r1,#1; End of transfer?
Stop_Transfer;
jnz Wait
...

IntR: store [IOCtrl],#0; Stop


store [DMACtrl],#0; Stop
load r1,#1; End of transfer
iret ; Interrupt return

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 68/294


Direktan pristup memoriji (DMA)
CPU DMA I/O Device
Main IntR

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 69/294


Glava 7: Virtuelna memorija

Pojam virtuelne memorije


Preslikavanje adresa
Stranina organizacija
Segmentna organizacija
Segmentno-stranina organizacija
TLB
Podela odgovornosti izmeu HW i OS

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 70


Pojam virtuelne memorije
Fizika memorija raunara: linearno ... 00A0
ureen niz elija sa mogunou 0000 00A1
direktnog pristupa (direct access) 0102 00A2
Direktan pristup: svaka elija ima svoju 0200 00A3
adresu (address) preko koje joj se moe 0003 00A4
pristupiti 0104 00A5
0300 00A6
RAM (Random Access Memory): memorija
... 00A7
sa mogunou itanja i upisa; gubi
... 00A8
sadraj gubitkom napajanja
... 00A9
ROM (Read Only Memory): memorija 00AA
00FF
...
samo sa mogunou itanja; obino uva 00AB
...
sadraj po gubitku napajanja; slui za 00AC
...
smetanje osnovnog sistemskog 00AD
...
programa za podizanje sistema
uitavanje OS (bootstrap program)
A D
Rd Wr
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 71/294
Pojam virtuelne memorije
Problem: potrebno je da vie procesa bude rasporeeno po
fizikoj memoriji, moda i delimino uitanih sa diska,
tako da se mogu i premetati (relocirati).
Kako omoguiti izvravanje programa koji nije u potpunosti uitan
u memoriju?
Kako obezbediti relokatibilnost procesa, tj. njegovog sadraja u
memoriji, a da to bude transparentno za izvravanje programa?
Ideja: sve adrese koje program koristi u adresiranju
instrukcija i podataka jesu samo logike, virtuelne adrese;
poseban harver procesora preslikava traenu virtuelnu
adresu u fiziku adresu u memoriji, na osnovu podataka
OS o rasporedu delova procesa u fizikoj memoriji

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 72/294


Pojam virtuelne memorije
(Virtuelni) adresni prostor (address space) procesa: skup
virtuelnih (logikih) adresa dostupnih programu za
adresiranje
Fiziki adresni prostor procesora: skup svih adresa koje
procesor moe generisati na adresnoj magistrali
Fizika memorija: stvarno instalirana koliina memorijskog
prostora; moe biti manja od fizikog adresnog prostora
Posledica: virtuelni adresni prostor moe biti vei, manji, ili
ak jednak fizikom adresnom prostoru

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 73/294


Preslikavanje adresa
... 01FB
... 01FC

01FF
PAddr= 0F00
... 01FD
Address ... 01FE
Mapping ... 01FF
... ...
... ...
... ...
... 0F00
... 0F01
... 0F02
VAddr= 3B2800
3B27FF 0F03
...
... 0F04
... ...
CPU

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 74/294


Preslikavanje adresa
Zadatak hardvera za preslikavanje adresa:
Virtuelnu adresu (VA) preslikati u fiziku adresu (PA).
Kako?
Tabele preslikavanja (map table, MT) VA u PA za svaki
proces nalaze se u memoriji. Njihov sadraj odrava OS
uitavajui u memoriju i izbacujui iz nje delove procesa
Jedan ulaz u MT daje podatke (opisuje) o jednom delu
virtuelnog adresnog prostora datog procesa deskriptor
(descriptor)
Deskriptor sadri bar sledee informacije:
indikator da li je dati deo virtuelnog adresnog prostora trenutno u
fizikoj memoriji
ako jeste, koja je njegova PA
ako nije, gde je smeten na disku (adresa sektora na disku)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 75/294


Preslikavanje adresa
Postupak:
Na osnovu VA i poetne (fizike) adrese tabele preslikavanja (map
table pointer, MTP) koja je upisana u neki specijalizovani registar
procesora od strane OS kada je procesor dodelio datom procesu,
odrediti broj ulaza i adresu deskriptora u MT
Dovui deskriptor u procesor
Ako VA jeste u fizikoj memoriji, iz deskriptora se dobija PA
Ako VA nije u fizikoj memoriji, generie se interni prekid (page
fault); OS preuzima kontrolu i ima zadatak da dovue dati deo sa
diska u fiziku memoriju, eventualno izbacijui neki drugi deo istog
ili drugog procesa i da aurira MT
Panja:
Ovo preslikavanje vri se pri svakom adresiranju tokom izvravanja
jedne instrukcije, i za dohvatanje instrukcije i za pristup podacima
Tokom samog dohvatanja deskriptora nema preslikavanja adresa
adresiranje unutar MT je uvek fizikim adresama; MT se nalaze na
nekom odreenom mestu u fizikoj memoriji, pod kontrolom OS
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 76/294
Preslikavanje adresa
...
MTP ...
...
VA
PAddr=
...
MT
1 ...

PA 1 PA
...
...

PA

CPU

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 77/294


Preslikavanje adresa
...
MTP ...
...
VA
PAddr=
...
MT
0 ...

PA 0 Disk Addr
...
...
Page Fault

CPU

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 78/294


Preslikavanje adresa
Prilikom izuzetka tipa stranine greke (page fault),
OS treba da uradi sledee:
pronai slobodno mesto u fizikoj memoriji za smetanje traenog
dela virtuelne memorije
ukoliko nema slobodnog mesta u fizikoj memoriji, izbaciti neki deo
iz fizike memorije na disk i aurirati njegov deskriptor
uitati dati deo sa diska i aurirati njegov deskriptor (indikator i PA)
Prilikom povratka konteksta prekinutog procesa, potrebno
je ponoviti preslikavanje ovoga puta uspeno (po pravilu)
Panja: izvravanje se vraa na istu prekinutu instrukciju, a
ne na narednu!
Panja: izvravanje je prekinuto u toku izvravanja
instrukcije, pa je odgovornost HW procesora da obezbedi
da se ista instrukcija moe izvriti ispoetka! Kako?

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 79/294


Preslikavanje adresa
Posledice:
potrebno je zatiti oblast memorije u kojoj su MT od pogrenog ili
zlonamernog pristupa od strane korisnikih programa
potrebno je obezbediti dva reima rada procesora:
sistemski: potencijalno nema preslikavanja adresa, ima pravo pristupa
do sistemskih delova memorije, ima pravo izvravanja nekih posebnih
instrukcija
korisniki: uvek se preslikavaju adrese (pa zato i nema pravo pristupa
do sistemskih delova memorije), nema pravo izvravanja nekih
posebnih instrukcija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 80/294


Stranino preslikavanje VAS - P1 VAS P2
0 0
Fizika i virtuelna memorija PAS
podeljene su na blokove iste
veliine stranice (page) 1 1 0

Jedna stranica virtuelnog


adresnog prostora preslikava 1
2 2
se u jednu stranicu fizikog
adresnog prostora (okvir, blok)
PMT - P1 3 3 2
0 ... ...
1 2 ... 3
4 4
0 ... ...
1 0 ...
0 ... ... 5 5
0 ... ...
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 81/294
Stranino preslikavanje
...
VA Page Offset
...
...
+ ...
... PMT

PMTP 1 Frame RWX


...
...

PA Frame Offset
RWX

Prohibited? Exception
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 82/294
Stranino preslikavanje
Prednosti:
relativno jednostavan hardver, pravilna arhitektura,
jednostavno i efikasno preslikavanje (u odnosu na ostale
tehnike preslikavanja)
nema eksterne fragmentacije (kao kod segmentne
organizacije)
jednostavan zadatak za OS u pogledu alokacije prostora
nema potrebe za upasivanjem bloka memorije
Nedostaci:
stranice nisu logike celine
zbog toga nije sasvim prirodno uvoditi zatitu pristupa na
nivou stranice (mada je mogue)
interna fragmentacija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 83/294


Segmentno preslikavanje VAS - P1
0
Virtuelna memorija je PAS
L0 Code
podeljena na logike celine
razliite stvarne veliine - xxxx
segmente (segment), ali iste Code
maksimalne veliine, npr. kod, 1
statiki podaci, stek, dinamika L1 Data
Data
memorija itd. yyyy
OS pronalazi prostor potrebne Data
veliine za smetanje 2
segmenta Stack
Lm Stack
SMT - P1 Size
1 xxxx L0 ...
3 ?
1 yyyy L1 ...
0 ... Lm ... Lm Heap
0 ... Lm ...
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 84/294
Segmentno preslikavanje
...
VA Segment Offset
...
...
+ ...
... SMT

SMTP 1 StartAddr Size RWX


...

+ ...

RWX
Size Exception
>=
PA PA

Prohibited?
Offset Exception
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 85/294
Segmentno preslikavanje
Prednosti:
segmenti su logike celine, pa je prirodno uvoditi
zatitu pristupa segmentu i prekoraenja veliine; npr.
code segment je read-only
nema interne fragmentacije
Nedostaci:
sloeniji hardver, manje efikasno preslikavanje
(u odnosu na stranino preslikavanje)
eksterna fragmentacija
sloeniji zadatak za OS u pogledu alokacije prostora
potreba za pronalaenjem dela slobodne memorije
veliine dovoljne za smetanje segmenta

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 86/294


Segmentno-stranino preslikavanje
VAS - P1
Kombinacija prethodna dva: 0
virtuelna memorija je L0 PAS
Code
podeljena na logike celine Code
razliite stvarne veliine -
segmente (segment), ali svaki 1
segment ima ceo broj stranica L1 Data
iste veliine
Stranice se preslikavaju u
blokove (okvire) fizike 2
memorije iste veliine
L2 Stack
Code

3
L3 Heap
Code

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 87/294


Segmentno-stranino preslikavanje
SMT (Process X)
PMTP Size Protection (RWE)
3 101
... 2 110
... 4 110
3 110

PMT (Proc X, Seg 0) PMT (Proc X, Seg 3)


Frame Disk Addr Frame Disk Addr
1 05 ... 0 ... ...
0 ... ... 1 0D ...
1 01 ... 0 ... ...
0 ... ... 0 ... ...

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 88/294


Segmentno-stranino preslikavanje
Zadatak: prikazati ematski strukturu VA i PA i postupak
preslikavanja VA u PA.
Prednosti:
segmenti su logike celine, pa je prirodno uvoditi zatitu pristupa
segmentu i prekoraenja veliine; npr. code segment je read-only
nema eksterne fragmentacije
jednostavan zadatak za OS u pogledu alokacije prostora
nema potrebe za upasivanjem dela memorije
Nedostaci:
najsloeniji hardver, najmanje efikasno preslikavanje (u odnosu na
ostala preslikavanja)
interna fragmentacija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 89/294


TLB
Problem: bez obzira na preslikavanje, procesor mora da
dovlai deskriptor iz memorije za svako preslikavanje VA u
PA (nekoliko puta tokom instrukcije) neefikasno!
Ideja: obezbediti malu, ali efikasnu memoriju koja uva
samo deo podataka potrebnih za preslikavanje, kao to to
radi ke (cache) memorija
Translation Lookaside Buffer (TLB)
TLB treba da obezbedi brzo preslikavanje odreenog dela
VA u podatke iz deskriptora potrebne procesoru:
ako je podatak u TLB-u, procesor ga dobija brzo
ako nije, TLB dovlai podatak iz deksriptora itanjem iz tabela u
memoriji

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 90/294


TLB
ta TLB preslikava?
Stranina organizacija: Page -> (Frame, Protection)
Segmentna organizacija: Segment -> (Start Addr, Size, Protection)
Segmentno-stranina organizacija:
(Segment, Page) -> (Frame, Size, Protection)
Transparentan za OS i ostali SW, osim:
ako TLB sadri podatke za preslikavanje koji se odnose
samo na tekui proces, OS mora da obrie (invaliduje)
TLB prilikom promene konteksta mora postojati
odgovarajua instrukcija koja to radi
Inae, TLB moe da sadri i identifikaciju procesa koja
takoe uestvuje u preslikavanju. Identifikacija tekueg
procesa je u specijalizovanom registru procesora. Ko
upisuje tu identifikaciju i kada?

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 91/294


Podela odgovornosti HW/OS
HW treba da obezbedi:
obavezno preslikavanje VA u PA (u korisnikom reimu)
(poeljno-praktino obavezno) dva reima, sistemski i
korisniki, i odgovarajuu zatitu
(poeljno-praktino obavezno) mehanizam zatite u
sluaju prekoraenja veliine segmenta ili ilegalne
operacije nad segmentom
page fault ako traena VA nije u fizikoj memoriji
instrukciju za upis u MTP registar
(poeljno-praktino obavezno) TLB i instrukciju za
brisanje TLB, ili registar za identifikaciju procesa i
instrukciju za upis u njega

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 92/294


Podela odgovornosti HW/OS
OS treba da obezbedi:
pri promeni konteksta procesa:
upis adrese MT tekueg procesa u MTP registar
upis u registar identifikacije tekueg procesa (ako postoji)
brisanje TLB (ako je potrebno)
pri straninoj greci (page fault):
pronalaenje slobodnog mesta u memoriji za dovlaenje traene
stranice ili segmenta
ako slobodnog mesta nema, izbor nekog za izbacivanje, zatim
njegovo snimanje na disk i auriranje deskriptora u MT
uitavanje traene stranice ili segmenta u fiziku memoriju sa
diska
auriranje deskriptora dovuene stranice ili segmenta
pri ostalim grekama:
obradu greke, npr. gaenje procesa, izvetavanje korisnika
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 93/294
Glava 7: Memorijska hijerarhija

Ke memorija
Magnetni disk
Memorijska hijerarhija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 94


Ke memorija
Ke (cache) memorija: mala, ali brza memorija koja sadri
samo deo adresnog prostora radni skup instrukcija i
podataka
Ideja je zasnovana na pretpostavci o vremenskoj i
prostornoj lokalnosti izvravanja programa:
ako je program nedavno pristupao nekoj lokaciji, velika je ansa da
e u budunosti ponovo pristupati njoj (prolost ukazuje na
budunost)
ako je program pristupao nekoj lokaciji, onda je velika ansa da e
pristupati i nekoj bliskoj lokaciji
Ako je sadraj lokacije u ke memoriji, odziv je brz; inae,
ke memorija oitava ili upisuje podatak prema operativnoj
memoriji, uz potencijalno izbacivanje nekog drugog
sadraja
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 95/294
Ke memorija
Transparentna za OS i ostali SW, osim:
ako ke memorija preslikava virtuelne adrese u sadraj
(samo za tekui proces), treba ga obrisati prilikom
promene konteksta, slino kao i TLB;
inae, ke preslikava fizike adrese, ali ta se onda deava
prilikom zamene stranice?

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 96/294


Magnetni disk pokretna
cilindar ruka
Mogunost itanja i upisa magnetna
Ne gubi sadraj gubitkom glava
napajanja (perzistentna
memorija)
Relativno brz pristup (reda
milisekundi), ali znaajno
sporiji nego RAM
Tipini kapacitet danas:
nekoliko stotina GB ili TB
Parametri:
brzina transfera (transfer rate)
vreme pozicioniranja (random- ploa
access time, positioning time)
sektor
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 97/294
Memorijska hijerarhija
CPU registers

Cache

Operating Memory

Virtual Memory/Magnetic Disk

Speed Capacity
U datom trenutku, memorija na viem nivou sadri podskup
(radni skup, working set) memorijskog prostora nieg nivoa.
Problemi:
kako odabrati radni skup?
ta initi ako traeni podatak nije na datom nivou?
kako odravati konzistentnost susednih nivoa
jedan se promeni, ta sa drugim?
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 98/294
III Upravljanje procesima

Procesi i niti
Sinhronizacija i komunikacija izmeu procesa

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 99


Glava 8: Procesi i niti

Pojam procesa
Operacije nad procesima
Implementacija procesa
Pojam niti
Implementacija niti

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 100


Pojam procesa
Proces (process) je izvravanje programa nad datim
podacima:
program: statian zapis instrukcija
proces: jedno izbravanje (instanca, inkarnacija) datog programa
za dati skup podataka sa jednim adresnim prostorom
mogue je kreirati vie procesa nad istim programom, svaki radi
nad svojim podacima svaki ima svoj adresni prostor
Svaki proces odlikuje:
pozicija u izvravanju mesto u programu dokle je izvravanje
stiglo (Program Counter), zajedno sa tragom izvravanja
stanje podaci nad kojima proces radi registri i adresni prostor
Pojam posao (job) u sutini znai isto to i proces, samo
to je arhaian (paketni sistemi)
Pojam zadatak (task) ima razliito znaenje u razliitim
sistemimam i programskim jezicima, ali uglavnom znai
isto to i proces
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 101/294
Operacije nad procesima
Kreiranje procesa: roditeljski (parent) proces kreira proces-
dete (child) sistemskim pozivom
Varijante dozvoljavanja korienja resursa:
proces-dete moe da trai bilo koji resurs od OS
proces-dete moe da koristi samo podskup resursa roditelja
Varijante izvravanja:
kada kreira potomka, roditeljski proces se suspenduje (zaustavlja
izvravanje) sve dok se svi potomci ne zavre
kada kreira potomka, roditeljski proces nastavlja izvravanje
uporedo sa svojim potomcima
Varijante formiranja adresnog prostora:
potomak dobija kopiju adresnog prostora roditelja kloniranje
potomak ima nezavisan program i (novi, prazan) adresni prostor
(ukljuujui i prazan stek)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 102/294
Operacije nad procesima
Primer Unix:
ID procesa jedinstveni int
sistemski poziv za kreiranje procesa: fork()
proces-dete dobija kopiju adresnog prostora roditelja i kompletan
kontekst, pa nastavlja izvravanje od istog mesta kao i roditelj
fork() vraa 0 u procesu-detetu, a ID deteta (!=0) u roditelju
sistemski poziv wait() vri sinhronizaciju procesa proces-roditelj
eka da se proces-dete zavri da bi nastavio dalje
primer: koliko ukupno procesa kreira sledei kod?
int pid[N];
for (int i=0; i<N; i++) {
pid[i] = fork();
}
...wait(...)...;

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 103/294


Operacije nad procesima
sistemski poziv execlp() zamenjuje program pozivajueg procesa
drugim programom uitava programski kod iz fajla u adresni
prostor procesa pozivaoca i poinje njegovo izvravanje:
char* programName = ...;

void main () {
int pid = fork();
if (pid<0) { // Error
printf(Fork failed.\n); exit(-1);
}
else if (pid==0) // Child process
execlp(programName);
else { // Parent process
wait(NULL);
printf(Child complete.\n);
exit(0);
}
}

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 104/294


Operacije nad procesima
MS Windows podrava oba naina:
roditeljski adresni prostor se klonira
roditelj specifikuje ime programa nad kojim se kreira nov proces
Gaenje procesa:
kada zavri izvravanje glavnog programa (main() u jeziku
C/C++)
kada sam proces to eksplicitno zatrai, npr. sistemski poziv exit()
jedan proces gasi (ubija) neki drugi proces; mogua su
ogranienja, npr. to moe da uradi samo roditeljski proces; mogui
razlozi:
potomak je iscrpeo svoje resurse
nije vie potreban
roditelj treba da se ugasi, a OS ne dozvoljava da njegovi potomci dalje
rade (kaskadno gaenje)
OS gasi proces zbog neke nedozvoljene operacije
Primer Unix: wait() vraa ID zavrenog potomka
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 105/294
Trenutno se
Implementacija procesa izvrava ima
procesor
Stanja procesa tokom ivotnog veka:
Terminated
New Interrupt or
Admitted Non-blocking Exit
system call

Ready Running

Dispatch
I/O completed or
Event occurred I/O or Event wait

Blocked
Spreman na eka na I/O ili dogaaj
izvravanje, eka da (Suspended, Waiting,
dobije procesor Blocked)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 106/294
Implementacija procesa PCB
Kontekst procesa (process context): sve ID
informacije potrebne da OS nastavi izvravanje Processor
procesa, kao i da ga kontrolie i ugasi: context
ID interna identifikacija procesa unutar OS
kontekst procesora (PC, SP, programski dostupni registi) Memory
memorijski parametri: veliina i pozicija dodeljenog params
memorijskog bloka ili PMTP/SMTP itd.
informacije o I/O resursima: spisak otvorenih fajlova, I/O info
zauzetih resursa itd.
podaci potrebni za rasporeivanje: prioritet, dodeljeno
CPU vreme, itd. Scheduling
podaci potrebni za obraunavanje params
... Accounting
Struktura podataka u kojoj se uvaju ove params
informacije za svaki poces unutar OS ...
Process Control Block (PCB)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 107/294
Implementacija procesa
X
running Ready
PCB2 queue

X
ready
PCB1 PCB4 PCB5 PCB6

X
Disk waiting Device
PCB7 PCB9 queue

X
Event X waiting Event
PCB0 PCB3 PCB8 queue
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 108/294
Implementacija procesa
Promena konteksta (context switch):
Process A Process B
Interrupt or system call

Lock

Save context to
running.PCB

Select other
running

Restore context from


running.PCB

Unlock and Return

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 109/294


Implementacija procesa
Promena konteksta: Interrupt or
System call
PCB0
running Lock
X
Save context to
PCB1 running.PCB

ready
Select other
PCB2 running

Kako? Restore context from


Problem running.PCB
rasporeivanja! PCB3
Unlock and Return
X

PCB4
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 110/294
Implementacija procesa
Promena konteksta:

X
running
PCB31

X
ready
PCB23 PCB02 PCB40 PCB14

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 111/294


Implementacija procesa
Zato su potrebne lock/unlock primitive?
Da li se sme dozvoliti da se tokom promene konteksta
prekine izvravanje i procesor preuzme neko drugi?
ta bi se dogodilo ako se dogodi prekid i pone da se
izvrava isti sistemski kod za preuzimanje?
ta bi se dogodilo sa strukturama podataka OS-a?
Kako implementirati lock/unlock?
Na jednoprocesorskom sistemu, jednostavno maskirati
prekide prekid je jedini izvor asinhronog preuzimanja
procesora!
Na multiprocesorskim sistemima, HW mora da obezbedi
odgovarajuu podrku! (Detalji kasnije)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 112/294


Implementacija procesa
Promena konteksta je ist reijski troak sistem
ne radi nita korisno za aplikacije? Ali koliko
kota?
Zavisi od procesora: ta treba sauvati kao kontekst i
kakva je HW podrka (instrukcije, registri); primer: Sun
UltraSPARC sadri vie registarskih fajlova i instrukciju
za promenu tekueg
Zavisi od OS: koliko informacija treba uvati kao
kontekst procesa i ta jo treba uraditi
od 1 do 1000 mikrosekundi
Kako smanjiti ove trokove? Umesto procesa na
nivou OS, kad god je mogue koristiti niti
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 113/294
Pojam niti
Nit (thread) predstavlja jedno izvravanje nekog dela koda
programa unutar adresnog prostora nekog procesa
kreiranog unutar OS-a
Proces na nivou OS-a (teki proces, heavyweight process): jedno
izvravanje jednog programa sa sopstvenim adresnim prostorom
Nit (laki proces, lightweight process): jedno izvravanje dela koda
programa unutar adresnog prostora okruujueg procesa
Vie niti moe biti kreirano unutar istog procesa:
svaka ima svoj tok kontrole (thread of control) svoju poziciju
izvravanja u programskom kodu
sve niti dele isti adresni prostor i resurse otvorene fajlove,
globalne podatke programa
svaka ima svoje lokalne podatke za pozive potprograma
Obino se kreiraju nad pozivom jednog potprograma (i
svim ugnjedenim pozivima)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 114/294


Pojam niti
Primer Java:
Nit se kreira kao objekat klase izvedene iz bibliotene klase
Thread
Nit se pokree pozivom operacije start()
Telo niti (programski kod) predstavlja polimorfna operacija run()
public class UserInterface {
public int newSetting (int dim) { ... }
...
}

public class Arm {


public void move(int dim, int pos) { ... }
}

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 115/294


Pojam niti
public class Control extends Thread {
private int dim;
private static UserInterface ui =
new UserInterface();
private static Arm robot = new Arm();

public Control(int dimension) {


super();
dim = dimension;
}

public void run() {


int position = 0, setting = 0;
while(true) {
robot.move(dim,position);
setting = ui.newSetting(dim);
position = position + setting;
}
}
}
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 116/294
Pojam niti
int xPlane = 0;
int yPlane = 1;
int zPlane = 2;

Control c1 = new Control(xPlane);


Control c2 = new Control(yPlane);
Control c3 = new Control(zPlane);
c1.start();
c2.start();
c3.start();
Primeri upotrebe - ista aplikacija, isti proces, isti program,
ali vie uporednih aktivnosti-niti:
tekst-procesor: snima dokument u pozadini, proverava gramatiku u
pozadini, uporedo obrauje pritiske tastera i druge akcije korisnika
Web Browser: dovlai slike ili drugi sadraj, prikazuje dohvaeno,
obrauje akcije korisnika
server: po jedna nit nad istim programom za svaki zahtev klijenta

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 117/294


Pojam niti
Koristi:
Bolji odziv interaktivne aplikacije: duge aktivnosti se
mogu raditi u pozadini, a uporedo prihvatati akcije
korisnika
Deljenje resursa: niti dele memoriju (adresni prostor) i
otvorene fajlove
Ekonominost: kreiranje procesa, promena konteksta,
alokacija memorije i ostalih resursa je skupo; niti te
reijske trokove ili eliminiu, ili drastino smanjuju; npr.
Solaris: kreiranje 30:1, promena konteksta 5:1

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 118/294


Implementacija niti
Podrka nitima moe biti:
na nivou korisnikog programa (user threads): niti podrava izvrno
okruenje ili biblioteka programskog jezika, OS nema koncept niti;
prednosti: efikasnost i jednostavnost
mane: kada se jedna nit blokira na sistemskom pozivu, ceo proces
se blokira
na nivou OS-a (jezgra, kernel threads): OS direktno podrava
koncept niti
Ako su podrane na oba nivoa, modeli preslikavanja:
vie u jedan (many-to-one): vie korisnikih implementira jedna
sistemska nit ili proces
jedan na jedan (one-to-one): jednu korisniku nit implementira
jedna sistemska nit
vie u vie (many-to-many): vie korisnikih implementira isti ili
manji broj sistemskih niti

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 119/294


Implementacija niti
Niti u okviru istog procesa imaju zajedniko:
globalne podatke
programski kod
resurse fajlove i druge sistemske resurse
Niti u okviru istog procesa imaju sopstveno:
poziciju u izvravanju PC i trag izvravanja stek (SP)
podatke lokalne za potprograme stek (SP) i
promenljive alocirane u registe
Sledi: kontekst niti svodi se na kontekst procesora
PCB (TCB) je jednostavniji, promena konteksta
je jednostavnija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 120/294


Implementacija niti
Primer niti na jeziku C++ - kolsko jezgro:
korisnike niti implementirane bibliotekom za dati jezik
semantika i upotreba slina nitima u Javi
moe se izvravati i bez OS-a, na goloj maini
#include "kernel.h" // ukljucivanje deklaracija Jezgra
#include <iostream.h>

void threadBody () {
for (int i=0; i<3; i++) {
cout<<i<<"\n";
dispatch(); // Eksplicitno preuzimanje - yield
}
}
void userMain () {
Thread* t1=new Thread(threadBody);
Thread* t2=new Thread(threadBody);
t1->start();
t2->start();
dispatch();
}
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 121/294
Implementacija niti
Mana ovakvog proceduralnog stila kreiranja niti: niti nad istim kodom
(istom funkcijom) ne mogu se razlikovati jer polazna funkcija nema
argumente
Mogue reenje: obezbediti argument funkcije, ali unapred definisanog
tipa (npr. void* na strukturu argumenata). Problem: nije tipizirano i
nije u duhu OOP
Objektno reenje poput Jave:
class Thread {
public:

Thread ();
Thread (void (*body)());
void start ();

protected:

virtual void run () {}

};
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 122/294
Implementacija niti
Promena konteksta na nain nezavisan od
procesora i prevodioca:
zaglavlje <setjmp.h> sadri potrebne deklaracije
tip jmp_buf predstavlja PCB za nit (TCB), tako da
sadri sve programski dostupne registre koje koristi dati
prevodilac na datoj maini (obavezno PC i SP)
int setjmp(jmp_buf context): smeta kontekst
procesora u TCB dat kao argument i vraa 0
void longjmp (jmp_buf context, int value):
restaurira kontekst dat kao argument, a koji je snimljen
pomou setjmp(); poto se time skae unutar
setjmp(), tada setjmp() vraa vrednost value
koja mora biti !=0
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 123/294
Implementacija niti
Promena konteksta:
void Thread::dispatch () {
lock ();
if (setjmp(runningThread->context)==0) {

Scheduler::put(runningThread);
runningThread = Scheduler::get();

longjmp(runningThread->context,1);

} else {
unlock ();
return;
}
Problem: da li je ovaj pristup mogu kod asinhronog
preuzimanja (zbog prekida)? ta onda?

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 124/294


Glava 9: Sinhronizacija i komunikacija
izmeu procesa
Kooperativni procesi
Mehanizmi interakcije
Meusobno iskljuenje
Uslovna sinhronizacija
Uposleno ekanje
Semafori
Implementacija semafora
Upotreba semafora
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 125
Kooperativni procesi
Procesi mogu biti meusobno logiki
nezavisni, izolovani: nema interakcije niti razmene informacija
izmeu njih, procesi se izvravaju uporedo i nezavisno
kooperativni: procesi moraju da razmenjuju informacije ili da se
meusobno sinhronizuju - dele stanje (podatke)
Meutim: u multiprocesnom OS izolovanih procesa
praktino nema svi oni dele resurse sistema (memoriju,
fajlove, I/O ureaje)
emu kooperativni procesi?
smanjiti trokove deobom resursa (jedan raunar, vie poslova;
jedan autoput, mnogo vozila; jedna uionica, mnogo asova)
procesi zahtevaju informacije od drugih procesa da bi izvrili svoj
zadatak;
Zato se uopte dele na odvojene procese? - Modularnost
Zato da se izvravaju konkurentno? Poveanje efikasnosti

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 126/294


Kooperativni procesi
Primeri:
editor, prevodilac i linker: Y.obj

Editor X.cpp Compiler X.obj Linker

Z.obj
Web server:
Client Process Server Process
HTML
Client Process Server Process
Files
Client Process Server Process

korisniki proces i proces koji upravlja nekim izlaznim


ureajem:
User Process Buffer Device Driver Device

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 127/294


Kooperativni procesi
Problem proizvoa-potroa (producer-consumer):
bez bafera
produce consume

accept
Producer Consumer

Problem: nepotrebna sekvencijalizacija (naizmeninost),


smanjena konkurentnost
sa baferom

produce consume

accept take
Producer Buffer Consumer

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 128/294


Kooperativni procesi
Ogranieni bafer (bounded buffer):

tail head
const int N = ...; // Capacity of the buffer
class Data;

class BoundedBuffer {
public:
BoundedBuffer ();

void append (Data*);


Data* take ();

private:
Data* buffer[N];
int head, tail, count;
};
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 129/294
Kooperativni procesi
BoundedBuffer::BoundedBuffer ()
: head(0), tail(0), count(0) {}

void BoundedBuffer::append (Data* d) {


while (count==N);
buffer[tail] = d;
tail = (tail+1)%N;
count++;
}

Data* BoundedBuffer::take () {
while (count==0);
Data* d = buffer[head];
head = (head+1)%N;
count--;
return d;
}

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 130/294


Kooperativni procesi
Platforma nain izvravanja uporednih procesa:
Multiprogramiranje: na jednom procesoru, uz preplitanje
Multiprocesiranje: na vie procesora (multiprocesorski ili distribuirani
sistem), fiziki paralelno (istovremeno) paralelno procesiranje
Konkurentnost (concurrency): konceptualno, uporedno
izvravanje, potencijalni paralelizam
Paralelno procesiranje (parallel processing): fiziki
istovremeno izvravanje (na vie procesora)
Multiprogramiranje na jednom procesoru:
bez preotimanja (non-preemptive): samo sinhrona promena konteksta
sa preotimanjem (preemptive): asinhrona promena konteksta
(prekidi)
Parametri multiprogramiranja:
kada dolazi do promene konteksta: sinhrono/asinhrono
redosled izvravanja: algoritam rasporeivanja
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 131/294
Kooperativni procesi
Meutim, konkurentnost i deljenje resursa uzrokuju
probleme; primeri: jedna saobraajna traka-vozila koja idu u
susret
Nezavisni procesi: rezultat izvravanja procesa ne zavisi od
platforme i parametara (redosleda izvravanja i preplitanja
sa drugim nezavisnim procesima ne zavisi od
rasporeivanja)
Procesi koji dele podatke: rezultat izvravanja zavisi od
redosleda izvravanja i preplitanja zavisi od
rasporeivanja. Problemi: rezultat je nedeterminisan,
uoavanje i ispravljanje greaka veoma teko, jer su one
esto nereproducibilne
Osnovni postulat konkurentnog programiranja: rezultat
(logika ispravnost) programa ne sme da zavisi od platforme
i parametara (redosleda izvravanja i preplitanja, tj. od
rasporeivanja)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 132/294
Mehanizmi interakcije
Vrste interakcija izmeu procesa:
sinhronizacija (synchronization): zadovoljavanje ogranienja u
pogledu preplitanja akcija razliitih procesa (npr. neka akcija
jednog procesa mora da se dogodi pre neke akcije drugog procesa
i sl.); simultano dovoenje vie procesa u predefinisano stanje
komunikacija (communication): razmena informacija izmeu
procesa
Ovi pojmovi su povezani jer:
neki mehanizmi komunikacije podrazumevaju prethodnu
sinhronizaciju
sinhronizacija se moe smatrati komunikacijom bez razmene
sadraja

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 133/294


Mehanizmi interakcije
Modeli meuprocesne komunikacije (Inter Process
Communication, IPC):
deljena promenljiva (shared variable): objekat kome moe pristupati
vie procesa; komunikacija se obavlja razmenom informacija preko
deljene promenljive ili deljenih podataka (shared data)
razmena poruka (message passing): eksplicitna razmena informacija
izmeu procesa u vidu poruka koje putuju od jednog do drugog
procesa preko nekog posrednika
Model komunikacije je stvar izbora ne implicira nain
implementacije:
deljene promenljive je lako implementirati na multiprocesorima sa
zajednikom memorijom, ali se mogu (tee) implementirati i na
distribuiranim sistemima
razmena poruka se moe implementirati i na distribuiranim sistemima
i na multiprocesorima sa deljenom memorijom
ista aplikacija se moe isprogramirati korienjem oba modela, ali je
po pravilu neki model pogodniji za neku vrstu aplikacije
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 134/294
Mehanizmi interakcije
Implementacija na sistemu za deljenom memorijom, ali sa
procesima koji nemaju isti adresni prostor IPC kao usluga
OS-a: Sistemska
usluga (poziv):
Process A slanje poruke Process A M
Shared Mem
Process B
Process B Sistemska M
usluga (poziv):
prijem poruke

Sistemska usluga
(poziv): obezbediti
preslikavanje dela
adresnog prostora
Kernel dva procesa u istu Kernel M
deljenu memoriju
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 135/294
Meusobno iskljuenje
Primer 1: ta se deava ako dva procesa pristupaju uporedo istoj
deljenoj promenljivoj x?
x:=x+1
Na veini procesora, ova naredba bie prevedena u (neatominu)
sekvencu (atominih) instrukcija:
load reg with x
increment reg
store reg to x
Ako je x incijalno bilo 0, koji su mogui rezultati?
Sluaj 1: Sluaj 2: ...
P1 P2 P1 P2
load x(0) load x(0)
load x(0) inc
inc inc store x(1)
store x(1) load x(1)
store x(1) ...
x=1 x=2
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 136/294
Meusobno iskljuenje
Primer 2: Policijski helikopter prati kriminalca-begunca i navodi
policijski automobil koji ga juri
type Coord = record {
x : integer;
y : integer;
};

var sharedCoord : Coord;

process Helicopter process PoliceCar


var nextCoord : Coord; begin
begin loop
loop moveTo(sharedCoord);
computeNextCoord(nextCoord); end;
sharedCoord := nextCoord; end;
end;
end;
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 137/294
Meusobno iskljuenje
Proces Helicopter Vrednost u Proces PoliceCar
upisuje u sharedCoord: ita iz sharedCoord:
sharedCoord:
0,0
x:=1 1,0
y:=1 1,1
1,1 x=1
1,1 y=1
x:=2 2,1
y:=2 2,2
2,2 x=2
2,2 y=2
x:=3 3,2
3,2 x=3
3,2 y=2
y:=3 3,3

Rezultat: kriminalac bei, iako ga helikopter dobro prati!


Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 138/294
Meusobno iskljuenje
Primer 3: Ogranieni bafer. ta se moe desiti ako dva
procesa-proizvoaa uporedo pozivaju append?
Deo koda (sekvenca naredbi) procesa koji se mora
izvravati nedeljivo (indivisible) u odnosu na druge takve
delove koda drugih procesa naziva se kritina sekcija
(critical section)
Sinhronizacija koja je neophodna da bi se obezbedila
atominost izvravanja kritinih sekcija naziva se
meusobno iskljuenje (mutual exclusion, Dijkstra 1965.)
Pretpostavlja se da je atominost operacije dodele
vrednosti skalarnoj promenljivoj obezbeena na nivou
upisa u memoriju (instrukcija upisa vrednosti u skalarnu
promenljivu je atomina)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 139/294
Uslovna sinhronizacija
Uslovna sinhronizacija (condition synchronization):
jedan proces eli da izvri akciju koja ima smisla ili
je sigurna samo ako je neki drugi proces preduzeo
neku svoju akciju ili se nalazi u nekom
definisanom stanju
Uslovna sinhronizacija kod ogranienog bafera:
proizvoa ne sme da stavi podatak u bafer ukoliko je
bafer pun
potroa ne moe da uzme podatak iz bafera ukoliko je
bafer prazan
Zakljuak: implementacija ogranienog bafera
treba da obezbedi i meusobno iskljuenje i
uslovnu sinhronizaciju
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 140/294
Uposleno ekanje
Uslovna sinhronizacija opti sluaj:
process P1;(*Waiting*) process P2;(*Signalling*)
begin begin
... ...
while flag = false do flag:=true;
null ...
end; end P2;
...
end P1;

Uslovna sinhronizacija ogranieni bafer:


void BoundedBuffer::append (Data* d) {
while (count==N); // Wait
buffer[tail] = d;
tail = (tail+1)%N;
count++; // Signal
}
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 141/294
Uposleno ekanje
Ovakva realizacija, gde proces koji eka izvrava praznu
petlju dok uslov nastavka ne bude zadovoljen, naziva se
uposleno ekanje (busy waiting)
Oigledan veliki nedostatak: proces koji uposleno eka troi
procesorsko vreme na jalove instrukcije, ne radei nita
korisno
Uslovna sinhronizacija je jednostavna, ali ta je sa
meusobnim iskljuenjem?

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 142/294


Uposleno ekanje
Pokuaj reenja 1:
process P1
begin
loop
flag1 := true; (* Announce intent to enter *)
while flag2 = true do null end; (* Busy wait *)
<critical section> (* Critical section *)
flag1 := false; (* Exit protocol *)
<non-critical section>
end
end P1;
Problem: ivo blokiranje (livelock)
process P2
begin
loop
flag2 := true; (* Announce intent to enter *)
while flag1 = true do null end; (* Busy wait *)
<critical section> (* Critical section *)
flag2 := false; (* Exit protocol *)
<non-critical section>
end
end P2;
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 143/294
Uposleno ekanje
Pokuaj reenja 2:
process P1
begin
loop
while flag2 = true do null end; (* Busy wait *)
flag1 := true;
<critical section> (* Critical section *)
flag1 := false; (* Exit protocol *)
<non-critical section>
end
end P1; Problem: ne obezbeuje meusobno
process P2 iskljuenje zbog utrkivanja
begin (race condition)
loop
while flag1 = true do null end; (* Busy wait *)
flag2 := true;
<critical section> (* Critical section *)
flag2 := false; (* Exit protocol *)
<non-critical section>
end
end P2;
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 144/294
Uposleno ekanje
Pokuaj reenja 3:
process P1
begin
loop
while turn = 2 do null end; (* Busy wait *)
<critical section> (* Critical section *)
turn := 2; (* Exit protocol *)
<non-critical section>
end
end P1;
Problem: suvina sekvencijalizacija
process P2
begin (naizmeninost) slaba konkurentnost
loop
while turn = 1 do null end; (* Busy wait *)
<critical section> (* Critical section *)
turn := 1; (* Exit protocol *)
<non-critical section>
end
end P2;

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 145/294


Uposleno ekanje
Reenje (Peterson 1981.):
process P1
begin
loop
flag1:=true; turn:=2; (* Announce intent to entry *)
while flag2 and turn=2 do null end; (* Busy wait *)
<critical section> (* Critical section *)
flag1 := false; (* Exit protocol *)
<non-critical section>
end
end P1;
Problemi:
neefikasnost
process P2 sloenost, posebno za opti sluaj vie
begin procesa
loop
flag2:=true; turn:=1; (* Announce intent to entry *)
while flag1 and turn=1 do null end; (* Busy wait *)
<critical section> (* Critical section *)
flag2 := false; (* Exit protocol *)
<non-critical section>
end
end P2;
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 146/294
Semafori
Jednostavan koncept i mehanizam za programiranje
meusobnog iskljuenja i uslovne sinhronizacije
(Dijkstra 1968.)
Semafor je celobrojna nenegativna promenljiva nad kojom
se, osim inicijalizacije, mogu vriti samo dve operacije:
wait(S): (Dijkstra je originalno zvao P) Ako je vrednost semafora
S vea od nule, ta vrednost se umanjuje za jedan; u suprotnom,
proces mora da eka sve dok S ne postane vee od nule, a tada se
vrednost takoe umanjuje za jedan
signal(S): (Dijkstra je originalno zvao V) Vrednost semafora se
uveava za jedan
Operacije wait i signal su atomine atominost
implicitno obezbeuje implementacija => procesi koji
izvravaju ove operacije ne interaguju
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 147/294
Implementacija semafora
Kada je vrednost semafora nula, proces koji je izvrio operaciju
wait() treba da eka da neki drugi proces izvri operaciju signal().
Kako ovo realizovati?
Uposlenim ekanjem? Moe, ali je neefikasno
Blokiranjem (ili suspenzijom, engl. blocking, suspension): PCB procesa za
koji nije zadovoljen uslov nastavka izvravanja ne vraa se u red spremnih,
ve u red ekanja na semaforu ne troi procesorsko vreme na
izvravanje sve dok uslov ne bude zadovoljen
Mogua implementacija semafora:
1) val>0: jo val procesa moe da izvri operaciju wait a da se ne
blokira, nema procesa blokiranih na semaforu;
2) val=0: nema blokiranih na semaforu, ali e se proces koji naredni
izvri wait blokirati;
3) val<0: ima -val blokiranih procesa, a wait izaziva blokiranje
X
-3
PCB2 PCB0 PCB4
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 148/294
Implementacija semafora
procedure wait(S)
val:=val-1;
if val<0 then begin
suspend the running process by putting it into the queue of S;
take another process from the ready queue and switch context to it
end
end;

procedure signal(S)
val:=val+1;
if val<=0 then begin
take one process from the suspended queue of S
and deblock it by putting it into the ready queue
end
end;

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 149/294


Implementacija semafora
1: Proces gubi procesor, ali ostaje spreman:
Sinhrono (neblokirajui sistemski poziv):
eksplicitno sam zatraio preuzimanje (dispatch, yield)
drugi neblokirajui poziv (npr. signal)
Asinhrono (prekid):
isteklo dodeljeno CPU vreme (time exceeded)
preuzimanje jer je postao spreman neki drugi proces (preemption)
1
2: Izabrani proces dobija procesor (rasporeivanje,
scheduling)
3: Proces gubi procesor i blokira se: Ready Running
izvrio blokirajui sistemski poziv
zatraio I/O operaciju
2
suspendovao se na zadato vreme 3
4
4: Proces se deblokira:
running proces je izvrio signal Blocked
ispunjen uslov/zavrena operacija/isteklo-dolo vreme

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 150/294


Implementacija semafora
Operacije wait i signal treba da budu atomine kritine
sekcije. Kako obezbediti meusobno iskljuenje?
Upotrebiti prikazano reenje sa uposlenim ekanjem? Mogue, ali
kako realizovati algoritam za nepoznat broj procesa?
Atominost (meusobno iskljuenje) na viem nivou mora da se
realizuje konceptom nieg nivoa koji obezbeuje atominost
atominost se ne moe stvoriti ni iz ega
Mora postojati podrka hardvera!
void Semaphore::wait () {
lock(); Kako
if (--val<0) block(); implementirati
unlock(); lock() i
}
unlock()?
void Semaphore::signal () {
lock();
if (val++<0) deblock();
unlock();
}
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 151/294
Implementacija semafora
Implementacija lock/unlock na jednoprocesorskom
sistemu:
1. Zabraniti (maskirati) prekide:
Prednost: radi, i to jednostavno i efikasno
Nedostatak (u optem sluaju): prekide treba to manje
maskirati, jer je sistem neosetljiv, mrtav, dok su prekidi
maskirani ne reaguje na spoljanje pobude; u sluaju otkaza ili
beskonanog izvravanja, sistem ostaje hiberniran; ovde je
pogodnost to to je kod operacija wait i signal:
pod kontrolom OS (nema greaka, nema otkaza)
konanog, predvidivog i kratkog trajanja
2. Zabraniti preuzimanje: prekidi su dozvoljeni, ali nije
dozvoljeno preuzimanje; ako se dogodi prekid, samo
zabeleiti to za kasniju obradu, ne zapoinjati
preuzimanje, ve se samo vratiti

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 152/294


Implementacija semafora
Implementacija lock/unlock na multiprocesorskom
sistemu: HW mora da obezbedi instrukciju za
podrku, npr.:
1. Test-And-Set: atomina instrukcija koja postavlja
vrednost bita u zajednikoj memoriji na 1, a vraa
prethodnu vrednost; atominost se obezbeuje
hardverski, npr. zauzimanjem magistrale tokom cele
instrukcije:
lock (L):
while (test_and_set(L)) do null;
unlock (L):
L:=0;
Uposleno ekanje? Da, ali:
kod je pod kontrolom OS (nema greaka, nema otkaza)
konanog, predvidivog i kratkog trajanja
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 153/294
Implementacija semafora
2. Swap: atomina zamena vrednosti registra i memorijske lokacije;
slian mehanizam kao i Test-And-Set
Varijanta 1:
lock(L):
for (int acquired = 0; !acquired; )
swap(acquired,L);

Swap instrukcije su obino skupe.


Varijanta 2:
lock(L):
for (int acquired = 0; !acquired; ) {
while (!L);
swap(acquired,L);
}
Mogu li se ove instrukcije iskoristiti za implementaciju
lock/unlock i na jednoprocesorskom sistemu? Zato da ne!
U emu je razlika?
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 154/294
Implementacija semafora
class Semaphore {
public:
Semaphore (int initValue=1) : val(initValue), lck(0) {}

void wait ();


void signal ();

int value () { return val; };

protected:

void block ();


void deblock ();

private:

int val;
Queue blocked;
int lck; // lock
};

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 155/294


Implementacija semafora
void Semaphore::block () {
if (setjmp(Thread::runningThread->context)==0) {
// Blocking:
blocked.put(Thread::runningThread);
Thread::runningThread = Scheduler::get();
longjmp(Thread::runningThread->context,1);
} else return;
}

void Semaphore::deblock () {
// Deblocking:
Thread* t = blocked.get();
Scheduler::put(t);
}

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 156/294


Implementacija semafora
void Semaphore::wait () {
lock(lck);
if (--val<0)
block();
unlock(lck);
}

void Semaphore::signal () {
lock(lck);
if (val++<0)
deblock();
unlock(lck);
}

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 157/294


Implementacija semafora
Mogu li se primitive lock/unlock koristiti i za meusobno
iskljuenje na nivou korisnikog programa? Obezbeuju
meusobno iskljuenje, ali:
Zabrana prekida ili preuzimanja:
sistem je neosetljiv na spoljanje pobude, slaba reaktivnost
korisniki kod kritine sekcije niim nije ogranien niti se
garantovano zavrava u konanom roku, pa moe predugo ili
veno zadrati sistem u hibernaciji (npr. beskonana petlja)
Uposleno ekanje: neefikasno, troi procesorsko vreme
na jalove instrukcije. Da li je uvek tako?
I blokiranje neto kota procesorsko vreme se opet
troi na reijske (beskorisne) operacije (baratanje
redovima, promena konteksta), to nekad nije
zanemarljivo. Nije li uposleno ekanje ponekad
efikasnije? Kada? Vrteti se ili blokirati se (spin or block)?
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 158/294
Implementacija semafora
Ideja: vrteti se (uposleno ekati) sve dok je to krae
nego vreme blokiranja, inae se blokirati?
Kako znati koliko uposleno ekati, kada se blokirati?
Neka je reijsko vreme blokiranja (ukljuujui i promenu
konteksta) jednako b:
ako bi se uposleno ekalo za vreme t<b i onda dobio klju, to je
isplativije nego odmah se blokirati (uvek b)
ako bi se uposleno ekalo b vremena a onda blokiralo ako se ne
dobije klju, ukupno vreme je 2b
ako bi se samo uposleno ekalo, to moe da potraje neodreeno
(>2b)
Zakljuak: sledei postupak uvek garantuje reijsko vreme
do 2b:
uposleno ekati dok se ne dobije klju ili dok ne istekne b vremena
potom se blokirati

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 159/294


Implementacija semafora
Da li je zakljuavanje neophodno?
Zato biti pesimista u pogledu meusobnog iskljuenja?
Kolika je stvarna ansa da vie procesa uleti u konflikt u
kritinoj sekciji, posebno ako ih je malo? Zato troiti toliko
reijskog vremena na neto to se moda retko ili nikad ne
deava?
Drugi pristup optimistiki pristup bez ekanja i
zakljuavanja (optimistic concurrency control, wait-free
synchronization, lock-free synchronization):
x:=x+1
1.Uitaj x u registar R1
2.Dodaj 1 na R1 i smesti u registar R2
3.Atomino uradi: ako je i dalje x=R1, smesti R2 u x,
inae idi na 1
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 160/294
Implementacija semafora =
Mogue uoptiti na proizvoljnu strukturu:
Napravi kopiju strukture na koju ukazuje dati pokaziva, modifikuj
kopiju strukture
Atomino uradi: uporedi izvorni pokaziva sa proitanim, ako su isti
zameni pokaziva da ukazuje na kopiju
Ako je neki drugi proces izmenio polaznu strukturu, ponovi sve
Potrebna je podrka procesora instrukcija za atomino
poreenje i upisivanje. Moderni procesori to imaju
(x86: CMPXCHG, CMPXCHG8B)
Prednosti:
nema reijskog vremena zbog zakljuavanja i blokiranja
bolje se ponaa u sluaju otkaza (procesa koji dri neto zakljuano)
Nedostatak: mnogo ponovnih pokuaja u sluaju velikog
optereenja
Neko je napisao ceo OS bez zakljuavanja!
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 161/294
Upotreba semafora
Meusobno iskljuenje pomou semafora:
var mutex : Semaphore = 1; // Initially equal to 1
process P1;
loop
wait(mutex);
<critical section>
signal(mutex);
<non-critical section>
end Prednost: jednostavan kod,
end P1; jednak za proizvoljan broj
procesa
process P2;
loop Nedostatak: wait i signal
wait(mutex);
<critical section> moraju biti upareni. ta
signal(mutex); ako se grekom ne upare?
<non-critical section>
end
end P2;
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 162/294
Upotreba semafora
Primer deljenog semafora: (pojednostavljeni) POSIX API
#include <fcntl.h>
#include <sys/stat.h>
#include <semaphore.h>
// Initialization:
const char* mutexName = /myprogram_mutex
sem_t* mutex = sem_open(mutexName,O_CREAT,1);
// O_CREAT|O_EXCL creates an exclusive semaphore

// Use for mutual exclusion:
sem_wait(mutex);
// Critical section
sem_post(mutex);

// Release the semaphore when it is no longer needed:
sem_close(mutex);

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 163/294


Upotreba semafora
Opti sluaj sekcije u koju moe da ue N procesa:

var mutex : Semaphore = N; // Initially equal to N

process P;
loop
wait(mutex);
<critical section>
signal(mutex);
<non-critical section>
end
end P;

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 164/294


Upotreba semafora
Uslovna sinhronizacija pomou semafora:
var sync : Semaphore = 0; // Initially equal to 0

process P1; // Waiting process


...
wait(sync);
...
end P1;

process P2; // Signalling process


...
signal(sync);
...
end P2;

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 165/294


Upotreba semafora
Opti sluaj n procesa P koji se sinhronizuju pomou n-1
semafora S:
P(1) se izvrava i signalizira S(1)
P(k) eka na S(k-1), izvrava se i signalizira S(k)
(Vetaki) primer: sinhronizovati procese koji zajedno
obavljaju operaciju print(f(x,y))
float x,y,z;
Semaphore Sx(0), Sy(0), Sz(0);
T1: T2: T3:
x=...; Sx.wait(); Sz.wait();
Sx.signal(); Sy.wait(); print(z);
y=...; z=f(x,y); ...
Sy.signal(); Sz.signal();
... ...

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 166/294


Upotreba semafora
Ogranieni bafer pomou semafora:
const int N = ...; // Capacity of the buffer
class Data;

class BoundedBuffer {
public:

BoundedBuffer ();

void append (Data*);


Data* take ();

private:
Semaphore mutex;
Semaphore spaceAvailable, itemAvailable;

Data* buffer[N];
int head, tail;
};

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 167/294


Upotreba semafora
BoundedBuffer::BoundedBuffer () :
mutex(1), spaceAvailable(N), itemAvailable(0),
head(0), tail(0) {}

void BoundedBuffer::append (Data* d) {


spaceAvailable.wait();
mutex.wait();
buffer[tail] = d;
tail = (tail+1)%N;
mutex.signal();
itemAvailable.signal();
}

Data* BoundedBuffer::take () {
itemAvailable.wait();
mutex.wait();
Data* d = buffer[head];
head = (head+1)%N;
mutex.signal();
spaceAvailable.signal();
return d;
}
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 168/294
Upotreba semafora
Prikazani semafori nazivaju se jo i n-arni ili brojaki semafori
Za mnoge primene (npr. meusobno iskljuenje) dovoljni su binarni
semafori: najvea vrednost mu je 1
Operacija wait blokira proces ako je semafor 0, odnosno postavlja
semafor na 0 ako je bio 1
Operacija signal deblokira proces ako eka, a postavlja semafor na 1
ako ga nema
Ponegde se binarni semafor naziva i dogaaj (event) samo signalizira
da se neki dogaaj desio (logika, Bulova vrednost, desio se ili ne)
U mnogim sistemima na dogaaj moe ekati samo jedan proces
(vlasnik dogaaja) i samo on moe vriti wait; signal moe uraditi
bilo koji proces
Neki sistemi podravaju kombinovano ekanje na vie dogaaja po
uslovu i i ili
Posebno pogodni za ekanje na spoljanje dogaaje koji se
signaliziraju iz prekidne rutine: zavrena I/O operacija, isteklo vreme
suspenzije procesa. Zato su veoma osetljivi za implementaciju
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 169/294
Upotreba semafora
Pogodnosti semafora:
jednostavan i efikasan koncept
generalan koncept niskog nivoa pomou njega se
mogu implementirati mnogi drugi, apstraktniji koncepti
za sinhronizaciju
Loe strane semafora:
suvie jednostavan koncept niskog nivoa nije logiki
povezan sa konceptima bliim domenu problema
(resurs, kritina sekcija, ...)
kod sloenijih programa lako postaje glomazan,
nepregledan, teak za razumevanje, proveru i
odravanje jer su operacije nad semaforima rasute
podloan je grekama mora se paziti na uparenost i
redosled operacija wait i signal
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 170/294
Upotreba semafora
ta je problem sa sledeim kodom (S1 i S2 su inicijalno 1)?
process P1;
wait(S1);
wait(S2); Mogua sekvenca:
... P1 - wait(S1); // S1:=0
signal(S2); P2 - wait(S2); // S2:=0
signal(S1); P1 - wait(S2); // P1 blocks on S2
end P1; P2 - wait(S1); // P2 blocks on S1

process P2; Problem - mrtvo (ili kruno) blokiranje (deadlock):


wait(S2); stanje sistema u kome je nekoliko procesa
wait(S1); suspendovano (blokirano) meusobnim
... uslovljavanjem (ekanjem) - detalji u OS2
signal(S1);
signal(S2);
end P2;

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 171/294


IV Upravljanje memorijom

Vezivanje adresa
Deljenje memorije
Organizacija i alokacija memorije
Virtuelna memorija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 172


Glava 10: Vezivanje adresa

Problem vezivanja adresa (address binding)


Prevoenje (compilation)
Povezivanje (linking)
Uitavanje (loading)
Dinamiko preslikavanje adresa

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 173


Problem vezivanja adresa
Izvorni program na jeziku C/C++ podeljen na fajlove:
// A.cpp: // B.cpp:
int a = 3; extern int a;
void f() {...} extern void f();
void g() {
...a++; ...f()...;
}
Pitanja:
Kako preslikati obraanje promenljivoj a ili funkciji f u mainski
razumljivo adresiranje prevoenje (compilation)?
Kako povezati prevedene fajlove u jedinstven program i reiti
obraanje promenljivoj a ili funkciji f u drugom fajlu povezivanje
(linking)?
Kako odrediti adrese promenljive a i funkcije f kada se sazna gde e
proces biti smeten u memoriji uitavanje (loading)?
Postoji li potreba za preslikavanjem logikih u fizike adrese u vreme
izvravanja, uz pomo hardvera dinamiko preslikavanje adresa?
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 174/294
Prevoenje (compilation)
a inije
Ovo jef moraju da
definicija
definicija
int a = 3; budu
int a; int a; koja
extern deklarisani
bi uzrokovala
void f(); pre referisanja
alokaciju prostora
A.cpp void f() { B.cpp
... void g() {
} ...f()...
...a...
}

a: 0 g: 0
f: 1 f: ...
... a: ...
A.obj a: 3 a: ?
g:
B.obj
f: ... ...
...?f...
... ...?a...
... ...

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 175/294


Povezivanje (linking) P.exe

A.obj
a: 0 g: 0
f: 1 f: ...
... a: ... B.obj
A.obj a: 3 g:
B.obj
f: ... ...?f...
C.obj
... ...?a...
... ...
...

Linker ima zadatak da sastavi niz .obj fajlova (A.obj, B.obj,


C.obj itd.) i napravi jedan izvrni fajl (P.exe)
Linker ovo tipino radi u dva prolaza:
pravi globalnu mapu .obj fajlova i tabelu definisanih izveenih
simbola i njihovih globalnih adresa (relativno u odnosu na poetak
.exe fajla)
razreava referenciranja uveenih simbola koristei adrese
definisanih simbola izraunate u tabeli simbola
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 176/294
Povezivanje (linking)
Biblioteke (libraries, .lib) imaju isti oblik i znaenje kao i
obini .obj fajlovi, osim to su pripremljeni prevoenjem i
povezivanjem skupa izvornih fajlova
Linker tretira biblioteke na isti nain kao i druge .obj fajlove
Mogue greke tokom povezivanja:
simbol nije definisan: linker saoptava samo ime .obj fajla koji uvozi
(referie) nedefinisani simbol; esto zbunjuje, poto korisniki kod
moda uopte ne koristi taj simbol; verovatan uzrok: simbol se koristi
u nekoj povezanoj biblioteci, ali druga biblioteka u kojoj je taj simbol
definisan nije ukljuena u listu za povezivanje
viestruke definicije simbola: linker saoptava imena .obj fajlova koji
definiu isti simbol; verovatan uzrok: definicije u izvornim fajlovima
i/ili biblioteci (sukob imena, name clashing)
Povezivanje sa ciljem pravljenja biblioteke (.lib) razlikuje se
od povezivanja sa ciljem pravljenja programa (.exe)! Zato?

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 177/294


Uitavanje (loading)
Procesi ije je zapoinjanje zahtevano (kreirani su) nalaze
se u redu za zapoinjanje (job queue, input queue) na
spisku su svih procesa, ali jo nisu spremni za izvravanje
Da bi ovakav proces bio spreman za izvravanje i preao u
ready queue, OS treba sa njim da uradi sledee:
1. pronae slobodan prostor u memoriji za smetanje programa i
podataka procesa
2. uita program i statiki alocirane podatke u memoriju sa diska
3. (ako je potrebno) razrei adrese referisanih simbola u programu
relativne adrese u odnosu na poetak programa pretvori u
apsolutne memorijske fizike adrese, prostim dodavanjem
apsolutne fizike adrese smetanja procesa u memoriju statiko
vezivanje adresa u vreme uitavanja
4. kreira poetni kontekst
Ove poslove obavlja poseban deo OS, sistemski program
pod nazivom loader (utovariva)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 178/294
Dinamiko preslikavanje adresa
Ako OS omoguava postojanje vie procesa u memoriji u jednom
trenutku i izbacivanje nekih (delova) procesa a ubacivanje drugih,
onda statiko vezivanje adresa u vreme uitavanja nije dovoljno
Potrebno je da proces bude relokatibilan: da se moe jednostavno, u
vreme izvravanja programa, promeniti lokacija procesa (programa i
njegovih podataka) na drugo mesto u memoriji, a da to ni na koji nain
ne utie na program i njegovo adresiranje podataka (pokazivai!)
Potrebno je zato da proces poseduje logiki (virtuelni) adresni prostor,
tako da program moe da adresira sve adrese u opsegu 0 do Max
Logike adrese se preslikavaju u fizike adrese koje se upuuju
memorijskim modulima
Preslikavanje logikih u fizike adrese obavlja se dinamiki, u vreme
izvravanja
Ovo preslikavanje vri hardver obavezna je hardverska podrka
Ovo preslikavanja vri se uvek i za svaku logiku adresu program
vidi iskljuivo logiki adresni prostor, nikako fiziki

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 179/294


Dinamiko preslikavanje adresa
Najjednostavnija tehnika dinamikog preslikavanja adresa:
bazni registar za relokaciju (base relocation register):
Relocation Reg
VAddr

1A220000
17 1A220017
+
CPU MMU OM
Zaduenja OS-a:
Loader treba da definie vrednost relokacionog registra na osnovu
mesta uitavanja procesa u memoriji i smesti tu vrednost u PCB
prilikom svake promene konteksta, OS treba da upie vrednost iz
PCB u relokacioni registar
Sloenije tehnike dinamikog preslikavanja: stranina,
segmentna i stranino-segmentna organizacija
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 180/294
Glava 11: Deljenje memorije

Problem deljenja memorije


Dinamiko uitavanje (dynamic loading)
Preklopi (overlays)
Biblioteke sa dinamikim vezivanjem (DLL)
Zamena (swapping)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 181


Problem deljenja memorije
Vie procesa konkurie za isti resurs. Kako ih sve zadovoljiti?
Deljenjem resursa!
Kako se moe deliti resurs:
vremenski (time sharing): jedno vreme resurs koristi jedan proces, pa
ga onda preuzima (preempt) i malo koristi drugi itd.; primer: CPU
prostorno (space sharing): jedan deo resursa koristi jedan proces,
drugi deo drugi proces itd.; primer: operativna memorija
Operativna memorija se moe deliti i vremenski i prostorno:
samo vremenski: celu memoriju koristi samo jedan proces neko
vreme, pa onda celu memoriju koristi neki drugi; veoma stari OS
samo prostorno: ceo proces je u OM, ali je u datom trenutku vie
procesa u OM; uglavnom stariji i slabiji OS, bez izbacivanja delova ili
celih procesa
kombinacija: delovi procesa ili celi procesi se izbacuju i uitavaju se
drugi, u jednom trenutku je u OM vie delova ili celih procesa;
moderni OS
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 182/294
Problem deljenja memorije
Ukoliko vie procesa treba da koristi memoriju, kako reiti
problem nedostatka (ogranienja) memorije? Tehnike:
smanjiti potrebu za memorijom od strane programa bez uea
OSa - prevodilac obezbeuje da program smanji svoje potrebe:
dinamiko uitavanje (dynamic loading)
preklopi (overlays)
prostorno deliti memoriju:
deljene biblioteke (shared libraries) i dinamiko vezivanje (dynamic
linking)
uitavati vie procesa u memoriju; neophodan uslov: relokatibilnost
vremenski deliti memoriju:
zamena (swapping)
virtuelna memorija (virtual memory)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 183/294


Dinamiko uitavanje
Ideja:
sloeni program esto nikada ne izvrava neke svoje
delove ili ne koristi neke svoje podatke; neke procedure
se moda nikada ili jako retko pozivaju, npr. kod za
obradu greaka i izuzetnih situacija; neki podaci se
nikada ili retko koriste
zato bezuslovno unapred uitavati ove delove
programa, ako oni nikada nee biti korieni?
ovakve delove uitavati dinamiki, tek u vreme
izvravanja, po potrebi kada im se prvi put pristupi

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 184/294


Dinamiko uitavanje
Realizacija:
prevodilac obezebeuje potrebnu podrku i rastavlja program na
potprograme kao odvojene celine za uitavanje; moe zahtevati
sugestiju i pomo programera
potprogrami se smetaju na disk kao relokatibilne celine
pri pokretanju procesa, uitava se glavni program i programska
tabela adresa potprograma
kada se pozove potprogram, pozivajui kod proverava u tabeli da li
je potprogram uitan
ako nije, pokree se loader (kao deo programa, ne OS-a) da uita
potprogram na odreenu lokaciju i postavi njegovu adresu u tabelu
potprograma
kada se potprogram ponovo pozove, njegova adresa je u tabeli
spremna za poziv (indirektno adresiranje potprograma)
Dinamiko uitavanje ne zahteva nikakvu podrku OS-a
sve radi prevodilac i generisani kod. OS samo obezbeuje
bibliotene rutine za dinamiko uitavanje
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 185/294
Preklopi
Ideja:
zato ne omoguiti da program alocira manje prostora nego to u
celini zauzima, tako to se delovi koji se ne koriste u isto vreme
zamenjuju u memoriji, zauzimajui isto mesto - preklapajui se
(overlaying)
kada zatreba neki deo koji nije u memoriji, izbaciti deo sa kojim se
preklapa i na njegovo mesto uitati potrebni
Realizacija:
prevodilac obezebeuje potrebnu podrku i rastavlja program na
delove kao odvojene celine za uitavanje; moe zahtevati sugestiju i
pomo programera
delovi se smetaju na disk kao relokatibilne celine
pri pokretanju procesa, uitavaju se odreeni delovi
kada se zahteva neki deo, pozivajui kod poziva overlay driver koji
proverava da li je deo uitan
ako nije, pokree se loader (kao deo programa, ne OS-a) da uita deo
na odreenu lokaciju, zamenjujui neki drugi deo
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 186/294
Preklopi Symbol
table
Primer: 20KB
linker sa dva prolaza
ukupna veliina programa: 200KB
Common
overlay driver: 10KB
routines
potrebna memorija sa preklapanjem: 30KB
140KB
poetno uitavanje je krae
Overlay
izvravanje je due zbog uitavanja driver 10KB

Pass 1 Pass 2
code Overlay code
70KB 80KB

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 187/294


Preklopi
Preklapanje ne zahteva nikakvu podrku OS-a sve radi
prevodilac (uz pomo programera) i generisani kod. OS
samo obezbeuje bibliotene rutine za dinamiko
uitavanje
Ali da li preklapanje i niti (overlays+threads) mogu
zajedno?
Problem: za velike programe (za male preklapanje
uglavnom nije potrebno) konstruisanje preklopa zahteva
razumevanje znaenja programa, to moe da bude
sloeno
Zbog toga je preklapanje ogranieno na mikroraunare sa
manjom koliinom fizike memorije i bez hardverske
podrke za sloenije i bolje mehanizme upravljanja
memorijom

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 188/294


Biblioteke sa dinamikim vezivanjem
Ideja:
mnogi programi esto koriste iste sistemske biblioteke, npr. za
datoteke, GUI, mrenu komunikaciju itd.
ako bi se te biblioteke statiki povezivale, svaki program koji se
izvrava zahtevao bi prostor unutar sebe za te biblioteke, a isti kod
bi se ponavljao u svim programima
zato ne obezbediti deljenje biblioteka (shared libraries), tako da u
memoriji postoji samo jedna kopija koda biblioteka
potrebno je vriti dinamiko povezivanje (dynamic linking) u vreme
izvravanja umesto statikog povezivanja pre izvravanja
ideja slina dinamikom uitavanju, osim to se umesto uitavanja
povezivanje odlae za vreme izvravanja
deljene biblioteke sa dinamikim vezivanjem (dynamic linking
libraries, DLL)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 189/294


Biblioteke sa dinamikim vezivanjem
Realizacija:
u programu koji koristi DLL, za svaki potprogram iz DLLa
uvodi se stub kaobajagi potprogram, njegov zamenik
pozivi datog potprograma prevode se uobiajeno, ali oni
pozivaju stub umesto pravog potprograma P
stub u sebi sadri referencu (adresu) stvarnog
potprograma P iz biblioteke, inicijalno postavljenu na null
stub je mali deo koda koji radi sledee:
ako je referenca na potprogram null, poziva se sistemska usluga
koja pronalazi traeni DLL i njegov potprogram P i vraa njegovu
adresu
vraenu vredost smeta u svoju referencu, tako da se svaki sledei
poziv odmah razreava adresiranjem preko reference, bez
sistemskog poziva

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 190/294


Biblioteke sa dinamikim vezivanjem
X proc (A a, B b, C c) { // stub for proc
static X (*ref)(A,B,C) = 0;
if (ref==0) {
ref = sys_call(MapDLL, dllName, proc);
if (ref==0) ... // Exception!
}
return (*ref)(a,b,c);
}

sistemska usluga treba da uradi sledee:


u sistemskom registru DLLova pronae traeni DLL i traeni
potprogram
uita DLL u memoriju ako ve nije uitan na zahtev nekog drugog
procesa
(ako je potrebno) preslika fiziki prostor koji zauzima DLL u
virtuelni prostor pozivajueg procesa i vrati virtuelnu adresu
potprograma neophodna podrka OS-a
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 191/294
Biblioteke sa dinamikim vezivanjem
Pogodnost: prilikom izdavanja nove verzije biblioteke (npr.
ispravka greke), programi koji je koriste ne moraju
ponovo da se statiki povezuju
Problem: ta ako nova verzija biblioteke nije vie
kompatibilna sa starim programima?
Neophodno oznaavanje verzija biblioteka i provera
kompatibilnosti biblioteke koja postoji u sistemu sa
verzijom koju program zahteva
Posledica: mogue je da u datom trenutku u sistemu
postoji uitano vie verzija iste biblioteke

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 192/294


Zamena
Ideja: vremenski deliti memoriju tako to se jedan proces
izbaci iz nje snimanjem na disk da bi drugi bio uitan sa
diska zamena (swapping)
Jednostavna varijanta: kada doe do preuzimanja, OS
zapoinje snimanje sadraja memorije procesa koji je
izgubio procesor na disk i uitavanje drugog na njegovo
mesto, dok u meuvremenu procesor izvrava neki trei
proces koji je spreman
Da li se proces koji se uitava u memoriju vraa na isto
mesto iz koga je izbaen? Zavisi! Od ega?
Disk za podrku zameni mora biti brz i velikog kapaciteta
da prihvati cele adresne prostore vie procesa
Prostor na disku za podrku zameni je van fajl sistema OSa
da bi bio brz

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 193/294


Zamena
Posledica: promena konteksta moe biti veoma duga
Na primer, neka je brzina transfera diska 5MB/s; za
zamenu procesa koji zauzima 1MB memorije potrebno je 2
puta po oko 0,2s, dakle oko 0,4s; ta ako proces zauzima
128MB? Zato je potrebno da OS zna koliko proces stvarno
zauzima, ne koliko moe da zauzima
Da bi sistem bio efikasan, vremenski kvant dodeljen
procesu za izvravanje mora biti znaajno dui od promene
konteksta
Problem: ta ako proces koji se izbacuje eka na zavretak
I/O operacije koja koristi deo memorije tog procesa za
svoje bafere? Reenja:
zabraniti zamenu procesa koji eka na zavretak I/O

koristiti memorijski prostor OS-a za I/O bafere

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 194/294


Zamena
Malo sistema koristi jednostavnu varijantu stalne zamene
celog procesa prilikom svake promene konteksta; mnogo
vie se koriste modifikovane varijante
Unix modifikacija: zamena je normalno onemoguena, ali
se aktivira kada sistem postane optereen sa mnogo
procesa
MS Windows 3.1 varijanta: kada se pokrene novi proces a
nema dovoljno memorije, postojei proces se zamenjuje;
ovde korisnik, a ne OS inicira preuzimanje i zamenu: kada
korisnik pree da radi sa nekim procesom, on se aktivira,
po potrebi zamenjujui neki drugi proces; izbaeni proces
ostaje van memorije sve dok korisnik ne pree na njega

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 195/294


Glava 12: Organizacija i alokacija
memorije

Kontinualna alokacija
Stranina organizacija
Segmentna organizacija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 196


Kontinualna alokacija
Za svaki proces alocira se kontinualan memorijski prostor
Relokatibilnost se obezbeuje dinamikim preslikavanjem
sa registrom za relokaciju (relocation register)
Ovakvo preslikavanje obezbeuje i zatitu OS-a od
korisnikih procesa i procesa izmeu sebe
IVT
registar granice (limit register)
Ova dva registra sastavni su deo konteksta procesa OS
OS ih uitava iz PCB pri promeni konteksta
User Process
Limit Reg Relocation Reg
VAddr

Yes - OK
User Process
< +
CPU MMU No - Trap OM
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 197/294
Kontinualna alokacija
Osnovno pitanje: kako pronai slobodan prostor za
smetanje procesa problem alokacije (allocation)?
Jedno jednostavno reenje particije (partition): podeliti
OM za korisnike procese na particije jednake veliine,
maksimalno dozvoljene procesu. Svaka particija moe da
sadri samo jedan proces stepen multiprogramiranja je
ogranien brojem particija
OS vodi tabelu particija za svaku particiju po jedan ulaz.
Ulaz sadri informaciju da li je particija slobodna, odnosno
kom procesu je dodeljena. PCB sadri oznaku particije
procesa
Kada ima slobodne particije, proces se uitava i pokree.
Kada proces zavri, njegova particija se oznaava
slobodnom
Zastareo metod, ne primenjuje se vie
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 198/294
Kontinualna alokacija
Optiji pristup - dinamika alokacija memorije (dynamic
storage allocation):
OS vodi evidenciju o zauzetim i slobodnim delovima memorije
inicijalno je ceo prostor za korisnike procese slobodan
kada se kreira novi proces, stavlja se u ulazni red (input queue)
OS analizira memorijske zahteve procesa u ulaznom redu i trenutno
stanje slobodne memorije i bira proces za uitavanje (na osnovu
algoritma rasporeivanja ili memorijskih zahteva)
OS pronalazi slobodan deo memorije dovoljno veliki da smesti izabrani
proces
OS uitava proces u izabrani deo slobodne memorije; deo memorije
koji proces zauzima oznaava zauzetim, a ostatak ostaje slobodan
kada se proces zavri, deo memorije koji je zauzimao proglaava se
slobodnim, uz eventualno spajanje u kontinualnu celinu sa slobodnim
delovima ispred i iza osloboenog dela
OS moe da ispita postoji li proces u ulaznom redu koji sada moe da
se uita
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 199/294
Kontinualna alokacija
Osnovno pitanje: ukoliko postoji vie slobodnih
delova u koje moe da se smesti proces, kako
izabrati jedan?
Pristupi:
izabrati prvi koji odgovara (first fit): jednostavan i efikasan
izabrati onaj koji najbolje odgovara (best fit), u smislu da
ostaje najmanje otpatka, sa idejom najboljeg iskorienja
prostora
izabrati onaj koji najloije odgovara (worst fit), u smislu da
najvie preostaje, sa idejom da se taj ostatak najlake
moe iskoristiti
Eksperimenti pokazuju da su first fit i best fit bolji u
smislu efikasnosti i iskorienja memorije; ni jedan
od ta dva nije generalno bolji u smislu iskorienja,
a first fit je generalno efikasniji
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 200/294
Kontinualna alokacija
Osnovni problem - eksterna fragmentacija (external
fragmentation): ukupan slobodni prostor jeste
dovoljan, ali nije kontinualan za alokaciju
Statistike: na N alociranih blokova, jo oko N
blokova se gubi zbog fragmentacije
Uzrok: alokacija delova razliitih veliina u slobodne
celine razliitih veliina
Jo jedan problem: ta ako se alocira prostor od
18462 bajta u slobodan deo od 18464 bajta
preostaju samo 2 slobodna bajta. Trokovi voenja
evidencije o tako malom slobodnom prostoru nisu
opravdani!

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 201/294


Kontinualna alokacija
Pristupi reavanju eksterne fragmentacije:
podeliti memoriju na blokove fiksne veliine i alocirati
memoriju samo u celom broju blokova; razlika izmeu
stvarno zahtevane memorije i alocirane memorije
neiskorien ostatak interna fragmentacija
kompakcija (compaction): relocirati procese tako da se
spoje zauzeti i slobodni delovi memorije skupiti
slobodnu memoriju u jedan veliki blok; mogue samo
ako je relokacija dinamika, nije mogue za statiku
relokaciju (u vreme uitavanja); problem: skupo reenje
stranina organizacija (paging): omoguiti da logiki
adresni prostor procesa ne bude kontinualan

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 202/294


Stranina organizacija
Physical Address
Logical Address PMT
p d f d

Tipine veliine stranice: od 512 do 16M adresibilnih jedinica


Inherentno obezbeuje dinamiku relokatibilnost
Nema eksterne fragmentacije
Ima interne fragmentacije. Ako je veliina procesa nezavisna od veliine
stranice, oekivana veliina internog fragmenta je stranice
Taj razlog favorizuje male stranice. Meutim, male stranice unose vie
reija (vea PMT, manje efikasan I/O) pogododnije su vee stranice
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 203/294
Stranina organizacija
Posledica: svaki proces vidi kontinualan logiki (virtuelni)
adresni prostor sa samo jednim programom, dok je u fizikoj
memoriji taj prostor rasut po okvirima (frame, blokovima)
Ova razlika je transparentna za korisniki proces sakriva ga
hardver za preslikavanje adresa (MMU) i OS
Kada se proces veliine N stranica izabere za uitavanje u
memoriju, OS pronalazi N slobodnih okvira za smetanje
procesa
Zbog toga OS mora da vodi tabelu zauzetosti okvira fizike
memorije (frame table): za svaki okvir jedan ulaz da li je
okvir slobodan ili je zauzet i koji proces ga zauzima
OS mora da vodi rauna o tome da su adrese koje proces
prenosi kao argumente sistemskog poziva logike. OS mora
da ih preslika u fizike adrese korienjem PMT za dati proces

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 204/294


Stranina organizacija
Ako je PMT u fizikoj memoriji, svaki pristup jednoj logikoj
lokaciji zahteva dva pristupa fizikoj memoriji pristup
memoriji se dvostruko produava
Da li PMT moe da se smesti u HW za preslikavanje adresa
(MMU)?
Teorijski - da. Posledice:
cela PMT je deo konteksta procesa koji mora da se uita u MMU pri
promeni konteksta
registarski fajl za smetanje PMT treba da bude brz
Meutim, takav registarski fajl za novije sisteme bio bi
neizvodljivo veliki reda 1M registara (ulaza u PMT)
Zbog toga noviji sistemi uvaju PMT u operativnoj
memoriji, a na PMT ukazuje PMTP registar deo konteksta
Kako reiti problem neefikasnog pristupa OM? TLB!

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 205/294


Stranina organizacija
Moderni raunari:
veoma veliki logiki adresni prostor: 232 do 264 lokacija
neka je veliina stranice 4K lokacija (212), sledi:
PMT ima 220 do 252 ulaza!
ako je ulaz 4B (32 bita), to omoguava 232 fizikih okvira, odnosno
244 fizikih lokacija, sledi:
PMT je veliine 222 (4M) do 254 bajtova!
Ovo moe biti neizvodljivo!
Ali na sreu, esto nije ni potrebno jer proces praktino nikada ne
koristi ceo svoj logiki adresni prostor
Jedno reenje: PMT implementirana kao hash tabela
Ideja: veliki prostor kljueva (page) sa malo njih koji su
iskorieni - treba imati preslikavanje kljueva u ulaze hash
tabele koje rasipa kljueve koji se pojavljuju po tabeli, uz
reavanje konflikata (vie kljueva se preslikava u isti ulaz)
asocijativnim traenjem kljua u istom ulazu
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 206/294
Stranina organizacija
Drugo reenje: stranienje u vie nivoa (multilevel paging)
Ideja: samu PMT podeliti na stranice i te stranice (tj. samo
one potrebne) rasuti po fizikoj memoriji
Stranienje u dva nivoa:
Logical Address
Page Offset

p1 p2 d

PMTP p1 p2 d

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 207/294


Stranina organizacija
Pojam logikog segmenta virtuelnog adresnog prostora
deo virtuelnog adresnog prostora koji proces koristi na isti
nain (ista namena, npr. kod, stek, statiki podaci, heap)
Proces mora da alocira segment (deklarie OS-u da koristi
odreeni segment) na jedan od dva naina:
Statiki: segmenti su definisani zapisima u .exe fajlu; loader ih tumai
prilikom pokretanja procesa
Dinamiki: tokom svog izvravanja, proces alocira novi segment
sistemskim pozivom (opseg adresa, tj. stranica, nain korienja)
Za svaki alocirani segment, OS vodi evidenciju u deskriptoru
segmenta
Loader kreira ove strukture prilikom kreiranja procesa
(kreiranje memorijskog konteksta)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 208/294


Stranina organizacija
Deskriptori segmenata struktura iskljuivo pod kontrolom
OSa i odvojena od PMT, na osnovu koje OS odrava PMT:
Opseg adresa (stranica)
Nain korienja (prava pristupa, RWX odreuju prava u deskriptoru
svake stranice tog segmenta u PMT)
Odakle potie i gde se snima (backing store: exe fajl/swap space)

Start page
Size
RWX
Backing store

Start page
Size
RWX
Backing store

Start page
Size
RWX
Backing store
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 209/294
Stranina organizacija
Deskriptor stranice u PMT sadri samo informacije potrebne
hardveru:
Prava pristupa (RWX)
Da li je preslikavanje mogue (npr. null vrednost ako nije), bez obzira
zato nije zato to stranica nije validna, jer ne pripada alociranom
segmentu, ili zato to nije u memoriji
Ako jeste, u koji okvir se preslikava (frame)
Ako preslikavanje nije mogue, hardver generie page fault
ne ulazei u razlog. Kada obrauje ovaj izuzetak, OS utvruje
razlog na osnovu virtuelne adrese i podataka u deskriptoru
segmenta kome pripada i reaguje na jedan od dva naina:
Gasi proces, ako adresa pripada nedeklarisanom segmentu (memory
access violation)
Uitava stranicu, ako adresa pripada deklarisanom segmentu

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 210/294


Stranina organizacija
Uinak stranienja u vie nivoa: proces po pravilu koristi jako
mali deo svog virtuelnog adresnog prostora (posebno za 64-
bitne arhitekture)

PMT2

PMT1
null
null null
null null

null
null
null

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 211/294


Stranina organizacija
Kako stranienje u vie nivoa utie na performanse?
Pretpostavke:
vreme pristupa fizikoj memoriji 100 ns
vreme pretrage i itanja TLB-a 20 ns
procenat pogotka u TLB-u 98%
Vreme pristupa bez TLB-a:
stranienje u jednom nivou: 2 x 100 ns = 200 ns
stranienje u tri nivoa: 4 x 100 ns = 400 ns
Vreme pristupa sa TLB-om:
stranienje u jednom nivou: 0,98 x 120 ns + 0,02 x 220 ns = 122 ns
(22%)
stranienje u tri nivoa: 0,98 x 120 ns + 0,02 x 420 ns = 126 ns (26%)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 212/294


Stranina organizacija
Zatita u straninoj organizaciji:
OS-a od korisnikih procesa i procesa izmeu sebe inherentno
(fiziki im se ne moe pristupiti)
od prekoraenja opsega dozvoljenih adresa procesa ili dozvole
upisa - proirenjem ulaza PMT bitima zatite:
valid/invalid bit: da li je data stranica uopte dozvoljena za pristup da
li je u opsegu dozvoljenih adresa ili nije
read/write/execute biti: biti dozvole itanja, upisa ili izvravanja
sadraja iz date stranice
prilikom preslikavanja adrese, HW (MMU) dovlai deskriptor
stranice i najpre proverava pravo pristupa do te stranice; ako
pristup nije dozvoljen, generie se interni prekid (exception)
Kako utedeti na PMT ako nisu sve stranice potrebne?
Registar duine tabele stranica (page-table length register,
PTLR) kao deo konteksta procesa
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 213/294
Stranina organizacija
U viekorisnikim sistemima deava se da mnogo procesa
izvrava isti program. Ako svaki proces uitava isti program
u svoj fiziki memorijski prostor, ovaj prostor se
nepotrebno troi dupliranjem istog sadraja (programskog
koda)
Reenje - deljenje stranica (shared pages): PMT za razliite
procese preslikavaju stranice sa istim programskim kodom
u isti fizike okvire, dok se stranice sa podacima
preslikavaju razliito (sopstveno za svaki proces)
Preduslov: da se kod ne menja tokom izvravanja!

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 214/294


Stranina organizacija
Jedna tehnika za smanjenje reijskih trokova pri kreiranju
procesa sa fork() - kopiranje na upis (copy on write):
pri pozivu fork(), proces-dete deli sve stranice sa roditeljem
nema kopiranja stranica (PMT se prosto iskopiraju plitko
kopiranje)
sve stranice logiki dozvoljene za upis se u deskriptorima u PMT
oba procesa oznae kao zabranjene za upis, ali u deskriptorima
segmenata kojima pripadaju oznaene su kao copy on write
(logiki dozvoljene za upis, ali samo ako nisu deljene)
sve dok proces pristupa stranici samo za itanje, ona moe da
ostane deljena
kada proces prvi put upisuje u neku ovakvu deljenu stranicu:
HW generie izuzetak, jer stranica nije dozvoljena za upis
OS zakljuuje da je upis logiki dozvoljen, ali da je stranica deljena;
stranica se tada kopira i prestaje da bude deljena, ve privatna
(oznaava se kao dozvoljena za upis u PMT) i instrukcija ponavlja

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 215/294


Segmentna organizacija
Physical Address
Logical Address ST
s d +

Trap
> limit base

Segmentna organizacija podrava korisniki pogled na


program i njegove podatke: adresni prostor je podeljen na
logike celine segmente
Podelu na segmente vri prevodilac prema logikoj
strukturi programa (npr. programski moduli, globalni
podaci, stek, dinamika memorija heap itd.)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 216/294
Segmentna organizacija
Zatita se prirodno uklapa u segment kao logiku celinu iji
se sadraj tipino koristi na isti nain:
deskriptor segmenta (ulaz u ST) sadri graninu vrednost (limit)
koja titi od prekoraenja veliine segmenta; npr. moe se
iskoristiti za HW proveru granica niza ako se niz smesti u zaseban
segment
deskriptor segmenta se moe proiriti bitima za prava pristupa;
npr. segment sa instrukcijama ima samo pravo izvravanja,
segment sa konstantnim podacima samo pravo itanja itd.
ove provere vri HW (MMU) pri svakom preslikavanju; ukoliko
provera nije prola, generie se izuzetak
Deljenje segmenata se takoe lako implementira - ST
razliitih procesa preslikavaju odreeni logiki segment u
istu fiziku poetnu lokaciju (base); mogu se deliti i samo
delovi programa, npr. statike biblioteke

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 217/294


Segmentna organizacija
Problem: ta je sa adresiranjem kod skokova (instrukcija
skoka apsolutno adresira odredite skoka u istom
segmentu), ako se taj kod deli kao razliit logiki segment
u razliitim procesima?
Reenje: koristiti samo relativne skokove u segmentima
koji se dele
Segmenti su razliite veliine, a moraju se alocirati u
memoriji. Posledice - kao i kod kontinualne alokacije:
potrebna je dinamika alokacija memorije
kako izabrati slobodan prostor za smetanje (first fit, best fit)
mogua je eksterna fragmentacija; reenja ista kao i kod
kontinualne alokacije:
kompakcija (skupo) ili
stranienje segmentno-stranina organizacija
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 218/294
Glava 13: Virtuelna memorija

Pojam virtuelne memorije


Uitavanje stranica na zahtev

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 219


Pojam virtuelne memorije 0
Code
Do sada razmatrano: rukovanje memorijom u
cilju omoguavanja multiprogramiranja vie
procesa moe biti u memoriji uz efikasno
korienje memorije (neophodna relokatibilnost)
Data
Do sada pretpostavljano: ceo proces mora biti u Data
memoriji da bi se izvravao
Motivacija: esto se delovi koda koriste jako retko
(npr. za obradu greke ili procedure koje se Stack
Stack
pozivaju po retkoj potrebi) ili se za podatke
alocira mnogo vei prostor nego to je potrebno
Sledei korak: proces ne mora biti ceo u memoriji
da bi se izvravao virtuelna memorija (virtual Heap
memory)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 220/294
Pojam virtuelne memorije
Posledice:
logiki adresni prostor moe biti mnogo vei od fizike
memorije
programer je rastereen brige o ogranienjima fizike
memorije
vie procesa moe da se uita u memoriju, poveavajui
iskorienje
procesi mogu lako da dele fajlove i segmente memorije
(ali samo za itanje); deljena memorija moe da se koristi
za meuprocesnu komunikaciju
uslonjava implementaciju i poveava reijske trokove
moe da bude veoma neefikasno ako se nepaljivo koristi

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 221/294


Uitavanje stranica na zahtev
Kako uitavati delove programa po potrebi? Uitavanje na
zahtev (demand paging):
Stranice procesa nalaze se na sekundarnoj memoriji (brzi disk)
Inicijalno uitati samo nekoliko stranica procesa koje e biti potrebne;
u graninom sluaju, proces se moe pokrenuti bez ijedne uitane
stranice (samo se kreira memorijski kontekst deskriptori segmenata
i PMT prvog nivoa sa svim ulazima null)!
Kada se izvrava instrukcija, za pristup nekoj adresi (za instrukciju ili
podatak), procesor pronalazi u PMT podatak da stranica nije u
memoriji page fault
Deo OS (pager) preuzima kontrolu:
proverava da li je pristup traenoj stranici uopte dozvoljen procesu; ako
nije, proces se moe ugasiti
pronalazi slobodan okvir u memoriji; ako takvog nema, bira stranicu istog
ili drugog procesa koju e izbaciti iz OM po algoritmu zamene (page
replacement) - detalji u OS2
pokree se operacija sa diskom za uitavanje traene stranice u odabrani
okvir; kada se operacija zavri, aurira se PMT procesa
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 222/294
Uitavanje stranica na zahtev
Kljuni HW zahtev: omoguiti da se prekinuta instrukcija
moe izvriti ispoetka, sa istim rezultatom kao da nije
izvrena donekle
Ukoliko instrukcija menja samo jednu vrednost (ima samo
jedan rezultat), sve je u redu ponavlja se samo
dohvatanje instrukcija i operanada, to nema sporedne
efekte
Ali ta ako instrukcija vri vie upisa? Mogui pristupi:
CPU pokuava da pristupi svim adresama koje e biti koriene u
instrukciji tako da generie page fault unapred, pre nego to
instrukcija promeni neku vrednost u memoriji
upotrebljavaju se posebni registri za smetanje starih vrednosti
lokacija koje se menjaju; ukoliko nastane page fault, CPU vraa
stare vrednosti u promenjene lokacije
RISC procesori imaju instrukcije sa najvie jednim upisom

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 223/294


Uitavanje stranica na zahtev
Kljuni uslovi za postizanje zadovoljavajuih
performansi kod dohvatanja stranica:
postii to je mogue manju uestanost pojave page
fault
omoguiti to bre uitavanje stranice sa diska:
poseban prostor na disku (swap space), izvan fajl sistema
direktan pristup (nema pretrage i indirekcije), adresa na disku
neposredno u PMT
Procena: da bi se efektivno vreme pristupa
memoriji produilo za ne vie od 10%, potrebno je
da uestanost pojave page fault bude reda 10-6

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 224/294


V Ulazno/izlazni sistemi

Sistemske I/O usluge


I/O podsistem

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 225


Glava 14: Sistemske I/O usluge

Arhitektura I/O podsistema


Klasifikacija I/O ureaja
Aplikativni programski interfejs prema I/O

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 226


Arhitektura I/O podsistema
Problemi:
I/O ureaji su izuzetno raznoliki po funkciji, nainu korienja,
kapacitetu, brzini pristupa i transfera itd. Kako ove razlike uiniti
to transparentnijim za korisnike i njihove programe?
Proizvoai HW stalno izmiljaju i proizvode nove vrste raznolikih
ureaja. Kako omoguiti ugradnju novog HW bez stalne promene
OSa?
Reenje - kao i kod svih ostalih sloenih i fleksibilnih SW
sistema:
apstrakcija (abstraction): zanemariti detalje razliitosti zarad
isticanja zajednikih osobina razliitih entiteta (klasifikacija,
generalizacija)
enkapsulacija (encapsulation): pristupati entitetu samo preko jasno
definisanog interfejsa, sakriti implementaciju
slojevitost (layering): softverske komponente realizovati slojevito,
tako da jedan sloj (komponenta) moe da interaguje samo sa
susednim slojevima; slojevi se reaju po nivoima apstrakcije
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 227/294
Arhitektura I/O podsistema
Drajver ureaja (device driver):
Kernel
sakriva specifinosti ureaja iza
Kernel I/O system standardnog interfejsa prema
SCSI Keyboard Mouse Kernel I/O sistemu
device device device ... omoguava proizvoaima HW
driver driver driver
ureaja da svoje ureaje
SCSI Keyboard Mouse prilagode datom OSu bez
device device device ...
controller controller controller potrebe za promenom OSa
SCSI
Keyboard Mouse ... Nezgoda: svaki OS ima svoj
devices
standard za interfejs prema
drajverima
SW
HW
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 228/294
Klasifikacija I/O ureaja
Apstrakcija I/O ureaja klasifikacija na kategorije slinih
prema odreenim karakteristikama:
Prema jedinici prenosa:
znakovni (character-stream): prenose bajt po bajt kao jedinicu
blokovski (block): prenose blok podataka kao jedinicu
Prema nainu pristupa:
sekvencijalni (sequential): prenos samo po redu (tastatura, tampa,
modem, mrea, ...)
write write write write

sa direktnim (proizvoljnim) pristupom (direct, random-access): moe


se pristupiti proizvoljnom delu ukupnog prostora (diskovi, flash, ...)
write write read

seek seek seek


Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 229/294
Klasifikacija I/O ureaja
Prema vremenskim karakteristikama transfera:
sinhroni (synchronous): obavlja operaciju u predvidivim
trenucima/intervalima ili ima predvidivo vreme odziva (disk,
monitor)
asinhroni (asynchronous): obavlja operaciju u nepredvidivim
trenucima/intervalima ili ima nepredvidivo vreme odziva (tastatura)
Prema deljivosti:
deljivi (shareable): vie procesa mogu uporedo koristiti ureaj i
preplitati zahteve za operacijom (disk, tastatura)
nedeljivi, posveeni (dedicated): samo jedan proces moe vriti
operaciju sa ureajem i mora je zavriti u potpunosti pre nego to
pone drugi (tampa)
Prema brzini izvrenja operacije: od nekoliko bajtova do
nekoliko gigabajta u sekundi
Prema vrsti mogue operacije: samo itanje, samo upis, i
itanje i upis
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 230/294
I/O API
Najee podrane kategorije ureaja:
blokovski (block I/O)
znakovni tokovi (character-stream I/O)
memorijski preslikani fajl (memory-mapped file)
mrene prikljunice (network sockets)
pristup asovnicima (clock) i vremenskim brojaima (timer)
Neki OS omoguuju i direktan pristup drajveru generikom
operacijom koja se direktno prosleuje drajveru; npr. UNIX
ioctl()
Blokovski ureaji osnovne operacije interfejsa:
read ita blok podataka sa tekue pozicije na ureaju i smeta na
zadato mesto u memoriji
write upisuje blok podataka sa zadatog mesta u memoriji na
tekuu poziciju na ureaju
seek ako je ureaj sa direktnim pristupom pozicionira tekuu
poziciju na ureaju na zadato mesto
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 231/294
I/O API
Znakovni tokovi osnovne operacije interfejsa:
get character ita i vraa jedan znak sa ureaja
put character upisuje dati znak na ureaj
Memorijski preslikani fajl pristup fajlu na isti nain kao i
segmentu operativne memorije; OS vri transfer iz fajla i u
fajl po potrebi detalji u OS2
Mrena prikljunica (socket) - apstrakcija koja dozvoljava
komunikaciju izmeu dva procesa na udaljenim
raunarima; osnovne operacije (detalji u OS2):
kreiraj i vrati jedan socket
povei socket sa drugim na datoj IP adresi
poalji paket (poruku) na dati socket
primi (sa ili bez ekanja) poruku sa datog socket-a

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 232/294


I/O API
Usluge vezane za realno vreme:
oitaj i vrati tekui datum i vreme
vrati vreme proteklo izmeu dva dogaaja
pokreni datu operaciju u zadato vreme uspavaj proces do
zadatog vremena/na zadato vreme
Hardverska podrka:
sat realnog vremena
periodini prekid od vremenskog brojaa
programabilni vremenski broja: pokree se zadavanjem vremena
za koje e generisati prekid
Korisniki programi i OS zahtevaju merenje (proizvoljno)
mnogo vremenskih intervala. Kako to ostvariti sa konanim
(malim) brojem hardverskih vremenskih brojaa?
Reenje: koncept logikog (softverskog) vremenskog
brojaa. Realizacija: Programiranje u realnom vremenu -
Skripta, poglavlje Realno vreme i zadatak 9.1
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 233/294
I/O API
Vrste poziva I/O usluga:
blokirajui: proces koji je zadao operaciju se blokira sve

dok operacija nije zavrena u potpunosti


neblokirajui sinhroni: proces zadaje operaciju i ona mu

odmah vraa kontrolu sa vraenom informacijom o


tome koliki deo operacije je uspeno zavren (nita,
delimino ili sve)
neblokirajui asinhroni: proces samo zadaje operaciju i

nastavlja izvravanje; ako je potrebno, zavretak


operacije se procesu dojavljuje asinhronim signalom
(npr. postavljanje nekog indikatora ili call-back rutinom)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 234/294


Glava 15: I/O podsistem

Rasporeivanje
Baferisanje
Keiranje
Spooling
Zatita
Obrada I/O zahteva
Performanse

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 235


Rasporeivanje
Zahtevi za I/O operacijama na istom ureaju smetaju se u
red ekanja
I/O podsistem kernela uzima jedan po jedan zahtev i
zadaje operaciju drajveru ureaja, ali kojim redom?
Primer: u redu operacija na disku nalaze se tri zahteva,
prvi koji pristupa bloku blizu unutranjeg cilindra, drugi koji
pristupa spoljanjem cilindru, trei koji pristupa cilindru
blizu sredine; glava diska je trenutno na spoljanjem
cilindru; ta ako se zahtevi opsluuju redom kojim su
zadati?
U optem sluaju, rasporeivanje zahteva za operacijama
na ureaju (I/O scheduling) treba da pronae povoljan
redosled izvravanja da bi se smanjilo vreme ekanja
procesa na kraj operacije

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 236/294


Rasporeivanje
Kada se izda blokirajui zahtev za I/O operacijom, zahtev
se smeta u red zahteva za dati ureaj, a pozivajui proces
se blokira
Rasporeiva I/O zahteva (I/O scheduler) bira jedan po
jedan po odgovarajuem algoritmu detalji u OS2
Device: keyboard reqest: ...
Status: idle address:...
size:...
Device: printer process ID: ...
Status: busy ...
Device: disk 1
Status: idle
reqest: ... reqest: ...
Device: disk 2 address:... address:...
Status: busy size:... size:...
process ID: ... process ID: ...
... ...
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 237/294
Baferisanje
Bafer je memorijski prostor za smetanje podataka koji se
prenose izmeu dva uesnika u prenosu (proces i ureaj)
Razlozi uvoenja bafera u I/O operacije:
amortizacija razlike u brzinama proizvodnje i potronje
podataka uesnika u prenosu
adaptacija razliitih veliina blokova prenosa uesnika
semantika kopiranja (copy semantics): proizvoa kopira originalne
podatke u bafer, odakle se dalje prenose, pa nakon toga moe da
menja originalne podatke bez uticaja na prenos
Dvostruki bafer:
proizvoa upisuje u bafer A, A
dok potroa ita iz bafera B B
kada su oba zavrila, baferi zamenjuju uloge
primer: prenos podataka sa modema na disk

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 238/294


Keiranje
Ke (cache) je deo bre memorije koji sadri kopiju dela
podataka sa sporije memorije pristup podatku u keu je
mnogo bri nego pristup originalnom podatku
Primeri kea:
procesorski ke
ke podataka sa diska u operativnoj memoriji, pod kontrolom
OSa
ke disk kontrolera na samom kontroleru, pod njegovom
kontrolom, transparentan za OS
Razlika izmeu bafera i kea: bafer moe sadrati
jedinstvenu kopiju podataka; ke po definiciji sadri kopiju
originala
Ke i bafer se mogu koristiti zajedno isti deo memorije za
obe namene

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 239/294


Spooling
Problem: vie procesa zadaje operacije nedeljivom ureaju
uporedo, tako da se operacije prepliu? Npr., vie procesa
alje blokove podataka na tampa
Jedan pristup - OS obezbeuje sistemske usluge za
rezervaciju ureaja:
kada mu je potreban, proces rezervie ureaj i eka dok ovaj nije
raspoloiv
ureaj se oslobaa tek kada proces zavri ceo posao sa ureajem,
opet eksplicitnom operacijom
Drugi pristup spooling:
operacije zadate ureaju od strane procesa smetaju se u poseban
fajl; kada zavri, proces zatvara fajl i predaje ga OSu
poseban proces ili nit OSa, spooler, uzima jedan po jedan fajl iz
reda i prenosi njegov sadraj na ureaj

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 240/294


Zatita
Korisniki proces moe grekom ili zlonamerno da ugrozi
rad sistema zahtevajui neregularne I/O operacije. Kako
spreiti?
Tehnike:
I/O operacije se mogu zadati iskljuivo sistemskim pozivom; I/O
instrukcije se ureaju zadaju ikljuivo u zatienom procesorskom
reimu
mehanizam zatite memorije titi memorijski preslikani I/O prostor
mehanizam zatite memorije ograniava pristup samo do
segmenata memorije dozvoljenih za I/O; primer: igrice i grafiki
programi zahtevaju direktan pristup memorijski preslikanom
prostoru grafikih kartica zbog breg pristupa
mehanizam virtuelne memorije titi bafere i keeve OSa

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 241/294


Obrada I/O zahteva
1. Proces izvrava blokirajui sistemski I/O poziv
2. Kod sistemske usluge proverava da li su zahtev i njegovi
parametri ispravni; ako nisu, vraa se greka
3. Ako se radi o ulazu, proverava se da li su traeni podaci
ve u keu; ako jesu, podaci se prenose pozivaocu i
sistemski poziv se zavrava
4. Odreuje se ureaj i drajver na koga se zahtev odnosi
5. Proces se uklanja iz reda spremnih i smeta u red onih
koji ekaju na dati ureaj
6. Zahtev za I/O operacijom se smeta u red za
rasporeivanje na datom ureaju
7. U nekom trenutku, dati zahtev dolazi na red i zadaje se
drajveru ureaja (npr. interna nit jezgra obrauje zahteve
i poziva operacije drajvera)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 242/294
Obrada I/O zahteva
8. Drajver alocira bafer za transfer podataka i zadaje
operaciju kontroleru ureaja upisom u njegov kontrolni
registar; drajver moe da koristi programirani I/O ili DMA
9. Kontroler ureaja obavlja operaciju i prenosi podatke
10. Da bi bio obaveten o zavretku operacije, drajver
ureaja moe da koristi prozivanje ili prekid
11. Po zavretku operacije, drajver ureaja oznaava zahtev
izvrenim i obavetava I/O podsistem o tome
12. Kernel prenosi podatke i status operacije u prostor
korisnikog procesa
13. Kernel deblokira proces vraajui ga u red spremnih
14. Proces nastavlja sa izvravanjem i zavrava sistemski
poziv

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 243/294


Obrada I/O zahteva
Kako pronai drajver ureaja za dati zahtev?
Veoma raznoliki pristupi u raznim OS,
uglavnom se svode na preslikavanje
simbolikog imena ureaja ili fajla u drajver;
odgovarajue strukture OSa moraju da vode
rauna o tom preslikavanju Open file 1
Kako odrediti i pronai implementaciju date Ptr to read fn
operacije za dati drajver/ureaj? Ptr to write fn
Ptr to close fn
Objektno orijentisani pristup - polimorfizam i ...
dinamiko vezivanje (dynamic binding)
Process open files Open file 2
file 1 Ptr to read fn
file 2 Ptr to write fn
... Ptr to close fn
...
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 244/294
Performanse
I/O operacije bitno utiu na performanse celog sistema:
poveavaju broj promena konteksta
ukljuuju mnogo kopiranja podataka izmeu raznih bafera
poveavaju optereenje magistrale zbog prenosa sa DMA
poveavaju uestanost prekida
Naini poboljanja performansi:
smanjiti broj promena konteksta i njegove trokove (npr.
korienjem kernel niti)
smanjiti broj kopiranja podataka
smanjiti uestanost prekida: poveanjem blokova ili prozivanjem
ako je operacija brza, prozivanje je efikasnije nego obrada prekida
odreene operacije implementirati u hardveru DMA ili
specijalizovani I/O procesori
balansirati optereenje CPU, memorije, magistrale i ureaja

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 245/294


VI Fajl sistemi

Interfejs fajl sistema


Implementacija fajl sistema

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 246


Glava 16: Interfejs fajl sistema

Pojam fajla
Struktura direktorijuma
Montiranje fajl sistema
Deljenje fajlova
Zatita

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 247


Pojam fajla
Fajl (file) je logika jedinica smetanja informacija
Apstrahuje fizika svojstva ureaja za smetanje podataka.
OS preslikava fajl na fiziki ureaj
Uniformie pogled na skup informacija smeten na ureaju
Za korisnika, fajl je najmanja jedinica alokacije logikog
prostora na sekundarnoj memoriji: podaci se ne mogu
smetati izvan fajla
Fajlovi: programi ili podaci
OS ne ulazi u tumaenje sadraja i strukture fajla, osim za
neke posebne vrste fajlova (npr. fajl sa programom)
Strukturu fajla tumai onaj program koji ga je kreirao ili
koji je u stanju da je prepozna
Neki OS zahtevaju odreenu strukturu svakog fajla koju u
celini ili delimino tumae. Minimum izvrivi fajl
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 248/294
Pojam fajla
Fajl je apstraktni tip podataka (abstract data type):
atributi+operacije
Atributi fajla (tipino):
simboliko ime (naziv) fajla: identifikator u ljudski itljivoj formi
identifikator: jedinstveni interni identifikator fajla u sistemu
tip
lokacija: informacija o ureaju i mestu gde se fajl nalazi na njemu
veliina: trenutna veliina (u bajtovima, reima ili blokovima)
zatita: informacije o pravima pristupa fajlu (ko sme da ga ita,
pie, brie, izvrava itd.)
datum, vreme i korisnik koji je kreirao, poslednji modifikovao ili
poslednji pristupao fajlu
Informacije o fajlovima uvaju se u strukturi direktorijuma
(katalog, imenik)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 249/294
Pojam fajla
Osnovne operacije sa fajlom usluge OS (sistemski
pozivi):
Kreiranje (create) fajla: alociranje prostora za smetanje fajla i
formiranje ulaza u direktorijumu
Upis (write) u fajl; parametri: ime fajla i podaci za upis; trai se fajl
sa datim imenom; na poziciju pokazivaa za upis datog fajla
upisuju se dati podaci i pokaziva pomera na novo mesto
itanje (read) iz fajla; parametri: ime fajla i mesto u OM za
smetanje proitanih podataka; sa pozicije pokazivaa za itanje
datog fajla itaju se podaci i pokaziva pomera na novo mesto;
obino su pokazivai za itanje i upis isti, tj. postoji samo jedan
pokaziva trenutne pozicije za fajl (current-file-position pointer)
Pozicioniranje (reposition) pokazivaa na novo mesto (seek)
Brisanje fajla (delete): prostor koji je zauzimao fajl se proglaava
slobodnim i brie se ulaz u direktorijumu

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 250/294


Pojam fajla
Ostale operacije sa fajlom usluge OS (sistemski pozivi):
Odsecanje (truncate): brisanje sadraja fajla, ali zadravanje
atributa (osim veliine koja se postavlja na 0)
Preimenovanje (rename) fajla
Dodavanje informacija na kraj fajla (append): upis podataka na
kraj fajla
Kopiranje (copy) fajla
Promena atributa fajla
Veina ovih operacija zahteva pretragu direktorijuma za
ulazom za fajl sa datim imenom i dobijanje lokacije i ostalih
atributa fajla neefikasno!

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 251/294


Pojam fajla
Reenje: kada program eli da pristupa fajlu, prvo mora da
pozove sistemsku uslugu otvaranja fajla (file open):
OS vodi tabelu otvorenih fajlova; za svaki otvoreni fajl, ulaz u ovoj
tabeli uva sve potrebne informacije o fajlu (atribute, posebno
lokaciju i pokaziva trenutne pozicije)
sistemska usluga otvaranja fajla radi:
pronalazi ulaz za dati fajl u strukturi direktorijuma
otvara novi ulaz u tabeli otvorenih fajlova
uitava atribute fajla u ulaz u tabeli otvorenih fajlova
opciono proverava prava pristupa do fajla u odnosu na pristup zahtevan
pri otvaranju fajla
vraa indeks ili pokaziva na ulaz u tabeli otvorenih fajlova
svako sledee obraanje fajlu iz programa, tj. sve ostale operacije nad
otvorenim fajlom koriste ID ulaza u tabeli otvorenih fajlova, a ne ime
fajla nema pretrage direktorijuma, efikasan pristup do atributa fajla
nakon upotrebe, fajl se mora zatvoriti, da bi se ulaz uklonio iz tabele
otvorenih fajlova
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 252/294
Pojam fajla
Podrka mogunosti otvaranja istog fajla od strane vie procesa
istovremeno dva nivoa tabele otvorenih fajlova, za svaki proces
pojedinano i globalno za sve procese na nivou OS
Process X Open Files Table

Global Open Files Tible


Cur File Ptr Access Rights Ptr

Cnt
2
1 Location Name ...

Process Y Open Files Table

Y: FILE fh = file_open(...,read_only)
Y: file_close(fh)
0 read_only

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 253/294


Pojam fajla
Koncept zakljuavanja fajla (file locking):
jedan proces trai da zakljua fajl; ako nijedan drugi
proces nije zakljuao fajl, proces e dobiti klju i nijedan
drugi proces nee moi da dobije klju nad fajlom
modaliteti zakljuavanja:
dve vrste kljua: deljeni (shared) i ekskluzivni (exclusive); vie
procesa moe imati deljeni klju; samo jedan moe imati
ekskluzivni klju
obavezni klju (fajl se implicitno zakljuava pri otvaranju) ili
neobavezni klju (fajl se zakljuava na eksplicitan zahtev)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 254/294


Pojam fajla
Pojam tipa fajla: OS moe, ali ne mora da poznaje koncept
tipa fajla; ako ga poznaje, moe da kontrolie upotrebu fajla
Nain smetanja informacije o tipu:
u ekstenziji imena fajla (Windows)
kao poseban atribut fajla (postavlja se prilikom kreiranja; Mac OS)
u samom sadraju fajla (UNIX: opcioni magic number na poetku
fajla)
Interno strukturiranje fajla:
smetanje informacija na disku je uvek u jedinicama fiksne veliine
blokovima (veliine zavisne od veliine sektora) => interna
fragmentacija
logiki, fajl se moe posmatrati kao:
nestrukturiran: sekvenca bajtova sa mogunou direktnog pristupa
svakom bajtu
strukturiran u logike zapise fiksne ili promenljive veliine
Neophodno preslikavanje u blokove jednostavan problem za OS
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 255/294
Struktura direktorijuma
Disk se moe podeliti na particije (partition, slices,
minidisks)
Svaka particija moe da sadri poseban fajl sistem ili da
bude rezervisana za zamenu (swap space)
Particija moe da se protee i na vie fizikih diskova
Vie particija moe da se kombinuje u veu celinu
volumen (volume); fajl sistem se moe kreirati na jednom
volumenu
Svaki volumen ili particija mora da sadri informacije o
fajlovima na sebi direktorijum (directory)
Direktorijum je imenik fajlova preslikava ime fajla u
atribute fajla (lokacija i drugi), poput tabele simbola

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 256/294


Struktura direktorijuma
Tipine operacije nad direktorijumom:
pronai fajl sa datim imenom ili sa imenima koja zadovoljavaju dati
kriterijum (search)
kreiraj fajl i dodaj u direktorijum
obrii fajl i izbaci iz direktorijuma
vrati spisak svih fajlova
promeni ime fajla
Najjednostavnija struktura direktorijuma u jednom nivou:
svi fajlovi su u istom (jedinom) direktorijumu
fajl mora imati jedinstveno ime u direktorijumu, pa i u celom
sistemu
mnogo fajlova smanjuje preglednost
fajlovi se ne mogu organizovati u logike celine
krajnje nepraktino, posebno za vie korisnika
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 257/294
Struktura direktorijuma
Direktorijum u dva nivoa: za svakog korisnika zaseban
direktorijum u jednom nivou; i dalje veoma problematino:
fajlovi jednog korisnika su nestrukturirani i nepregledni
kako deliti fajlove? kako pristupati fajlovima drugog korisnika? -
imenovanje punom stazom (npr. volume/user/file)
kako pristupati sistemskim fajlovima? sloenijom pretragom: ako
se fajl ne nae u direktorijumu tekueg korisnika, trai se u
sistemskom ili u spisku staza za pretragu (search path)
Uoptenje: dozvoliti hijerarhijsku strukturu
poddirektorijuma oblika stabla proizvoljne dubine:
korisnik moe manipulisati strukturom proizvoljno
svaki fajl je jedinstveno odreen punom stazom od korena
direktorijum je takoe fajl, samo to se posebno tretira ima
strogo odreenu internu strukturu koju tumai fajl sistem OSa

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 258/294


Struktura direktorijuma
Staze do fajla:
svaki proces ima svoj tekui direktorijum (current directory) koji se
moe promeniti sistemskim pozivom
otvaranje fajla samo po imenu trai fajl u tekuem direktorijumu
fajl se moe zadati i zadavanjem:
pune staze od korena stabla direktorijuma
relativne staze u odnosu na tekui direktorijum
Struktura stabla ne dozvoljava deljenje direktorijuma ili
fajlova izmeu korisnika. Optiji pristup struktura
direktorijuma i fajlova je usmereni graf bez petlji (directed
acyclic graph, DAG)
Deljeni direktorijum ili fajl se moe nalaziti u vie
direktorijuma, ali nije kopiran, ve oni njega samo referiu

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 259/294


Struktura direktorijuma
DAG struktura direktorijuma:

OS PRV Ispiti
OS PRV

Skripta Ispiti

Ispiti Literatura Jan05 Feb05

OS1 PRV

Jan05 Feb05

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 260/294


Struktura direktorijuma
Implementacija:
svaki ulaz u svakom direktorijumu je podjednak i predstavlja
referencu na fiziki fajl ili direktorijum (kao na prethodnoj slici)
neki ulazi predstavljaju fizike fajlove ili direktorijume, a neki veze
ili preice (link, shortcut) koje referiu na fiziki fajl ili direktorijum
(punim simbolikim imenom ili fizikom referencom)
Pitanje: kako se odnositi prema brisanju fajla? Mogui
pristupi:
obrisati fajl kad god neko to zatrai preko bilo koje veze; ta je sa
ostalim vezama?
obrisati fajl tek kada nestane poslednja referenca
Konano uoptenje: dozvoliti petlje u grafu dozvoliti da
poddirektorijum referie na sopstveni naddirektorijum.
Pitanja:
kako implementirati obilazak fajl sistema npr. zbog pretrage?
kako zakljuiti da fajl vie niko ne referie pa se moe obrisati?
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 261/294
Montiranje fajl sistema
Montiranje fajl sistema sa volumena (file-system mounting):
OSu je zadato ime volumena na kome je neki fajl sistem i mesto
(taka montiranja, mounting point), tipino prazan direktorijum u fajl
strukturi gde e montirati fajl sistem sa tog ureaja
OS proverava da li je dati fajl sistem koji se montira prihvatljiv i ima
oekivani format
OS menja strukturu direktorijuma svog fajl sistema tako da montirani
fajl sistem postaje podstruktura (poddirektorijum) od take montiranja

x/y/z v/w mount v/w to x/y/z/u x/y/z


u
u

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 262/294


Montiranje fajl sistema
Fajl sistem sa nekog volumena mora se najpre montirati da
bi bio dostupan u jedinstvenom prostoru imena fajl sistema
OSa:
OS montira fajl sisteme sa ureaja koje pronae, pri pokretanju
(fiksni ureaji) ili kada se ureaj prikljui ili medijum ubaci (flopi,
flash, CD)
montiranje moe biti i na eksplicitan zahtev (UNIX), i to prilikom
startovanja sistema (itanjem spiska iz sistemskog konfiguracionog
fajla) ili runo (sistemskim pozivom)
Montiranje datog fajl sistema moe biti ogranieno na
odreeno ciljno mesto (samo u koren, samo u prazan
direktorijum i sl.), na samo jedno mesto itd.
Demontiranje (unmounting): suprotna operacija, fajl
sistem sa montiranog volumena vie nije dostupan
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 263/294
Deljenje fajlova
Udaljeni (remote) fajl sistemi pristup fajlovima preko
mree:
File Transfer Protocol (FTP): protokol koji obezbeuje operacije za
prenos fajlova izmeu udaljenih fajl sistema; anonimni (anonymous)
ili autorizovani pristup fajlovima
distribuirani fajl sistemi (DFS): udaljeni direktorijumi se vide kao i
lokalni
World Wide Web
Klijent/server (client/server) arhitektura
Distribuirani direktorijumi, protokoli imenovanja i autorizacija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 264/294


Zatita
U viekorisnikim sistemima sa deljenim fajlovima,
potrebno je ograniiti i kontrolisati pristup korisnicima do
odreenih fajlova
Tipovi pristupa fajlovima:
itanje (read)
upis (write)
izvravanje (execute): uitavanje fajla u memoriju i izvravanje kao
programa
dodavanje (append): upis novih informacija na kraj fajla
brisanje (delete)
listanje (list): proitati ime i atribute fajla (direktorijuma)
ostale operacije mogu biti izvedene iz osnovnih (atominih)
Postoji mnogo mehanizama zatite, svi imaju svoje
prednosti i nedostatke, kao i situacije u kojima su pogodni
ili ne
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 265/294
Zatita
Zadatak kontrole pristupa (access control): odravati
preslikavanje (korisnik, fajl, operacija) ->
dozvoljeno/zabranjeno i pomou tog preslikavanja
proveravati pristup do fajla
Definisanje ovog preslikavanja za svakog korisnika, fajl i
operaciju pomou lista kontrole pristupa (access control list,
ACL) je nepraktino:
suvie informacija, teko ih je definisati i odravati
ako se svakom fajlu pridrui spisak korisnika i prava pristupa
operacijama, ulaz u direktorijumu treba da bude promenljive i
neograniene veliine, to komplikuje rukovanje prostorom

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 266/294


Zatita
Zato se upotrebljavaju kondenzovane varijante,
klasifikacijom korisnika u grupe:
vlasnik (owner): korisnik koji je kreirao fajl; podrazumevano ima
pravo da vri sve operacije sa fajlom i da daje prava drugima
grupa (group): skup korisnika koji su imenovani kao radna grupa
jer dele fajl izvravajui sline operacije; imaju pravo na podskup
operacija nad fajlom
svi ostali korisnici, univerzum (universe): imaju pravo na podskup
operacija sa fajlom
UNIX: po tri bita (rwx read, write, execute) za vlasnika,
grupu i ostale odreuju prava izvravanja ove tri operacije
Moderniji, fleksibilniji pristup: opciono dodavanje lista
kontrole pristupa ovako fiksnom zapisu prava za vlasnika,
grupu i ostale finije podeavanje za pojedine korisnike
Primer: MS Windows i njegov GUI za definisanje prava

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 267/294


Glava 17: Implementacija fajl sistema

Struktura fajl sistema


Implementacija direktorijuma
Metode alokacije
Rukovanje slobodnim prostorom
Efikasnost i performanse
Oporavak od otkaza

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 268


Struktura fajl sistema
File system API:
File: fopen(...), fclose(...), fseek(...), fread(...), fwrite(...), fappend(...),...
write write read

seek seek seek


Directory: hierarchy, operations...
Protection...

File system implementation:


Data structures (persistent and in-memory)
Procedures...

Block I/O (disk) API:


read(BlockNo, void* buffer), write(BlockNo, void* buffer)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 269/294


Struktura fajl sistema
Fajl sistemi obino poivaju na sekundarnim memorijskim medijumima
koji permanentno uvaju veliku koliinu podataka
Ova diskusija se prvenstveno odnosi na smetanje fajl sistema na
diskove kao najee medijume
Primarne karakteristike diskova koje ih ine pogodnim:
blok-orijentisani ureaj sa mogunou itanja i upisa: proitaj blok u
memoriju, izmeni ga, upii ga na disk; blok tipino sadri nekoliko sektora,
a veliine sektora su od 32B do 4KB, tipino 512B
ureaj sa direktnim pristupom bilo kom bloku, samo uz potrebu pomeranja
glave diska i ekanja na rotaciju
Implementacije fajl sistema jako variraju i sve imaju svoje
specifinosti. Ovde se prikazuju samo neki osnovni principi
Postoji mnogo fajl sistema u upotrebi, a jedan isti OS moe podravati
i vie fajl sistema. Npr. UNIX UFS; Windows NT, 2000 i XP FAT,
FAT32 i NTFS; Linux preko 40 fajl sistema, bazini je extended file
system (ext2, ext3); CD-ROM (ISO 9660), DVD, flopi disk, ...
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 270/294
Struktura fajl sistema
Slojevitost implementacije funkcionalnosti fajl sistema odraava nivoe
apstrakcije u preslikavanju korisnikih zahteva (sistemskih poziva) u
elementarne operacije sa I/O ureajem:

Application programs
FILE open(char* filename); void close(FILE); read(FILE,...); ...

Logical file system

void* getFileBlock(FILE, LBlockNo); void* getNewBlock(); ...

File-organization module

readBlock(PBlockNo,void* buf); writeBlock(PBlockNo,void* buf); ...

Device driver and interrupt handlers

Disk controller
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 271/294
Struktura fajl sistema
Strukture podataka fajl sistema na disku:
boot control block: na svakom volumenu tipino prvi blok na disku;
sadri informacije kako podii OS sa tog volumena; ako volumen
nije bootable, ovaj blok je prazan (UFS: boot block, NTFS: partition
boot sector)
volume control block: na svakom volumenu ili particiji sadri
globalne informacije o volumenu, kao to su broj blokova, veliina
bloka, broj slobodnih blokova, pozakiva na prvi slobodni blok, broj
slobodnih FCB (File Control Block), pokaziva na prvi slobodni FCB
itd. (UFS: superblock, NTFS: master file table)
struktura direktorijuma za organizaciju fajlova (UFS: preslikava ime
fajla u broj FCBa, NTFS ovo smeta u master file table)
za svaki fajl njegov FCB (File Control Block) koji sadri sve potrebne
informacije (atribute) o fajlu, npr. veliinu, lokaciju, datum
kreiranja i poslednje izmene, kreator, prava pristupa itd. (UFS:
inode, NTFS: jedan ulaz u master file table)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 272/294


Struktura fajl sistema
Strukture podataka fajl sistema u operativnoj
memoriji:
tabela montiranja: sadri informacije o svakom
montiranom volumenu
memorijski ke strukture direktorijuma za direktorijume
kojima se skorije pristupalo
globalna sistemska tabela otvorenih fajlova za sve
procese sadri kopiju FCB za svaki otvoreni fajl, kao i
druge potrebne informacije
tabela otvorenih fajlova za svaki proces uva informacije
o pristupu fajlu vezane za proces, npr. pokaziva na
tekuu poziciju u pristupu, ogranienja prava pristupa,
kao i pokaziva na globalnu tabelu otvorenih fajlova
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 273/294
Struktura fajl sistema
Primer implementacije sistemskih usluga: open(char* filename)
open(x/y/z.txt)
read block#

file handle
File-
Logical file
organization Device driver
system
module

block#
search x/y/z.txt
No search x/y/z.txt
... ... ...
... ... ...
... ... ...
... FCB
Per-process System-wide Directory
open-file table open-file table structure cache
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 274/294
Struktura fajl sistema
Primer implementacije sistemskih usluga: read(FILE filehandle,...)
read(FILE fh,...)
read(N,len) read(i)
read(j)
copy buffer
File-
Logical file
organization Device driver
system
module

get cur ptr(fh)No is present(i)


N

... ...
... ...
... ...
... FCB
Per-process System-wide Cache
open-file table open-file table
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 275/294
Struktura fajl sistema
Particija moe biti:
presna (raw) - ne sadri fajl sistem: jo nije uspostavljen fajl
sistem (pre formatizacije, formatting) ili za posebne namene (npr.
swap space ili za bazu podataka)
peena (cooked) ili formatizovana (formatted) - sadri fajl
sistem
boot niz blokova u posebnom formatu koji se direktno uitavaju u
memoriju i pokree izvravanje sa tano odreene lokacije u cilju
uitavanja operativnog sistema
korena (root) sadri OS kernel i druge sistemske fajlove
Mogunost podrke vie fajl sistema: dual-boot, svaka
particija razliiti fajl sistem, montiranje i udaljeni fajl
sistemi
Problem: kako efikasno omoguiti ovakvu heterogenost i
transparentno ponuditi sve fajl sisteme u istoj lokalnoj
strukturi direktorijuma?
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 276/294
Struktura fajl sistema
Virtuelni fajl sistem (virtual file system): OO pristup izolaciji
razliitosti fajl sistema iza istog interfejsa polimorfizam i
dinamiko vezivanje
File vnode

inode
LocalFile RemoteFile

Virtual Table f(Object*)


VTP ...
...

Object
(struct) g(Object*)
...
...
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 277/294
Implementacija direktorijuma
Direktorijum (directory) je struktura podataka koja treba
da obezbedi efikasno preslikavanje imena fajla (ukljuujui
i poddirektorijum) u lokaciju tog fajla na disku
UNIX na isti nain tretira fajlove i direktorijume (jedan
indikator u FCB /inode/ ukazuje na to) i ima iste operacije
nad njima; na isti nain se i smetaju
Windows razlikuje operacije nad direktorijumom i fajlovima
Dva pristupa u realizaciji sktrukture i algoritama
pretraivanja direktorijuma:
linearna lista
hash tabela

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 278/294


Implementacija direktorijuma
Linearna lista:
Implementacija pomou linearne strukture zapisa koji
sadre ime fajla i pokaziva na blokove sa podacima tog
fajla
Jednostavno za implementaciju
Neefikasno pretraivanje linearno kroz celu listu, i to za
sve operacije (kreiraj novi, pronai, obrii itd.)
Razliite fizike implementacije:
ograniena veliina (statiko dimenzionisanje) stariji OS
neograniena veliina (dinamika struktura) - ee
Naprednije varijante, ali i dalje ili sloene za
implementaciju ili neefikasne za odreene operacije:
sortirana lista, B-stablo
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 279/294
Implementacija direktorijuma
Hash tabela: search(xyz) 0
1
Pored linearne strukture zapisa, ...
i-1
koristi se i hash tabela koja i
preslikava ime fajla u pokaziva na ...
62
strukturu u listi hash(xyz)=i63
Hash tabela koristi neku funkciju za
preslikavanje koja obezbeuje
dovoljno rasipanje kljueva (ime
fajla) u skup indeksa u datom
opsegu
Reavanje kolizija najee tako to xyz
svaki ulaz u hash tabeli pokazuje na
zasebnu listu zapisa za kljueve koji
se preslikavaju u taj ulaz
Mnogo efikasnije od linearne liste
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 280/294
Metode alokacije
Problem: kako alocirati prostor (blokove) i smetati
mnogobrojne fajlove na disku
Pogodnost: direktni pristup bilo kom bloku
Metode:
kontinualna alokacija
ulanana alokacija
indeksirana alokacija
Kontinualna alokacija:
svaki fajl zauzima kontinualan niz blokova na disku
FCB sadri samo broj prvog bloka i ukupan broj blokova koje fajl
zauzima
direktan pristup i-tom bloku fajla je jednostavan: ako fajl poinje
na bloku b diska, blok i fajla je u bloku b+i diska

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 281/294


Metode alokacije Directory
File Start Size
Pogodnosti: mail 0 3
jednostavan i efikasan direktan pristup pic 14 3
jednostavan i efikasan sekvencijalni pristup addr 19 6

Problemi:
pronalaenje slobodnog prostora za smetanje
fajla problem analogan kontinualnoj alokaciji
memorije dinamika alokacija (first fit, best fit) 0 1 2 3
eksterna fragmentacija 4 5 6 7
kako uopte odrediti veliinu fajla u vreme
8 9 A B
kreiranja?
C D E F
Reavanje eksterne fragmentacije:
10 11 12 13
poseban postupak defragmentacije (kompakcije,
14 15 16 17
compaction) relocira fajlove i sakuplja slobodan
prostor; pokree se uglavnom kada sistem nije u 18 19 1A 1B
funkciji (off-line), ali moderni OS mogu ovo da 1C 1D 1E 1F
rade i on-line
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 282/294
Metode alokacije Directory
File Start End
Ulanana alokacija (linked allocation): mail 0 A
svaki fajl je ulanana lista blokova rasutih bilo pic 14 12
gde po disku addr 19 1E
svaki blok sadri pokaziva na sledei blok
Pogodnosti:
reava probleme kontinualne alokacije (problem
dinamike alokacije i eksterne fragmentacije) 0 1 2 3
operacije kreiranja i proirivanja fajla su 4 5 6 7
jednostavne i efikasne; veliina fajla ne mora da
se definie prilikom kreiranja 8 9 A B

sekvencijalni pristup fajlu je jednostavan i C D E F


relativno efikasan 10 11 12 13
bilo koji slobodan blok se moe koristiti za 14 15 16 17
proirenje fajla 18 19 1A 1B
fajl moe da se proiruje sve dok ima slobodnog 1C 1D 1E 1F
prostora

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 283/294


Metode alokacije
Nedostaci:
izuzetno neefikasan direktan pristup fajlu: da bi se pristupilo bloku i
fajla, potrebno je pristupiti svim prethodnim blokovima od
poetnog sledei ulanane pokazivae
pokazivai zauzimaju prostor na disku i oduzimaju ga korisnom
sadraju (moe biti nezanemarljivo za velike diskove, odnosno
velike pokazivae)
osetljivost na otkaze: ako se otete pokazivai zbog greke ili
otkaza sektora, deo fajla moe biti izgubljen ili potpuno pokvaren
(ulanan u pogrenu listu)
Naini reavanja:
grupisati blokove u vee jedinice alokacije clusters: smanjuje
procenat prostora koji zauzimaju pokazivai i druge mehanizme ini
efikasnijim, ali poveava internu fragmentaciju
upisivati dodatne informacije uz pokaziva radi poveanja
pouzdanosti (npr. ime fajla i redni broj bloka ili dvostruke
pokazivae)
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 284/294
Metode alokacije
Varijanta ulanane alokacije: File-Allocation Table (FAT,
MS-DOS, IBM OS/2):
poseban deo svake particije zauzima FAT koja ima po jedan ulaz za
svaki fiziki blok na disku
svaki ulaz sadri pokaziva na sledei ulaz u lancu
direktorijum sadri iste informacije kao i kod osnovne varijante
u sutini, pokazivai za ulanane liste se umesto u blokove
smetaju u FAT; blokovi sadre samo podatke
FAT pogodnosti: jednostavni i efikasni algoritmi,
ukljuujui i za direktan pristup ako je FAT keiran u
memoriji ili je njegov vei deo u jednom bloku
Mane:
ako FAT nije ceo keiran, moe da uzrokuje mnogo etanja glave
diska za pristup susednim blokovima
veoma osetljiv na otkaze - bilo kakvo oteenje u FAT uzrokuje
velike tete
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 285/294
Metode alokacije Directory
File Index Size
Indeksirana alokacija (indexed allocation): mail 14 4
svaki fajl ima svoj blok sa indeksom
FCB sadri broj tog indeksnog bloka 9
indeksni blok sadri spisak blokova koje fajl A
redom zauzima B
12
Pogodnosti: -1
jednostavan i efikasan pristup, ukljuujui i -1 0 1 2 3
direktan (analogno stranienju) -1
4 5 6 7
jednostavni i efikasni algoritmi za ostale -1
8 9 A B
operacije (kreiranje, proirenje)
C D E F
nije tako osetljiv na otkaze kao FAT
10 11 12 13
nema eksterne fragmentacije, blok moe da se
alocira bilo gde 14 15 16 17
sve pogodnosti ulananog pristupa, samo to 18 19 1A 1B
je direktan pristup efikasniji 1C 1D 1E 1F

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 286/294


Metode alokacije
Nedostatak: vea potrnja prostora na reijske informacije
(indekse); da bi ta potronja bila manja, treba praviti
manje idekse, ali manji indeksi dozvoljavaju manje fajlove
Pristupi reavanju:
ulanana ema: indeks je ulanana lista; podrazumevano zauzima
jedan blok, ali po potrebi sadri i pokaziva na naredni indeksni
blok u ulananoj listi
indeks u vie nivoa: indeks prvog nivoa sadri pokazivae na
indeksne blokove sledeeg nivoa, a indeksi poslednjeg niva sadre
pokazivae na blokove sa podacima:
12
13
0F
5D
-1
-1 23
-1
-1
-1
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 287/294
Metode alokacije
kombinovani pristup: primer UNIX inode

...
data
data
... data
...
...
...
direct blocks
... data
single indirect ... data
... data
double indirect
...
triple indirect

...

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 288/294


Metode alokacije
Od naina alokacije jako zavisi efikasnost i performanse
sistema
Neki metod je pogodniji za neku vrstu pristupa i nain
korienja
Zato neki sistemi upotrebljavaju razliite naine alokacije
za fajlove koji se unapred deklariu sa odreenom vrstom
pristupa: sa ili bez ogranienja veliine, sa ili bez direktnog
pristupa itd.; ako se eli promena naina upotrebe, fajl se
konvertuje u drugaiji tip
Neki sistemi upotrebljavaju kontinualnu alokaciju za male
fajlove, prebacujui se na indeksirani nain ako fajl poraste
Postoje mnoge druge finije tehnike za poboljanje
performansi
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 289/294
Rukovanje slobodnim prostorom
Bez obzira na metod alokacije, fajl sistem mora da vodi
evidenciju (spisak) slobodnih blokova:
kada trai slobodan blok, uzima se prvi blok sa ove liste (ili neki
drugi, ako postoje optimizacije) i izbacuje iz spiska slobodnih
kada se fajl brie, svi blokovi koje je zauzimao fajl proglaavaju se
slobodnim
Bit-vektor - svaki fiziki blok na disku predstavljen je
jednim bitom (npr. 0-zauzet, 1-slobodan):
alokacija bloka podrazumeva traenje prvog bita 1 u vektoru; ako
postoji podrka u instrukcijama procesora, veoma efikasno (Intel
80386 i Motorola 68020 imaju instrukcije koje vraaju redni broj
prvog bita 1 u mainskoj rei)
dealokacija bloka podrazumeva resetovanje odgovarajueg bita
(izvesti raunicu!)
pogodnost jednostavno i efikasno
nedostatak: bit-vektor moe da bude veoma veliki; npr. disk od
40GB sa blokom od 1KB zahteva vektor od preko 5MB
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 290/294
Rukovanje slobodnim prostorom
Ulanana lista:
kao i kod ulanane alokacije, slobodni blokovi se ulanavaju u listu
pokazivaa koji se nalaze u svakom bloku
alokacija jednog bloka je jednostavna i efikasna uzima se prvi blok
iz liste
alokacija vie blokova efikasna za ulananu alokaciju, neefikasna za
ostale mora se prolaziti kroz ulanane blokove
dealokacija pri brisanju fajla efikasna za ulananu alokaciju
FAT varijanta inherentno rukuje slobodnim prostorom ulazi za
slobodne blokove u FAT su posebno oznaeni
Grupisanje: prvi slobodni blok sadri spisak narednih n
slobodnih blokova; n-ti iz tog spiska sadri spisak sledeih n
slobodnih blokova itd.
esto se alociraju susedni blokovi, naroito kod kontinualne
alokacije. U jednom zapisu liste slobodnih blokova moe se
uvati samo adresa i veliina kontinualnog segmenta blokova
Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 291/294
Efikasnost i performanse
Fajl sistem i I/O sa diskom su izuzetno osetljivi delovi i
najee usko grlo u performansama sistema. Zato je
potrebna njihova paljiva konstrukcija i optimizacija
Neki aspekti i tehnike:
prealokacija FCB-a na disku; unapred alocirati FCB-ove na
volumenu (UNIX) kako bi kasnije operacije bile efikasnije
alocirati susedne blokove za isti fajl kako bi vreme pristupa bilo to
krae
upotreba klastera razliite veliine radi smanjenja interne
fragmentacije: npr. manji klaster za male fajlove i za kraj fajla
upotreba dinamikih strukura neograniene dimenzije umesto
ogranienih struktura sa statikim dimenzijama
keiranje praktino neizostavno; za sekvencijalni pristup, read-
ahead keiranje: uitavanje bloka unapred
asinhroni upis podataka (osim eventualno za metapodatke)

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 292/294


Oporavak od otkaza
Mnoge informacije o strukturi fajl sistema na disku uvaju
se u keu u memoriji. ta se deava ako sistem otkae pre
nego to te podatke snimi na disk? Korupcija fajl sistema
Potreba za pokretanjem posebnih programa za oporavak
od otkaza: analiziraju nekonzistentnu strukturu fajl sistema
i pokuavaju da je restauriraju (UNIX fsck, MS-DOS
chkdsk). Uspeh zavisi od fajl sistema i veliine problema
Jedan pristup poveanju otpornosti na otkaze sinhroni
upis metapodataka na disk
Obavezno redovno arhiviranje kopija (backup):
kompletan
inkrementalan samo promene od zadatog datuma i vremena

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 293/294


VII Zakljuak

ta je naueno
ta nas oekuje u Operativnim sistemima 2
Domai zadatak
Ispit
Pitanja i diskusija

Februar 2005-2015. Copyright (C) 2005-2015 by Dragan Miliev 294

You might also like