ОС1/Јануар 2014

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Zadaci na stranici predmeta.

1. zadatak

Postavka

Šta označava termin multiprogramiranje, a šta termin multiprocesiranje?

Rešenje

Multiprogramiranje označava izvršavanje uporedo više procesa na jednom procesoru. Dok jedan proces čeka na izvršavanje I/O operacije, procesor izvršava druge poslove.

Multiprocesiranje označava izvršavanje procesa fizički paralelno na više procesora.

2. zadatak

Postavka

Korišćenjem funkcija setjmp() i longjmp() iz standardne C biblioteke, realizovati operaciju yield(jmp_buf old, jmp_buf new) koja čuva kontekst niti čiji je jmp_buf dat kao prvi argument, oduzima joj procesor i restaurira kontekst niti čiji je jmp_buf dat kao drugi argument, kojoj predaje procesor.

Rešenje

void yield(jump_buf old, jump_buf new) {
    if(setjmp(old) == 0) {
        longjmp(new, 1);
    }
}

3. zadatak

Postavka

Na programskom jeziku Java implementirati nit (thread) koja izvršava praznu petlju sve dok joj se pozivom operacije ne kaže da stane. Napisati i kod koji pravi i pokreće N takvih uporednih niti.

Rešenje

public class Main {
    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);
        for (int i = 0; i < n; i++) {
            Thread thread = new Thread() {
                @Override
                public void run() {
                    try {
                        while(!Thread.interrupted()) {}
                    } catch(InterruptedException e) {};                    
                }
            }
            thread.start();
        }    
    }
}

4. zadatak

Postavka

Korišćenjem standardnih brojačkih semafora napisati kod za uslovnu sinhronizaciju dva uporedna procesa od kojih jedan ispunjava neki logički uslov, a drugi ne sme da prođe određenu tačku ako taj uslov nije ispunjen.

Rešenje

var semA : Semaphore := 0;
    semB : Semaphore := 0;
    flag : boolean := false;
    
process A:
    begin
        loop
            ...
            flag = true;
            signal(semB);
            wait(semA);
        end
    end
end A;

process B:
    begin
        loop
            wait(semB);
            signal(semA);
        end
    end
end B;

5. zadatak

Postavka

Ako tokom svog prvog prolaza linker u svojoj tabeli pronađe prethodno definisan simbol koji je definisan u tekućem fajlu (izvozi se), da li će prijaviti grešku? Obrazložiti.

Rešenje

Da, jer se već nalazi u tabeli simbola i dolazi do konflikta imena.

6. zadatak

Postavka

Šta je interna fragmentacija kod alokacije memorije? Da li je ona moguća kod kontinualne alokacije memorije?

Rešenje

Interna fragmentacija predstavlja neiskorišćen deo memorije unutar alociranih blokova zbog ograničavanja dozvoljene veličine bloka. Kod kontinualne alokacije postoji problem eksterne ali ne i interne fragmentacije jer proces zauzima tačno onoliko prostora koliko mu je potrebno.

7. zadatak

Postavka

U nekom sistemu sa straničnom organizacijom virtuelne memorije virtuelna adresa je 64-bitna. Posmatraju se dva (teorijska) granična slučaja: a) neki proces koristi ceo svoj virtuelni prostor; b) neki proces koristi samo nekoliko susednih stranica svog virtuelnog prostora. Koji pristup organizacije PMT zauzima manje memorije za PMT za svaki od ova dva slučaja: PMT organizovana u jednom nivou (linearno) ili PMT organizovana u više nivoa? Kratko obrazložiti

Rešenje

Manje prostora bi zauzimala PMT organizovana u jednom nivou jer bi organizovanje u dva nivoa izazvalo alociranje cele tabele prvog i zatim određen broj tabela 2. nivoa.

8. zadatak

Postavka

Kojom tehnikom se može blokovski orijentisani ulazni uređaj koristiti kao znakovno orijentisani ulazni tok? Kratko objasniti kako.

Rešenje

Tehnikom baferisanja: poseban proces koji kontroliše uređaj. Sa uređaja se uzima blok po blok podataka i stavlja u bafer. Korisnik uzima znak po znak kao znakovno orijentisani ulazni tok.

9. zadatak

Postavka

Neki proces izvršava redom sledeće sistemske pozive. Pod pretpostavkom da korisnik u čije ime se izvršava ovaj proces ima pravo pristupa do oba fajla i na čitanje i na upis, i da oba poziva za otvaranje fajlova uspevaju, navesti koji od preostalih poziva će biti uspešan, a koji neuspešan (upisati na liniji pored poziva).

FHANDLE f1 = fopen("x.doc", read);
FHANDLE f2 = fopen("y.doc", read | write);
fread(f1, buffer1, n1);
fwrite(f1, buffer2, n2);
fread(f2, buffer1, n1);
fwrite(f2, buffer2, n2);

Rešenje

Videti zadatak iz junskog roka 2011.

10. zadatak

Postavka

Predložiti i ukratko objasniti neki način vođenja evidencije slobodnih blokova na disku koji ne koristi nikakav dodatni prostor za tu evidenciju (osim tih slobodnih blokova).

Rešenje

Prvi slobodan blok sadrži broj slobodnih blokova i pokazivač na sledeći.