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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м ({{delimično rešeno}})
(dopune)
 
(Нису приказане 4 међуизмене 3 корисника)
Ред 7: Ред 7:


=== Rešenje ===
=== Rešenje ===
'''Preotimanje procesora''' je prekidanje izvršavanja jednog procesa na procesu da bi se izvršio kernel kod ili neki drugi proces.
* '''Preotimanje procesora''' je prekidanje izvršavanja jednog procesa na procesoru da bi se izvršio kernel kod ili neki drugi proces.
'''Mehanizam prekida''' omogućuje preotimanje procesora - procesor dobija signal da prekine trenutni proces i pređe na kod kernela. Preotimanjem se postiže multiprocesiranje sa boljom raspodelom vremena i vremenom odziva.  
* '''Mehanizam prekida''' omogućuje preotimanje procesora - procesor dobija signal da prekine trenutni proces i pređe na kod kernela. Preotimanjem se postiže multiprogramiranje sa boljom raspodelom vremena i vremenom odziva.  


== 2. zadatak ==
== 2. zadatak ==
=== Postavka ===
=== Postavka ===
Dat je potpis jednog sistemskog poziva na sistemima nalik sistemu Unix. Kratko, ali prezino objasniti šta radi ovaj sistemski poziv i značenje svakog parametra i rezultata.
Dat je potpis jednog sistemskog poziva na sistemima nalik sistemu Unix. Kratko, ali prezino objasniti šta radi ovaj sistemski poziv i značenje svakog parametra i rezultata.
<syntaxhighlight lang="c">void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);</syntaxhighlight>


<code> void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); </code>
=== Rešenje ===
=== Rešenje ===
<code>mmap</code> je sistemski poziv koji mapira fajl ili uređaj u memoriju. Značenja parametara:
<code>mmap</code> je sistemski poziv koji mapira fajl ili uređaj u memoriju. Značenja parametara:
* <code>void *addr</code> je (željena) početna adresa mapiranja. Ukoliko je <code>NULL</code>, operativni sistem sam bira početnu adresu.
* <code>void *addr</code> je (željena) početna adresa mapiranja. Ukoliko je <code>NULL</code>, operativni sistem sam bira početnu adresu.
* <code>size_t length</code> je dužina mapirane memorije
* <code>size_t length</code> je dužina mapirane memorije
* <code>int prot</code> je fleg koji označava dovzoljene načine pristupa mapiranoj memoriji (da li sme da se čita, upisuje, izvršava) i mora se slagati sa načinom pristupa fajla.
* <code>int prot</code> je fleg koji označava dozvoljene načine pristupa mapiranoj memoriji (da li sme da se čita, upisuje, izvršava) i mora se slagati sa načinom pristupa fajla.
* <code>int flags</code> je fleg koji označava da li je mapirana memorija vidljiva ostalim procesima koji mapiraju isti fajl, da li se promene u memoriji upisuju u fajl itd.
* <code>int flags</code> je fleg koji označava da li je mapirana memorija vidljiva ostalim procesima koji mapiraju isti fajl, da li se promene u memoriji upisuju u fajl itd.
* <code>int fd</code> je ručka fajla
* <code>int fd</code> je ručka fajla
Ред 28: Ред 28:
=== Postavka ===
=== Postavka ===
Šta se postiže tehnikom “kopiranja pri upisu” kod upravljanja memorijom? Kratko, ali precizno objasniti način rada ove tehnike.
Šta se postiže tehnikom “kopiranja pri upisu” kod upravljanja memorijom? Kratko, ali precizno objasniti način rada ove tehnike.
=== Rešenje ===
=== Rešenje ===
Tehnikom ''copy-on-write'' postiže se '''ušteda memorije''', tako što se memorija koja se koristi u više procesa ne kopira dok je jedan proces ne promeni. Implementira se tako što se u deskriptor logičkog segemtna koja se deli između procesa označi kao dozvoljen za upis, ali u ulazu PMT-a kao zabranjen za upis. U situaciju kada se desi upis, hardver generiše izuzetak koji se obrađuje od strane OS-a. OS zaključuje da se radi o kopiranju pri upisu iz deskriptora logičkog segmenta i vrši kopiranje, usmeravanje PMT-a drugog procesa na kopiju i u deskriptorima stranica obe kopije dozvoljava upis.  
Tehnikom ''copy-on-write'' postiže se '''ušteda memorije''', tako što se memorija koja se koristi u više procesa ne kopira dok je jedan proces ne promeni. Implementira se tako što se deskriptor logičkog segmenta koji se deli između procesa označi kao dozvoljen za upis, ali u ulazu PMT-a kao zabranjen za upis. U situaciju kada se desi upis, hardver generiše izuzetak koji se obrađuje od strane OS-a. OS zaključuje da se radi o kopiranju pri upisu iz deskriptora logičkog segmenta i vrši kopiranje, usmeravanje PMT-a drugog procesa na kopiju i u deskriptorima stranica obe kopije dozvoljava upis.  


