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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (Formatiranje)
Ред 11: Ред 11:
== 2. zadatak ==
== 2. zadatak ==
=== Postavka ===
=== Postavka ===
Korišćenjem standardnih bibliotečnih funkcija <code>setjmp()</code> i <code>longjmp()</code> implementirati funkciju <code>void yield(jmp_buf old, jmp_buf new)</code> koja vrši promenu konteksta procesora.
Korišćenjem standardnih bibliotečnih funkcija <code>setjmp()</code> i <code>longjmp()</code> implementirati funkciju <syntaxhighlight lang="c" inline>void yield(jmp_buf old, jmp_buf new)</syntaxhighlight> koja vrši promenu konteksta procesora.


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
void yield(jmp_buf old, jmp_buf new) {
void yield(jmp_buf old, jmp_buf new) {
if(setjmp(old) == 0)
    if (setjmp(old) == 0) {
longjmp(new, 1);
        longjmp(new, 1);
    }
}
}
</syntaxhighlight>
</syntaxhighlight>
Ред 23: Ред 24:
== 3. zadatak ==
== 3. zadatak ==
=== Postavka ===
=== Postavka ===
Korišćenjem niti u školskom jezgru (klasa <code>Thread</code>) napisati kod koji konkurentno i rekurzivno obilazi binarno stablo tako što tekuća nit nastavlja da obilazi levo podstablo, a kreira novu nit koja će obići desno podstablo. Struktura <code>Node {Node *left, *right}</code> predstavlja čvor stabla
Korišćenjem niti u školskom jezgru (klasa <code>Thread</code>) napisati kod koji konkurentno i rekurzivno obilazi binarno stablo tako što tekuća nit nastavlja da obilazi levo podstablo, a kreira novu nit koja će obići desno podstablo. Struktura <syntaxhighlight lang="c" inline>Node {Node *left, *right}</syntaxhighlight> predstavlja čvor stabla


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
class myThread : public Thread {
class MyThread : public Thread {
public:
    public:
myThread(Node* root) {
        MyThread(Node* root) {
this->root = root;
            this->root = root;
start();
            start();
}
        }
protected:
    protected:
void run() {
        void run() {
visit(root);
            visit(root);
}
        }
private:
    private:
Node* root;
        Node* root;
};
};


void visit(Node* root) {
void visit(Node* root) {
if(root->right)
    if (root->right) {
new myThread(root->right);
        new MyThread(root->right);
if(root->left)
    }
visit(root->left);
    if (root->left) {
        visit(root->left);
    }
}
}
</syntaxhighlight>
</syntaxhighlight>
Ред 61: Ред 64:


=== Rešenje ===
=== Rešenje ===
Osnovni problem je kako povezati prevedene objektne fajlove u jedinstveni izvršivi fajl i rešiti obraćanje promenljivoj ili funkciji u drugom fajlu.
Osnovni problem je kako povezati prevedene objektne fajlove u jedinstveni izvršivi fajl i rešiti obraćanje promenljivoj ili funkciji u drugom fajlu. Linker ne zna apsolutnu poziciju simbola unutar fajla dok ne spoji sve fajlove pa tek onda može da razrešava.
Linker ne zna apsolutnu poziciju simbola unutar fajla dok ne spoji sve fajlove pa tek onda može da razrešava.


== 6. zadatak ==
== 6. zadatak ==
=== Postavka ===
=== Postavka ===
Objasniti kako se kod kontinualne alokacije memorije obezbeđuje zaštita memorijskog prostora drugih procesa od ilegalnog adresiranja jednog procesa.  
Objasniti kako se kod kontinualne alokacije memorije obezbeđuje zaštita memorijskog prostora drugih procesa od ilegalnog adresiranja jednog procesa.  


