ОС1/Јул 2017 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(dodata resenja, valjda dobra)
 
 
(Није приказано 8 међуизмена 3 корисника)
Ред 7: Ред 7:


=== Rešenje ===
=== 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.
Tvrdi sistemi za rad u realnom vremenu su sistemi 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 ==
== 2. zadatak ==
=== Postavka ===
=== Postavka ===
Objasniti značenje mašinske instrukcije tipa <code>test_and_set</code> i njenu upotrebu u jezgru operativnog sistema.
Objasniti značenje mašinske instrukcije tipa ''test-and-set'' i njenu upotrebu u jezgru operativnog sistema.


=== Rešenje ===
=== Rešenje ===
<code>test_and_set</code> 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.
<code>test_and_set</code> je instrukcija koja omogućava sinhronizaciju na hardverskom nivou. Služi za međusobno isključenje izvršavanja na više procesora. Ona atomično čita i vraća sadržaj zadate memorijske lokacije, i u tu lokaciju upisuje vrednost 1. Može da se koristi u implementaciji <code>lock()</code> funkcije.


== 3. zadatak ==
== 3. zadatak ==
=== Postavka ===
=== 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).
Korišćenjem školskog jezgra napisati program koji u ''n'' uporednih niti izračunava kvadrat svakog elementa nekog celobrojnog niza (<code>a[i]*=a[i]</code>)  veličine ''n*k'', tako što svaka nit obrađuje ''k'' elemanata<sup>[sic]</sup> (jednu particiju niza).


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang="c++">
<syntaxhighlight lang="c++">
class ArrThread : Thread{
class ArrThread : Thread {
     public:
     public:
         ArrThread(int* a, int s, int f): arr(a), start(s), finish(f) {}
         ArrThread(int* a, int s, int f): arr(a), start(s), finish(f) {}
         void run(){
    protected:
             for (int i=start;i<finish;i++){
         void run() {
             for (int i = start; i < finish; i++) {
                 arr[i] *= arr[i];
                 arr[i] *= arr[i];
             }
             }
Ред 35: Ред 36:
         int finish;
         int finish;
};
};
int main(){
 
     ArrThread *t[n];
int main() {
     int start=0;
     ArrThread* t[n];
     for (int i=0;i<n;i++){
     int start = 0;
         t[i] = new ArrThread(array,start,start+k);
     for (int i = 0; i < n; i++) {
         t[i] = new ArrThread(array, start, start + k);
         start += k;
         start += k;
     }
     }
     for (int i=0;i<n;i++){
     for (int i = 0; i < n; i++) {
        t[i]->waitToComplete();
         delete t[i];
         delete t[i];
     }
     }
    return 0;
}
}
</syntaxhighlight>
</syntaxhighlight>


== 4. zadatak ==
== 4. zadatak ==
=== Postavka ===
Videti zadatak iz [[ОС1/Јул 2019#4. zadatak|julskog roka 2019]].
Implementirati Petersonov algoritam za međusobno isključenje kritičnih sekcija dva uporedna procesa.


=== Rešenje ===
<syntaxhighlight lang="milo">
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;
</syntaxhighlight>
== 5. zadatak ==
== 5. zadatak ==
=== Postavka ===
=== Postavka ===
Ред 82: Ред 59:


=== Rešenje ===
=== 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.
Linkerov zadatak je da spoji sve fajlove u jedan izvršni, 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''.
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 spaja sve te fajlove u jedan, 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, <code>a.obj</code> i <code>b.obj</code>. <code>a.obj</code> izvozi simbol <code>f</code> i uvozi simbol <code>c</code>. Linker će iz prvog objektnog fajla dodati u tabelu simbol <code>f</code>. <code>b.obj</code> uvozi simbol <code>f</code> i izvozi simbol <code>c</code>, pa će linker u svoju tabelu dodati simbol <code>c</code>. U drugom prolazu će linker razrešiti <code>c</code> polje u <code>a.obj</code> i polje <code>f</code> u <code>b.obj</code>.


== 6. zadatak ==
== 6. zadatak ==
=== Postavka ===
=== Postavka ===
Objasniti uslugu koju program očekuje od operativnog sistema ako koristi preklope(overlay).
Objasniti uslugu koju program očekuje od operativnog sistema ako koristi preklope (''overlay'').


=== Rešenje ===
=== 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
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 ==
== 7. zadatak ==
=== Postavka ===
=== 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.
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 ===
=== Rešenje ===
VA(30) : seg(18) offset(12)


Virtuelna adresa 2543h tj. 0010 | 0101 0100 0011b pripada 2. segmentu koji počinje od fizičke adrese 10000h i završava na 10800h.
Fizička adresa se dobija sabiranjem bazne adrese u fizičkom adresnom prostoru i offsetnog dela virtuelne adrese:
PA = 10000h + 543h = 10543h.


== 8. zadatak ==
== 8. zadatak ==
=== Postavka ===
Videti zadatak iz [[ОС1/Јун 2021#6. zadatak|junskog roka 2021. godine]].
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 ==
== 9. zadatak ==
=== Postavka ===
Videti zadatak iz [[ОС1/Јун 2020#7. zadatak|junskog roka 2020. godine]].
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 ==
== 10. zadatak ==
=== Postavka ===
=== 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?
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 ===
=== Rešenje ===
2^45 B, odnosno 35 TB
Pošto je blok veličine <math>2^{19}B</math> a adresa <math>2^3B</math> to znači da u jedan indeks može da stane <math>2^{16}</math> adresa blokova. Konačan broj bajtova koji je na ovaj način mogu adresirati jeste <math>2^{16} \cdot 2^{16} \cdot 2^{19} = 2^{51}B = 2PB</math>.
 


[[Категорија:Рокови]]
[[Категорија:Рокови]]
[[Категорија:ОС1]]
[[Категорија:ОС1]]

Тренутна верзија на датум 26. август 2023. у 19:58

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 sistemi 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 atomično čita i vraća sadržaj zadate memorijske lokacije, i u tu lokaciju upisuje vrednost 1. Može da se koristi 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 k elemanata[sic] (jednu particiju niza).

Rešenje

class ArrThread : Thread {
    public:
        ArrThread(int* a, int s, int f): arr(a), start(s), finish(f) {}
    protected:
        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++) {
        delete t[i];
    }
    return 0;
}

4. zadatak

Videti zadatak iz julskog roka 2019.

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 da spoji sve fajlove u jedan izvršni, 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 spaja sve te fajlove u jedan, 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 će iz prvog objektnog fajla dodati u tabelu simbol f. b.obj uvozi simbol f i izvozi simbol c, pa će linker u svoju tabelu dodati simbol c. U drugom prolazu će linker razrešiti 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

VA(30) : seg(18) offset(12)

Virtuelna adresa 2543h tj. 0010 | 0101 0100 0011b pripada 2. segmentu koji počinje od fizičke adrese 10000h i završava na 10800h.

Fizička adresa se dobija sabiranjem bazne adrese u fizičkom adresnom prostoru i offsetnog dela virtuelne adrese: PA = 10000h + 543h = 10543h.

8. zadatak

Videti zadatak iz junskog roka 2021. godine.

9. zadatak

Videti zadatak iz junskog roka 2020. godine.

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

Pošto je blok veličine a adresa to znači da u jedan indeks može da stane adresa blokova. Konačan broj bajtova koji je na ovaj način mogu adresirati jeste .