<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%A11%2F%D0%88%D1%83%D0%BD_2019</id>
	<title>ОС1/Јун 2019 - Историја измена</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%A11%2F%D0%88%D1%83%D0%BD_2019"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BD_2019&amp;action=history"/>
	<updated>2026-06-04T08:15:53Z</updated>
	<subtitle>Историја измена ове странице на пројекту</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BD_2019&amp;diff=2648&amp;oldid=prev</id>
		<title>KockaAdmiralac: Moja rešenja junskog roka 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BD_2019&amp;diff=2648&amp;oldid=prev"/>
		<updated>2021-07-06T22:18:17Z</updated>

		<summary type="html">&lt;p&gt;Moja rešenja junskog roka 2019&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2019/jun/Jun%202019.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta se smatra distribuiranim računarskim sistemom? Navesti dva primera ovakvog sistema.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Distribuiranim računarskim sistemom se smatra računarski sistem u kom učestvuju više procesora koji komuniciraju preko mreže i svaki od njih ima svoju operativnu memoriju. Primeri ovakvog sistema bi bili LAN i WAN mreže.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem standardnih bibliotečnih operacija &amp;lt;code&amp;gt;setjmp&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;longjmp&amp;lt;/code&amp;gt;, implementirati operaciju &amp;#039;&amp;#039;signal&amp;#039;&amp;#039; na binarnom semaforu koji je realizovan klasom &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt; poput one u školskom jezgru.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U funkciji &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; mogu da se koriste pomenute funkcije za promenu konteksta:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void dispatch() {&lt;br /&gt;
    if (setjmp(running-&amp;gt;context) == 0) {&lt;br /&gt;
        Scheduler::put(running);&lt;br /&gt;
        running = Scheduler::get();&lt;br /&gt;
        longjmp(running-&amp;gt;context, 1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Event::signal()&amp;lt;/code&amp;gt; implementacija sa promenom konteksta bi onda izgledala:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void Event::signal() {&lt;br /&gt;
    Thread* currBlocked = blocked.get();&lt;br /&gt;
    if (currBlocked) {&lt;br /&gt;
        Scheduler::put(currBlocked);&lt;br /&gt;
        dispatch();&lt;br /&gt;
    } else {&lt;br /&gt;
        value = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem sistemskog poziva &amp;lt;code&amp;gt;thread_create&amp;lt;/code&amp;gt; koji kreira novu nit nad zadatom funkcijom, dostavljajući joj dati argument (potpis dat dole), napisati funkciju &amp;lt;code&amp;gt;sum&amp;lt;/code&amp;gt; koja kreira nit koja će sabrati sve elemente zadatog niza zadate dužine i rezultat upisati na traženo mesto; u slučaju greške ove funkcije vraćaju negativnu vrednost.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int thread_create (void(*fun)(void*), void* arg);&lt;br /&gt;
int sum (int array[], size_t size, long* result);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct SumContext {&lt;br /&gt;
    int* array;&lt;br /&gt;
    size_t size;&lt;br /&gt;
    long* result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void wrapper(void* context) {&lt;br /&gt;
    SumContext* ctx = (SumContext*) context;&lt;br /&gt;
    long result = 0;&lt;br /&gt;
    for (size_t i = 0; i &amp;lt; ctx-&amp;gt;size; ++i) {&lt;br /&gt;
        result += ctx-&amp;gt;array[i];&lt;br /&gt;
    }&lt;br /&gt;
    *ctx-&amp;gt;result = result;&lt;br /&gt;
    delete context;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int sum(int array[], size_t size, long* result) {&lt;br /&gt;
    SumContext* context = new SumContext;&lt;br /&gt;
    if (context == NULL) {&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    context-&amp;gt;array = array;&lt;br /&gt;
    context-&amp;gt;size = size;&lt;br /&gt;
    context-&amp;gt;result = result;&lt;br /&gt;
    return thread_create(wrapper, context);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dva procesa pristupaju kritičnoj sekciji. Dat je presudokod jednog od njih, koji bi trebalo da obezbedi međusobno isključenje uposlenim čekanjem (kod drugog procesa izgleda analogno). Da li ovo rešenje obezbeđuje međusobno isključenje? Da li ima neki problem (ako ima, koji)?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
process P1&lt;br /&gt;
begin&lt;br /&gt;
    loop&lt;br /&gt;
        while flag2 = true do null end;&lt;br /&gt;
        flag1 := true;&lt;br /&gt;
        &amp;lt;critical section&amp;gt;&lt;br /&gt;
        flag1 := false;&lt;br /&gt;
        &amp;lt;non-critical section&amp;gt;&lt;br /&gt;
    end&lt;br /&gt;
end P1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Može da se desi da oba procesa prvo provere tuđi i prođu proveru pa onda oba postave svoj &amp;lt;code&amp;gt;flag&amp;lt;/code&amp;gt;, čime će oba završiti u kritičnoj sekciji.&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je DLL? Šta je osnovni motiv za njegovo korišćenje?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;#039;&amp;#039;Dynamic Link Library&amp;#039;&amp;#039; (DLL) je format fajla sa izvršnim kodom koji se učitava u program prilikom njegovog pokretanja nakon što se pročita iz fajl sistema, za razliku od statičkih biblioteka čiji se sadržaj ugrađuje u sam kod programa. Osnovni motiv za njegovo korišćenje je to da više procesa može da koristi isti kod iz istog fajla umesto da svaki drži svoju kopiju tog koda. Ovo daje više prednosti:&lt;br /&gt;
# Može da se ažurira DLL odvojeno od samih programa koji ga koriste, u slučaju bagova pri implementaciji (u suprotnom bi svaki program morao odvojeno da se ažurira)&lt;br /&gt;
# Operativni sistem može čuva jednu kopiju ovog koda u operativnoj memoriji i da mehanizmom virtuelne memorije koristi tu kopiju u svim procesima u kojima je potrebna&lt;br /&gt;
# Smanjuje se zauzeće izvršnih programa na disku&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti i ukratko objasniti probleme kontinualne alokacije memorije.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Problemi kontinualne alokacije memorije su interna i eksterna fragmentacija, koji se odnose na to da pri alociranju ostaju previše mali segmenti memorije nealocirani koji se ne mogu nizašta iskoristiti. Interna fragmentacija jeste kada se ti fragmenti nalaze unutar memorijskog prostora jednog procesa, dok je eksterna kada se ti fragmenti nalaze van procesa.&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Prilikom preslikavanja virtuelne adrese, procesor je generisao izuzetak zbog pokušaja pristupa virtuelnoj adresi za koju je preslikavanje nemoguće (&amp;#039;&amp;#039;page fault&amp;#039;&amp;#039;). Operativni sistem potom gasi taj proces. Precizno objasniti zašto.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Proces je pokušao da pristupi memoriji za koju nije pozvao odgovarajući sistemski poziv kako bi mu se obezbedila alokacija, ili mu je taj zahtev odbijen. Takođe je moguće da se ovo desi prilikom dereferenciranja pokazivača na &amp;#039;&amp;#039;null&amp;#039;&amp;#039; u nekim operativnim sistemima.&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Objasniti šta je sinhroni (blokirajući), a šta asinhroni (neblokirajući) poziv usluge vezane za ulazno-izlaznu operaciju.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Sinhroni poziv usluge je onaj koji blokira proces od daljeg izvršavanja dok se ulazno/izlazna operacija ne završi u potpunosti, i ne dozvoljava korisniku da radi nešto drugo u svom programu tom prilikom. Asinhroni poziv usluge je onaj koji odmah vraća kontrolu pozivaocu, pa on može da odluči kada da reaguje na rezultat tog poziva.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Detaljan prikaz sadržaja nekog direktorijuma na sistemu Linux (komanda &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt;) je sledeći:&lt;br /&gt;
 $ ls -l&lt;br /&gt;
 drwxr--r-- 1 fred editors 4096  drafts&lt;br /&gt;
 -rw-r--r-- 1 fred editors 30405 edition&lt;br /&gt;
 -r-xr-xr-x 1 fred editors 8460  edit&lt;br /&gt;
U ovom prikazu, u s liniji izlaza, vlasnik je &amp;lt;code&amp;gt;fred&amp;lt;/code&amp;gt;, a grupa kojoj fajl pripada je &amp;lt;code&amp;gt;editors&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Da li će korisnik koji je član grupe &amp;lt;code&amp;gt;editors&amp;lt;/code&amp;gt; smeti da obriše fajl &amp;lt;code&amp;gt;edition&amp;lt;/code&amp;gt;?&lt;br /&gt;
# Da li će korisnik koji nije član grupe &amp;lt;code&amp;gt;editors&amp;lt;/code&amp;gt; smeti da izvrši fajl &amp;lt;code&amp;gt;edit&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
# Neće, jer on ima samo dozvole za čitanje tog fajla.&lt;br /&gt;
# Hoće, jer je svima dozvoljeno izvršavanje tog fajla.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti i objasniti dva načina na koje se može povećati maksimalna veličina sadržaja fajla kod indeksirane alokacije u odnosu na varijantu u kojoj je indeks u samo jednom bloku na disku.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
# Indeks može da se ulanča u više blokova, tako da kraj svakog indeksa pokazuje na blok sa sledećim indeksom.&lt;br /&gt;
# Indeks može da se organizuje u više nivoa, tako da ulazi indeksa prvog nivoa pokazuju na blokove sa indeksima drugog nivoa.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>KockaAdmiralac</name></author>
	</entry>
</feed>