OS1/Jun 2021
1. zadatak
Postavka
Šta je sistemski poziv, a šta sistemski program?
Rešenje
Sistemski poziv je određena funkcionalnost koju operativni sistem pruža korisničkim programima. Korisnički programi mogu pozvati sistemski poziv, često korišćenjem mehanizma softverskih prekida, kako bi od operativnog sistema zatražili neke osnovne usluge kojima najčešće iz korisničkog režima i nemaju pristup. Primer sistemskog poziva bi bio fork()
na Unix-like sistemima.
Sistemski program je program koji obavlja osnovne operacije sa korisničkim sistemom, na primer brisanje fajlova (rm
na Unix-like sistemima).
2. zadatak
Postavka
Šta su nedostaci organizacije memorije sa particijama?
Rešenje
- Pojavljuje se interna fragmentacija, jer ako procesu ne treba ceo svoj memorijski prostor onda je rezervisani deo prostora koji taj proces ne koristi bespotrebno bačen.
- Balansira se između veličine adresnog prostora jednog procesa i ukupnog broja procesa.
- Stepen multiprogramiranja (broj aktivnih procesa koji su u memoriji i koji se mogu uporedo izvršavati) je ograničen brojem particija.
3. zadatak
Postavka
Korisnik nekog računara radi u veb pregledaču (web browser) u kom je otvorio veliki broj kartica (tab) u kojima pregleda različite sajtove. Primetio je da mu se računar ponaša neobično, da sporo reaguje na akcije (ima veliko vreme odziva), da sporo prikazuje sadržaj stranica itd.
- Precizno objasniti zašto se ovo dešava.
- Korisnik je dalje primetio da kada zatvori većinu kartica i ostavi svega dve-tri, računar se ne ponaša ništa bolje. Ali kada ugasi ceo pregledač, računar se ponovo ponaša valjano. Precizno objasniti uzrok oba ova ponšaanja[sic].
Rešenje
- Veb pregledači obično za svaki tab pokrenu odvojenu nit, tako da se sa više tabova češće dešava promena konteksta. Pored toga, veće je zauzeće memorije, i može da se dešava da se sve stranice u fizičkom adresnom prostoru potroše pa mora da se radi zamena stranica, što zahteva spore operacije upisa i čitanja sa spoljašnje memorije i više promašaja keša, a može doći i do batrganja.
- Moguće je da pretraživač ne oslobodi sve resurse koje je zauzeo, pa se gašenjem tabova ne oslobodi korišćena memorija. Kada se ugasi ceo proces, operativni sistem će osloboditi sve resurse koje je proces koristio pa će moći da nastavi sa normalnijim radom.
4. 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.
Rešenje
int main(int argc, char* argv[]) {
if (argc < 2) {
// Korisnička greška.
return -1;
}
pid_t pid = fork();
if (pid < 0) {
// Nije uspeo fork().
return -2;
} else if (pid == 0) {
char* args[] = {argv[1]};
execlp(argv[1], args);
// Nije uspeo execlp().
return -3;
}
return 0;
}
5. 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:
- A: upisuje vrednost u deljene promenljive
x
iy
, a zatim čeka da proces B upiše zbirx
iy
u promenljivuz
čiju vrednost onda ispisuje na standardni izlaz; - B: čeka da proces A upiše vrednosti u deljene promenljive
x
iy
, zatim ove dve vrednosti sabira i zbir upisuje u deljenu promenljivuz
.
Rešenje
#include <iostream>
Semaphore waitA(0);
Semaphore waitB(0);
class A : public Thread {
public:
virtual void run() {
while (true) {
x = 1;
y = 2;
waitA.signal();
waitB.wait();
std::cout << z << std::endl;
}
}
};
class B : public Thread {
public:
virtual void run() {
while (true) {
waitA.wait();
z = x + y;
waitB.signal();
}
}
};
int main(void) {
A a;
B b;
a.start();
b.start();
a.join();
b.join();
return 0;
}
6. 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
Tehnikom spooling se nedeljevi uređaj može učiniti virtuelno deljivim, i klasičan primer takvog uređaja je štampač.
7. 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
Maksimalna veličina fajla se dostiže kada svi ulazi u indeks prvog nivoa pokazuju na indekse drugog nivoa, a svi indeksi drugog nivoa pokazuju na zauzete blokove. Indeksi prvog i drugog nivoa su veličine jednog bloka, tako da se broj ulaza u indeksu dobija deljenjem veličine bloka () i veličine ulaza (): . To znači da je moguće adresirati indeksa drugog nivoa, i iz svakog indeksa drugog nivoa adresirati blokova, a u svakom bloku ima , tako da je krajnja maksimalna veličina jednaka .