ОС1/Јануар 2013 — разлика између измена
(→Rešenje: Опис copyOnWrite) |
м (Ispravke u formatiranju) |
||
Ред 11: | Ред 11: | ||
== 2. zadatak == | == 2. zadatak == | ||
=== Postavka === | === Postavka === | ||
Korišćenjem funkcije < | Korišćenjem funkcije <syntaxhighlight lang="c" inline>yield(jmp_buf old, jmp_buf new)</syntaxhighlight> koja čuva kontekst jedne niti i predaje procesor drugoj niti, realizovati operaciju <code>wait</code> na brojačkom semaforu u školskom jezgru. | ||
=== Rešenje === | === Rešenje === | ||
Ред 33: | Ред 33: | ||
=== Rešenje === | === Rešenje === | ||
#Zbog operacije na sinhronizacionoj primitivi, tj. na semaforu ili događaju | # Zbog operacije na sinhronizacionoj primitivi, tj. na semaforu ili događaju | ||
#Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (join | # Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (poput <code>join</code>) | ||
#Pri sinhronoj I/O operaciji, posledica | # Pri sinhronoj I/O operaciji, posledica sistemskog poziva tog procesa | ||
== 4. zadatak == | == 4. zadatak == | ||
Ред 45: | Ред 45: | ||
shared var turn : integer := 1, flag1, flag2 : boolean := false; | shared var turn : integer := 1, flag1, flag2 : boolean := false; | ||
process P1 | process P1 | ||
begin | |||
loop | |||
flag1 = true; turn := 2; | |||
while flag2 and turn = 2 do null; | |||
<critical> | |||
flag1 := false | |||
<non-critical> | |||
end | |||
end | |||
end P1; | end P1; | ||
process P2 | process P2 | ||
begin | |||
loop | |||
flag2 = true; turn := 1; | |||
while flag1 and turn = 1 do null; | |||
<critical> | |||
flag2 := false | |||
<non-critical> | |||
end | |||
end | |||
end P2; | end P2; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Ред 76: | Ред 78: | ||
== 6. zadatak == | == 6. zadatak == | ||
=== Postavka === | === Postavka === | ||
Virtuelni | Virtuelni adresni prostor sistema je 8GB, adresibilna jedinica je 16-bitna reč, a virtuelni adresni prostor je organizovan stranično sa stranicom veličine 32KB. Fizički adresni prostor je veličine 2GB. Tabele preslikavanja stranica su organizovane u dva nivoa, s tim da tabela prvog nivoa ima 2K ulaza. Prikazati logičku strukturu virtuelne adrese i označiti širinu svakog polja. Označiti i podelu polja za broj stranice na polja za indeksiranje PMT prvog i drugog nivoa. | ||
=== Rešenje === | === Rešenje === | ||
* PA: frame(16), offset(14) | |||
PA:frame(16),offset(14) | * VA: PMT1(11), PMT2(7), offset(14) | ||
VA:PMT1(11),PMT2(7),offset(14) | |||
== 7. zadatak == | == 7. zadatak == | ||
=== Postavka === | === Postavka === | ||
Neki sistem sa straničnom organizacijom memorije koristi tehniku ''copy on write''. | Neki sistem sa straničnom organizacijom memorije koristi tehniku ''copy on write''. Jedan proces je tek kreirao drugi proces pozivom <code>fork()</code>. Ako novokreirani proces odmah po pokretanju izvrši operaciju upisa u memoriju, koji izuzetak će generisati procesor, ''page fault'' ili neki drugi i koji? Precizno objasniti zašto i kako. | ||
=== Rešenje === | === Rešenje === | ||
Desiće se "access violation", jer proces ima sve stranice trenutno učitane, ali u njihovim deskriptorima u PMT je zapisano da se u njih ne sme upisivati, operativni sistem pogleda u opise segmenata i vidi da je dozvoljen upis u tu stranicu pa je zaključak da se ona trenutno deli sa nekim drugim procesom, stranica će se kopirati i u tu novu kopiju, čiji je vlasnik trenutni proces, će biti izvršen upis. | |||
== 8. zadatak == | == 8. zadatak == | ||
Ред 95: | Ред 97: | ||
=== Rešenje === | === Rešenje === | ||
<syntaxhighlight lang="asm"> | <syntaxhighlight lang="asm"> | ||
main: LD R1, blockAddr | main: LD R1, blockAddr | ||
LD R2, cnt | |||
ST [ctrl], #0..1 | |||
wait: LD R0, [status] | wait: LD R0, [status] | ||
AND R0, #1..0 | |||
JZ wait | |||
LD R0, [R1] | |||
ST [data], R0 | |||
INC R1 | |||
DEC R2 | |||
JNZ wait | |||
ST [ctrl], #0 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Ред 114: | Ред 116: | ||
=== Rešenje === | === Rešenje === | ||
Svrha toga jeste da pri svakom obraćanju fajlu ne koristimo njegovo ime već koristimo ID u nizu fajl deskriptora koji sadrže pokazivače deskriptor u tabeli otvorenih fajlova koja sadrži pokazivač na FCB datog fajla. | Svrha toga jeste da pri svakom obraćanju fajlu ne koristimo njegovo ime već koristimo ID u nizu fajl deskriptora koji sadrže pokazivače na deskriptor u tabeli otvorenih fajlova koja sadrži pokazivač na FCB datog fajla. | ||
== 10. zadatak == | == 10. zadatak == | ||
=== Postavka === | === Postavka === | ||
Navesti | Navesti i objasniti neku tehniku organizacije strukture podataka za rukovanje slobodnim prostorom fajl sistema na disku, osim bit-vektora. | ||
=== Rešenje === | === Rešenje === |
Тренутна верзија на датум 18. јул 2022. у 19:16
1. zadatak
Postavka
Šta je to multiprocesorski sistem, a šta distribuirani sistem? Navesti po jedan primer svakog.
Rešenje
Videti zadatak iz julskog roka 2012.
2. zadatak
Postavka
Korišćenjem funkcije yield(jmp_buf old, jmp_buf new)
koja čuva kontekst jedne niti i predaje procesor drugoj niti, realizovati operaciju wait
na brojačkom semaforu u školskom jezgru.
Rešenje
void Semaphore::wait() {
lock(lck);
if(--val < 0) {
jmp_buf old = Thread::running->context;
blocked.put(Thread::running);
Thread::running = Scheduler::get();
jmp_buf new = Thread::running->context;
yield(old, new);
}
unlock(lck);
}
3. zadatak
Postavka
Navesti najmanje tri slučaja (povoda) u kojima proces gubi procesor i prelazi u red suspendovanih (blokiranih) i naznačiti da li se to dešava kao posledica sistemskog poziva tog procesa ili spoljašnjeg prekida
Rešenje
- Zbog operacije na sinhronizacionoj primitivi, tj. na semaforu ili događaju
- Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (poput
join
) - Pri sinhronoj I/O operaciji, posledica sistemskog poziva tog procesa
4. zadatak
Postavka
Napisati kod koji realizuje Petersonov algoritam međusobnog isključenja dva uporedna procesa pomoću uposlenog čekanja.
Rešenje
shared var turn : integer := 1, flag1, flag2 : boolean := false;
process P1
begin
loop
flag1 = true; turn := 2;
while flag2 and turn = 2 do null;
<critical>
flag1 := false
<non-critical>
end
end
end P1;
process P2
begin
loop
flag2 = true; turn := 1;
while flag1 and turn = 1 do null;
<critical>
flag2 := false
<non-critical>
end
end
end P2;
5. zadatak
Postavka
U čemu je razlika između tehnika dinamičkog učitavanja (dynamic loading) i preklopa (overlay)?
Rešenje
Videti zadatak iz julskog roka 2012.
6. zadatak
Postavka
Virtuelni adresni prostor sistema je 8GB, adresibilna jedinica je 16-bitna reč, a virtuelni adresni prostor je organizovan stranično sa stranicom veličine 32KB. Fizički adresni prostor je veličine 2GB. Tabele preslikavanja stranica su organizovane u dva nivoa, s tim da tabela prvog nivoa ima 2K ulaza. Prikazati logičku strukturu virtuelne adrese i označiti širinu svakog polja. Označiti i podelu polja za broj stranice na polja za indeksiranje PMT prvog i drugog nivoa.
Rešenje
- PA: frame(16), offset(14)
- VA: PMT1(11), PMT2(7), offset(14)
7. zadatak
Postavka
Neki sistem sa straničnom organizacijom memorije koristi tehniku copy on write. Jedan proces je tek kreirao drugi proces pozivom fork()
. Ako novokreirani proces odmah po pokretanju izvrši operaciju upisa u memoriju, koji izuzetak će generisati procesor, page fault ili neki drugi i koji? Precizno objasniti zašto i kako.
Rešenje
Desiće se "access violation", jer proces ima sve stranice trenutno učitane, ali u njihovim deskriptorima u PMT je zapisano da se u njih ne sme upisivati, operativni sistem pogleda u opise segmenata i vidi da je dozvoljen upis u tu stranicu pa je zaključak da se ona trenutno deli sa nekim drugim procesom, stranica će se kopirati i u tu novu kopiju, čiji je vlasnik trenutni proces, će biti izvršen upis.
8. zadatak
Postavka
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji prenosi blok podataka zadate dužine sa zadate adrese na izlazni uređaj korišćenjem programiranog ulaza/izlaza sa prozivanjem (polling).
Rešenje
main: LD R1, blockAddr
LD R2, cnt
ST [ctrl], #0..1
wait: LD R0, [status]
AND R0, #1..0
JZ wait
LD R0, [R1]
ST [data], R0
INC R1
DEC R2
JNZ wait
ST [ctrl], #0
9. zadatak
Postavka
Šta je osnovna svrha (motiv) postojanja operacije otvaranja fajla?
Rešenje
Svrha toga jeste da pri svakom obraćanju fajlu ne koristimo njegovo ime već koristimo ID u nizu fajl deskriptora koji sadrže pokazivače na deskriptor u tabeli otvorenih fajlova koja sadrži pokazivač na FCB datog fajla.
10. zadatak
Postavka
Navesti i objasniti neku tehniku organizacije strukture podataka za rukovanje slobodnim prostorom fajl sistema na disku, osim bit-vektora.
Rešenje
Slobodni blokovi se mogu grupisati tako da prvi blok u grupi slobodnih sadrži pokazivač na naredne slobodne blokove.