== 4. zadatak ==
== 4. zadatak ==
=== Postavka ===
=== Postavka ===
Ako se nad sledećim programom kreira jedan proces, koliko će ukupno biti elemenata sa vrednošću '''različitom od 0''' u nizovima <code>pid</code> svih kreiranih procesa (uključujući i taj jedan početni) kada svi ti procesi izađu iz petlje, pod pretpostavkom da su svi sistemski pozivi uspeli?
Ako se nad sledećim programom kreira jedan proces, koliko će ukupno biti elemenata sa vrednošću '''različitom od 0''' u nizovima <code>pid</code> svih kreiranih procesa (uključujući i taj jedan početni) kada svi ti procesi izađu iz petlje, pod pretpostavkom da su svi sistemski pozivi uspeli?
<syntaxhighlight lang=c>
<syntaxhighlight lang="c">
const int N=2; int pid[N];  
const int N=2; int pid[N];  
void main () {
void main () {
Ред 40: Ред 41:
}
}
</syntaxhighlight>
</syntaxhighlight>
=== Rešenje ===
=== Rešenje ===
<code>fork()</code> u kontekstu roditelja vraća pravi <code>pid</code> deteta, a u kontekstu deteta vraća 0. Odgovor je 4: <code>child1</code> i <code>child3</code> u ''parent'', <code>child2</code> u ''child1'' i <code>child1</code> u ''child3''.
<code>fork()</code> u kontekstu roditelja vraća pravi <code>pid</code> deteta, a u kontekstu deteta vraća 0. Odgovor je 4: <code>child1</code> i <code>child3</code> u ''parent'', <code>child2</code> u ''child1'' i <code>child1</code> u ''child3''.
Ред 45: Ред 47:


== 5. zadatak ==
== 5. zadatak ==
{{delimično rešeno}}
=== Postavka ===
=== Postavka ===
Dokazati da Petersonov algoritam za međusobno isključenje kritičnih sekcija dva uporedna procesa uposlenim čekanjem zaista obezbeđuje međusobno isključenje, odnosno ne poseduje problem utrkivanja (engl. ''race condition''). (Dati kod samo jednog procesa sa međusobnim isključenjem pomoću ovog algoritma.)
Dokazati da Petersonov algoritam za međusobno isključenje kritičnih sekcija dva uporedna procesa uposlenim čekanjem zaista obezbeđuje međusobno isključenje, odnosno ne poseduje problem utrkivanja (engl. ''race condition''). (Dati kod samo jednog procesa sa međusobnim isključenjem pomoću ovog algoritma.)


=== Rešenje ===
=== Rešenje ===
Petersonov algoritam:
<syntaxhighlight lang="ada">
process P1;
begin
    loop
        flag1 := true; turn := 2;
        while flag2 and turn = 2 do null;
        <critical section>
        flag1 := false;
        <non-critical section>
    end
end P1;
</syntaxhighlight>
Pretpostavimo da algoritam ne obezbeđuje međusobno isključenje. Ako algoritam NE obezbeđuje međusobno isključenje, dogodiće se situacija da su oba procesa ušla u kritičnu sekciju. Ako se to desilo, to znači da su oba uslova petlji uposlenog čekanja <code>false</code>. Pošto oba procesa odmah pred ulazak u petlju postavljaju svoj <code>flag</code> na <code>true</code>, jedini način da uslov za petlju bude netačan je da uslov sa <code>turn</code> bude netačan, a pošto su oba uslova netačna, to bi značilo da promenljiva <code>turn</code> nema ni vrednost 1 ni vrednost 2. Pošto promenljivu <code>turn</code> koriste samo ova dva procesa i samo postavljaju vrednost na 1 ili 2, do ovoga nikako ne može doći. Time dobijamo kontradikciju na početnu pretpostavku i dobijamo da algoritam zaista omogućava međusobno isključenje.


