<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hm190261</id>
	<title>SI Wiki - Кориснички доприноси [sr]</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hm190261"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/wiki/%D0%9F%D0%BE%D1%81%D0%B5%D0%B1%D0%BD%D0%BE:%D0%94%D0%BE%D0%BF%D1%80%D0%B8%D0%BD%D0%BE%D1%81%D0%B8/Hm190261"/>
	<updated>2026-06-04T09:50:52Z</updated>
	<subtitle>Кориснички доприноси</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2013&amp;diff=2981</id>
		<title>ОС1/Јануар 2013</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2013&amp;diff=2981"/>
		<updated>2021-09-28T16:08:58Z</updated>

		<summary type="html">&lt;p&gt;Hm190261: /* Rešenje */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2013/jan/Jan%202013.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je to multiprocesorski sistem, a šta distribuirani sistem? Navesti po jedan primer svakog. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2012#1. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem funkcije &amp;lt;code&amp;gt;yield(jmp_buf old, jmp_buf new)&amp;lt;/code&amp;gt; koja čuva kontekst jedne niti i predaje procesor drugoj niti, realizovati operaciju &amp;lt;code&amp;gt;wait&amp;lt;/code&amp;gt; na brojačkom semaforu u školskom jezgru.&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;
void Semaphore::wait() {&lt;br /&gt;
	lock(lck);&lt;br /&gt;
	if(--val &amp;lt; 0) {&lt;br /&gt;
		jmp_buf old = Thread::running-&amp;gt;context;&lt;br /&gt;
		blocked.put(Thread::running);&lt;br /&gt;
		Thread::running = Scheduler::get();&lt;br /&gt;
		jmp_buf new = Thread::running-&amp;gt;context;&lt;br /&gt;
		yield(old, new);&lt;br /&gt;
	}&lt;br /&gt;
	unlock(lck);&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;
Navesti najmanje tri slučaja (povoda) u kojima proces gubi procesor i prelazi u red suspendovanih (blokiranih) i naznačiti da li se to dešava kao posledica sistemskog poziva tog procesa ili spoljašnjeg prekida&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Zbog operacije na sinhronizacionoj primitivi, tj. na semaforu ili događaju&lt;br /&gt;
#Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (join npr.)&lt;br /&gt;
# {{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Napisati kod koji realizuje Petersonov algoritam međusobnog isključenja dva uporedna procesa pomoću uposlenog čekanja.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
shared var turn : integer := 1, flag1, flag2 : boolean := false;&lt;br /&gt;
process P1&lt;br /&gt;
	begin&lt;br /&gt;
		loop&lt;br /&gt;
			flag1 = true; turn := 2; &lt;br /&gt;
			while flag2 and turn = 2 do null;&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			flag1 := false&lt;br /&gt;
			&amp;lt;non-critical&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;
			flag2 = true; turn := 1; &lt;br /&gt;
			while flag1 and turn = 1 do null;&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			flag2 := false&lt;br /&gt;
			&amp;lt;non-critical&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;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U čemu je razlika između tehnika dinamičkog učitavanja (&#039;&#039;dynamic loading&#039;&#039;) i preklopa (&#039;&#039;overlay&#039;&#039;)? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2011#5. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelni  adresni  prostor  sistema  je  8GB,  adresibilna jedinica  je  16-bitna reč,  a  virtuelni adresni  prostor  je  organizovan stranično sa stranicomveličine 32KB.  Fizički  adresni  prostor  je veličine 2GB.  Tabele  preslikavanja  stranica  su organizovaneu  dva  nivoa,  s  tim  da  tabela  prvog nivoa ima 2K ulaza. Prikazati logičku strukturu virtuelneadresei označiti širinu svakog polja. Označiti i podelu polja za broj stranice na polja zaindeksiranje PMT prvog i drugog nivoa.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
PA:frame(16),offset(14)&lt;br /&gt;
&lt;br /&gt;
VA:PMT1(11),PMT2(7),offset(14)&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem sa straničnom organizacijom memorije koristi tehniku &#039;&#039;copy on write&#039;&#039;.  Jedan proces je tek kreirao drugi proces pozivom &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt;. Ako novokreirani proces odmah po pokretanju izvrši operaciju upisa u memoriju, koji izuzetak će generisati procesor, &#039;&#039;page fault&#039;&#039;  ili  neki  drugi  i koji? Precizno objasniti zašto i kako.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE  arhitekturom  napisati program  koji  prenosi blok podataka zadate dužine sa zadate adrese na izlazni uređaj korišćenjem programiranog ulaza/izlaza sa prozivanjem (&#039;&#039;polling&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
main:	LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #0..1&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1..0&lt;br /&gt;
		JZ wait&lt;br /&gt;
		LD R0, [R1]&lt;br /&gt;
		ST [data], R0&lt;br /&gt;
		INC R1&lt;br /&gt;
		DEC R2&lt;br /&gt;
		JNZ wait&lt;br /&gt;
		ST [ctrl], #0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je osnovna svrha (motiv) postojanja operacije otvaranja fajla? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Svrha toga jeste da pri svakom obraćanju fajlu ne koristimo njegovo ime već koristimo ID u nizu fajl deskriptora koji sadrže pokazivače deskriptor u tabeli otvorenih fajlova koja sadrži pokazivač na FCB datog fajla.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti  i  objasniti  neku  tehniku  organizacije  strukture  podataka  za  rukovanje  slobodnim prostorom fajl sistema na disku, osim bit-vektora.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Slobodni blokovi se mogu grupisati tako da prvi blok u grupi slobodnih sadrži pokazivač na naredne slobodne blokove.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>Hm190261</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2013&amp;diff=2980</id>
		<title>ОС1/Јануар 2013</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2013&amp;diff=2980"/>
		<updated>2021-09-28T16:08:39Z</updated>

		<summary type="html">&lt;p&gt;Hm190261: /* Rešenje */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2013/jan/Jan%202013.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je to multiprocesorski sistem, a šta distribuirani sistem? Navesti po jedan primer svakog. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2012#1. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem funkcije &amp;lt;code&amp;gt;yield(jmp_buf old, jmp_buf new)&amp;lt;/code&amp;gt; koja čuva kontekst jedne niti i predaje procesor drugoj niti, realizovati operaciju &amp;lt;code&amp;gt;wait&amp;lt;/code&amp;gt; na brojačkom semaforu u školskom jezgru.&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;
void Semaphore::wait() {&lt;br /&gt;
	lock(lck);&lt;br /&gt;
	if(--val &amp;lt; 0) {&lt;br /&gt;
		jmp_buf old = Thread::running-&amp;gt;context;&lt;br /&gt;
		blocked.put(Thread::running);&lt;br /&gt;
		Thread::running = Scheduler::get();&lt;br /&gt;
		jmp_buf new = Thread::running-&amp;gt;context;&lt;br /&gt;
		yield(old, new);&lt;br /&gt;
	}&lt;br /&gt;
	unlock(lck);&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;
Navesti najmanje tri slučaja (povoda) u kojima proces gubi procesor i prelazi u red suspendovanih (blokiranih) i naznačiti da li se to dešava kao posledica sistemskog poziva tog procesa ili spoljašnjeg prekida&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Zbog operacije na sinhronizacionoj primitivi, tj. na semaforu ili događaju&lt;br /&gt;
#Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (join npr.)&lt;br /&gt;
# {{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Napisati kod koji realizuje Petersonov algoritam međusobnog isključenja dva uporedna procesa pomoću uposlenog čekanja.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
shared var turn : integer := 1, flag1, flag2 : boolean := false;&lt;br /&gt;
process P1&lt;br /&gt;
	begin&lt;br /&gt;
		loop&lt;br /&gt;
			flag1 = true; turn := 2; &lt;br /&gt;
			while flag2 and turn = 2 do null;&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			flag1 := false&lt;br /&gt;
			&amp;lt;non-critical&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;
			flag2 = true; turn := 1; &lt;br /&gt;
			while flag1 and turn = 1 do null;&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			flag2 := false&lt;br /&gt;
			&amp;lt;non-critical&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;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U čemu je razlika između tehnika dinamičkog učitavanja (&#039;&#039;dynamic loading&#039;&#039;) i preklopa (&#039;&#039;overlay&#039;&#039;)? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2011#5. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelni  adresni  prostor  sistema  je  8GB,  adresibilna jedinica  je  16-bitna reč,  a  virtuelni adresni  prostor  je  organizovan stranično sa stranicomveličine 32KB.  Fizički  adresni  prostor  je veličine 2GB.  Tabele  preslikavanja  stranica  su organizovaneu  dva  nivoa,  s  tim  da  tabela  prvog nivoa ima 2K ulaza. Prikazati logičku strukturu virtuelneadresei označiti širinu svakog polja. Označiti i podelu polja za broj stranice na polja zaindeksiranje PMT prvog i drugog nivoa.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
PA:frame(16),offset(14)&lt;br /&gt;
VA:PMT1(11),PMT2(7),offset(14)&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem sa straničnom organizacijom memorije koristi tehniku &#039;&#039;copy on write&#039;&#039;.  Jedan proces je tek kreirao drugi proces pozivom &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt;. Ako novokreirani proces odmah po pokretanju izvrši operaciju upisa u memoriju, koji izuzetak će generisati procesor, &#039;&#039;page fault&#039;&#039;  ili  neki  drugi  i koji? Precizno objasniti zašto i kako.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE  arhitekturom  napisati program  koji  prenosi blok podataka zadate dužine sa zadate adrese na izlazni uređaj korišćenjem programiranog ulaza/izlaza sa prozivanjem (&#039;&#039;polling&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
main:	LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #0..1&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1..0&lt;br /&gt;
		JZ wait&lt;br /&gt;
		LD R0, [R1]&lt;br /&gt;
		ST [data], R0&lt;br /&gt;
		INC R1&lt;br /&gt;
		DEC R2&lt;br /&gt;
		JNZ wait&lt;br /&gt;
		ST [ctrl], #0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je osnovna svrha (motiv) postojanja operacije otvaranja fajla? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Svrha toga jeste da pri svakom obraćanju fajlu ne koristimo njegovo ime već koristimo ID u nizu fajl deskriptora koji sadrže pokazivače deskriptor u tabeli otvorenih fajlova koja sadrži pokazivač na FCB datog fajla.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti  i  objasniti  neku  tehniku  organizacije  strukture  podataka  za  rukovanje  slobodnim prostorom fajl sistema na disku, osim bit-vektora.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Slobodni blokovi se mogu grupisati tako da prvi blok u grupi slobodnih sadrži pokazivač na naredne slobodne blokove.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>Hm190261</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2013&amp;diff=2979</id>
		<title>ОС1/Јануар 2013</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2013&amp;diff=2979"/>
		<updated>2021-09-28T16:07:46Z</updated>

		<summary type="html">&lt;p&gt;Hm190261: pogresan zadatak&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2013/jan/Jan%202013.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je to multiprocesorski sistem, a šta distribuirani sistem? Navesti po jedan primer svakog. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2012#1. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem funkcije &amp;lt;code&amp;gt;yield(jmp_buf old, jmp_buf new)&amp;lt;/code&amp;gt; koja čuva kontekst jedne niti i predaje procesor drugoj niti, realizovati operaciju &amp;lt;code&amp;gt;wait&amp;lt;/code&amp;gt; na brojačkom semaforu u školskom jezgru.&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;
void Semaphore::wait() {&lt;br /&gt;
	lock(lck);&lt;br /&gt;
	if(--val &amp;lt; 0) {&lt;br /&gt;
		jmp_buf old = Thread::running-&amp;gt;context;&lt;br /&gt;
		blocked.put(Thread::running);&lt;br /&gt;
		Thread::running = Scheduler::get();&lt;br /&gt;
		jmp_buf new = Thread::running-&amp;gt;context;&lt;br /&gt;
		yield(old, new);&lt;br /&gt;
	}&lt;br /&gt;
	unlock(lck);&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;
Navesti najmanje tri slučaja (povoda) u kojima proces gubi procesor i prelazi u red suspendovanih (blokiranih) i naznačiti da li se to dešava kao posledica sistemskog poziva tog procesa ili spoljašnjeg prekida&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Zbog operacije na sinhronizacionoj primitivi, tj. na semaforu ili događaju&lt;br /&gt;
#Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (join npr.)&lt;br /&gt;
# {{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Napisati kod koji realizuje Petersonov algoritam međusobnog isključenja dva uporedna procesa pomoću uposlenog čekanja.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
shared var turn : integer := 1, flag1, flag2 : boolean := false;&lt;br /&gt;
process P1&lt;br /&gt;
	begin&lt;br /&gt;
		loop&lt;br /&gt;
			flag1 = true; turn := 2; &lt;br /&gt;
			while flag2 and turn = 2 do null;&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			flag1 := false&lt;br /&gt;
			&amp;lt;non-critical&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;
			flag2 = true; turn := 1; &lt;br /&gt;
			while flag1 and turn = 1 do null;&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			flag2 := false&lt;br /&gt;
			&amp;lt;non-critical&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;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U čemu je razlika između tehnika dinamičkog učitavanja (&#039;&#039;dynamic loading&#039;&#039;) i preklopa (&#039;&#039;overlay&#039;&#039;)? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2011#5. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelni  adresni  prostor  sistema  je  8GB,  adresibilna jedinica  je  16-bitna reč,  a  virtuelni adresni  prostor  je  organizovan stranično sa stranicomveličine 32KB.  Fizički  adresni  prostor  je veličine 2GB.  Tabele  preslikavanja  stranica  su organizovaneu  dva  nivoa,  s  tim  da  tabela  prvog nivoa ima 2K ulaza. Prikazati logičku strukturu virtuelneadresei označiti širinu svakog polja. Označiti i podelu polja za broj stranice na polja zaindeksiranje PMT prvog i drugog nivoa.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem sa straničnom organizacijom memorije koristi tehniku &#039;&#039;copy on write&#039;&#039;.  Jedan proces je tek kreirao drugi proces pozivom &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt;. Ako novokreirani proces odmah po pokretanju izvrši operaciju upisa u memoriju, koji izuzetak će generisati procesor, &#039;&#039;page fault&#039;&#039;  ili  neki  drugi  i koji? Precizno objasniti zašto i kako.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE  arhitekturom  napisati program  koji  prenosi blok podataka zadate dužine sa zadate adrese na izlazni uređaj korišćenjem programiranog ulaza/izlaza sa prozivanjem (&#039;&#039;polling&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
main:	LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #0..1&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1..0&lt;br /&gt;
		JZ wait&lt;br /&gt;
		LD R0, [R1]&lt;br /&gt;
		ST [data], R0&lt;br /&gt;
		INC R1&lt;br /&gt;
		DEC R2&lt;br /&gt;
		JNZ wait&lt;br /&gt;
		ST [ctrl], #0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je osnovna svrha (motiv) postojanja operacije otvaranja fajla? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Svrha toga jeste da pri svakom obraćanju fajlu ne koristimo njegovo ime već koristimo ID u nizu fajl deskriptora koji sadrže pokazivače deskriptor u tabeli otvorenih fajlova koja sadrži pokazivač na FCB datog fajla.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti  i  objasniti  neku  tehniku  organizacije  strukture  podataka  za  rukovanje  slobodnim prostorom fajl sistema na disku, osim bit-vektora.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Slobodni blokovi se mogu grupisati tako da prvi blok u grupi slobodnih sadrži pokazivač na naredne slobodne blokove.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>Hm190261</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2013&amp;diff=2978</id>
		<title>ОС1/Јануар 2013</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2013&amp;diff=2978"/>
		<updated>2021-09-28T16:06:46Z</updated>

		<summary type="html">&lt;p&gt;Hm190261: /* Rešenje */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2013/jan/Jan%202013.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je to multiprocesorski sistem, a šta distribuirani sistem? Navesti po jedan primer svakog. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2012#1. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem funkcije &amp;lt;code&amp;gt;yield(jmp_buf old, jmp_buf new)&amp;lt;/code&amp;gt; koja čuva kontekst jedne niti i predaje procesor drugoj niti, realizovati operaciju &amp;lt;code&amp;gt;wait&amp;lt;/code&amp;gt; na brojačkom semaforu u školskom jezgru.&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;
void Semaphore::wait() {&lt;br /&gt;
	lock(lck);&lt;br /&gt;
	if(--val &amp;lt; 0) {&lt;br /&gt;
		jmp_buf old = Thread::running-&amp;gt;context;&lt;br /&gt;
		blocked.put(Thread::running);&lt;br /&gt;
		Thread::running = Scheduler::get();&lt;br /&gt;
		jmp_buf new = Thread::running-&amp;gt;context;&lt;br /&gt;
		yield(old, new);&lt;br /&gt;
	}&lt;br /&gt;
	unlock(lck);&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;
Navesti najmanje tri slučaja (povoda) u kojima proces gubi procesor i prelazi u red suspendovanih (blokiranih) i naznačiti da li se to dešava kao posledica sistemskog poziva tog procesa ili spoljašnjeg prekida&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Zbog operacije na sinhronizacionoj primitivi, tj. na semaforu ili događaju&lt;br /&gt;
#Prilikom eksplicitnog poziva metode koja čeka da se nit/niti završe (join npr.)&lt;br /&gt;
# {{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Napisati kod koji realizuje Petersonov algoritam međusobnog isključenja dva uporedna procesa pomoću uposlenog čekanja.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
shared var turn : integer := 1, flag1, flag2 : boolean := false;&lt;br /&gt;
process P1&lt;br /&gt;
	begin&lt;br /&gt;
		loop&lt;br /&gt;
			flag1 = true; turn := 2; &lt;br /&gt;
			while flag2 and turn = 2 do null;&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			flag1 := false&lt;br /&gt;
			&amp;lt;non-critical&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;
			flag2 = true; turn := 1; &lt;br /&gt;
			while flag1 and turn = 1 do null;&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			flag2 := false&lt;br /&gt;
			&amp;lt;non-critical&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;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U čemu je razlika između tehnika dinamičkog učitavanja (&#039;&#039;dynamic loading&#039;&#039;) i preklopa (&#039;&#039;overlay&#039;&#039;)? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2011#5. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelni  adresni  prostor  sistema  je  8GB,  adresibilna jedinica  je  16-bitna reč,  a  virtuelni adresni  prostor  je  organizovan stranično sa stranicomveličine 32KB.  Fizički  adresni  prostor  je veličine 2GB.  Tabele  preslikavanja  stranica  su organizovaneu  dva  nivoa,  s  tim  da  tabela  prvog nivoa ima 2K ulaza. Prikazati logičku strukturu virtuelneadresei označiti širinu svakog polja. Označiti i podelu polja za broj stranice na polja zaindeksiranje PMT prvog i drugog nivoa.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem sa straničnom organizacijom memorije koristi tehniku &#039;&#039;copy on write&#039;&#039;.  Jedan proces je tek kreirao drugi proces pozivom &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt;. Ako novokreirani proces odmah po pokretanju izvrši operaciju upisa u memoriju, koji izuzetak će generisati procesor, &#039;&#039;page fault&#039;&#039;  ili  neki  drugi  i koji? Precizno objasniti zašto i kako.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
PA : Frame(16),offset(13)&lt;br /&gt;
&lt;br /&gt;
VA : PMT1(11),PMT2(8), offset(13).&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE  arhitekturom  napisati program  koji  prenosi blok podataka zadate dužine sa zadate adrese na izlazni uređaj korišćenjem programiranog ulaza/izlaza sa prozivanjem (&#039;&#039;polling&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
main:	LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #0..1&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1..0&lt;br /&gt;
		JZ wait&lt;br /&gt;
		LD R0, [R1]&lt;br /&gt;
		ST [data], R0&lt;br /&gt;
		INC R1&lt;br /&gt;
		DEC R2&lt;br /&gt;
		JNZ wait&lt;br /&gt;
		ST [ctrl], #0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je osnovna svrha (motiv) postojanja operacije otvaranja fajla? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Svrha toga jeste da pri svakom obraćanju fajlu ne koristimo njegovo ime već koristimo ID u nizu fajl deskriptora koji sadrže pokazivače deskriptor u tabeli otvorenih fajlova koja sadrži pokazivač na FCB datog fajla.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti  i  objasniti  neku  tehniku  organizacije  strukture  podataka  za  rukovanje  slobodnim prostorom fajl sistema na disku, osim bit-vektora.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Slobodni blokovi se mogu grupisati tako da prvi blok u grupi slobodnih sadrži pokazivač na naredne slobodne blokove.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>Hm190261</name></author>
	</entry>
</feed>