ОС1/Октобар 2013 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
 
(Нису приказане 2 међуизмене другог корисника)
Ред 7: Ред 7:


=== Rešenje ===
=== Rešenje ===
Kod multiprocesorskih sistema skup procesora ima deljenu operativnu memoriju, dok kod distribuiranog sistema nema zajedničke operativne memorije, već postoji mrežna komunikacija između procesora.
Videti [[ОС1/Јул 2012#1. zadatak|prvi zadatak iz julskog roka 2012. godine]].


== 2. zadatak ==
== 2. zadatak ==
=== Postavka ===
=== Postavka ===
Korišćenjem operacije <code>yield(jmp_buf old, jmp_buf new)</code> koja čuva kontekst niti čiji je <code>jmp_buf</code> dat kao prvi argument, oduzima joj procesor i restaurira kontekst niti čiji je <code>jmp_buf</code> dat kao drugi argument, kojoj predaje procesor, realizovati operaciju <code>Semaphore::wait()</code> u školskom jezgru.
Korišćenjem operacije <syntaxhighlight lang="c" inline>yield(jmp_buf old, jmp_buf new)</syntaxhighlight> koja čuva kontekst niti čiji je <code>jmp_buf</code> dat kao prvi argument, oduzima joj procesor i restaurira kontekst niti čiji je <code>jmp_buf</code> dat kao drugi argument, kojoj predaje procesor, realizovati operaciju <code>Semaphore::wait()</code> u školskom jezgru.


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang="c">
<syntaxhighlight lang="cpp">
Semaphore::wait() {
Semaphore::wait() {
lock();
    lock();
if(--val < 0) {
    if (--val < 0) {
jmp_buf old = Thread::running->context;
        jmp_buf old = Thread::running->context;
blocked.put(Thread::running);
        blocked.put(Thread::running);
Thread::running = Scheduler::get();
        Thread::running = Scheduler::get();
jmp_buf new = Thread::running->context;
        jmp_buf new = Thread::running->context;
yield(old, new);
        yield(old, new);
}
    }
unlock();
    unlock();
}
}
</syntaxhighlight>
</syntaxhighlight>
Ред 37: Ред 37:
== 4. zadatak ==
== 4. zadatak ==
=== Postavka ===
=== Postavka ===
Korišćenjem standardnih brojačkih semafora, napisati kod za inicijalizaciju i potrebnu sinhronizaciju kritične sekcije u koju može ući najviše ''N'' uporednih procesa.
Korišćenjem standardnih brojačkih semafora, napisati kod za inicijalizaciju i potrebnu sinhronizaciju kritične sekcije u koju može ući najviše ''N'' uporednih procesa.


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang="ada">
<syntaxhighlight lang="pascal">
var mutex : Semaphore := N;
var mutex : Semaphore := N;


process P:
process P:
begin
    begin
loop
        loop
wait(mutex);
            wait(mutex);
<critical>
            <critical>
signal(mutex);
            signal(mutex);
<non-critical>
            <non-critical>
end
        end
    end
end P;
end P;
</syntaxhighlight>
</syntaxhighlight>
Ред 66: Ред 67:


=== Rešenje ===
=== Rešenje ===
Best fit algoritam ima cilj da nakon alokacije ostane što manji slobodan fragment kako bi se smanjila eksterna fragmentacija.
''Best fit'' algoritam ima cilj da nakon alokacije ostane što manji slobodan fragment kako bi se smanjila eksterna fragmentacija.
Worst fit algoritam ima cilja da preostali slobodan fragment bude što upotrebljiviji, odnosno takav da se poveća šansa da se može upotrebiti za dalju alokaciju, tj. ostavlja najveći slobodan fragment nakon alokacije.
 
''Worst fit'' algoritam ima cilja da preostali slobodan fragment bude što upotrebljiviji, odnosno takav da se poveća šansa da se može upotrebiti za dalju alokaciju, tj. ostavlja najveći slobodan fragment nakon alokacije.


== 7. zadatak ==
== 7. zadatak ==
=== Postavka ===
=== Postavka ===
U nekom sistemu sa virtuelnom memorijom broj stranice u virtuelnoj adresi je veličine 48 bita. Da bi čuvanje PMT učinio izvodljivim, sistem koristi ''hash'' tabelu sa 64K ulaza za smešanje PMT svakog procesa. ''Hash'' funkcija je prosta modulo funkcija: ulaz u tabelu određuje se pomoću 16 najnižih bita broja stranice. U svakom ulazu ''hash'' tabele nalazi se 64-bitna glava ulančane liste zapisa za alocirane stranice koje se preslikavaju u taj ulaz. Svaki zapis sadrži viših 32 bita broja stranice, broj okvira u koji je ta stranica preslikana (32 bita, vrednost 0 označava da stranica ne može da se preslika) i pokazivač na sledeći zapis (64 bita, vrednost 0 označava kraj liste). Neki proces je alocirao 256 najnižih i 256 najviših stranica svog virtuelnog adresnog prostora. Koliko prostora (u bajtovima) ukupno zauzima PMT ovog procesa?  
U nekom sistemu sa virtuelnom memorijom broj stranice u virtuelnoj adresi je veličine 48 bita. Da bi čuvanje PMT učinio izvodljivim, sistem koristi ''hash'' tabelu sa 64K ulaza za smešanje PMT svakog procesa. ''Hash'' funkcija je prosta modulo funkcija: ulaz u tabelu određuje se pomoću 16 najnižih bita broja stranice. U svakom ulazu ''hash'' tabele nalazi se 64-bitna glava ulančane liste zapisa za alocirane stranice koje se preslikavaju u taj ulaz. Svaki zapis sadrži viših 32 bita broja stranice, broj okvira u koji je ta stranica preslikana (32 bita, vrednost 0 označava da stranica ne može da se preslika) i pokazivač na sledeći zapis (64 bita, vrednost 0 označava kraj liste). Neki proces je alocirao 256 najnižih i 256 najviših stranica svog virtuelnog adresnog prostora. Koliko prostora (u bajtovima) ukupno zauzima PMT ovog procesa?


=== Rešenje ===
=== Rešenje ===
{{delimično rešeno}}
Najnižih 256 će svi stati u prvi ulaz, tako da oni zauzimaju (32+32+64)*256 + 64 = 32832 bita. Najviši zauzimaju isto toliko, samo što svi staju u poslednji ulaz. Ukupno zauzima 2*32832 = 65664 bita, to jest 65664/8 = 8208B


== 8. zadatak ==
== 8. zadatak ==
=== Postavka ===
=== Postavka ===
U nekom sistemu podržan je samo asinhroni izlaz na izlazni uređaj pomoću sledeće funkcije
U nekom sistemu podržan je samo asinhroni izlaz na izlazni uređaj pomoću sledeće funkcije <syntaxhighlight lang="c" inline>IOReqID output (IODevID deviceID, IOReq* request);</syntaxhighlight> koja zadaje (asinhrono) izlaznu operaciju specifikovanu drugim argumentom na uređaju identifikovanom prvim argumentom. Ova funkcija odmah vraća kontrolu pozivaocu, uz identifikaciju zadate operacije (rezultat tipa <code>IOReqID</code> je veći od 0 u slučaju ispravno zadatog zahteva).
 
<code>IOReqID output (IODevID deviceID, IOReq* request);</code>


koja zadaje (asinhrono) izlaznu operaciju specifikovanu drugim argumentom na uređaju identifikovanom prvim argumentom. Ova funkcija odmah vraća kontrolu pozivaocu, uz identifikaciju  zadate  operacije  (rezultat  tipa  <code>IOReqID</code>  je  veći  od  0  u  slučaju  ispravno  zadatog  zahteva).
Funkcija <syntaxhighlight lang="c" inline>void ioWait (IOReqID);</syntaxhighlight> blokira pozivajući proces sve dok operacija identifikovana argumentom nije završena u potpunosti. Pomoću ovih funkcija realizovati funkciju koja, u odnosu na jedan argument, može zadati operaciju sinhrono ili asinhrono, prema želji pozivaoca.  
Funkcija  
 
<code>void ioWait (IOReqID);</code>  
 
blokira pozivajući proces sve dok operacija identifikovana argumentom nije završena u potpunosti. Pomoću ovih funkcija realizovati funkciju koja, u odnosu na jedan argument, može zadati operaciju sinhrono ili asinhrono, prema želji pozivaoca.  


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
IOReqID output_user(IODevID deviceID, IOReq* request, bool synchronous) {
IOReqID output_user(IODevID deviceID, IOReq* request, bool synchronous) {
IOReqID id = output(deviceID, request);
    IOReqID id = output(deviceID, request);
if(synchronous && id > 0) wait(id);
    if (synchronous && id > 0) {
return id;
        wait(id);
    }
    return id;
}
}
</syntaxhighlight>
</syntaxhighlight>
Ред 107: Ред 104:
== 10. zadatak ==
== 10. zadatak ==
=== Postavka ===
=== Postavka ===
Koja metoda alokacije fajlova je efikasnija za direktni pristup, ulančana ili indeksirana i zašto?
Koja metoda alokacije fajlova je efikasnija za direktni pristup, ulančana ili indeksirana i zašto?
 
=== Rešenje ===
=== Rešenje ===
Efikasnija je indeksirana; kod ulančane alokacije je efikasan sekvencijalan pristup, ali direktni pristup nekom bloku <b>n</b> podrazumeva pristup svim blokovima počev od prvog pa do njega. Jedna od najvecih pogodnosti indeksne alokacije je upravo direktni pristup, jer indeksna alokacija podrazumeva postojanje indeksnog bloka u kome se nalazi spisak brojeva blokova sa sadržajem fajla redom, koji omogućava vrlo efikasan direktan pristup.  
Efikasnija je indeksirana; kod ulančane alokacije je efikasan sekvencijalan pristup, ali direktni pristup nekom bloku <b>n</b> podrazumeva pristup svim blokovima počev od prvog pa do njega. Jedna od najvecih pogodnosti indeksne alokacije je upravo direktni pristup, jer indeksna alokacija podrazumeva postojanje indeksnog bloka u kome se nalazi spisak brojeva blokova sa sadržajem fajla redom, koji omogućava vrlo efikasan direktan pristup.  


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

Тренутна верзија на датум 9. септембар 2023. у 21:37

Zadaci na stranici predmeta.

1. zadatak

Postavka

Koja je razlika između multiprocesorskih i distribuiranih računarskih sistema?

Rešenje

Videti prvi zadatak iz julskog roka 2012. godine.

2. zadatak

Postavka

Korišćenjem operacije 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, realizovati operaciju Semaphore::wait() u školskom jezgru.

Rešenje

Semaphore::wait() {
    lock();
    if (--val < 0) {
        jmp_buf old = Thread::running->context;
        blocked.put(Thread::running);
        Thread::running = Scheduler::get();
        jmp_buf new = Thread::running->context;
        yield(old, new);
    }
    unlock();
}

3. zadatak

Postavka

Koja je razlika između (teškog) procesa i niti (thread)?

Rešenje

Teški proces je izvršavanje jednog programa sa sopstvenim adresnim prostorom dok se nitima, tj. lakim procesima zove svaki tok kontrole koji koristi taj adresni prostor.

4. zadatak

Postavka

Korišćenjem standardnih brojačkih semafora, napisati kod za inicijalizaciju i potrebnu sinhronizaciju kritične sekcije u koju može ući najviše N uporednih procesa.

Rešenje

var mutex : Semaphore := N;

process P:
    begin
        loop
            wait(mutex);
            <critical>
            signal(mutex);
            <non-critical>
        end
    end
end P;

5. zadatak

Postavka

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

Rešenje

Ne jer ako se ne nalazi u tabeli simbola znači da simbol nije definisan i ne dolazi do konflikta imena.

6. zadatak

Postavka

Koja je razlika između best fit i worst fit algoritma kontinualne alokacije memorije?

Rešenje

Best fit algoritam ima cilj da nakon alokacije ostane što manji slobodan fragment kako bi se smanjila eksterna fragmentacija.

Worst fit algoritam ima cilja da preostali slobodan fragment bude što upotrebljiviji, odnosno takav da se poveća šansa da se može upotrebiti za dalju alokaciju, tj. ostavlja najveći slobodan fragment nakon alokacije.

7. zadatak

Postavka

U nekom sistemu sa virtuelnom memorijom broj stranice u virtuelnoj adresi je veličine 48 bita. Da bi čuvanje PMT učinio izvodljivim, sistem koristi hash tabelu sa 64K ulaza za smešanje PMT svakog procesa. Hash funkcija je prosta modulo funkcija: ulaz u tabelu određuje se pomoću 16 najnižih bita broja stranice. U svakom ulazu hash tabele nalazi se 64-bitna glava ulančane liste zapisa za alocirane stranice koje se preslikavaju u taj ulaz. Svaki zapis sadrži viših 32 bita broja stranice, broj okvira u koji je ta stranica preslikana (32 bita, vrednost 0 označava da stranica ne može da se preslika) i pokazivač na sledeći zapis (64 bita, vrednost 0 označava kraj liste). Neki proces je alocirao 256 najnižih i 256 najviših stranica svog virtuelnog adresnog prostora. Koliko prostora (u bajtovima) ukupno zauzima PMT ovog procesa?

Rešenje

Najnižih 256 će svi stati u prvi ulaz, tako da oni zauzimaju (32+32+64)*256 + 64 = 32832 bita. Najviši zauzimaju isto toliko, samo što svi staju u poslednji ulaz. Ukupno zauzima 2*32832 = 65664 bita, to jest 65664/8 = 8208B

8. zadatak

Postavka

U nekom sistemu podržan je samo asinhroni izlaz na izlazni uređaj pomoću sledeće funkcije IOReqID output (IODevID deviceID, IOReq* request); koja zadaje (asinhrono) izlaznu operaciju specifikovanu drugim argumentom na uređaju identifikovanom prvim argumentom. Ova funkcija odmah vraća kontrolu pozivaocu, uz identifikaciju zadate operacije (rezultat tipa IOReqID je veći od 0 u slučaju ispravno zadatog zahteva).

Funkcija void ioWait (IOReqID); blokira pozivajući proces sve dok operacija identifikovana argumentom nije završena u potpunosti. Pomoću ovih funkcija realizovati funkciju koja, u odnosu na jedan argument, može zadati operaciju sinhrono ili asinhrono, prema želji pozivaoca.

Rešenje

IOReqID output_user(IODevID deviceID, IOReq* request, bool synchronous) {
    IOReqID id = output(deviceID, request);
    if (synchronous && id > 0) {
        wait(id);
    }
    return id;
}

9. zadatak

Postavka

Šta označava skraćenica FTP? Ukratko objasniti čemu služi ovaj protokol.

Rešenje

File Transfer Protocol - u razmeni fajlova učestvuju 2 računara. Jedan igra ulogu servera a drugi ulogu klijenta. Na oba računara se izvršavaju programi koji implementiraju ovaj protokol.

10. zadatak

Postavka

Koja metoda alokacije fajlova je efikasnija za direktni pristup, ulančana ili indeksirana i zašto?

Rešenje

Efikasnija je indeksirana; kod ulančane alokacije je efikasan sekvencijalan pristup, ali direktni pristup nekom bloku n podrazumeva pristup svim blokovima počev od prvog pa do njega. Jedna od najvecih pogodnosti indeksne alokacije je upravo direktni pristup, jer indeksna alokacija podrazumeva postojanje indeksnog bloka u kome se nalazi spisak brojeva blokova sa sadržajem fajla redom, koji omogućava vrlo efikasan direktan pristup.