ОС1/Јун 2019
1. zadatak
Postavka
Šta se smatra distribuiranim računarskim sistemom? Navesti dva primera ovakvog sistema.
Rešenje
Distribuiranim računarskim sistemom se smatra računarski sistem u kom učestvuju više procesora koji komuniciraju preko mreže i svaki od njih ima svoju operativnu memoriju. Primeri ovakvog sistema bi bili LAN i WAN mreže.
2. zadatak
Postavka
Korišćenjem standardnih bibliotečnih operacija setjmp
i longjmp
, implementirati operaciju signal na binarnom semaforu koji je realizovan klasom Event
poput one u školskom jezgru.
Rešenje
U funkciji dispatch()
mogu da se koriste pomenute funkcije za promenu konteksta:
void dispatch() {
if (setjmp(running->context) == 0) {
Scheduler::put(running);
running = Scheduler::get();
longjmp(running->context, 1);
}
}
Event::signal()
implementacija sa promenom konteksta bi onda izgledala:
void Event::signal() {
Thread* currBlocked = blocked.get();
if (currBlocked) {
Scheduler::put(currBlocked);
dispatch();
} else {
value = 1;
}
}
3. zadatak
Postavka
Korišćenjem sistemskog poziva thread_create
koji kreira novu nit nad zadatom funkcijom, dostavljajući joj dati argument (potpis dat dole), napisati funkciju sum
koja kreira nit koja će sabrati sve elemente zadatog niza zadate dužine i rezultat upisati na traženo mesto; u slučaju greške ove funkcije vraćaju negativnu vrednost.
int thread_create (void(*fun)(void*), void* arg);
int sum (int array[], size_t size, long* result);
Rešenje
struct SumContext {
int* array;
size_t size;
long* result;
};
void wrapper(void* context) {
SumContext* ctx = (SumContext*) context;
long result = 0;
for (size_t i = 0; i < ctx->size; ++i) {
result += ctx->array[i];
}
*ctx->result = result;
delete context;
}
int sum(int array[], size_t size, long* result) {
SumContext* context = new SumContext;
if (context == NULL) {
return -1;
}
context->array = array;
context->size = size;
context->result = result;
return thread_create(wrapper, context);
}
4. zadatak
Postavka
Dva procesa pristupaju kritičnoj sekciji. Dat je presudokod jednog od njih, koji bi trebalo da obezbedi međusobno isključenje uposlenim čekanjem (kod drugog procesa izgleda analogno). Da li ovo rešenje obezbeđuje međusobno isključenje? Da li ima neki problem (ako ima, koji)?
process P1
begin
loop
while flag2 = true do null end;
flag1 := true;
<critical section>
flag1 := false;
<non-critical section>
end
end P1;
Rešenje
Može da se desi da oba procesa prvo provere tuđi i prođu proveru pa onda oba postave svoj flag
, čime će oba završiti u kritičnoj sekciji.
5. zadatak
Postavka
Šta je DLL? Šta je osnovni motiv za njegovo korišćenje?
Rešenje
Dynamic Link Library (DLL) je format fajla sa izvršnim kodom koji se učitava u program prilikom njegovog pokretanja nakon što se pročita iz fajl sistema, za razliku od statičkih biblioteka čiji se sadržaj ugrađuje u sam kod programa. Osnovni motiv za njegovo korišćenje je to da više procesa može da koristi isti kod iz istog fajla umesto da svaki drži svoju kopiju tog koda. Ovo daje više prednosti:
- Može da se ažurira DLL odvojeno od samih programa koji ga koriste, u slučaju bagova pri implementaciji (u suprotnom bi svaki program morao odvojeno da se ažurira)
- Operativni sistem može čuva jednu kopiju ovog koda u operativnoj memoriji i da mehanizmom virtuelne memorije koristi tu kopiju u svim procesima u kojima je potrebna
- Smanjuje se zauzeće izvršnih programa na disku
6. zadatak
Postavka
Navesti i ukratko objasniti probleme kontinualne alokacije memorije.
Rešenje
Problemi kontinualne alokacije memorije su interna i eksterna fragmentacija, koji se odnose na to da pri alociranju ostaju previše mali segmenti memorije nealocirani koji se ne mogu nizašta iskoristiti. Interna fragmentacija jeste kada se ti fragmenti nalaze unutar memorijskog prostora jednog procesa, dok je eksterna kada se ti fragmenti nalaze van procesa.
7. zadatak
Postavka
Prilikom preslikavanja virtuelne adrese, procesor je generisao izuzetak zbog pokušaja pristupa virtuelnoj adresi za koju je preslikavanje nemoguće (page fault). Operativni sistem potom gasi taj proces. Precizno objasniti zašto.
Rešenje
Proces je pokušao da pristupi memoriji za koju nije pozvao odgovarajući sistemski poziv kako bi mu se obezbedila alokacija, ili mu je taj zahtev odbijen. Takođe je moguće da se ovo desi prilikom dereferenciranja pokazivača na null u nekim operativnim sistemima.
8. zadatak
Postavka
Objasniti šta je sinhroni (blokirajući), a šta asinhroni (neblokirajući) poziv usluge vezane za ulazno-izlaznu operaciju.
Rešenje
Sinhroni poziv usluge je onaj koji blokira proces od daljeg izvršavanja dok se ulazno/izlazna operacija ne završi u potpunosti, i ne dozvoljava korisniku da radi nešto drugo u svom programu tom prilikom. Asinhroni poziv usluge je onaj koji odmah vraća kontrolu pozivaocu, pa on može da odluči kada da reaguje na rezultat tog poziva.
9. zadatak
Postavka
Detaljan prikaz sadržaja nekog direktorijuma na sistemu Linux (komanda ls -l
) je sledeći:
$ ls -l drwxr--r-- 1 fred editors 4096 drafts -rw-r--r-- 1 fred editors 30405 edition -r-xr-xr-x 1 fred editors 8460 edit
U ovom prikazu, u s liniji izlaza, vlasnik je fred
, a grupa kojoj fajl pripada je editors
.
- Da li će korisnik koji je član grupe
editors
smeti da obriše fajledition
? - Da li će korisnik koji nije član grupe
editors
smeti da izvrši fajledit
?
Rešenje
- Neće, jer on ima samo dozvole za čitanje tog fajla.
- Hoće, jer je svima dozvoljeno izvršavanje tog fajla.
10. zadatak
Postavka
Navesti i objasniti dva načina na koje se može povećati maksimalna veličina sadržaja fajla kod indeksirane alokacije u odnosu na varijantu u kojoj je indeks u samo jednom bloku na disku.
Rešenje
- Indeks može da se ulanča u više blokova, tako da kraj svakog indeksa pokazuje na blok sa sledećim indeksom.
- Indeks može da se organizuje u više nivoa, tako da ulazi indeksa prvog nivoa pokazuju na blokove sa indeksima drugog nivoa.