OS1/Jul 2017

Izvor: SI Wiki
< ОС1
Datum izmene: 7. jul 2021. u 14:10; autor: Duke (razgovor | doprinosi) (dodata resenja, valjda dobra)
(razl) ← Starija izmena | Trenutna verzija (razl) | Novija izmena → (razl)
Pređi na navigaciju Pređi na pretragu

Zadaci sa stranice predmeta.

1. zadatak

Postavka

Šta je hard, a šta soft sistem za rad u realnom vremenu (real-time system)?

Rešenje

Tvrdi sistemi za rad u realnom vremenu su sistemu u kojima odziv mora da stigne u određenom vremenu (deadline). Prekoračenje može dovesti do rezličitih katastrofa. Meki sistemi za rad u realnom vremenu su sistemi kojima je rok bitan ali smeju ga prekoračiti dok god performanse ulaze u zadate okvire.

2. zadatak

Postavka

Objasniti značenje mašinske instrukcije tipa test_and_set i njenu upotrebu u jezgru operativnog sistema.

Rešenje

test_and_set je instrukcija koja omogućava sinhronizaciju na hardverskom nivou. Služi za međusobno isključenje izvršavanja na više procesora. Ona čita i vraća vrednost zadate memorijske lokacije a u tu lokaciju stavlja vrednost 1. Koristi se u implementaciji lock() funkcije.

3. zadatak

Postavka

Korišćenjem školskog jezgra napisati program koji u n uporednih niti izračunava kvadrat svakog elementa nekog celobrojnog niza (a[i]*=a[i]) veličine n*k, tako što svaka nit obrađuje kelemanata(jednu particiju niza).

Rešenje

class ArrThread : Thread{
    public:
        ArrThread(int* a, int s, int f): arr(a), start(s), finish(f) {}
        void run(){
            for (int i=start;i<finish;i++){
                arr[i] *= arr[i];
            }
        }
    private:
        int* arr;
        int start;
        int finish;
};
int main(){
    ArrThread *t[n];
    int start=0;
    for (int i=0;i<n;i++){
        t[i] = new ArrThread(array,start,start+k);
        start += k;
    }
    for (int i=0;i<n;i++){
        t[i]->waitToComplete();
        delete t[i];
    }
}

4. zadatak

Postavka

Implementirati Petersonov algoritam za međusobno isključenje kritičnih sekcija dva uporedna procesa.

Rešenje

shared var turn : integer := 1, flag1, flag2 : boolean := false;
process P1
begin
    loop
        flag1 := true; turn := 2;
        while flag2 and turn = 2 do null;
        <critical section>
        flag1 := false;
        <non-critical section>
    end
end P1;
process P2
begin
    loop
        flag2 := true; turn := 1;
        while flag1 and turn = 1 do null;
        <critical section>
        flag2 := false;
        <non-critical section>
    end
end P2;

5. zadatak

Postavka

Precizno objasniti zašto klasičan linker svoj posao obavlja u dva prolaza (a ne može samo ujednom). Obrazloženje ilustrovati primerom.

Rešenje

Linkerov zadatak je spojiti sve fajlove u jedan izvriš ali da bi to uradio, linker mora naći sve simbole koji se uvoze odnosno izvoze. U prvom prolazu analizira ulazne fajlove, veličinu njihovog binarnog sadržaja (prevoda), i pravi mapu exe fajla; osim toga, sakuplja infomacije iz tabela simbola obj fajlova i izgrađuje svoju tabelu simbola; u tu tabelu simbola unosi izvezene simbole iz obj fajlova, za koje odmah može da izračuna adresu u odnosu na ceo exe fajl. U drugom prolazu generiše binarni kod, i ujedno razrešava nerazrešena adresna polja mašinskih instrukcija na osnovu informacija o adresama u koje se preslikavaju simboli iz njegove tabele simbola Primer: Recimo da imamo dva objektna fajla, a.obj i b.obj. a.obj izvozi simbol f i uvozi simbol c. Linker ce prvo izvozni fajl dodati u tabelu f. b.obj uvozi simbol f i izvozi simbol c, pa ce linker u svojoj tabeli dodati simbol c. U drugom prolazu ce linker razresiti c polje u a.obj i polje f u b.obj.

6. zadatak

Postavka

Objasniti uslugu koju program očekuje od operativnog sistema ako koristi preklope(overlay).

Rešenje

Obaveza OS-a je samo da obezbedi uslugu (sistemski poziv) koji alocira deo (virtuelnog) adresnog prostora procesa, kao i uslugu kojom u dati prostor procesa učitava sadržaj iz nekog binarnog fajla i sadržaj iz memorije upisuje u neki fajl (uobičajene sistemske usluge za rad sa fajlovima); OS ne zna za šta se te usluge koriste, tj. ne zna da se one upotrebljavaju baš za dinamičko učitavanje i zamenu delova procesa

7. zadatak

Postavka

Virtuelni adresni prostor je veličine 1GB, organizovan je segmentno, sa maksimalnom veličinom segmenta od 4KB, adresibilna jedinica je bajt. Svi segmenti nekog procesa su stvarne veličine od po 2KB i u fizičku memoriju smešteni su odmah jedan iza drugog, pri čemu segment broj 0 počinje od fizičke adrese F000h. Prikazati logičku strukturu virtuelne adrese i izračunati u koju fizičku adresu se preslikava virtuelna adresa 2543h.

Rešenje

8. zadatak

Postavka

Objasniti kako se nedeljivi izlazni uređaj može učiniti (virtuelno) deljivim?

Rešenje

Jedan način da se ovo reši je tehnikom rezervacije uređaja. To je zapravo međusobno isključenje operacija sa ovakvim uređajem. Problem je što operacije sa uređajima mogu trajati dugo pa ti procesi mogu dugo i da čekaju. Rešenje jeste u tehnici koja se naziva spuling. Ovde kada neki proces zahteva korišćenje, OS otvara poseban fajl u kome se preusmeravaju sve izlazne operacije sa tim uređajem. Kada se završi, proces nastavlja da izvršava svoj tok, dok se fajl šalje posebnoj niti operativnog sistema, spuleru koja onda izvršava jedan po jedan fajl iz liste čekanja i njegov sadržaj šalje uređaju.

9. zadatak

Postavka

Navestii objasniti razlog zašto bi neki fajl sistem koristio klastere na disku različite veličine.

Rešenje

Način da se reči problem režijske potrošnje prostora za pokazivače je povećavanjem bloka ili alokacije više susednih blokova kao jedna jedinica alokacije, i to se naziva klaster.

10. zadatak

Postavka

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

Rešenje

2^45 B, odnosno 35 TB