== 6. zadatak ==
== 6. zadatak ==
=== Postavka ===
=== Postavka ===
Šta je ''simbolička veza'' (''symbolic link'', ''soft link'') u fajl sistemu? Kako se ona implementira?  
Šta je ''simbolička veza'' (''symbolic link'', ''soft link'') u fajl sistemu? Kako se ona implementira?  
=== Rešenje ===
=== Rešenje ===
'''Simbolička veza''' je veza do nekog fajla u fajl sistemu koja se ne ažurira automatski. Implementira se kao '''fajl sa posebnim tretmanom''' od strane operativnog sistema i u sebi sadrži apsolutnu i relativnu putanju do nekog fajla u fajl sistemu. Razlikuje se od tvrde veze tako što ne pokazuje direktno do FCB-a i može da postane prekinuta tj. landarava.
'''Simbolička veza''' je veza do nekog fajla u fajl sistemu koja se ne ažurira automatski. Implementira se kao '''fajl sa posebnim tretmanom''' od strane operativnog sistema i u sebi sadrži apsolutnu i relativnu putanju do nekog fajla u fajl sistemu. Razlikuje se od tvrde veze tako što ne pokazuje direktno do FCB-a i može da postane prekinuta tj. landarava, ako se ''target'' fajl premesti ili preimenuje.


== 7. zadatak ==
== 7. zadatak ==
=== Postavka ===
=== Postavka ===
Neki fajl sistem koristi bit vektor za evidenciju slobodnih blokova na disku. Kolika je veličina ovog vektora u bajtovima, za disk veličine 16 TB sa blokom veličine 512B.
Neki fajl sistem koristi bit vektor za evidenciju slobodnih blokova na disku. Kolika je veličina ovog vektora u bajtovima, za disk veličine 16 TB sa blokom veličine 512B.
=== Rešenje ===
=== Rešenje ===
16 TB = 2<sup>4</sup> * 2<sup>40</sup> B = 2<sup>44</sup> B.
* 16 TB = 2<sup>4</sup> * 2<sup>40</sup> B = 2<sup>44</sup> B.
 
* 2<sup>44</sup> B / 512 B = 2<sup>44</sup> B / 2<sup>9</sup> = 2<sup>35</sup> blokova.
2<sup>44</sup> B / 512 B = 2<sup>44</sup> B / 2<sup>9</sup> = 2<sup>35</sup> blokova.
* 2<sup>35</sup> / 8 bita u B = 2<sup>32</sup> = 2<sup>2</sup> * 2<sup>30</sup> = '''4 GB'''.
 
2<sup>35</sup> / 8 bita u B = 2<sup>32</sup> = 2<sup>2</sup> * 2<sup>30</sup> = '''4 GB'''.


[[Категорија:Рокови]]
[[Категорија:Рокови]]
[[Категорија:ОС1]]
[[Категорија:ОС1]]

Тренутна верзија на датум 24. август 2021. у 19:38

Zadaci na stranici predmeta. Svi zadaci vrede 3 poena.

1. zadatak

Postavka

Šta je preotimanje procesora (engl. preemption) i koji hardverski mehanizam ga omogućuje? Šta se postiže uvođenjem ove tehnike u računarske sisteme?

Rešenje

  • Preotimanje procesora je prekidanje izvršavanja jednog procesa na procesoru da bi se izvršio kernel kod ili neki drugi proces.
  • Mehanizam prekida omogućuje preotimanje procesora - procesor dobija signal da prekine trenutni proces i pređe na kod kernela. Preotimanjem se postiže multiprogramiranje sa boljom raspodelom vremena i vremenom odziva.

2. zadatak

Postavka

Dat je potpis jednog sistemskog poziva na sistemima nalik sistemu Unix. Kratko, ali prezino objasniti šta radi ovaj sistemski poziv i značenje svakog parametra i rezultata.

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

Rešenje

mmap je sistemski poziv koji mapira fajl ili uređaj u memoriju. Značenja parametara:

  • void *addr je (željena) početna adresa mapiranja. Ukoliko je NULL, operativni sistem sam bira početnu adresu.
  • size_t length je dužina mapirane memorije
  • int prot je fleg koji označava dozvoljene načine pristupa mapiranoj memoriji (da li sme da se čita, upisuje, izvršava) i mora se slagati sa načinom pristupa fajla.
  • int flags je fleg koji označava da li je mapirana memorija vidljiva ostalim procesima koji mapiraju isti fajl, da li se promene u memoriji upisuju u fajl itd.
  • int fd je ručka fajla
  • off_t offset je pomeraj od početka fajla od kojeg se vrši mapiranje

