OS1/Jun 2019

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

Zadaci na stranici predmeta.

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:

  1. 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)
  2. 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
  3. 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.

  1. Da li će korisnik koji je član grupe editors smeti da obriše fajl edition?
  2. Da li će korisnik koji nije član grupe editors smeti da izvrši fajl edit?

Rešenje

  1. Neće, jer on ima samo dozvole za čitanje tog fajla.
  2. 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

  1. Indeks može da se ulanča u više blokova, tako da kraj svakog indeksa pokazuje na blok sa sledećim indeksom.
  2. Indeks može da se organizuje u više nivoa, tako da ulazi indeksa prvog nivoa pokazuju na blokove sa indeksima drugog nivoa.