<?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%BB_2011</id>
	<title>ОС1/Јул 2011 - Историја измена</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%BB_2011"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BB_2011&amp;action=history"/>
	<updated>2026-06-04T04:23:39Z</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%BB_2011&amp;diff=4616&amp;oldid=prev</id>
		<title>KockaAdmiralac: Formatiranje</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BB_2011&amp;diff=4616&amp;oldid=prev"/>
		<updated>2022-07-18T20:54:35Z</updated>

		<summary type="html">&lt;p&gt;Formatiranje&lt;/p&gt;
&lt;a href=&quot;https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BB_2011&amp;amp;diff=4616&amp;amp;oldid=2924&quot;&gt;Прикажи измене&lt;/a&gt;</summary>
		<author><name>KockaAdmiralac</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BB_2011&amp;diff=2924&amp;oldid=prev</id>
		<title>TopOfKeks: /* Rešenje */ formula</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BB_2011&amp;diff=2924&amp;oldid=prev"/>
		<updated>2021-09-20T11:44:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje: &lt;/span&gt; formula&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 20. септембар 2021. у 13:44&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l14&quot;&gt;Ред 14:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 14:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Rešenje ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Rešenje ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;1 + 2^N - 1 = 2^N = 2^2 = 4&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;math &amp;gt;&lt;/ins&gt;1 + 2^N - 1 = 2^N = 2^2 = 4 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 2. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 2. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>TopOfKeks</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BB_2011&amp;diff=2908&amp;oldid=prev</id>
		<title>Ivan Pešić: јул 2011, средити 1. задатак (&lt;math&gt; или како већ)</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BB_2011&amp;diff=2908&amp;oldid=prev"/>
		<updated>2021-09-19T11:24:00Z</updated>

		<summary type="html">&lt;p&gt;јул 2011, средити 1. задатак (&amp;lt;math&amp;gt; или како већ)&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/2011/jul/Jul%202011.doc Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ako se nad sledećim programom kreira jedan proces, koliko će ukupno procesa biti kreirano (uključujući i taj jedan početni), pod pretpostavkom da su svi sistemski pozivi uspeli?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const int N=2;&lt;br /&gt;
