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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(јануар 2014)
 
м (Rešenje već postoji)
 
(Нису приказане 2 међуизмене 2 корисника)
Ред 13: Ред 13:
== 2. zadatak ==
== 2. zadatak ==
=== Postavka ===
=== Postavka ===
Korišćenjem funkcija <code>setjmp()</code> i <code>longjmp()</code> iz standardne C biblioteke, realizovati operaciju <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.  
Korišćenjem funkcija <code>setjmp()</code> i <code>longjmp()</code> iz standardne C biblioteke, realizovati operaciju <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.  


=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
void yield(jump_buf old, jump_buf new) {
void yield(jump_buf old, jump_buf new) {
if(setjmp(old) == 0) {
    if(setjmp(old) == 0) {
longjmp(new, 1);
        longjmp(new, 1);
}
    }
}
}
</syntaxhighlight>
</syntaxhighlight>
Ред 30: Ред 30:
=== Rešenje ===
=== Rešenje ===
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
public class Main() {
public class Main {
public static void main(string[] args) {
    public static void main(String[] args) {
int n = Integer.ParseInt(args[0]);
        int n = Integer.parseInt(args[0]);
for(int i = 0; i < n; i++) {
        for (int i = 0; i < n; i++) {
Thread thread = new Thread() {
            Thread thread = new Thread() {
@Override
                @Override
public void run() {
                public void run() {
try {
                    try {
while(!isInterrupted) {}
                        while(!Thread.interrupted()) {}
} catch(InterruptedException e) {};
                    } catch(InterruptedException e) {};                  
}
                }
}
            }
thread.start();
            thread.start();
}
        }  
}
    }
}
}
</syntaxhighlight>
</syntaxhighlight>
Ред 50: Ред 50:
== 4. zadatak ==
== 4. zadatak ==
=== Postavka ===
=== 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
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 ===
=== Rešenje ===
<syntaxhighlight lang="ada">
<syntaxhighlight lang="pascal">
var semA : Semaphore := 0;
var semA : Semaphore := 0;
semB : Semaphore := 0;
    semB : Semaphore := 0;
flag : boolean := false;
    flag : boolean := false;
   
process A:
process A:
begin
    begin
loop
        loop
...
            ...
flag = true;
            flag = true;
signal(semB);
            signal(semB);
wait(semA);
            wait(semA);
end
        end
    end
end A;
end A;


process B:
process B:
begin
    begin
loop
        loop
wait(semB);
            wait(semB);
signal(semA);
            signal(semA);
end
        end
    end
end B;
end B;
</syntaxhighlight>
</syntaxhighlight>
Ред 79: Ред 81:
== 5. zadatak ==
== 5. zadatak ==
=== Postavka ===
=== 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.
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 ===
=== Rešenje ===
Ред 89: Ред 91:


=== Rešenje ===
=== Rešenje ===
Interna fragmentacija predstavlja neiskorišćen deo memorije unutar alociranih blokova zbog ograničavanja dozvoljene veličine bloka.
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.
Kod kontinualne alokacije postoji problem eksterne ali ne i interne fragmentacije jer proces zauzima tačno onoliko prostora koliko mu je potrebno.


== 7. zadatak ==
== 7. zadatak ==
=== Postavka ===
=== 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
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 ===
=== Rešenje ===
Ред 101: Ред 102:
== 8. zadatak ==
== 8. zadatak ==
=== Postavka ===
=== Postavka ===
Kojom tehnikom se može blokovski orijentisani ulazni uređaj koristiti kao znakovno orijentisani ulazni tok? Kratko objasniti kako.  
Kojom tehnikom se može blokovski orijentisani ulazni uređaj koristiti kao znakovno orijentisani ulazni tok? Kratko objasniti kako.  


=== Rešenje ===
=== Rešenje ===
Ред 108: Ред 109:
== 9. zadatak ==
== 9. zadatak ==
=== Postavka ===
=== 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).  
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).  
<syntaxhighlight lang = "c">
<syntaxhighlight lang="c">
FHANDLE f1 = fopen(“x.doc”,read);  
FHANDLE f1 = fopen("x.doc", read);
FHANDLE f2 = fopen(“y.doc”,read|write);  
FHANDLE f2 = fopen("y.doc", read | write);
fread(f1,buffer1,n1);  
fread(f1, buffer1, n1);
fwrite(f1,buffer2,n2);
fwrite(f1, buffer2, n2);
fread(f2,buffer1,n1);
fread(f2, buffer1, n1);
fwrite(f2,buffer2,n2);
fwrite(f2, buffer2, n2);
</syntaxhighlight>
</syntaxhighlight>


=== Rešenje ===
=== Rešenje ===
{{delimično rešeno}}
Videti zadatak iz [[ОС1/Јун 2011#9. zadatak|junskog roka 2011]].


== 10. zadatak ==
== 10. zadatak ==
Ред 126: Ред 127:


=== Rešenje ===
=== Rešenje ===
{{delimično rešeno}}
Prvi slobodan blok sadrži broj slobodnih blokova i pokazivač na sledeći.


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

Тренутна верзија на датум 19. јул 2022. у 19:03

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.