=== Rešenje ===
=== Rešenje ===
Ред 73: Ред 75:
== 7. zadatak ==
== 7. zadatak ==
=== Postavka ===
=== Postavka ===
U nekom sistemu sa straničnom organizacijom virtuelne memorije virtuelna i fizička adresa su 32-bitne, adresibilna jedinica je bajt, a stranica je veličine 64 KB. PMT je organizovana u dva nivoa i jedan ulaz u PMT oba nivoa zauzima po jednu 32-bitnu reč. PMT oba nivoa su iste veličine. Koliko ukupno zauzimaju PMT za proces koji je alocirao samo svoju prvu i poslednju stranicu?
U nekom sistemu sa straničnom organizacijom virtuelne memorije virtuelna i fizička adresa su 32-bitne, adresibilna jedinica je bajt, a stranica je veličine 64 KB. PMT je organizovana u dva nivoa i jedan ulaz u PMT oba nivoa zauzima po jednu 32-bitnu reč. PMT oba nivoa su iste veličine. Koliko ukupno zauzimaju PMT za proces koji je alocirao samo svoju prvu i poslednju stranicu?  


=== Rešenje ===
=== Rešenje ===
<math> 2^8 \cdot 4B + 2 \cdot 2^8 \cdot 4B = 3KB</math>
<math>2^8 \cdot 4B + 2 \cdot 2^8 \cdot 4B = 3KB</math>


== 8. zadatak ==
== 8. zadatak ==
Ред 89: Ред 91:
== 9. zadatak ==
== 9. zadatak ==
=== Postavka ===
=== Postavka ===
Neki fajl sistem koristi dve vrste ključeva za fajlove, deljene i ekskluzivne, i fajlove zaključava prilikom otvaranja fajla, u zavisnosti od najavljenog načina korišćenja fajla. Procesi A, B, C i D izvršavaju sistemske pozive otvaranja i zatvaranja istog fajla u sledećem redosledu (neki proces izvršava poziv zatvaranja fajla samo ako ga je uspešno otvorio):
Neki fajl sistem koristi dve vrste ključeva za fajlove, deljene i ekskluzivne, i fajlove zaključava prilikom otvaranja fajla, u zavisnosti od najavljenog načina korišćenja fajla. Procesi A, B, C i D izvršavaju sistemske pozive otvaranja i zatvaranja istog fajla u sledećem redosledu (neki proces izvršava poziv zatvaranja fajla samo ako ga je uspešno otvorio):
#A: open(READ)
# A: open(READ)
#B: open(WRITE)
# B: open(WRITE)
#C: open(READ)
# C: open(READ)
#A: close
# A: close
#C: close
# C: close
#D: open(WRITE)
# D: open(WRITE)


=== Rešenje ===
=== Rešenje ===
Ред 102: Ред 104:
== 10. zadatak ==
== 10. zadatak ==
=== Postavka ===
=== Postavka ===
Koliko pristupa blokovima na disku treba izvršiti za pristup ''n''-tom logičkom bloku sadržaja fajla ako je alokacija fajla
Koliko pristupa blokovima na disku treba izvršiti za pristup ''n''-tom logičkom bloku sadržaja fajla ako je alokacija fajla  
# indeksna, pri čemu je indeks fajla uvek u dva nivoa, a na blok sa indeksom prvog nivoa ukazuje polje u FCB,  
# indeksna, pri čemu je indeks fajla uvek u dva nivoa, a na blok sa indeksom prvog nivoa ukazuje polje u FCB,  
# ulančana lista, pri čemu je glava liste u FCB? FCB fajla je u memoriji.  
# ulančana lista, pri čemu je glava liste u FCB? FCB fajla je u memoriji.  



Верзија на датум 19. јул 2022. у 18:29

Zadaci na stranici predmeta.

1. zadatak

Postavka

Ukratko objasniti značenje pojmova multiprogramiranje i multiprocesiranje.

Rešenje

Videti zadatak iz januarskog roka 2014.

2. zadatak

Postavka

Korišćenjem standardnih bibliotečnih funkcija setjmp() i longjmp() implementirati funkciju void yield(jmp_buf old, jmp_buf new) koja vrši promenu konteksta procesora.

Rešenje

void yield(jmp_buf old, jmp_buf new) {
    if (setjmp(old) == 0) {
        longjmp(new, 1);
    }
}

3. zadatak

Postavka

