ОС1/Јануар 2013 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(→‎Rešenje: Опис copyOnWrite)
м (Ispravke u formatiranju)
 
Ред 11: Ред 11:
== 2. zadatak ==
== 2. zadatak ==
=== Postavka ===
=== Postavka ===
Korišćenjem funkcije <code>yield(jmp_buf old, jmp_buf new)</code> koja čuva kontekst jedne niti i predaje procesor drugoj niti, realizovati operaciju <code>wait</code> na brojačkom semaforu u školskom jezgru.
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 npr.)
# Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (poput <code>join</code>)
#Pri sinhronoj I/O operaciji, posledica sistemskopg poziva tog procesa
# 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
    begin
loop
        loop
flag1 = true; turn := 2;  
            flag1 = true; turn := 2;  
while flag2 and turn = 2 do null;
            while flag2 and turn = 2 do null;
<critical>
            <critical>
flag1 := false
            flag1 := false
<non-critical>
            <non-critical>
end
        end
    end
end P1;
end P1;


process P2
process P2
begin
    begin
loop
        loop
flag2 = true; turn := 1;  
            flag2 = true; turn := 1;  
while flag1 and turn = 1 do null;
            while flag1 and turn = 1 do null;
<critical>
            <critical>
flag2 := false
            flag2 := false
<non-critical>
            <non-critical>
end
        end
    end
end P2;
end P2;
</syntaxhighlight>
</syntaxhighlight>
Ред 76: Ред 78:
== 6. zadatak ==
== 6. zadatak ==
=== Postavka ===
=== Postavka ===
Virtuelni adresni prostor sistema je 8GB, adresibilna jedinica je 16-bitna reč, a virtuelni adresni prostor je organizovan stranično sa stranicomveličine 32KB. Fizički adresni prostor je veličine 2GB. Tabele preslikavanja stranica su organizovaneu  dva nivoa, s tim da tabela prvog nivoa ima 2K ulaza. Prikazati logičku strukturu virtuelneadresei označiti širinu svakog polja. Označiti i podelu polja za broj stranice na polja zaindeksiranje PMT prvog i drugog nivoa.
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''. 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.
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 ===
Десиће се "access violeation", јер процес има све странице тренутно учитане, али у њиховим дескрипторима у PMT je записано да се у њих несме уписивати, ОС погледа у описе сегмената и види да је дозвољен упис у ту страницу па је закључак да се она тренутно дели са неким другим процесом, страница ће се копирати и у ту нову копију, чији је власник тренутни процес, ће бити извршен упис.
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
        LD R2, cnt
ST [ctrl], #0..1
        ST [ctrl], #0..1
wait: LD R0, [status]
wait:   LD R0, [status]
AND R0, #1..0
        AND R0, #1..0
JZ wait
        JZ wait
LD R0, [R1]
        LD R0, [R1]
ST [data], R0
        ST [data], R0
INC R1
        INC R1
DEC R2
        DEC R2
JNZ wait
        JNZ wait
ST [ctrl], #0
        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 i objasniti neku tehniku organizacije strukture podataka za rukovanje slobodnim prostorom fajl sistema na disku, osim bit-vektora.
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

Zadaci na stranici predmeta.

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

  1. Zbog operacije na sinhronizacionoj primitivi, tj. na semaforu ili događaju
  2. Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (poput join)
  3. 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.