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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (lang=)
 
(Нису приказане 3 међуизмене 3 корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
[http://os.etf.bg.ac.rs/OS1/rokovi/2021/jun/Jun%202021.pdf Zadaci na stranici predmeta.]
[http://os.etf.bg.ac.rs/OS1/rokovi/2022/jul/Jul%202022.pdf Zadaci na stranici predmeta.]


== 1. zadatak ==
== 1. zadatak ==
Ред 7: Ред 7:


{| class="wikitable"
{| class="wikitable"
!Funkcija || Opis || Sadrži sist. poziv
! Funkcija !! Opis !! Sadrži sist. poziv
|-
|-
|<syntaxhighlight lang="c">void* memcpy(void* dest, const void* src, size_t count)</syntaxhighlight> || Kopira niz bajtova u memoriji sa jednog mesta na drugo. ||
| <syntaxhighlight lang="c" inline>void* memcpy(void* dest, const void* src, size_t count)</syntaxhighlight> || Kopira niz bajtova u memoriji sa jednog mesta na drugo. ||
|-
|-
|<syntaxhighlight lang="c">void exit (int status)</syntaxhighlight> || Završava izvršavanje programa. ||
| <syntaxhighlight lang="c" inline>void exit (int status)</syntaxhighlight> || Završava izvršavanje programa. ||
|-
|-
|<syntaxhighlight lang="c">int getchar(void)</syntaxhighlight> || Učitava znak sa standardnog ulaza. ||
| <syntaxhighlight lang="c" inline>int getchar(void)</syntaxhighlight> || Učitava znak sa standardnog ulaza. ||
|-
|-
|<syntaxhighlight lang="c">char* strchr(const char *str, int c)</syntaxhighlight> || Traži prvu pojavu znaka u datom nizu znakova. ||
| <syntaxhighlight lang="c" inline>char* strchr(const char *str, int c)</syntaxhighlight> || Traži prvu pojavu znaka u datom nizu znakova. ||
|}
|}


Ред 23: Ред 23:
== 2. zadatak ==
== 2. zadatak ==
=== Postavka ===
=== Postavka ===
Precizno objasniti zašto klasičan linker svoj pasao obavlja u dva prolaza (a ne može samo u jednom). Obrazloženje ilustrovati primerom.
Precizno objasniti zašto klasičan linker svoj posao obavlja u dva prolaza (a ne može samo u jednom). Obrazloženje ilustrovati primerom.


=== Rešenje ===
=== Rešenje ===
Videti isti ovaj zadatak iz [[ОС1/Јул 2017#5._zadatak|jula 2017]].
Videti isti ovaj zadatak iz [[ОС1/Јул 2017#5. zadatak|jula 2017]].


== 3. zadatak ==
== 3. zadatak ==
Ред 33: Ред 33:


=== Rešenje ===
=== Rešenje ===
Videti isti ovaj zadatak iz [[ОС1/Август 2020#4._zadatak|avgusta 2020]].
Videti isti ovaj zadatak iz [[ОС1/Август 2020#4. zadatak|avgusta 2020]].


== 4. zadatak ==
== 4. zadatak ==
Ред 40: Ред 40:


=== Rešenje ===
=== Rešenje ===
Videti isti ovaj zadatak iz [[ОС1/Јун 2019#5._zadatak|juna 2019]].
Videti isti ovaj zadatak iz [[ОС1/Јун 2019#5. zadatak|juna 2019]].


== 5. zadatak ==
== 5. zadatak ==
Ред 47: Ред 47:


=== Rešenje ===
=== Rešenje ===
Videti isti ovaj zadatak iz [[ОС1/Јул 2017#2._zadatak|jula 2017]].
Videti isti ovaj zadatak iz [[ОС1/Јул 2017#2. zadatak|jula 2017]].


== 6. zadatak ==
== 6. zadatak ==
Ред 54: Ред 54:


=== Rešenje ===
=== Rešenje ===
{{delimično rešeno}}
Sistemskim pozivom ''kill'' pozivajući proces drugom procesu šalje ''signal''. Signal je prosta informacija, identifikacija nekakve proste poruke, obično celobrojna vrednost. Operativni sistem prenosi tu infomaciju odredišnom procesu, a reakcija na taj signal je poziv potprograma koji se izvršava u kontekstu i adresnom prostoru odredišnog procesa. Za svaki signal operativni sistem definiše podrazumevanu reakciju, uglavnom je to samo gašenje procesa sistemskim pozivom ''exit''. Međutim, odredišni proces za neke signale može reakciju da preusmeri na svoje potprograme odgovrajućim sistemskim pozivom.


== 7. zadatak ==
== 7. zadatak ==
=== Postavka ===
=== Postavka ===
Šta je problem sledeće implementacije kritične sekcije uposlenim čekanjem?
Šta je problem sledeće implementacije kritične sekcije uposlenim čekanjem?
<syntaxhighlight lang="ada">
<syntaxhighlight lang="pascal">
shared var flag1 = false, flag2 = false;
shared var flag1 = false, flag2 = false;
process P1
process P1
Ред 71: Ред 71:
     end
     end
end P1;
end P1;
</syntaxhighlight>


<syntaxhighlight lang="ada">
process P2
process P2
begin
begin
Ред 87: Ред 85:


=== Rešenje ===
=== Rešenje ===
Problem je u slučaju da oba procesa postave svoju zastavu na ''true'', jer će onda neprestano uposleno čekati (''livelock'').
Problem je u slučaju da oba procesa postave svoju zastavicu na ''true'', jer će onda neprestano uposleno čekati (''livelock'').


== 8. zadatak ==
== 8. zadatak ==
=== Postavka ===
=== Postavka ===
Precizno objasniti šta radi sledeći fragment programa:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
int fd = open("./mydoc.txt", O_CREAT|O_TRUNC|O_WRONLY);
int fd = open("./mydoc.txt", O_CREAT | O_TRUNC | O_WRONLY);
if (fd<0) handle_error("Cannot open data file.");
if (fd < 0) handle_error("Cannot open data file.");


int pid = fork ();
int pid = fork();
if (pid==0) {
if (pid == 0) {
     dup2(fd,1);
     dup2(fd, 1);
      execlp("./myprog.a", NULL);
    execlp("./myprog.a", NULL);
      handle_error("Cannot open exe file.");
    handle_error("Cannot open exe file.");
}
}
</syntaxhighlight>
</syntaxhighlight>


=== Rešenje ===
=== Rešenje ===
{{delimično rešeno}}
Program otvara <code>mydoc.txt</code> fajl u trenutnom direktorijumu za pisanje, pravi novi proces, duplira deskriptor upravo otvorenog fajla (čineći tako da sada proces-dete takođe ima otvoren taj fajl) s tim što novom fajl deskriptoru identifikator postavlja na 1, što je fajl deskriptor za standardni izlaz. Zatim zamenjuje kod procesa-deteta sa kodom programa <code>myprog.a</code> i nastavlja sa izvršavanjem, tako da se izlaz tog programa sada čuva u fajlu <code>mydoc.txt</code>.


== 9. zadatak ==
== 9. zadatak ==
=== Postavka ===
=== Postavka ===
Precizno objasniti šta radi sledeća komanda: <syntaxhighlight="bash">chmod g=x, u+rwx, o-wx .././frd</syntaxhighlight>
Precizno objasniti šta radi sledeća komanda: <syntaxhighlight lang="bash" inline>chmod g=x, u+rwx, o-wx .././frd</syntaxhighlight>


=== Rešenje ===
=== Rešenje ===
Ред 118: Ред 117:


=== Rešenje ===
=== Rešenje ===
{{delimično rešeno}}
Kod ulančane alokacije fajla, ukoliko se pristupa proizvoljnom bloku, potrebno je proći kroz sve prethodne blokove da bi se dati blok učitao. S obzirom da se u ulančanoj organizaciji pokazivač na sledeći blok čuva u samom bloku, neophodno je učitati blok sa diska, što je vremenski zahtevna operacija. FAT je jedna vrsta ulančane organizacije ali se ulančavanje ne vrši u samim blokovima, već postoji tabela na posebnom, unapred određenom mestu na volumenu koja čuva informacije o ulančavanju. Takođe, ova tabele je uglavnom keširana u RAM memoriji pa je sam pristup dosta brži.
 


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

Тренутна верзија на датум 1. јул 2023. у 13:50

Zadaci na stranici predmeta.

1. zadatak

Postavka

Navedeno je nekoliko funkcija standardne biblioteke jezika C (libc). Za svaku od njih navesti da li u svojoj implementaciji sigurno sadrži sistemski poziv (upisati "Da") ili najverovatnije ne sadrži sistemski poziv (iako bi teorijski i to moglo da bude deo funkcionalnosti jezgra operativnog sistema, za tim nema nikakve potrebe, pa se iz praktičnih razloga ne radi; upisati "Ne").

Funkcija Opis Sadrži sist. poziv
void* memcpy(void* dest, const void* src, size_t count) Kopira niz bajtova u memoriji sa jednog mesta na drugo.
void exit (int status) Završava izvršavanje programa.
int getchar(void) Učitava znak sa standardnog ulaza.
char* strchr(const char *str, int c) Traži prvu pojavu znaka u datom nizu znakova.

Rešenje

Odozgo na dole: Ne, Da, Da, Ne.

2. zadatak

Postavka

Precizno objasniti zašto klasičan linker svoj posao obavlja u dva prolaza (a ne može samo u jednom). Obrazloženje ilustrovati primerom.

Rešenje

Videti isti ovaj zadatak iz jula 2017.

3. zadatak

Postavka

Ukratko objasniti zašto je kod segmentne organizacije virtuelne memorije obavezna provera prekoračenja granice segmenta prilikom svakog adresiranja, a kod stranične organizacije ta provera ne postoji.

Rešenje

Videti isti ovaj zadatak iz avgusta 2020.

4. zadatak

Postavka

Šta je DLL i čemu služi? Objasniti osnovni motiv za postojanje ovog koncepta.

Rešenje

Videti isti ovaj zadatak iz juna 2019.

5. zadatak

Postavka

Šta radi procesorska instrukcija tipa test-and-set i za šta se ona tačno koristi u operativnim sistemima?

Rešenje

Videti isti ovaj zadatak iz jula 2017.

6. zadatak

Postavka

Precizno objasniti ceo mehanizam u sistemima nalik sistemu Unix kojim se postiže to da sistemskim pozivom kill jedan proces gasi drugi proces (šta tačno radi ovaj sistemski poziv i kako dovodi do gašenja procesa).

Rešenje

Sistemskim pozivom kill pozivajući proces drugom procesu šalje signal. Signal je prosta informacija, identifikacija nekakve proste poruke, obično celobrojna vrednost. Operativni sistem prenosi tu infomaciju odredišnom procesu, a reakcija na taj signal je poziv potprograma koji se izvršava u kontekstu i adresnom prostoru odredišnog procesa. Za svaki signal operativni sistem definiše podrazumevanu reakciju, uglavnom je to samo gašenje procesa sistemskim pozivom exit. Međutim, odredišni proces za neke signale može reakciju da preusmeri na svoje potprograme odgovrajućim sistemskim pozivom.

7. zadatak

Postavka

Šta je problem sledeće implementacije kritične sekcije uposlenim čekanjem?

shared var flag1 = false, flag2 = false;
process P1
begin
    loop
        flag1 := true;
        while flag2 = true do null end;
        <critical section>
        flag1 := false;
        <non-critical section>
    end
end P1;

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

Rešenje

Problem je u slučaju da oba procesa postave svoju zastavicu na true, jer će onda neprestano uposleno čekati (livelock).

8. zadatak

Postavka

Precizno objasniti šta radi sledeći fragment programa:

int fd = open("./mydoc.txt", O_CREAT | O_TRUNC | O_WRONLY);
if (fd < 0) handle_error("Cannot open data file.");

int pid = fork();
if (pid == 0) {
    dup2(fd, 1);
    execlp("./myprog.a", NULL);
    handle_error("Cannot open exe file.");
}

Rešenje

Program otvara mydoc.txt fajl u trenutnom direktorijumu za pisanje, pravi novi proces, duplira deskriptor upravo otvorenog fajla (čineći tako da sada proces-dete takođe ima otvoren taj fajl) s tim što novom fajl deskriptoru identifikator postavlja na 1, što je fajl deskriptor za standardni izlaz. Zatim zamenjuje kod procesa-deteta sa kodom programa myprog.a i nastavlja sa izvršavanjem, tako da se izlaz tog programa sada čuva u fajlu mydoc.txt.

9. zadatak

Postavka

Precizno objasniti šta radi sledeća komanda: chmod g=x, u+rwx, o-wx .././frd

Rešenje

Fajlu frd iz roditeljskog direktorijuma tekućeg direktorijuma pravila pristupa postaju sledeća: grupa može isključivo da izvršava fajl, vlasnik može da čita, upisuje i izvršava fajl, dok ostali gube pravo pristupa pisanja i izvršavanja ako su ih do sad imali.

10. zadatak

Postavka

Precizno objasniti šta je i zašto najveći nedostatak ulančane organizacije fajla kod proizvoljnog pristupa fajlu. Zašto taj problem ne postoji kod FAT organizacije?

Rešenje

Kod ulančane alokacije fajla, ukoliko se pristupa proizvoljnom bloku, potrebno je proći kroz sve prethodne blokove da bi se dati blok učitao. S obzirom da se u ulančanoj organizaciji pokazivač na sledeći blok čuva u samom bloku, neophodno je učitati blok sa diska, što je vremenski zahtevna operacija. FAT je jedna vrsta ulančane organizacije ali se ulančavanje ne vrši u samim blokovima, već postoji tabela na posebnom, unapred određenom mestu na volumenu koja čuva informacije o ulančavanju. Takođe, ova tabele je uglavnom keširana u RAM memoriji pa je sam pristup dosta brži.