Korišćenjem niti u školskom jezgru (klasa Thread) napisati kod koji konkurentno i rekurzivno obilazi binarno stablo tako što tekuća nit nastavlja da obilazi levo podstablo, a kreira novu nit koja će obići desno podstablo. Struktura Node {Node *left, *right} predstavlja čvor stabla

Rešenje

class MyThread : public Thread {
    public:
        MyThread(Node* root) {
            this->root = root;
            start();
        }
    protected:
        void run() {
            visit(root);
        }
    private:
        Node* root;
};

void visit(Node* root) {
    if (root->right) {
        new MyThread(root->right);
    }
    if (root->left) {
        visit(root->left);
    }
}

4. zadatak

Postavka

Korišćenjem standardnih brojačkih semafora napisati kod za kontrolu kritične sekcije koju uporedo sme da izvršava najviše N procesa.

Rešenje

Videti zadatak iz julskog roka 2013.

5. zadatak

Postavka

Šta je osnovni razlog toga (osnovni problem koji se rešava time) što linker svoj posao obavlja u dva prolaza? Precizno i kratko objasniti.

Rešenje

Osnovni problem je kako povezati prevedene objektne fajlove u jedinstveni izvršivi fajl i rešiti obraćanje promenljivoj ili funkciji u drugom fajlu. Linker ne zna apsolutnu poziciju simbola unutar fajla dok ne spoji sve fajlove pa tek onda može da razrešava.

6. zadatak

Postavka

Objasniti kako se kod kontinualne alokacije memorije obezbeđuje zaštita memorijskog prostora drugih procesa od ilegalnog adresiranja jednog procesa.

Rešenje

Zaštita memorijskog prostora drugih procesa od ilegalnog adresiranja jednog procesa kod kontinualne alokacije se obezbeđuje limit registrom. U ovaj registar procesora OS upisuje vrednost prilikom promene konteksta.

7. zadatak

Postavka

U nekom sistemu sa straničnom organizacijom virtuelne memorije virtuelna i fizička adresa su 32-bitne, adresibilna jedinica je bajt, a stranica je veličine 64 KB. PMT je organizovana u dva nivoa i jedan ulaz u PMT oba nivoa zauzima po jednu 32-bitnu reč. PMT oba nivoa su iste veličine. Koliko ukupno zauzimaju PMT za proces koji je alocirao samo svoju prvu i poslednju stranicu?

Rešenje

8. zadatak

Postavka

Ukratko objasniti tehniku dvostrukog baferisanja.

Rešenje

Koristi se kod sprege uređaja ili tokova kontrole koji su jako različiti po brzini transfera ili jedinici prenosa. Uvode se 2 bafera.

U prvoj fazi bafer A je ulazni bafer, bafer za proizvođača, a bafer B je izlazni bafer, bafer za potrošača. Kada oba učesnika završe fazu punjenja tj. pražnjenja svog bafera, baferi A i B menjaju uloge.

9. zadatak

Postavka

Neki fajl sistem koristi dve vrste ključeva za fajlove, deljene i ekskluzivne, i fajlove zaključava prilikom otvaranja fajla, u zavisnosti od najavljenog načina korišćenja fajla. Procesi A, B, C i D izvršavaju sistemske pozive otvaranja i zatvaranja istog fajla u sledećem redosledu (neki proces izvršava poziv zatvaranja fajla samo ako ga je uspešno otvorio):

  1. A: open(READ)
  2. B: open(WRITE)
  3. C: open(READ)
  4. A: close
  5. C: close
  6. D: open(WRITE)

Rešenje

Operacija 2. će se izvršiti neuspešno, a ostale uspešno.

10. zadatak

Postavka

Koliko pristupa blokovima na disku treba izvršiti za pristup n-tom logičkom bloku sadržaja fajla ako je alokacija fajla

  1. indeksna, pri čemu je indeks fajla uvek u dva nivoa, a na blok sa indeksom prvog nivoa ukazuje polje u FCB,
  2. ulančana lista, pri čemu je glava liste u FCB? FCB fajla je u memoriji.

Rešenje

  1. 3
  2. n