int pid[N];&lt;br /&gt;
void main {&lt;br /&gt;
	for (int i=0; i&amp;lt;N; i++) pid[i] = fork();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1 + 2^N - 1 = 2^N = 2^2 = 4&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je razlika između „teškog“ procesa i niti (&amp;#039;&amp;#039;thread&amp;#039;&amp;#039;)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Proces je teški proces odnosno jedno izvršavanje jednog programa sa sopstvenim adresnim prostorom odnosno memorijskim kontekstom, dok se svaki tok kontrole koji koristi taj adresni prostor zove nit, tj. laki proces.&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je problem sledeće implementacije kritične sekcije uposlenim čekanjem?&lt;br /&gt;
&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; (* Busy wait *)&lt;br /&gt;
    flag1 := true;&lt;br /&gt;
    &amp;lt;critical section&amp;gt;          (* Critical section *)&lt;br /&gt;
    flag1 := false;             (* Exit protocol *)&lt;br /&gt;
    &amp;lt;non-critical section&amp;gt;&lt;br /&gt;
  end&lt;br /&gt;
end P1;&lt;br /&gt;
&lt;br /&gt;
process P2&lt;br /&gt;
begin&lt;br /&gt;
  loop&lt;br /&gt;
    while flag1 = true do null end; (* Busy wait *)&lt;br /&gt;
    flag2 := true;&lt;br /&gt;
    &amp;lt;critical section&amp;gt;          (* Critical section *)&lt;br /&gt;
    flag2 := false;             (* Exit protocol *)&lt;br /&gt;
    &amp;lt;non-critical section&amp;gt;&lt;br /&gt;
  end&lt;br /&gt;
end P2;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Ne obezbeđuje međusobno isključenje, dolazi do utrkivanja.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na jeziku C++ implementirati klasu &amp;lt;code&amp;gt;BoundedBuffer&amp;lt;/code&amp;gt; koja realizuje ograničeni bafer elemenata tipa &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; kapaciteta &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; pomoću semafora.&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;
const int N = ...&lt;br /&gt;
class Data;&lt;br /&gt;
class BoundedBuffer {&lt;br /&gt;
public:&lt;br /&gt;
	BoundedBuffer();&lt;br /&gt;
	void append(Data*);&lt;br /&gt;
	Data* take();&lt;br /&gt;
private:&lt;br /&gt;
	Semaphore mutex, spaceAvailable, itemAvailable;&lt;br /&gt;
	Data* buffer[N];&lt;br /&gt;
	int head, tail;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
BoundedBuffer::BoundedBuffer() : mutex(1), spaceAvailable(N), itemAvailable(0), head(0), tail(0) {}&lt;br /&gt;
&lt;br /&gt;
void BoundedBuffer::append(Data* d) {&lt;br /&gt;
	spaceAvailable.wait();&lt;br /&gt;
	mutex.wait();&lt;br /&gt;
	buffer[tail] = d;&lt;br /&gt;
	tail = (tail + 1) % N;&lt;br /&gt;
	mutex.signal();&lt;br /&gt;
	itemAvailable.signal();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Data* BoundedBuffer::take() {&lt;br /&gt;
	itemAvailable.wait();&lt;br /&gt;
	mutex.wait();&lt;br /&gt;
	Data* d = buffer[head];&lt;br /&gt;
	head = (head + 1) % N;&lt;br /&gt;
	mutex.signal();&lt;br /&gt;
	spaceAvailable.signal();&lt;br /&gt;
	return d;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je osnovna razlika između tehnike dinamičkog učitavanja i tehnike preklopa (&amp;#039;&amp;#039;overlays&amp;#039;&amp;#039;)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Tehnikom dinamičkog učitavanja proces alocira memoriju i iz fajlova učitava delove samo ako su stvarno potrebni.&lt;br /&gt;
Tehnika preklopa podrazumeva da se moduli u kojima su grupisani programi i/ili podaci koji se koriste zajedno a u alternaciji sa drugim modulima dinamički učitavaju u memoriju i izbacuju iz nje na isto mesto, preklapajući se sa onim modulima sa kojima nisu potrebni istovremeno.&lt;br /&gt;
Razlike su u tome što:&lt;br /&gt;
#više modula se naizmenično učitava na isto mesto u virtuelnom adresnom prostoru procesa, preklapajući se&lt;br /&gt;
#modul može biti odsutan ne samo kada mu se prvi put pristupi, nego i kasnije, jer je na njegovo mesto učitan neki drugi modul, pa program o tome mora da vodi računa; program mora da vodi računa o tome koji je od preklopljenih modula trenutno učitan na datom mestu, kao i o tome da je pre pristupa određenom potprogramu/podatku modul u kome se on nalazi sigurno učitan, isto kao i kod dinamičkog učitavanja&lt;br /&gt;
#ako neki modul koji se preklapa sadrži podatke koji se menjaju, pre nego što se na njegovo mesto učita neki drugi modul, mora se sačuvati sadržaj izbačenog modula upisom u neki fajl, ako će taj modul kasnije biti ponovo upotrebljavan&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti zašto je kod segmentne organizacije virtuelne memorije obavezna provera prekoračenja granice segmenta prilikom svakog adresiranja, a kod stanične organizacije ta provera ne postoji.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Kod segmentne organizacije virtuelne memorije obavezno se proverava prekoračenje granice segmenta jer ako prelazi limit to znači da je proces adresirao virtuelnu adresu izvan deklarisanog segmenta.&lt;br /&gt;
Kod stranične organizacije virtuelni adresni prostor procesa je podeljen na stranice iste veličine a fizički okviri su iste veličine kao stranice.	&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U nekom sistemu postoje sledeći sistemski pozivi:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int async_write (char* buffer);&lt;br /&gt;
void wait (int request_id);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Operacija &amp;lt;code&amp;gt;async_write&amp;lt;/code&amp;gt; asinhrono zadaje operaciju izlaza datog niza znakova na neki izlazni uređaj i vraća interni sistemski identifikator tog zahteva (veći od 0), odnosno kod greške (manji od nula). Operacija wait suspenduje pozivajući proces sve dok operacija sa datim identifikatorom nije završena. Korišćenjem ovih sistemskih poziva, realizovati sinhroni izlaz: &amp;lt;code&amp;gt;int sync_write (char* buffer);&amp;lt;/code&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;
int sync_write (char* buffer) {&lt;br /&gt;
	int id = async_write(buffer);&lt;br /&gt;
	if(id &amp;lt; 0) return id;&lt;br /&gt;
	wait(id);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti kako se u Unix fajl sistemu definišu prava pristupa do fajla.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Po 3 bita (rwx) za vlasnika, grupu i ostale (ukupno 9 bitova) određuju prava pristupa do fajla.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti razlog zašto bi neki fajl sistem koristio klastere na disku različite veličine.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Zbog smanjenja interne fragmentacije.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti šta je inkrementalni, a šta totalni bekap (&amp;#039;&amp;#039;backup&amp;#039;&amp;#039;) fajl sistema?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Inkrementalni backup: backup-uju se samo izmenjeni fajlovi.&lt;br /&gt;
#Totalni backup: kopiraju se svi fajlovi iz jednog fajl sistema ili njegovog dela.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>Ivan Pešić</name></author>
	</entry>
</feed>