Ukoliko je poziv uspešan, vraća se void pokazivač na memoriju koja je mapirana.

3. zadatak

Postavka

Šta se postiže tehnikom “kopiranja pri upisu” kod upravljanja memorijom? Kratko, ali precizno objasniti način rada ove tehnike.

Rešenje

Tehnikom copy-on-write postiže se ušteda memorije, tako što se memorija koja se koristi u više procesa ne kopira dok je jedan proces ne promeni. Implementira se tako što se deskriptor logičkog segmenta koji se deli između procesa označi kao dozvoljen za upis, ali u ulazu PMT-a kao zabranjen za upis. U situaciju kada se desi upis, hardver generiše izuzetak koji se obrađuje od strane OS-a. OS zaključuje da se radi o kopiranju pri upisu iz deskriptora logičkog segmenta i vrši kopiranje, usmeravanje PMT-a drugog procesa na kopiju i u deskriptorima stranica obe kopije dozvoljava upis.

4. zadatak

Postavka

Ako se nad sledećim programom kreira jedan proces, koliko će ukupno biti elemenata sa vrednošću različitom od 0 u nizovima pid svih kreiranih procesa (uključujući i taj jedan početni) kada svi ti procesi izađu iz petlje, pod pretpostavkom da su svi sistemski pozivi uspeli?

const int N=2; int pid[N]; 
void main () {
    for (int i=0; i<N; i++) pid[i] = fork();
}

Rešenje

fork() u kontekstu roditelja vraća pravi pid deteta, a u kontekstu deteta vraća 0. Odgovor je 4: child1 i child3 u parent, child2 u child1 i child1 u child3.

Objašnjenje

5. zadatak

Postavka

Dokazati da Petersonov algoritam za međusobno isključenje kritičnih sekcija dva uporedna procesa uposlenim čekanjem zaista obezbeđuje međusobno isključenje, odnosno ne poseduje problem utrkivanja (engl. race condition). (Dati kod samo jednog procesa sa međusobnim isključenjem pomoću ovog algoritma.)

Rešenje

Petersonov algoritam:

process P1;
begin
    loop
        flag1 := true; turn := 2;
        while flag2 and turn = 2 do null;
        <critical section>
        flag1 := false;
        <non-critical section>
    end
end P1;

Pretpostavimo da algoritam ne obezbeđuje međusobno isključenje. Ako algoritam NE obezbeđuje međusobno isključenje, dogodiće se situacija da su oba procesa ušla u kritičnu sekciju. Ako se to desilo, to znači da su oba uslova petlji uposlenog čekanja false. Pošto oba procesa odmah pred ulazak u petlju postavljaju svoj flag na true, jedini način da uslov za petlju bude netačan je da uslov sa turn bude netačan, a pošto su oba uslova netačna, to bi značilo da promenljiva turn nema ni vrednost 1 ni vrednost 2. Pošto promenljivu turn koriste samo ova dva procesa i samo postavljaju vrednost na 1 ili 2, do ovoga nikako ne može doći. Time dobijamo kontradikciju na početnu pretpostavku i dobijamo da algoritam zaista omogućava međusobno isključenje.

6. zadatak

Postavka

Šta je simbolička veza (symbolic link, soft link) u fajl sistemu? Kako se ona implementira?

Rešenje

Simbolička veza je veza do nekog fajla u fajl sistemu koja se ne ažurira automatski. Implementira se kao fajl sa posebnim tretmanom od strane operativnog sistema i u sebi sadrži apsolutnu i relativnu putanju do nekog fajla u fajl sistemu. Razlikuje se od tvrde veze tako što ne pokazuje direktno do FCB-a i može da postane prekinuta tj. landarava, ako se target fajl premesti ili preimenuje.

7. zadatak

Postavka

Neki fajl sistem koristi bit vektor za evidenciju slobodnih blokova na disku. Kolika je veličina ovog vektora u bajtovima, za disk veličine 16 TB sa blokom veličine 512B.

Rešenje

  • 16 TB = 24 * 240 B = 244 B.
  • 244 B / 512 B = 244 B / 29 = 235 blokova.
  • 235 / 8 bita u B = 232 = 22 * 230 = 4 GB.