ОС1/Јун 2014 — разлика између измена
(→isto) |
м (Formatiranje) |
||
Ред 11: | Ред 11: | ||
== 2. zadatak == | == 2. zadatak == | ||
=== Postavka === | === Postavka === | ||
Korišćenjem standardnih bibliotečnih funkcija <code>setjmp()</code> i <code>longjmp()</code> implementirati funkciju < | 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) { | |||
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 | 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 | class MyThread : public Thread { | ||
public: | |||
MyThread(Node* root) { | |||
this->root = root; | |||
start(); | |||
} | |||
protected: | |||
void run() { | |||
visit(root); | |||
} | |||
private: | |||
Node* root; | |||
}; | }; | ||
void visit(Node* root) { | void visit(Node* root) { | ||
if (root->right) { | |||
new MyThread(root->right); | |||
} | |||
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 | 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 | 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 | 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 | Koliko pristupa blokovima na disku treba izvršiti za pristup ''n''-tom logičkom bloku sadržaja fajla ako je alokacija fajla | ||
# indeksna, | # 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
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):
- A: open(READ)
- B: open(WRITE)
- C: open(READ)
- A: close
- C: close
- 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
- 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.
Rešenje
- 3
- n