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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(средити 10. задатак)
 
 
(Нису приказане 3 међуизмене 2 корисника)
Ред 7: Ред 7:


=== Rešenje ===
=== Rešenje ===
Multiprocesni OS je OS koji podržava izvršavanje više procesa uporedo (nad istim procesorom).
Multiprocesni operativni sistem je operativni sistem koji podržava izvršavanje više procesa uporedo (nad istim procesorom).


Multiprocesorski sistem je računarski sistem sa više procesora koji imaju deljenu memoriju. Procesori mogu da pristupaju toj deljenoj memoriji preko zajedničke magistrale na koju su povezani.
Multiprocesorski sistem je računarski sistem sa više procesora koji imaju deljenu memoriju. Procesori mogu da pristupaju toj deljenoj memoriji preko zajedničke magistrale na koju su povezani.
Ред 16: Ред 16:


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang = "c">
Videti [[ОС1/Јануар 2013#2. zadatak|2. zadatak iz januarskog roka 2013. godine]].
Semaphore::wait() {
lock();
if(--val < 0) {
PCB* old = Thread::running->myPCB;
blocked.put(Thread::running);
Thread::running = Scheduler::get();
PCB* new = Thread::running->myPCB;
yield(old, new);
}
}
</syntaxhighlight>


== 3. zadatak ==
== 3. zadatak ==
=== Postavka ===
=== Postavka ===
Na jeziku C, korišćenjem sistemskih poziva <code>fork()</code> i <code>execlp()</code> za Unix, napisati program koji pokreće drugi program iz fajla čiji je naziv zadat kao parametar komandne linije prvog programa.
Na jeziku C, korišćenjem sistemskih poziva <code>fork()</code> i <code>execlp()</code> za Unix, napisati program koji pokreće drugi program iz fajla čiji je naziv zadat kao parametar komandne linije prvog programa.


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang = "c">
Videti [[ОС1/Јун 2021#4. zadatak|4. zadatak iz junskog roka 2021. godine]].
int main(int argc, char* argv[]) {
if(argc < 2)
return -1;
int pid = fork();
if(pid < 0)
return -2;
else if(pid == 0) {
execlp(argv[1]);
return -3;
}
else
wait(0);
return 0;
}
</syntaxhighlight>


== 4. zadatak ==
== 4. zadatak ==
=== Postavka ===
=== Postavka ===
Korišćenjem standardnih brojačkih semafora u školskom jezgru, na jeziku C++ napisati globalne deklaracije i inicijalizacije, kao i kod tela dve uporedne niti A i B koje ciklično rade sledeće:  
Korišćenjem standardnih brojačkih semafora u školskom jezgru, na jeziku C++ napisati globalne deklaracije i inicijalizacije, kao i kod tela dve uporedne niti A i B koje ciklično rade sledeće:  
 
* A: upisuje vrednost u deljene promenljive x i y, a zatim čeka da proces B upiše zbir x i y u promenljivu z čiju vrednost onda ispisuje na standardni izlaz;  
A: upisuje vrednost u deljene promenljive x i y, a zatim čeka da proces B upiše zbir x i y u promenljivu z čiju vrednost onda ispisuje na standardni izlaz;  
* B: čeka da proces A upiše vrednosti u deljene promenljive x i y, zatim ove dve vrednosti sabira i zbir upisuje u deljenu promenljivu z.  
 
B: čeka da proces A upiše vrednosti u deljene promenljive x i y, zatim ove dve vrednosti sabira i zbir upisuje u deljenu promenljivu z.  


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang = "c">
Videti [[ОС1/Јун 2021#5. zadatak|5. zadatak iz junskog roka 2021. godine]].
#include <iostream>
 
Semaphore semA(0), semB(0);
int x, y, z;
 
class A : public Thread {
protected:
void run() {
while(1) {
x = ...
y = ...
semB.signal();
semA.wait();
}
}
};
 
class B : public Thread {
protected:
void run() {
while(1) {
semB.wait();
z = x + y;
semA.signal();
}
}
};
</syntaxhighlight>


== 5. zadatak ==
== 5. zadatak ==
Ред 95: Ред 39:


=== Rešenje ===
=== Rešenje ===
U prvom prolazu linker analizira ulazne fajlove, veličinu njihovog binarnog sadržaja i pravi maou izvršivog fajla. U tabelu simbola unosi sve izvezene simbole iz objektnih fajlova za koje može da izračuna adresu u odnosu na ceo izvršivi fajl.
Videti rešenje [[ОС1/Јул 2017#5. zadatak|5. zadatka iz jula 2017. godine]].
U drugom prolazu linker generiše binarni kod i ujedno razrešava nerazrešena adresna polja mašinskih instrukcija na osnovu informacija o adresama u koje se premeštaju simboli iz tabele simbola.


== 6. zadatak ==
== 6. zadatak ==
=== Postavka ===
=== Postavka ===
Navesti najmanje tri sličnosti (npr. zajednički zahtevi, ograničenja ili problemi) između kontinualne alokacije memorije i segmentne alokacije memorije procesa.
Navesti najmanje tri sličnosti (npr. zajednički zahtevi, ograničenja ili problemi) između kontinualne alokacije memorije i segmentne alokacije memorije procesa.


=== Rešenje ===
=== Rešenje ===
# OS mora da organizuje i održava strukturu podataka za evidenciju slobodnih fragmenata
# Operativni sistem mora da organizuje i održava strukturu podataka za evidenciju slobodnih fragmenata
# OS mora da sprovodi neku od tehnika dinamičke alokacije
# Operativni sistem mora da sprovodi neku od tehnika dinamičke alokacije
# problem eksterne fragmentacije
# Problem eksterne fragmentacije


== 7. zadatak ==
== 7. zadatak ==
=== Postavka ===
=== Postavka ===
Kojom tehnikom se nedeljivi uređaj može učiniti virtuelno deljivim? Navesti klasičan primer takvog uređaja za koji se najčešće primenjuje ova tehnika.  
Kojom tehnikom se nedeljivi uređaj može učiniti virtuelno deljivim? Navesti klasičan primer takvog uređaja za koji se najčešće primenjuje ova tehnika.


=== Rešenje ===
=== Rešenje ===
Spooling-om. Klasičan primer je štampač.
Videti [[ОС1/Јун 2021#6. zadatak|6. zadatak iz junskog roka 2021. godine]].


== 8. zadatak ==
== 8. zadatak ==
=== Postavka ===
=== Postavka ===
U fajl podsistemu nekog operativnog sistema ne vodi se tabela otvorenih fajlova za svaki proces, već postoji samo jedna globalna tabela otvorenih fajlova za ceo sistem. Drugim rečima, ne postoji nikakva informacija o upotrebi otvorenog fajla lokalna (privatna) za pojedinačni proces, već su sve takve informacije globalno deljene. Da li pojam pokazivača trenutne lokacije (kurzora) za čitanje/upis u fajl ima smisla čuvati u globalnoj tabeli otvorenih fajlova i zašto?
U fajl podsistemu nekog operativnog sistema ne vodi se tabela otvorenih fajlova za svaki proces, već postoji samo jedna globalna tabela otvorenih fajlova za ceo sistem. Drugim rečima, ne postoji nikakva informacija o upotrebi otvorenog fajla lokalna (privatna) za pojedinačni proces, već su sve takve informacije globalno deljene. Da li pojam pokazivača trenutne lokacije (kurzora) za čitanje/upis u fajl ima smisla čuvati u globalnoj tabeli otvorenih fajlova i zašto?


=== Rešenje ===
=== Rešenje ===
{{delimično rešeno}}
Ne, jer više različitih procesa mogu imati različitu vrednost kurzora.


== 9. zadatak ==
== 9. zadatak ==
=== Postavka ===
=== Postavka ===
Dati procenu kompleksnosti datih operacija sa direktorijumom u odnosu na broj postojećih fajlova n u direktorijumu, za navedene implementacije direktorijuma, ukoliko u slučaju hash tabele nema nijedne kolizije.
Dati procenu kompleksnosti datih operacija sa direktorijumom u odnosu na broj postojećih fajlova ''n'' u direktorijumu, za navedene implementacije direktorijuma, ukoliko u slučaju hash tabele nema nijedne kolizije.


=== Rešenje ===
=== Rešenje ===
{{delimično rešeno}}
{| class="wikitable"
|-
!
! Hash tabela sa dvostrukom ulančanim listama za rešavanje kolizije
! Dvostruko ulančana lista sa pokazivačima na glavu i rep liste
|-
| Pronalaženje ulaza sa datim imenom
| O(1)
| O(n)
|-
| Dodavanje novog ulaza sa jedinstvenim imenom (ne računajući proveru jedinstvenosti imena)
| O(1)
| O(1)
|}


== 10. zadatak ==
== 10. zadatak ==
=== Postavka ===
=== Postavka ===
Neki fajl sistem koristi indeksirani pristup alokaciji fajlova sa indeksima u dva nivoa, blokom veličine 256KB i 64-bitnim adresama fizičkih blokova. Kolika je maksimalna veličina fajla u ovom sistemu?  
Neki fajl sistem koristi indeksirani pristup alokaciji fajlova sa indeksima u dva nivoa, blokom veličine 256KB i 64-bitnim adresama fizičkih blokova. Kolika je maksimalna veličina fajla u ovom sistemu?  


=== Rešenje ===
=== Rešenje ===
Broj ulaza: 256KB / 8B = 2^15
* Broj ulaza: <math>\frac{256KB}{8B} = 2^{15}</math>
 
* Maksimalna veličina fajla: <math>2^{15} \cdot 2^{15} \cdot 2^{18} = 2^{48}</math>
Maksimalna veličina fajla: 2^15 * 2^15 * 2^18 = 2^48


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

Тренутна верзија на датум 11. септембар 2023. у 20:51

Zadaci na stranici predmeta.

1. zadatak

Postavka

Šta je multiprocesni, a šta multiprocesorski operativni sistem?

Rešenje

Multiprocesni operativni sistem je operativni sistem koji podržava izvršavanje više procesa uporedo (nad istim procesorom).

Multiprocesorski sistem je računarski sistem sa više procesora koji imaju deljenu memoriju. Procesori mogu da pristupaju toj deljenoj memoriji preko zajedničke magistrale na koju su povezani.

2. zadatak

Postavka

Korišćenjem operacije yield(PCB* old, PCB* new) koja čuva kontekst izvršavanja prvog i restaurira kontekst izvršavanja drugog datog procesa, implementirati operaciju wait na semaforu koji je realizovan klasom Semaphore poput one u školskom jezgru.

Rešenje

Videti 2. zadatak iz januarskog roka 2013. godine.

3. zadatak

Postavka

Na jeziku C, korišćenjem sistemskih poziva fork() i execlp() za Unix, napisati program koji pokreće drugi program iz fajla čiji je naziv zadat kao parametar komandne linije prvog programa.

Rešenje

Videti 4. zadatak iz junskog roka 2021. godine.

4. zadatak

Postavka

Korišćenjem standardnih brojačkih semafora u školskom jezgru, na jeziku C++ napisati globalne deklaracije i inicijalizacije, kao i kod tela dve uporedne niti A i B koje ciklično rade sledeće:

  • A: upisuje vrednost u deljene promenljive x i y, a zatim čeka da proces B upiše zbir x i y u promenljivu z čiju vrednost onda ispisuje na standardni izlaz;
  • B: čeka da proces A upiše vrednosti u deljene promenljive x i y, zatim ove dve vrednosti sabira i zbir upisuje u deljenu promenljivu z.

Rešenje

Videti 5. zadatak iz junskog roka 2021. godine.

5. zadatak

Postavka

Šta je osnovni razlog za to da linker obavlja zadatak u dva prolaza? Precizno objasniti.

Rešenje

Videti rešenje 5. zadatka iz jula 2017. godine.

6. zadatak

Postavka

Navesti najmanje tri sličnosti (npr. zajednički zahtevi, ograničenja ili problemi) između kontinualne alokacije memorije i segmentne alokacije memorije procesa.

Rešenje

  1. Operativni sistem mora da organizuje i održava strukturu podataka za evidenciju slobodnih fragmenata
  2. Operativni sistem mora da sprovodi neku od tehnika dinamičke alokacije
  3. Problem eksterne fragmentacije

7. zadatak

Postavka

Kojom tehnikom se nedeljivi uređaj može učiniti virtuelno deljivim? Navesti klasičan primer takvog uređaja za koji se najčešće primenjuje ova tehnika.

Rešenje

Videti 6. zadatak iz junskog roka 2021. godine.

8. zadatak

Postavka

U fajl podsistemu nekog operativnog sistema ne vodi se tabela otvorenih fajlova za svaki proces, već postoji samo jedna globalna tabela otvorenih fajlova za ceo sistem. Drugim rečima, ne postoji nikakva informacija o upotrebi otvorenog fajla lokalna (privatna) za pojedinačni proces, već su sve takve informacije globalno deljene. Da li pojam pokazivača trenutne lokacije (kurzora) za čitanje/upis u fajl ima smisla čuvati u globalnoj tabeli otvorenih fajlova i zašto?

Rešenje

Ne, jer više različitih procesa mogu imati različitu vrednost kurzora.

9. zadatak

Postavka

Dati procenu kompleksnosti datih operacija sa direktorijumom u odnosu na broj postojećih fajlova n u direktorijumu, za navedene implementacije direktorijuma, ukoliko u slučaju hash tabele nema nijedne kolizije.

Rešenje

Hash tabela sa dvostrukom ulančanim listama za rešavanje kolizije Dvostruko ulančana lista sa pokazivačima na glavu i rep liste
Pronalaženje ulaza sa datim imenom O(1) O(n)
Dodavanje novog ulaza sa jedinstvenim imenom (ne računajući proveru jedinstvenosti imena) O(1) O(1)

10. zadatak

Postavka

Neki fajl sistem koristi indeksirani pristup alokaciji fajlova sa indeksima u dva nivoa, blokom veličine 256KB i 64-bitnim adresama fizičkih blokova. Kolika je maksimalna veličina fajla u ovom sistemu?

Rešenje

  • Broj ulaza:
  • Maksimalna veličina fajla: