<?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=IvnSvc</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=IvnSvc"/>
	<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/IvnSvc"/>
	<updated>2026-06-04T06:44:29Z</updated>
	<subtitle>Кориснички доприноси</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A1%D0%90%D0%91/%D0%9A2%D0%9D_2023&amp;diff=6420</id>
		<title>САБ/К2Н 2023</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A1%D0%90%D0%91/%D0%9A2%D0%9D_2023&amp;diff=6420"/>
		<updated>2023-07-30T17:54:39Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Надокнада К2 из САБ 2023, датум 14 јун&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Поставка ===&lt;br /&gt;
У систему болничког лечења прате се информације о лекарима који раде у болници и прегледима који су ти лекари обавили. Сваки пацијент може имати највише један картон у свакој од болница. Сваки картон се повремено оверава када се уписује назив послодавца преко кога је пацијент осигуран. У случајевима када је то потребно пацијенти могу бити хоспитализовани, тј. примљени на болничко лечење (датум отпуштања се попуњава тек након што се лечење заврши, а до тада је NULL). &amp;lt;br&amp;gt;&lt;br /&gt;
Одговарајућа шема базе је:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mesto(&amp;lt;u&amp;gt;IDMes&amp;lt;/u&amp;gt;, Naziv)&lt;br /&gt;
|-&lt;br /&gt;
|Bolnica (&amp;lt;u&amp;gt;IDBol&amp;lt;/u&amp;gt;, Naziv, Kapacitet, Iskoriscenost, IDMes)&lt;br /&gt;
|-&lt;br /&gt;
|Pacijent(&amp;lt;u&amp;gt;IDPac&amp;lt;/u&amp;gt;, Ime, JMBG, GodineStarosti, IDMes)&lt;br /&gt;
|-&lt;br /&gt;
|Lekar(&amp;lt;u&amp;gt;IDLek&amp;lt;/u&amp;gt;, Ime, JMBG, Specijalizacija)&lt;br /&gt;
|-&lt;br /&gt;
|Karton(&amp;lt;u&amp;gt;IdKar&amp;lt;/u&amp;gt;, IDPac, IDBol)&lt;br /&gt;
|-&lt;br /&gt;
|Pregled(&amp;lt;u&amp;gt;IdPre&amp;lt;/u&amp;gt;, Datum, ObjektivniNalaz, DIjagnoza, IDKar, IdLek)&lt;br /&gt;
|-&lt;br /&gt;
|Hospitalizacija(&amp;lt;u&amp;gt;IDHos&amp;lt;/u&amp;gt;, DatumPri, DatumOtp, Dijagnoza, KlinickaSlika, IDPac, IDBol)&lt;br /&gt;
|-&lt;br /&gt;
|Overa(&amp;lt;u&amp;gt;IDKar&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;RedBr&amp;lt;/u&amp;gt;, DatumOd, NazivPoslodavca)&lt;br /&gt;
|-&lt;br /&gt;
|Radi(&amp;lt;u&amp;gt;IDLek&amp;lt;/u&amp;gt;, IDBol)&lt;br /&gt;
|}&lt;br /&gt;
Iskoriscenost: N- Niska, S - Srednja, V - Viskoa&lt;br /&gt;
&lt;br /&gt;
За посматрани систем саставити SQLServer процедуру AzurirajIskoriscenost(), која поставља атрибут искоришћеност у релацији Болница. Искоришћеност се поставља на основу врше (максималне) вредности попуњености болнице у било којем тренутку до сада. Конкретно, уколико је у било ком тренутку број хоспитализованих паицјената био преко 75% капацитета, она је висока. Уколико је мање или једнако од 75%, а више од 25% онда је средња. У супротном, уколико је мање или једнако 25% онда је њена искоришћеност ниска. У дане боравка у болници треба укључити датум пријема, али не и датум отпуштања из болнице.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:САБ]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%91%D0%B0%D0%B7%D0%B5_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0_2/%D0%9A2_2023&amp;diff=6199</id>
		<title>Базе података 2/К2 2023</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%91%D0%B0%D0%B7%D0%B5_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0_2/%D0%9A2_2023&amp;diff=6199"/>
		<updated>2023-05-21T19:58:24Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: К2 из база података 2 2023 лета Господњег&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;За део базе података који обухвата дате табеле одредити најбољи план извршавања и проценити цену за дати упит. За сваку операцију из плана навести како се израчунава и по којој цени.&lt;br /&gt;
&lt;br /&gt;
 Odeljenje (&amp;lt;u&amp;gt;IDOde&amp;lt;/u&amp;gt;, Opis)&lt;br /&gt;
 Zaposleni (&amp;lt;u&amp;gt;IDZap&amp;lt;/u&amp;gt;, Ime, IDOde)&lt;br /&gt;
 Projekat (&amp;lt;u&amp;gt;IDPro&amp;lt;/u&amp;gt;, Naziv)&lt;br /&gt;
 Radi (&amp;lt;u&amp;gt;IDZar&amp;lt;/u&amp;gt;,&amp;lt;u&amp;gt;IDPro&amp;lt;/u&amp;gt;, Procenat)&lt;br /&gt;
Упит:&lt;br /&gt;
 SELECT  R.Procenat, R.IDPro, Z.Ime&lt;br /&gt;
 FROM Radi R, Zaposleni Z&lt;br /&gt;
 WHERE Z.IDZap = R.IDZap AND R.Procenat &amp;gt; 99 AND Z.Ime = &#039;Ivan&#039;&lt;br /&gt;
 ORDER BY R.Procenat&lt;br /&gt;
&lt;br /&gt;
Познато је да у бази: &amp;lt;br&amp;gt;&lt;br /&gt;
-Табела запослени има 10к редова, табела ради 20к редова&amp;lt;br&amp;gt;&lt;br /&gt;
-У табелама Запослени и Ради има по 40 редова по страници&amp;lt;br&amp;gt;&lt;br /&gt;
-Бафер је величине 30 страница&amp;lt;br&amp;gt;&lt;br /&gt;
-За атрибут име посотји 1000 различитих вредности&amp;lt;br&amp;gt;&lt;br /&gt;
-проценат је вредност [0,100]&amp;lt;br&amp;gt;&lt;br /&gt;
-у табели Запослени постоји unclustered Hash index по атрибуту Ime&amp;lt;br&amp;gt;&lt;br /&gt;
-у табели Ради постоји unclustered Hash index по атрибуту IDZap, и clustered B+ index од 2 нивоа по атрибуту Procenat (индекс се не чува у меморији)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Скица решења ===&lt;br /&gt;
Потребно је направити тотално потиснуто стабло. Спајање је &amp;quot;бесплатно&amp;quot; јер се после филтрирања спаја јако мало података и сви стају у меморију&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%91%D0%B0%D0%B7%D0%B5_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0_2/%D0%9A1_2023&amp;diff=6058</id>
		<title>Базе података 2/К1 2023</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%91%D0%B0%D0%B7%D0%B5_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0_2/%D0%9A1_2023&amp;diff=6058"/>
		<updated>2023-04-10T17:34:37Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Додат рок без решења&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Први колоквијум 2023. године&#039;&#039;&#039; први колоквијум икад&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Компанија уговара пројекте израде софтвера по наруџбинама клијента. У компанији су запослени програмери и менаџери.&lt;br /&gt;
У систему се води евиденција о сваком кораку рада (захтевима, развијеном коду, додели посла). За сваки пројекат неког клијента евидентирају се датум креирања, менаџер, као и сви кориснички захтеви. Пре него што пројекат почне он мора бити испланиран (статус I). Имплементација може почети тек након што се пројекат имплементира. Током имплементације, целокупан код који програмери развију се такође евидентира у систему и то тако што се за сваки код евидентира које корисничке захтеве имплементира. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шема базе:&lt;br /&gt;
&lt;br /&gt;
 Klijent (&amp;lt;u&amp;gt;SifК&amp;lt;/u&amp;gt;, Naziv, Kontakt)&lt;br /&gt;
 Radnik (&amp;lt;u&amp;gt;SifR&amp;lt;/u&amp;gt;, Ime)&lt;br /&gt;
 Menadzer (&amp;lt;u&amp;gt;SifR&amp;lt;/u&amp;gt;, Iskustvo)&lt;br /&gt;
 Programer (&amp;lt;u&amp;gt;SifR&amp;lt;/u&amp;gt;, Specijalnost)&lt;br /&gt;
 Projekat (&amp;lt;u&amp;gt;SifP&amp;lt;/u&amp;gt;, Naziv, Status, Vrednost, DatumPocetka, BrojProgramera, MaksProgramera, SifK, SifR)&lt;br /&gt;
 Zahtev (&amp;lt;u&amp;gt;SifZ&amp;lt;/u&amp;gt;, Opis, SiP)&lt;br /&gt;
 Posao (&amp;lt;u&amp;gt;SifJ&amp;lt;/u&amp;gt;, DatumPocetka, DatumKraja, BrPlaniranihProgramera, SifP, SifZ)&lt;br /&gt;
 Angazman (&amp;lt;u&amp;gt;SifA&amp;lt;/u&amp;gt;, SifR, SifJ)&lt;br /&gt;
 Kod (&amp;lt;u&amp;gt;SifK&amp;lt;/u&amp;gt;, Kod)&lt;br /&gt;
 Implementira (&amp;lt;u&amp;gt;SifK&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SifZ&amp;lt;/u&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Статус: K, I, Z - креиран, испланиран, завршен.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
Написати исказ релационе алгебре који даје шифре менаџера који су били надлежни за више од једног пројекта вредности преко 1000. Оператор груписања није дозвољен.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
Написати исказ релационе алгебре који даје шифре менаџера који даје шифре програмера који су били ангажовани на свим пословима пројекта &amp;quot;ETФ&amp;quot;. Оператор груписања није дозвољен.&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
За дати исказ релационе алгебре дати еквивалентат SQL упит: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
πSifR (Angazman⨝ ( πSifJ(σBrojPlaniranih&amp;gt;5 (Posao))-πSifJ(σBrojPlaniranih&amp;gt;10 (Posao)))) )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Базе података 2]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A1%D0%90%D0%91/%D0%9A1_2022&amp;diff=6002</id>
		<title>САБ/К1 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A1%D0%90%D0%91/%D0%9A1_2022&amp;diff=6002"/>
		<updated>2023-04-03T19:13:05Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: додатни атрибута табела у првом&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
За дати модел објеката и односа (с лева на десно, преглед објеката и односа и преглед ентитета и&lt;br /&gt;
својстава) саставити модел података у ИЕ нотацији. Подразумеване кардиналности су:: за специјализирање&lt;br /&gt;
0-1, за условљавање 0-n, за условљеност 1 и за учешће у вези 0-n.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|V1&lt;br /&gt;
|-&lt;br /&gt;
|B1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|C&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|V2&lt;br /&gt;
|-&lt;br /&gt;
|D&lt;br /&gt;
|}&lt;br /&gt;
B има атрибут &amp;lt;BB1, BB2&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
С има атрбут {CC2}&lt;br /&gt;
&lt;br /&gt;
Додатак: пуна стрелица А(0,1)-&amp;gt;B, пуна стрелица B(1-1)-&amp;gt;B1, испрекидана B1-&amp;gt;(2)С, пуна стрелица B-&amp;gt;D. Веза V1 спаја A и B1, веза V2 спаја V1 и D&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
За посматрани систем саставити модел података у ИЕ нотацији. За ентитете треба назна~ити само&lt;br /&gt;
примарне кључеве и мигриране стране кључеве. За ентитете означене * треба означити и динамичке референцијалне интегритете само са &amp;quot;parent&amp;quot; стране.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Sala(&amp;lt;u&amp;gt;SifS&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Konfiguracija (&amp;lt;u&amp;gt;SifK&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Osoba(&amp;lt;u&amp;gt;SifO&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Gost(&amp;lt;u&amp;gt;SifO&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Organizator(&amp;lt;u&amp;gt;SifO&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Proslava(&amp;lt;u&amp;gt;SifP&amp;lt;/u&amp;gt;, SifS, SifK)&lt;br /&gt;
|-&lt;br /&gt;
|Ulaznica(&amp;lt;u&amp;gt;SifU&amp;lt;/u&amp;gt;, SifP, SifO)*&lt;br /&gt;
|-&lt;br /&gt;
|Refundacija(&amp;lt;u&amp;gt;SifR&amp;lt;/u&amp;gt;, SifU)*&lt;br /&gt;
|-&lt;br /&gt;
|Podrzava(&amp;lt;u&amp;gt;SifS&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SifK&amp;lt;/u&amp;gt;)*&lt;br /&gt;
|-&lt;br /&gt;
|Organizuje(&amp;lt;u&amp;gt;SifP&amp;lt;/u&amp;gt;, SifO)&lt;br /&gt;
|}&lt;br /&gt;
*изостављени су небитне колоне табела. Особа је или гост или радник или оба.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:САБ]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A1%D0%90%D0%91/%D0%9A1_2022&amp;diff=6000</id>
		<title>САБ/К1 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A1%D0%90%D0%91/%D0%9A1_2022&amp;diff=6000"/>
		<updated>2023-04-03T19:04:46Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: САБ К1 2023 лета, нерешен&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
За дати модел објеката и односа (с лева на десно, преглед објеката и односа и преглед ентитета и&lt;br /&gt;
својстава) саставити модел података у ИЕ нотацији. Подразумеване кардиналности су:: за специјализирање&lt;br /&gt;
0-1, за условљавање 0-n, за условљеност 1 и за учешће у вези 0-n.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|V1&lt;br /&gt;
|-&lt;br /&gt;
|B1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|C&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|V2&lt;br /&gt;
|-&lt;br /&gt;
|D&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Додатак: пуна стрелица А(0,1)-&amp;gt;B, пуна стрелица B(1-1)-&amp;gt;B1, испрекидана B1-&amp;gt;(2)С, пуна стрелица B-&amp;gt;D. Веза V1 спаја A и B1, веза V2 спаја V1 и D&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
За посматрани систем саставити модел података у ИЕ нотацији. За ентитете треба назна~ити само&lt;br /&gt;
примарне кључеве и мигриране стране кључеве. За ентитете означене * треба означити и динамичке референцијалне интегритете само са &amp;quot;parent&amp;quot; стране.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Sala(&amp;lt;u&amp;gt;SifS&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Konfiguracija (&amp;lt;u&amp;gt;SifK&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Osoba(&amp;lt;u&amp;gt;SifO&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Gost(&amp;lt;u&amp;gt;SifO&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Organizator(&amp;lt;u&amp;gt;SifO&amp;lt;/u&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Proslava(&amp;lt;u&amp;gt;SifP&amp;lt;/u&amp;gt;, SifS, SifK)&lt;br /&gt;
|-&lt;br /&gt;
|Ulaznica(&amp;lt;u&amp;gt;SifU&amp;lt;/u&amp;gt;, SifP, SifO)*&lt;br /&gt;
|-&lt;br /&gt;
|Refundacija(&amp;lt;u&amp;gt;SifR&amp;lt;/u&amp;gt;, SifU)*&lt;br /&gt;
|-&lt;br /&gt;
|Podrzava(&amp;lt;u&amp;gt;SifS&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SifK&amp;lt;/u&amp;gt;)*&lt;br /&gt;
|-&lt;br /&gt;
|Organizuje(&amp;lt;u&amp;gt;SifP&amp;lt;/u&amp;gt;, SifO)&lt;br /&gt;
|}&lt;br /&gt;
*изостављени су небитне колоне табела. Особа је или гост или радник или оба.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:САБ]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%97%D0%B0%D1%88%D1%82%D0%B8%D1%82%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0/%D0%9A1_2023&amp;diff=5999</id>
		<title>Заштита података/К1 2023</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%97%D0%B0%D1%88%D1%82%D0%B8%D1%82%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0/%D0%9A1_2023&amp;diff=5999"/>
		<updated>2023-04-03T18:29:47Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: (не)решени тагови&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Prvi kolokvijum 2023. godine&#039;&#039;&#039; održan je 31. marta.&lt;br /&gt;
== 1. grupa ==&lt;br /&gt;
=== 1. zadatak ===&lt;br /&gt;
Koji bi nacin kriptoanalize koristili za napade na &amp;quot;One-time pad&amp;quot; nacin kriptovanja ? Da li je One-time pad otporan na te algoritme, ukoliko ne koji ima ? &lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;ne moze nista da probije one-time pad&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. zadatak ===&lt;br /&gt;
Hill alogitam 2x2 matrica&lt;br /&gt;
&lt;br /&gt;
=== 3. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Primenjuje se Miler-Rabinov algoritam za utvrđivanje da li je dat broj &amp;lt;math&amp;gt;n = 91&amp;lt;/math&amp;gt; prost. Dati rezultat algoritma za dati slučajno određen broj &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 9&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* Možda prost&lt;br /&gt;
* Nije prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 11&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* Nije prost&lt;br /&gt;
* Možda prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Branko salje broj svoje kreditne kartice, ali da bi ga zastitio odlucio je da ga sifruje, prvo sa &amp;quot;rail fence&amp;quot; u 4 reda, potom monoalfabetski sa kljucem 1597302846, potom ponovo sa &amp;quot;rail fence&amp;quot; u 4 reda. Originalni broj kartice je &lt;br /&gt;
4812 2391 0028 5722.&lt;br /&gt;
Dobijeni broj kartice je: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
SAES posle prve iteracije.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. grupa ==&lt;br /&gt;
=== 1. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Objasniti šta je poznato pri &#039;&#039;known plaintext&#039;&#039; metodi kriptoanalize. Da li je &#039;&#039;Hill&#039;&#039;-ov algoritam otporan na known plaintext napade?&lt;br /&gt;
&lt;br /&gt;
=== 2. zadatak ===&lt;br /&gt;
Ana želi da pošalje Marku poruku koristeći &#039;&#039;Vigenère&#039;&#039; šifru sa &#039;&#039;autokey&#039;&#039; poboljšanjem.  &lt;br /&gt;
Ana je pomoću RSA algoritma poslala Marku šifrovan ključ za &#039;&#039;Vigenère&#039;&#039; algoritam koji glasi &amp;lt;math&amp;gt;C = \mathtt{432899}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Svaka cifra iz šifre se mapira u slovo pod tim rednim brojem (npr. 123=ABC).&lt;br /&gt;
Izabrali su &amp;lt;math&amp;gt;n = \mathtt{1003883}&amp;lt;/math&amp;gt;, dok je Anin privatni ključ &amp;lt;math&amp;gt;d = \mathtt{2003}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Marko je primio poruku KNHFMMDVIMMPLZDU.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ključ za &#039;&#039;Vigenère&#039;&#039;  je : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;HFCAEI&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Poruka koju je Ana poslala je : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;DIFFIEANDHELLMAN&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Vigenère&#039;&#039; algoritam sa &#039;&#039;autokey&#039;&#039; poboljšanjem menja učestalost pojavljivanja slova u šifrovanoj poruci. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* Ne&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Da&amp;lt;/span&amp;gt;&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. zadatak ===&lt;br /&gt;
Primenjuje se Miler-Rabinov algoritam za utvrđivanje da li je dat broj &amp;lt;math&amp;gt;n = 247&amp;lt;/math&amp;gt; prost. Dati rezultat algoritma za dati slučajno određen broj &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 12&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Možda prost&amp;lt;/span&amp;gt;&lt;br /&gt;
* Nije prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 15&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Nije prost&amp;lt;/span&amp;gt;&lt;br /&gt;
* Možda prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Složeni algoritam šifrovanja se koristi za šifrovanje nečijeg broja kreditne kartice. Broj kreditne kartice koji treba šifrovati je: &#039;&#039;&#039;4812 2391 0028 5722&#039;&#039;&#039;.&lt;br /&gt;
Složeni algoritam se sastoji od:&lt;br /&gt;
# &#039;&#039;Row Transposition&#039;&#039; algoritma za dešifrovanje sa ključem (4,3,2,1)&lt;br /&gt;
# Cezarovom šifrom sa pomerajem 3&lt;br /&gt;
# &#039;&#039;Row Transposition&#039;&#039; algoritma za šifrovanje sa ključem (4,3,2,1)&lt;br /&gt;
&lt;br /&gt;
Šifrovan broj kreditne kartice glasi: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
SAES algoritam se koristi za šifrovanje bloka &#039;&#039;&#039;2468h&#039;&#039;&#039; sa ključem &#039;&#039;&#039;5B9Fh&#039;&#039;&#039;. Parametri algoritma su: &#039;&#039;&#039;&amp;lt;math&amp;gt;RCON(1) = \mathtt{80h}, RCON(2) = \mathtt{30h} &amp;lt;/math&amp;gt;&#039;&#039;&#039;. Nesvodljivi polinom &#039;&#039;&#039;0011b&#039;&#039;&#039;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ S-Box tabela&lt;br /&gt;
!&lt;br /&gt;
! 00b !! 01b !! 10b !! 11b&lt;br /&gt;
|-&lt;br /&gt;
! 00b&lt;br /&gt;
| 9h  || 4h  || Ah  || Bh&lt;br /&gt;
|-&lt;br /&gt;
! 01b&lt;br /&gt;
| Dh  || 1h  || 8h  || 5h&lt;br /&gt;
|-&lt;br /&gt;
! 10b&lt;br /&gt;
| 6h  || 2h  || 0h  || 3h&lt;br /&gt;
|-&lt;br /&gt;
! 11b&lt;br /&gt;
| Ch  || Eh  || Fh  || 7h&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ MixColumns&lt;br /&gt;
| 1 || 4 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ključ za prvu rundu &amp;lt;math&amp;gt;K_1&amp;lt;/math&amp;gt; glasi : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stanje pred MixColumns korak : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stanje na kraju prve runde : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Заштита података]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%97%D0%B0%D1%88%D1%82%D0%B8%D1%82%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0/%D0%9A1_2023&amp;diff=5998</id>
		<title>Заштита података/К1 2023</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%97%D0%B0%D1%88%D1%82%D0%B8%D1%82%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0/%D0%9A1_2023&amp;diff=5998"/>
		<updated>2023-04-03T18:28:27Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* 3. zadatak */  Разл решења трећег&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Prvi kolokvijum 2023. godine&#039;&#039;&#039; održan je 31. marta.&lt;br /&gt;
== 1. grupa ==&lt;br /&gt;
=== 1. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Koji bi nacin kriptoanalize koristili za napade na &amp;quot;One-time pad&amp;quot; nacin kriptovanja ? Da li je One-time pad otporan na te algoritme, ukoliko ne koji ima ? &lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;ne moze nista da probije one-time pad&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. zadatak ===&lt;br /&gt;
Hill alogitam 2x2 matrica&lt;br /&gt;
&lt;br /&gt;
=== 3. zadatak ===&lt;br /&gt;
Primenjuje se Miler-Rabinov algoritam za utvrđivanje da li je dat broj &amp;lt;math&amp;gt;n = 91&amp;lt;/math&amp;gt; prost. Dati rezultat algoritma za dati slučajno određen broj &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 9&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* Možda prost&lt;br /&gt;
* Nije prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 11&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* Nije prost&lt;br /&gt;
* Možda prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Branko salje broj svoje kreditne kartice, ali da bi ga zastitio odlucio je da ga sifruje, prvo sa &amp;quot;rail fence&amp;quot; u 4 reda, potom monoalfabetski sa kljucem 1597302846, potom ponovo sa &amp;quot;rail fence&amp;quot; u 4 reda. Originalni broj kartice je &lt;br /&gt;
4812 2391 0028 5722.&lt;br /&gt;
Dobijeni broj kartice je: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
SAES posle prve iteracije.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. grupa ==&lt;br /&gt;
=== 1. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Objasniti šta je poznato pri &#039;&#039;known plaintext&#039;&#039; metodi kriptoanalize. Da li je &#039;&#039;Hill&#039;&#039;-ov algoritam otporan na known plaintext napade?&lt;br /&gt;
&lt;br /&gt;
=== 2. zadatak ===&lt;br /&gt;
Ana želi da pošalje Marku poruku koristeći &#039;&#039;Vigenère&#039;&#039; šifru sa &#039;&#039;autokey&#039;&#039; poboljšanjem.  &lt;br /&gt;
Ana je pomoću RSA algoritma poslala Marku šifrovan ključ za &#039;&#039;Vigenère&#039;&#039; algoritam koji glasi &amp;lt;math&amp;gt;C = \mathtt{432899}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Svaka cifra iz šifre se mapira u slovo pod tim rednim brojem (npr. 123=ABC).&lt;br /&gt;
Izabrali su &amp;lt;math&amp;gt;n = \mathtt{1003883}&amp;lt;/math&amp;gt;, dok je Anin privatni ključ &amp;lt;math&amp;gt;d = \mathtt{2003}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Marko je primio poruku KNHFMMDVIMMPLZDU.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ključ za &#039;&#039;Vigenère&#039;&#039;  je : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;HFCAEI&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Poruka koju je Ana poslala je : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;DIFFIEANDHELLMAN&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Vigenère&#039;&#039; algoritam sa &#039;&#039;autokey&#039;&#039; poboljšanjem menja učestalost pojavljivanja slova u šifrovanoj poruci. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* Ne&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Da&amp;lt;/span&amp;gt;&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. zadatak ===&lt;br /&gt;
Primenjuje se Miler-Rabinov algoritam za utvrđivanje da li je dat broj &amp;lt;math&amp;gt;n = 247&amp;lt;/math&amp;gt; prost. Dati rezultat algoritma za dati slučajno određen broj &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 12&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Možda prost&amp;lt;/span&amp;gt;&lt;br /&gt;
* Nije prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 15&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Nije prost&amp;lt;/span&amp;gt;&lt;br /&gt;
* Možda prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Složeni algoritam šifrovanja se koristi za šifrovanje nečijeg broja kreditne kartice. Broj kreditne kartice koji treba šifrovati je: &#039;&#039;&#039;4812 2391 0028 5722&#039;&#039;&#039;.&lt;br /&gt;
Složeni algoritam se sastoji od:&lt;br /&gt;
# &#039;&#039;Row Transposition&#039;&#039; algoritma za dešifrovanje sa ključem (4,3,2,1)&lt;br /&gt;
# Cezarovom šifrom sa pomerajem 3&lt;br /&gt;
# &#039;&#039;Row Transposition&#039;&#039; algoritma za šifrovanje sa ključem (4,3,2,1)&lt;br /&gt;
&lt;br /&gt;
Šifrovan broj kreditne kartice glasi: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
SAES algoritam se koristi za šifrovanje bloka &#039;&#039;&#039;2468h&#039;&#039;&#039; sa ključem &#039;&#039;&#039;5B9Fh&#039;&#039;&#039;. Parametri algoritma su: &#039;&#039;&#039;&amp;lt;math&amp;gt;RCON(1) = \mathtt{80h}, RCON(2) = \mathtt{30h} &amp;lt;/math&amp;gt;&#039;&#039;&#039;. Nesvodljivi polinom &#039;&#039;&#039;0011b&#039;&#039;&#039;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ S-Box tabela&lt;br /&gt;
!&lt;br /&gt;
! 00b !! 01b !! 10b !! 11b&lt;br /&gt;
|-&lt;br /&gt;
! 00b&lt;br /&gt;
| 9h  || 4h  || Ah  || Bh&lt;br /&gt;
|-&lt;br /&gt;
! 01b&lt;br /&gt;
| Dh  || 1h  || 8h  || 5h&lt;br /&gt;
|-&lt;br /&gt;
! 10b&lt;br /&gt;
| 6h  || 2h  || 0h  || 3h&lt;br /&gt;
|-&lt;br /&gt;
! 11b&lt;br /&gt;
| Ch  || Eh  || Fh  || 7h&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ MixColumns&lt;br /&gt;
| 1 || 4 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ključ za prvu rundu &amp;lt;math&amp;gt;K_1&amp;lt;/math&amp;gt; glasi : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stanje pred MixColumns korak : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stanje na kraju prve runde : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Заштита података]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%97%D0%B0%D1%88%D1%82%D0%B8%D1%82%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0/%D0%9A1_2023&amp;diff=5997</id>
		<title>Заштита података/К1 2023</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%97%D0%B0%D1%88%D1%82%D0%B8%D1%82%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0/%D0%9A1_2023&amp;diff=5997"/>
		<updated>2023-04-03T18:26:29Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Додати и делови прве групе&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Prvi kolokvijum 2023. godine&#039;&#039;&#039; održan je 31. marta.&lt;br /&gt;
== 1. grupa ==&lt;br /&gt;
=== 1. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Koji bi nacin kriptoanalize koristili za napade na &amp;quot;One-time pad&amp;quot; nacin kriptovanja ? Da li je One-time pad otporan na te algoritme, ukoliko ne koji ima ? &lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;ne moze nista da probije one-time pad&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. zadatak ===&lt;br /&gt;
Hill alogitam 2x2 matrica&lt;br /&gt;
&lt;br /&gt;
=== 3. zadatak ===&lt;br /&gt;
Primenjuje se Miler-Rabinov algoritam za utvrđivanje da li je dat broj &amp;lt;math&amp;gt;n = 91&amp;lt;/math&amp;gt; prost. Dati rezultat algoritma za dati slučajno određen broj &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 9&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Možda prost&amp;lt;/span&amp;gt;&lt;br /&gt;
* Nije prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 11&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Nije prost&amp;lt;/span&amp;gt;&lt;br /&gt;
* Možda prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Branko salje broj svoje kreditne kartice, ali da bi ga zastitio odlucio je da ga sifruje, prvo sa &amp;quot;rail fence&amp;quot; u 4 reda, potom monoalfabetski sa kljucem 1597302846, potom ponovo sa &amp;quot;rail fence&amp;quot; u 4 reda. Originalni broj kartice je &lt;br /&gt;
4812 2391 0028 5722.&lt;br /&gt;
Dobijeni broj kartice je: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
SAES posle prve iteracije.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. grupa ==&lt;br /&gt;
=== 1. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Objasniti šta je poznato pri &#039;&#039;known plaintext&#039;&#039; metodi kriptoanalize. Da li je &#039;&#039;Hill&#039;&#039;-ov algoritam otporan na known plaintext napade?&lt;br /&gt;
&lt;br /&gt;
=== 2. zadatak ===&lt;br /&gt;
Ana želi da pošalje Marku poruku koristeći &#039;&#039;Vigenère&#039;&#039; šifru sa &#039;&#039;autokey&#039;&#039; poboljšanjem.  &lt;br /&gt;
Ana je pomoću RSA algoritma poslala Marku šifrovan ključ za &#039;&#039;Vigenère&#039;&#039; algoritam koji glasi &amp;lt;math&amp;gt;C = \mathtt{432899}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Svaka cifra iz šifre se mapira u slovo pod tim rednim brojem (npr. 123=ABC).&lt;br /&gt;
Izabrali su &amp;lt;math&amp;gt;n = \mathtt{1003883}&amp;lt;/math&amp;gt;, dok je Anin privatni ključ &amp;lt;math&amp;gt;d = \mathtt{2003}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Marko je primio poruku KNHFMMDVIMMPLZDU.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ključ za &#039;&#039;Vigenère&#039;&#039;  je : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;HFCAEI&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Poruka koju je Ana poslala je : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;DIFFIEANDHELLMAN&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Vigenère&#039;&#039; algoritam sa &#039;&#039;autokey&#039;&#039; poboljšanjem menja učestalost pojavljivanja slova u šifrovanoj poruci. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* Ne&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Da&amp;lt;/span&amp;gt;&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. zadatak ===&lt;br /&gt;
Primenjuje se Miler-Rabinov algoritam za utvrđivanje da li je dat broj &amp;lt;math&amp;gt;n = 247&amp;lt;/math&amp;gt; prost. Dati rezultat algoritma za dati slučajno određen broj &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 12&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Možda prost&amp;lt;/span&amp;gt;&lt;br /&gt;
* Nije prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a = 15&amp;lt;/math&amp;gt;. (netačan odgovor na ovo pitanje nosi -1 poen, odgovor &amp;quot;Ne znam&amp;quot; donosi 0 poena):&lt;br /&gt;
* &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Nije prost&amp;lt;/span&amp;gt;&lt;br /&gt;
* Možda prost&lt;br /&gt;
* Ne znam&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Složeni algoritam šifrovanja se koristi za šifrovanje nečijeg broja kreditne kartice. Broj kreditne kartice koji treba šifrovati je: &#039;&#039;&#039;4812 2391 0028 5722&#039;&#039;&#039;.&lt;br /&gt;
Složeni algoritam se sastoji od:&lt;br /&gt;
# &#039;&#039;Row Transposition&#039;&#039; algoritma za dešifrovanje sa ključem (4,3,2,1)&lt;br /&gt;
# Cezarovom šifrom sa pomerajem 3&lt;br /&gt;
# &#039;&#039;Row Transposition&#039;&#039; algoritma za šifrovanje sa ključem (4,3,2,1)&lt;br /&gt;
&lt;br /&gt;
Šifrovan broj kreditne kartice glasi: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. zadatak ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
SAES algoritam se koristi za šifrovanje bloka &#039;&#039;&#039;2468h&#039;&#039;&#039; sa ključem &#039;&#039;&#039;5B9Fh&#039;&#039;&#039;. Parametri algoritma su: &#039;&#039;&#039;&amp;lt;math&amp;gt;RCON(1) = \mathtt{80h}, RCON(2) = \mathtt{30h} &amp;lt;/math&amp;gt;&#039;&#039;&#039;. Nesvodljivi polinom &#039;&#039;&#039;0011b&#039;&#039;&#039;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ S-Box tabela&lt;br /&gt;
!&lt;br /&gt;
! 00b !! 01b !! 10b !! 11b&lt;br /&gt;
|-&lt;br /&gt;
! 00b&lt;br /&gt;
| 9h  || 4h  || Ah  || Bh&lt;br /&gt;
|-&lt;br /&gt;
! 01b&lt;br /&gt;
| Dh  || 1h  || 8h  || 5h&lt;br /&gt;
|-&lt;br /&gt;
! 10b&lt;br /&gt;
| 6h  || 2h  || 0h  || 3h&lt;br /&gt;
|-&lt;br /&gt;
! 11b&lt;br /&gt;
| Ch  || Eh  || Fh  || 7h&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ MixColumns&lt;br /&gt;
| 1 || 4 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ključ za prvu rundu &amp;lt;math&amp;gt;K_1&amp;lt;/math&amp;gt; glasi : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stanje pred MixColumns korak : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stanje na kraju prve runde : &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Заштита података]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%9E1/%D0%9A1_2022&amp;diff=5086</id>
		<title>ОО1/К1 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%9E1/%D0%9A1_2022&amp;diff=5086"/>
		<updated>2022-12-05T06:27:07Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* 4. zadatak */  Залутали таг&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Šta može da stoji umesto XXX da bi se kod pokretao uspešno?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int g(int i) { return i; }&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int a = 5;&lt;br /&gt;
    decltype (XXX) b = 5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;int;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;a+1;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;a++;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;g(g(4));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
Šta se ispisuje prilikom pokretanja sledećeg koda?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class X {&lt;br /&gt;
public:&lt;br /&gt;
    X(int p) : z(++p), y(++p), x(++p) {cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; y &amp;lt;&amp;lt; z;}&lt;br /&gt;
private:&lt;br /&gt;
    int x, y, z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    X x(3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Odgovor:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;456&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objašnjenje:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Inicijalizacija atributa se vrši redosledom navođenja u klasi, bez obzira na redosled u listi inicijalizatora.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Šta ispisuje sledeći kod na programskom jeziku C++:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class A {&lt;br /&gt;
public:&lt;br /&gt;
    ~A() {cout &amp;lt;&amp;lt; &amp;quot;A&amp;quot;;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class B {&lt;br /&gt;
public:&lt;br /&gt;
    ~B() {cout &amp;lt;&amp;lt; &amp;quot;B&amp;quot;;}	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class C {&lt;br /&gt;
    A a;&lt;br /&gt;
    B b;&lt;br /&gt;
public:&lt;br /&gt;
    ~C() {cout &amp;lt;&amp;lt; &amp;quot;C&amp;quot;;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    delete new C();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Odgovor:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;CBA&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objašnjenje:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Redosled pozivanja destruktora je obrnut od redosleda pozivanja konstruktora.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
Šta važi za prijateljske funkcije?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Prijateljska funkcija može biti metod neke druge klase.&amp;lt;/span&amp;gt;&lt;br /&gt;
# Prijateljska funkcija deklarisana u javnom odeljku nema pristup privatnim atributima.&lt;br /&gt;
# Da bi funkcija bila prijateljska ona mora da bude definisana unutar klase. &lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Prijateljska funkcija definisana unutar klase je podrazumevano &amp;lt;code&amp;gt;inline&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
Koje aspekte je po Stroustrupu trebalo da ispuni C++:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# Da bude brži od C-a&lt;br /&gt;
# Da bude prenosiv&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Da bude dovoljno blizak mašini&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Da bude dovoljno blizak problemu&amp;lt;/span&amp;gt;&lt;br /&gt;
# Da se koristi za programiranje intefejsa&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
Šta važi za prava pristupa:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;U strukturi je podrazumevan &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; odeljak.&amp;lt;/span&amp;gt;&lt;br /&gt;
# Privatni nestatički metod ima pravo pristupa samo privatnim atributima.&lt;br /&gt;
# Postoji samo po jedan &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;protected&amp;lt;/code&amp;gt; odeljak.&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;U klasi je podrazumevan &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; odeljak.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
Šta je validna operacija nad sledećim nizom?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int niz[] = {1,2,3,4};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;niz[0] = 1;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;int x = niz[1];&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline &amp;gt;niz++;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;int *novi_niz = niz;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline &amp;gt;int *niz = new int[4];&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
Sa kojim modifikatorima mogu da se pozivaju funkcije za promenljive objekte?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;const&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;const volatile&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline &amp;gt;this&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;volatile&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot; &amp;gt;bez modifikatora&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
Šta može da stoji umesto ??? da bi kod bio ispravan?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int&amp;amp; f(int&amp;amp; i, const int&amp;amp; j);&lt;br /&gt;
&lt;br /&gt;
const int&amp;amp; g(int &amp;amp;i) { return i; }&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int a = 3;&lt;br /&gt;
    int* p = &amp;amp;a;&lt;br /&gt;
    const int *pk = &amp;amp;a;&lt;br /&gt;
&lt;br /&gt;
    ???&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline &amp;gt;f(a + 1, a);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;f(a, a);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline &amp;gt;f(*pk, a);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;f(a, g(a));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot; &amp;gt;f(a, *p);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
Koje od sledećih deklaracija funkcija su ispravne?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline &amp;gt;int f(int a = 1, int b, int c);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;int f(int a = 1, int b = 2, int c = 3);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline &amp;gt;int f(int a = 1, int b = 2, int c);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;int f(int a, int b = 2, int c = 3); &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;int f(int a, int b = 2, int c);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОО1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2022&amp;diff=4685</id>
		<title>КДП/Јун 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2022&amp;diff=4685"/>
		<updated>2022-07-25T02:41:25Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* 3. задатак */  скинут нерешени таг&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит у јунском испитном року 2022. године&#039;&#039;&#039; одржан је 14. јуна. Поставка овог рока још увек није доступна са странице предмета.&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Објасните шта је &#039;&#039;At-Most-Once-Property&#039;&#039;. Објасните зашто, када је испуњена та особина, критична референца има особине атомске акције. Дати два примера у којима су по два процеса.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоје три особе међу којима треба изабрати једну (&#039;&#039;The Odd Person Wins Game&#039;&#039;). Свака од тих особа поседује новчић који има две стране. Избор особе се одиграва тако што свака особа независно баца свој новчић. Уколико постоји особа којој је новчић пао на другу страну у односу на преостале особе, онда се та особа изабира. Уколико све особе имају исто постављен новчић, поступак се понавља све док се не изабере једна. Особе након сваког бацања морају да знају да ли су изабране или не или се поступак понавља. Користећи семафоре написати програм који описује понашање особе. Ниједној особи не треба давати предност на основу њиховог идентификатора.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Монитор треба да регулише распоред уласка пацијената на преглед код једног лекара. Сваки регуларно заказани пацијент је пре приступања том монитору добио један од 12 хронолошки поређаних полусатних интервала за тај дан (прављење распореда није део задатка). Пацијент када дође на преглед (не мора да буде тачан) позива мониторску процедуру &amp;lt;code&amp;gt;želim_da_se_pregledam&amp;lt;/code&amp;gt; и том приликом доставља ID и почетак полусатног интервала у коме је њему заказан преглед. Ако је лекар заузет, пацијенти на чекању ће се поређати на основу хронолошког редоследа у распореду за тај дан. Лекар позива мониторску процедуру &amp;lt;code&amp;gt;sledeći&amp;lt;/code&amp;gt;, која враћа идентификатор следећег пацијента, када жели да прегледа следећег пацијента. Ако нема пацијената у том случају, лекар се поствља у стање чекања из кога излази када наиђе први пацијент. Написати овакав монитор користећи дисциплину &#039;&#039;Signal and Wait&#039;&#039; и условне променљиве код којих нема приоритетних редова чекања. Монитор не треба да садржи синхронизацију везану за крај прегледа.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// pretpostavka da je ID 0-11&lt;br /&gt;
class Monitor{&lt;br /&gt;
   private Condition[] awaitPatient[12], awaitDoctor;&lt;br /&gt;
   private boolean[] patientChecked[12];  // da li je pacijent pregledan, potreban zbog signal&amp;amp;wait&lt;br /&gt;
   private PriorityQueue&amp;lt;&amp;lt;int,int&amp;gt;&amp;gt; pq;   // prioritetni red slot,ID, sortiran po slotu&lt;br /&gt;
   &lt;br /&gt;
   public synchornized void zelim_da_se_pregledam(int ID, int slot){&lt;br /&gt;
      pq.add(slot,ID);&lt;br /&gt;
      awaitDoctor.signal();&lt;br /&gt;
      // potrebno jer signal&amp;amp;wait predaje kontrolu pa je pacijent u medjuvremenu mozda pregledan&lt;br /&gt;
      if(patientChecked[ID]==false) awaitPatient[ID].wait();   &lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   public synchronized int sledeci(){&lt;br /&gt;
      if(pq.size()==0) awaitDoctor.wait();&lt;br /&gt;
      int id = pq.pop().first;&lt;br /&gt;
      pq.remove();&lt;br /&gt;
      patientChecked[id] = true;&lt;br /&gt;
      awaitPatient[id].signal()     &lt;br /&gt;
      return id;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Трајект за превоз аутомобила, камиона и аутобуса превози возила са обале на обалу. Трајект поседује N позиција које су линеарно постављене једна иза друге. Камион заузима три, аутобус две, а аутомобил једну позицију. Возила чекају на трајект у реду и на њега улазе једно по једно по редоследу у којем чекају у реду, док на трајекту има места. Када наредно возило у реду за трајект нема места да се укрца или када је трајект пун, трајект започиње превоз возила на другу обалу. На другој обали возила се искрцавају у редоследу супротном од редоследа у којем су се укрцала. Када се сва возила искрцају, празан трајект се враћа на почетну обалу. Користећи регионе написати програм који решава овај проблем.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Trajekt{&lt;br /&gt;
   int cap = N;&lt;br /&gt;
   int cur=0, next=0, ticketIn = 0, ticketOut = 0;&lt;br /&gt;
   boolean ukrcavanje = false, iskrcavanje = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Trajekt t;&lt;br /&gt;
&lt;br /&gt;
void vozilo(int space){&lt;br /&gt;
   int myTicketIn, myTicketOut;&lt;br /&gt;
   regiot(t){&lt;br /&gt;
      myTicketIn = t.ticketIn++;&lt;br /&gt;
      await(t.ukrcavanje+=true &amp;amp;&amp;amp; t.ticketIn==myTicketIn)&lt;br /&gt;
      if(t.cap - t.curr &amp;lt; space){&lt;br /&gt;
         // ukoliko nema mesta za mene, posalji trajekt pa sacekaj da se vrati&lt;br /&gt;
         t.ukrcavanje = false;&lt;br /&gt;
         await(t.ukrcavanje==true)&lt;br /&gt;
      }&lt;br /&gt;
      t.curr+=space;&lt;br /&gt;
      myTicketOut = ++t.ticketOut;&lt;br /&gt;
      t.next++;&lt;br /&gt;
      if(t.curr==t.cap)&lt;br /&gt;
         t.ukrcavanje=false;&lt;br /&gt;
   }&lt;br /&gt;
   // prevozimo se&lt;br /&gt;
   region(t){&lt;br /&gt;
      await(t.iskrcavanje==true &amp;amp;&amp;amp; myTicketOut==t.ticketOut)&lt;br /&gt;
      if(--t.ticketOut == 0)&lt;br /&gt;
         // ukoliko sam poslednji, posalji trajekt nazad&lt;br /&gt;
         t.iskrcavanje = false&lt;br /&gt;
   }    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void trajekt(){&lt;br /&gt;
   while(1){&lt;br /&gt;
      region(t){&lt;br /&gt;
         t.ukrcavanje = true&lt;br /&gt;
         await(t.ukrcavanje == false)&lt;br /&gt;
      }&lt;br /&gt;
      preveziVozila()&lt;br /&gt;
      region(t){&lt;br /&gt;
         t.ukrcavanje = true&lt;br /&gt;
         await(t.ukrcavanje == false)&lt;br /&gt;
      }&lt;br /&gt;
      vratiSeNazad()&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи синхрону размену порука написати дистрибуирано решење за проблем филозофа који ручавају (&#039;&#039;The Dining Philosophers Problem&#039;&#039;). Код дистрибуираног решења процеси филозофи комуницирају само са процесима виљушкама и процеси виљушке комуницирају само са процесима филозофима.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void philosopher(int ID, chan&amp;lt;string&amp;gt; release, chan&amp;lt;char&amp;gt; forkL, chan&amp;lt;char&amp;gt; forkR) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Филозофирамо&lt;br /&gt;
        if (ID % 2 == 0) {&lt;br /&gt;
            forkL.send(&#039;R&#039;);&lt;br /&gt;
            forkR.send(&#039;L&#039;);&lt;br /&gt;
        } else {&lt;br /&gt;
            forkR.send(&#039;L&#039;);&lt;br /&gt;
            forkL.send(&#039;R&#039;);&lt;br /&gt;
        }&lt;br /&gt;
        // Једемо&lt;br /&gt;
        release.receive();&lt;br /&gt;
        release.receive();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void fork(chan&amp;lt;char&amp;gt; acquire, chan&amp;lt;string&amp;gt; philL, chan&amp;lt;string&amp;gt; philR) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        char dir = acquire.receive();&lt;br /&gt;
        if (dir == &#039;L&#039;) {&lt;br /&gt;
            philL.send(&amp;quot;release&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
            philR.send(&amp;quot;release&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоји P произвођача и C потрошача који деле заједнички бафер капацитета B (&#039;&#039;Atomic broadcast problem&#039;&#039;). Произвођачи генеришу производ по производ на које чекају свих C потрошача. Сваки потрошач мора да прими производе у тачно оном редоследу у коме су произведени, мада различити потрошачи могу у исто време да узимају различите производе. Решити проблем користећи &#039;&#039;C-Linda&#039;&#039;, тако да се ни у ком тренутку у заједничком простору не нађе више од B производа.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Тагови коришћени у овој имплементацији су:&lt;br /&gt;
* &amp;lt;code&amp;gt;buffer empty&amp;lt;/code&amp;gt;: постоји места да произвођач убацује у бафер&lt;br /&gt;
* &amp;lt;code&amp;gt;buffer full&amp;lt;/code&amp;gt;: постоје производи у баферу које потрошачи могу да читају&lt;br /&gt;
* &amp;lt;code&amp;gt;product&amp;lt;/code&amp;gt;: производ са одређеним индексом у низу&lt;br /&gt;
* &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: величина бафера&lt;br /&gt;
* &amp;lt;code&amp;gt;producer index&amp;lt;/code&amp;gt;: индекс у баферу до ког су произвођачи стигли са попуњавањем&lt;br /&gt;
* &amp;lt;code&amp;gt;consumer count&amp;lt;/code&amp;gt;: број потрошача који је преостао да прочита производ на одређеном индексу&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int P = 100;&lt;br /&gt;
const int C = 100;&lt;br /&gt;
const int B = 100;&lt;br /&gt;
&lt;br /&gt;
struct Product {};&lt;br /&gt;
Product produce();&lt;br /&gt;
void consume(Product p);&lt;br /&gt;
&lt;br /&gt;
int producer() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        Product p = produce();&lt;br /&gt;
        in(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
        int index;&lt;br /&gt;
        in(&amp;quot;producer index&amp;quot;, &amp;amp;index);&lt;br /&gt;
        out(&amp;quot;product&amp;quot;, index, p);&lt;br /&gt;
        out(&amp;quot;consumer count&amp;quot;, index, C);&lt;br /&gt;
        out(&amp;quot;producer index&amp;quot;, (index + 1) % B);&lt;br /&gt;
        int size;&lt;br /&gt;
        in(&amp;quot;size&amp;quot;, &amp;amp;size);&lt;br /&gt;
        if (size == 0) {&lt;br /&gt;
            out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        out(&amp;quot;size&amp;quot;, ++size);&lt;br /&gt;
        if (size &amp;lt; B) {&lt;br /&gt;
            out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void consumer() {&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        in(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        Product p;&lt;br /&gt;
        int count;&lt;br /&gt;
        in(&amp;quot;consumer count&amp;quot;, index, &amp;amp;count);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            in(&amp;quot;product&amp;quot;, index, &amp;amp;p);&lt;br /&gt;
            int size;&lt;br /&gt;
            in(&amp;quot;size&amp;quot;, &amp;amp;size);&lt;br /&gt;
            if (size == B) {&lt;br /&gt;
                out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            out(&amp;quot;size&amp;quot;, --size);&lt;br /&gt;
            if (size &amp;gt; 0) {&lt;br /&gt;
                out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            rd(&amp;quot;product&amp;quot;, index, &amp;amp;p);&lt;br /&gt;
            out(&amp;quot;consumer count&amp;quot;, index, count-1);&lt;br /&gt;
            out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        index = (index + 1) % B;&lt;br /&gt;
        consume(p);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initialize() {&lt;br /&gt;
    out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
    out(&amp;quot;size&amp;quot;, 0);&lt;br /&gt;
    out(&amp;quot;producer index&amp;quot;, 0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2022&amp;diff=4684</id>
		<title>КДП/Јун 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2022&amp;diff=4684"/>
		<updated>2022-07-25T02:41:05Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* 4. задатак */  скинут нерешени таг&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит у јунском испитном року 2022. године&#039;&#039;&#039; одржан је 14. јуна. Поставка овог рока још увек није доступна са странице предмета.&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Објасните шта је &#039;&#039;At-Most-Once-Property&#039;&#039;. Објасните зашто, када је испуњена та особина, критична референца има особине атомске акције. Дати два примера у којима су по два процеса.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоје три особе међу којима треба изабрати једну (&#039;&#039;The Odd Person Wins Game&#039;&#039;). Свака од тих особа поседује новчић који има две стране. Избор особе се одиграва тако што свака особа независно баца свој новчић. Уколико постоји особа којој је новчић пао на другу страну у односу на преостале особе, онда се та особа изабира. Уколико све особе имају исто постављен новчић, поступак се понавља све док се не изабере једна. Особе након сваког бацања морају да знају да ли су изабране или не или се поступак понавља. Користећи семафоре написати програм који описује понашање особе. Ниједној особи не треба давати предност на основу њиховог идентификатора.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Монитор треба да регулише распоред уласка пацијената на преглед код једног лекара. Сваки регуларно заказани пацијент је пре приступања том монитору добио један од 12 хронолошки поређаних полусатних интервала за тај дан (прављење распореда није део задатка). Пацијент када дође на преглед (не мора да буде тачан) позива мониторску процедуру &amp;lt;code&amp;gt;želim_da_se_pregledam&amp;lt;/code&amp;gt; и том приликом доставља ID и почетак полусатног интервала у коме је њему заказан преглед. Ако је лекар заузет, пацијенти на чекању ће се поређати на основу хронолошког редоследа у распореду за тај дан. Лекар позива мониторску процедуру &amp;lt;code&amp;gt;sledeći&amp;lt;/code&amp;gt;, која враћа идентификатор следећег пацијента, када жели да прегледа следећег пацијента. Ако нема пацијената у том случају, лекар се поствља у стање чекања из кога излази када наиђе први пацијент. Написати овакав монитор користећи дисциплину &#039;&#039;Signal and Wait&#039;&#039; и условне променљиве код којих нема приоритетних редова чекања. Монитор не треба да садржи синхронизацију везану за крај прегледа.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// pretpostavka da je ID 0-11&lt;br /&gt;
class Monitor{&lt;br /&gt;
   private Condition[] awaitPatient[12], awaitDoctor;&lt;br /&gt;
   private boolean[] patientChecked[12];  // da li je pacijent pregledan, potreban zbog signal&amp;amp;wait&lt;br /&gt;
   private PriorityQueue&amp;lt;&amp;lt;int,int&amp;gt;&amp;gt; pq;   // prioritetni red slot,ID, sortiran po slotu&lt;br /&gt;
   &lt;br /&gt;
   public synchornized void zelim_da_se_pregledam(int ID, int slot){&lt;br /&gt;
      pq.add(slot,ID);&lt;br /&gt;
      awaitDoctor.signal();&lt;br /&gt;
      // potrebno jer signal&amp;amp;wait predaje kontrolu pa je pacijent u medjuvremenu mozda pregledan&lt;br /&gt;
      if(patientChecked[ID]==false) awaitPatient[ID].wait();   &lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   public synchronized int sledeci(){&lt;br /&gt;
      if(pq.size()==0) awaitDoctor.wait();&lt;br /&gt;
      int id = pq.pop().first;&lt;br /&gt;
      pq.remove();&lt;br /&gt;
      patientChecked[id] = true;&lt;br /&gt;
      awaitPatient[id].signal()     &lt;br /&gt;
      return id;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Трајект за превоз аутомобила, камиона и аутобуса превози возила са обале на обалу. Трајект поседује N позиција које су линеарно постављене једна иза друге. Камион заузима три, аутобус две, а аутомобил једну позицију. Возила чекају на трајект у реду и на њега улазе једно по једно по редоследу у којем чекају у реду, док на трајекту има места. Када наредно возило у реду за трајект нема места да се укрца или када је трајект пун, трајект започиње превоз возила на другу обалу. На другој обали возила се искрцавају у редоследу супротном од редоследа у којем су се укрцала. Када се сва возила искрцају, празан трајект се враћа на почетну обалу. Користећи регионе написати програм који решава овај проблем.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Trajekt{&lt;br /&gt;
   int cap = N;&lt;br /&gt;
   int cur=0, next=0, ticketIn = 0, ticketOut = 0;&lt;br /&gt;
   boolean ukrcavanje = false, iskrcavanje = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Trajekt t;&lt;br /&gt;
&lt;br /&gt;
void vozilo(int space){&lt;br /&gt;
   int myTicketIn, myTicketOut;&lt;br /&gt;
   regiot(t){&lt;br /&gt;
      myTicketIn = t.ticketIn++;&lt;br /&gt;
      await(t.ukrcavanje+=true &amp;amp;&amp;amp; t.ticketIn==myTicketIn)&lt;br /&gt;
      if(t.cap - t.curr &amp;lt; space){&lt;br /&gt;
         // ukoliko nema mesta za mene, posalji trajekt pa sacekaj da se vrati&lt;br /&gt;
         t.ukrcavanje = false;&lt;br /&gt;
         await(t.ukrcavanje==true)&lt;br /&gt;
      }&lt;br /&gt;
      t.curr+=space;&lt;br /&gt;
      myTicketOut = ++t.ticketOut;&lt;br /&gt;
      t.next++;&lt;br /&gt;
      if(t.curr==t.cap)&lt;br /&gt;
         t.ukrcavanje=false;&lt;br /&gt;
   }&lt;br /&gt;
   // prevozimo se&lt;br /&gt;
   region(t){&lt;br /&gt;
      await(t.iskrcavanje==true &amp;amp;&amp;amp; myTicketOut==t.ticketOut)&lt;br /&gt;
      if(--t.ticketOut == 0)&lt;br /&gt;
         // ukoliko sam poslednji, posalji trajekt nazad&lt;br /&gt;
         t.iskrcavanje = false&lt;br /&gt;
   }    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void trajekt(){&lt;br /&gt;
   while(1){&lt;br /&gt;
      region(t){&lt;br /&gt;
         t.ukrcavanje = true&lt;br /&gt;
         await(t.ukrcavanje == false)&lt;br /&gt;
      }&lt;br /&gt;
      preveziVozila()&lt;br /&gt;
      region(t){&lt;br /&gt;
         t.ukrcavanje = true&lt;br /&gt;
         await(t.ukrcavanje == false)&lt;br /&gt;
      }&lt;br /&gt;
      vratiSeNazad()&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи синхрону размену порука написати дистрибуирано решење за проблем филозофа који ручавају (&#039;&#039;The Dining Philosophers Problem&#039;&#039;). Код дистрибуираног решења процеси филозофи комуницирају само са процесима виљушкама и процеси виљушке комуницирају само са процесима филозофима.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void philosopher(int ID, chan&amp;lt;string&amp;gt; release, chan&amp;lt;char&amp;gt; forkL, chan&amp;lt;char&amp;gt; forkR) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Филозофирамо&lt;br /&gt;
        if (ID % 2 == 0) {&lt;br /&gt;
            forkL.send(&#039;R&#039;);&lt;br /&gt;
            forkR.send(&#039;L&#039;);&lt;br /&gt;
        } else {&lt;br /&gt;
            forkR.send(&#039;L&#039;);&lt;br /&gt;
            forkL.send(&#039;R&#039;);&lt;br /&gt;
        }&lt;br /&gt;
        // Једемо&lt;br /&gt;
        release.receive();&lt;br /&gt;
        release.receive();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void fork(chan&amp;lt;char&amp;gt; acquire, chan&amp;lt;string&amp;gt; philL, chan&amp;lt;string&amp;gt; philR) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        char dir = acquire.receive();&lt;br /&gt;
        if (dir == &#039;L&#039;) {&lt;br /&gt;
            philL.send(&amp;quot;release&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
            philR.send(&amp;quot;release&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоји P произвођача и C потрошача који деле заједнички бафер капацитета B (&#039;&#039;Atomic broadcast problem&#039;&#039;). Произвођачи генеришу производ по производ на које чекају свих C потрошача. Сваки потрошач мора да прими производе у тачно оном редоследу у коме су произведени, мада различити потрошачи могу у исто време да узимају различите производе. Решити проблем користећи &#039;&#039;C-Linda&#039;&#039;, тако да се ни у ком тренутку у заједничком простору не нађе више од B производа.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Тагови коришћени у овој имплементацији су:&lt;br /&gt;
* &amp;lt;code&amp;gt;buffer empty&amp;lt;/code&amp;gt;: постоји места да произвођач убацује у бафер&lt;br /&gt;
* &amp;lt;code&amp;gt;buffer full&amp;lt;/code&amp;gt;: постоје производи у баферу које потрошачи могу да читају&lt;br /&gt;
* &amp;lt;code&amp;gt;product&amp;lt;/code&amp;gt;: производ са одређеним индексом у низу&lt;br /&gt;
* &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: величина бафера&lt;br /&gt;
* &amp;lt;code&amp;gt;producer index&amp;lt;/code&amp;gt;: индекс у баферу до ког су произвођачи стигли са попуњавањем&lt;br /&gt;
* &amp;lt;code&amp;gt;consumer count&amp;lt;/code&amp;gt;: број потрошача који је преостао да прочита производ на одређеном индексу&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int P = 100;&lt;br /&gt;
const int C = 100;&lt;br /&gt;
const int B = 100;&lt;br /&gt;
&lt;br /&gt;
struct Product {};&lt;br /&gt;
Product produce();&lt;br /&gt;
void consume(Product p);&lt;br /&gt;
&lt;br /&gt;
int producer() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        Product p = produce();&lt;br /&gt;
        in(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
        int index;&lt;br /&gt;
        in(&amp;quot;producer index&amp;quot;, &amp;amp;index);&lt;br /&gt;
        out(&amp;quot;product&amp;quot;, index, p);&lt;br /&gt;
        out(&amp;quot;consumer count&amp;quot;, index, C);&lt;br /&gt;
        out(&amp;quot;producer index&amp;quot;, (index + 1) % B);&lt;br /&gt;
        int size;&lt;br /&gt;
        in(&amp;quot;size&amp;quot;, &amp;amp;size);&lt;br /&gt;
        if (size == 0) {&lt;br /&gt;
            out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        out(&amp;quot;size&amp;quot;, ++size);&lt;br /&gt;
        if (size &amp;lt; B) {&lt;br /&gt;
            out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void consumer() {&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        in(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        Product p;&lt;br /&gt;
        int count;&lt;br /&gt;
        in(&amp;quot;consumer count&amp;quot;, index, &amp;amp;count);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            in(&amp;quot;product&amp;quot;, index, &amp;amp;p);&lt;br /&gt;
            int size;&lt;br /&gt;
            in(&amp;quot;size&amp;quot;, &amp;amp;size);&lt;br /&gt;
            if (size == B) {&lt;br /&gt;
                out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            out(&amp;quot;size&amp;quot;, --size);&lt;br /&gt;
            if (size &amp;gt; 0) {&lt;br /&gt;
                out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            rd(&amp;quot;product&amp;quot;, index, &amp;amp;p);&lt;br /&gt;
            out(&amp;quot;consumer count&amp;quot;, index, count-1);&lt;br /&gt;
            out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        index = (index + 1) % B;&lt;br /&gt;
        consume(p);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initialize() {&lt;br /&gt;
    out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
    out(&amp;quot;size&amp;quot;, 0);&lt;br /&gt;
    out(&amp;quot;producer index&amp;quot;, 0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2022&amp;diff=4683</id>
		<title>КДП/Јун 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2022&amp;diff=4683"/>
		<updated>2022-07-25T02:40:13Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит у јунском испитном року 2022. године&#039;&#039;&#039; одржан је 14. јуна. Поставка овог рока још увек није доступна са странице предмета.&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Објасните шта је &#039;&#039;At-Most-Once-Property&#039;&#039;. Објасните зашто, када је испуњена та особина, критична референца има особине атомске акције. Дати два примера у којима су по два процеса.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоје три особе међу којима треба изабрати једну (&#039;&#039;The Odd Person Wins Game&#039;&#039;). Свака од тих особа поседује новчић који има две стране. Избор особе се одиграва тако што свака особа независно баца свој новчић. Уколико постоји особа којој је новчић пао на другу страну у односу на преостале особе, онда се та особа изабира. Уколико све особе имају исто постављен новчић, поступак се понавља све док се не изабере једна. Особе након сваког бацања морају да знају да ли су изабране или не или се поступак понавља. Користећи семафоре написати програм који описује понашање особе. Ниједној особи не треба давати предност на основу њиховог идентификатора.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Монитор треба да регулише распоред уласка пацијената на преглед код једног лекара. Сваки регуларно заказани пацијент је пре приступања том монитору добио један од 12 хронолошки поређаних полусатних интервала за тај дан (прављење распореда није део задатка). Пацијент када дође на преглед (не мора да буде тачан) позива мониторску процедуру &amp;lt;code&amp;gt;želim_da_se_pregledam&amp;lt;/code&amp;gt; и том приликом доставља ID и почетак полусатног интервала у коме је њему заказан преглед. Ако је лекар заузет, пацијенти на чекању ће се поређати на основу хронолошког редоследа у распореду за тај дан. Лекар позива мониторску процедуру &amp;lt;code&amp;gt;sledeći&amp;lt;/code&amp;gt;, која враћа идентификатор следећег пацијента, када жели да прегледа следећег пацијента. Ако нема пацијената у том случају, лекар се поствља у стање чекања из кога излази када наиђе први пацијент. Написати овакав монитор користећи дисциплину &#039;&#039;Signal and Wait&#039;&#039; и условне променљиве код којих нема приоритетних редова чекања. Монитор не треба да садржи синхронизацију везану за крај прегледа.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// pretpostavka da je ID 0-11&lt;br /&gt;
class Monitor{&lt;br /&gt;
   private Condition[] awaitPatient[12], awaitDoctor;&lt;br /&gt;
   private boolean[] patientChecked[12];  // da li je pacijent pregledan, potreban zbog signal&amp;amp;wait&lt;br /&gt;
   private PriorityQueue&amp;lt;&amp;lt;int,int&amp;gt;&amp;gt; pq;   // prioritetni red slot,ID, sortiran po slotu&lt;br /&gt;
   &lt;br /&gt;
   public synchornized void zelim_da_se_pregledam(int ID, int slot){&lt;br /&gt;
      pq.add(slot,ID);&lt;br /&gt;
      awaitDoctor.signal();&lt;br /&gt;
      // potrebno jer signal&amp;amp;wait predaje kontrolu pa je pacijent u medjuvremenu mozda pregledan&lt;br /&gt;
      if(patientChecked[ID]==false) awaitPatient[ID].wait();   &lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   public synchronized int sledeci(){&lt;br /&gt;
      if(pq.size()==0) awaitDoctor.wait();&lt;br /&gt;
      int id = pq.pop().first;&lt;br /&gt;
      pq.remove();&lt;br /&gt;
      patientChecked[id] = true;&lt;br /&gt;
      awaitPatient[id].signal()     &lt;br /&gt;
      return id;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Трајект за превоз аутомобила, камиона и аутобуса превози возила са обале на обалу. Трајект поседује N позиција које су линеарно постављене једна иза друге. Камион заузима три, аутобус две, а аутомобил једну позицију. Возила чекају на трајект у реду и на њега улазе једно по једно по редоследу у којем чекају у реду, док на трајекту има места. Када наредно возило у реду за трајект нема места да се укрца или када је трајект пун, трајект започиње превоз возила на другу обалу. На другој обали возила се искрцавају у редоследу супротном од редоследа у којем су се укрцала. Када се сва возила искрцају, празан трајект се враћа на почетну обалу. Користећи регионе написати програм који решава овај проблем.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Trajekt{&lt;br /&gt;
   int cap = N;&lt;br /&gt;
   int cur=0, next=0, ticketIn = 0, ticketOut = 0;&lt;br /&gt;
   boolean ukrcavanje = false, iskrcavanje = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Trajekt t;&lt;br /&gt;
&lt;br /&gt;
void vozilo(int space){&lt;br /&gt;
   int myTicketIn, myTicketOut;&lt;br /&gt;
   regiot(t){&lt;br /&gt;
      myTicketIn = t.ticketIn++;&lt;br /&gt;
      await(t.ukrcavanje+=true &amp;amp;&amp;amp; t.ticketIn==myTicketIn)&lt;br /&gt;
      if(t.cap - t.curr &amp;lt; space){&lt;br /&gt;
         // ukoliko nema mesta za mene, posalji trajekt pa sacekaj da se vrati&lt;br /&gt;
         t.ukrcavanje = false;&lt;br /&gt;
         await(t.ukrcavanje==true)&lt;br /&gt;
      }&lt;br /&gt;
      t.curr+=space;&lt;br /&gt;
      myTicketOut = ++t.ticketOut;&lt;br /&gt;
      t.next++;&lt;br /&gt;
      if(t.curr==t.cap)&lt;br /&gt;
         t.ukrcavanje=false;&lt;br /&gt;
   }&lt;br /&gt;
   // prevozimo se&lt;br /&gt;
   region(t){&lt;br /&gt;
      await(t.iskrcavanje==true &amp;amp;&amp;amp; myTicketOut==t.ticketOut)&lt;br /&gt;
      if(--t.ticketOut == 0)&lt;br /&gt;
         // ukoliko sam poslednji, posalji trajekt nazad&lt;br /&gt;
         t.iskrcavanje = false&lt;br /&gt;
   }    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void trajekt(){&lt;br /&gt;
   while(1){&lt;br /&gt;
      region(t){&lt;br /&gt;
         t.ukrcavanje = true&lt;br /&gt;
         await(t.ukrcavanje == false)&lt;br /&gt;
      }&lt;br /&gt;
      preveziVozila()&lt;br /&gt;
      region(t){&lt;br /&gt;
         t.ukrcavanje = true&lt;br /&gt;
         await(t.ukrcavanje == false)&lt;br /&gt;
      }&lt;br /&gt;
      vratiSeNazad()&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи синхрону размену порука написати дистрибуирано решење за проблем филозофа који ручавају (&#039;&#039;The Dining Philosophers Problem&#039;&#039;). Код дистрибуираног решења процеси филозофи комуницирају само са процесима виљушкама и процеси виљушке комуницирају само са процесима филозофима.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void philosopher(int ID, chan&amp;lt;string&amp;gt; release, chan&amp;lt;char&amp;gt; forkL, chan&amp;lt;char&amp;gt; forkR) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Филозофирамо&lt;br /&gt;
        if (ID % 2 == 0) {&lt;br /&gt;
            forkL.send(&#039;R&#039;);&lt;br /&gt;
            forkR.send(&#039;L&#039;);&lt;br /&gt;
        } else {&lt;br /&gt;
            forkR.send(&#039;L&#039;);&lt;br /&gt;
            forkL.send(&#039;R&#039;);&lt;br /&gt;
        }&lt;br /&gt;
        // Једемо&lt;br /&gt;
        release.receive();&lt;br /&gt;
        release.receive();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void fork(chan&amp;lt;char&amp;gt; acquire, chan&amp;lt;string&amp;gt; philL, chan&amp;lt;string&amp;gt; philR) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        char dir = acquire.receive();&lt;br /&gt;
        if (dir == &#039;L&#039;) {&lt;br /&gt;
            philL.send(&amp;quot;release&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
            philR.send(&amp;quot;release&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоји P произвођача и C потрошача који деле заједнички бафер капацитета B (&#039;&#039;Atomic broadcast problem&#039;&#039;). Произвођачи генеришу производ по производ на које чекају свих C потрошача. Сваки потрошач мора да прими производе у тачно оном редоследу у коме су произведени, мада различити потрошачи могу у исто време да узимају различите производе. Решити проблем користећи &#039;&#039;C-Linda&#039;&#039;, тако да се ни у ком тренутку у заједничком простору не нађе више од B производа.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Тагови коришћени у овој имплементацији су:&lt;br /&gt;
* &amp;lt;code&amp;gt;buffer empty&amp;lt;/code&amp;gt;: постоји места да произвођач убацује у бафер&lt;br /&gt;
* &amp;lt;code&amp;gt;buffer full&amp;lt;/code&amp;gt;: постоје производи у баферу које потрошачи могу да читају&lt;br /&gt;
* &amp;lt;code&amp;gt;product&amp;lt;/code&amp;gt;: производ са одређеним индексом у низу&lt;br /&gt;
* &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: величина бафера&lt;br /&gt;
* &amp;lt;code&amp;gt;producer index&amp;lt;/code&amp;gt;: индекс у баферу до ког су произвођачи стигли са попуњавањем&lt;br /&gt;
* &amp;lt;code&amp;gt;consumer count&amp;lt;/code&amp;gt;: број потрошача који је преостао да прочита производ на одређеном индексу&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int P = 100;&lt;br /&gt;
const int C = 100;&lt;br /&gt;
const int B = 100;&lt;br /&gt;
&lt;br /&gt;
struct Product {};&lt;br /&gt;
Product produce();&lt;br /&gt;
void consume(Product p);&lt;br /&gt;
&lt;br /&gt;
int producer() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        Product p = produce();&lt;br /&gt;
        in(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
        int index;&lt;br /&gt;
        in(&amp;quot;producer index&amp;quot;, &amp;amp;index);&lt;br /&gt;
        out(&amp;quot;product&amp;quot;, index, p);&lt;br /&gt;
        out(&amp;quot;consumer count&amp;quot;, index, C);&lt;br /&gt;
        out(&amp;quot;producer index&amp;quot;, (index + 1) % B);&lt;br /&gt;
        int size;&lt;br /&gt;
        in(&amp;quot;size&amp;quot;, &amp;amp;size);&lt;br /&gt;
        if (size == 0) {&lt;br /&gt;
            out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        out(&amp;quot;size&amp;quot;, ++size);&lt;br /&gt;
        if (size &amp;lt; B) {&lt;br /&gt;
            out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void consumer() {&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        in(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        Product p;&lt;br /&gt;
        int count;&lt;br /&gt;
        in(&amp;quot;consumer count&amp;quot;, index, &amp;amp;count);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            in(&amp;quot;product&amp;quot;, index, &amp;amp;p);&lt;br /&gt;
            int size;&lt;br /&gt;
            in(&amp;quot;size&amp;quot;, &amp;amp;size);&lt;br /&gt;
            if (size == B) {&lt;br /&gt;
                out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            out(&amp;quot;size&amp;quot;, --size);&lt;br /&gt;
            if (size &amp;gt; 0) {&lt;br /&gt;
                out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            rd(&amp;quot;product&amp;quot;, index, &amp;amp;p);&lt;br /&gt;
            out(&amp;quot;consumer count&amp;quot;, index, count-1);&lt;br /&gt;
            out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        index = (index + 1) % B;&lt;br /&gt;
        consume(p);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initialize() {&lt;br /&gt;
    out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
    out(&amp;quot;size&amp;quot;, 0);&lt;br /&gt;
    out(&amp;quot;producer index&amp;quot;, 0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2022&amp;diff=4682</id>
		<title>КДП/Јун 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2022&amp;diff=4682"/>
		<updated>2022-07-25T02:30:29Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит у јунском испитном року 2022. године&#039;&#039;&#039; одржан је 14. јуна. Поставка овог рока још увек није доступна са странице предмета.&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Објасните шта је &#039;&#039;At-Most-Once-Property&#039;&#039;. Објасните зашто, када је испуњена та особина, критична референца има особине атомске акције. Дати два примера у којима су по два процеса.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоје три особе међу којима треба изабрати једну (&#039;&#039;The Odd Person Wins Game&#039;&#039;). Свака од тих особа поседује новчић који има две стране. Избор особе се одиграва тако што свака особа независно баца свој новчић. Уколико постоји особа којој је новчић пао на другу страну у односу на преостале особе, онда се та особа изабира. Уколико све особе имају исто постављен новчић, поступак се понавља све док се не изабере једна. Особе након сваког бацања морају да знају да ли су изабране или не или се поступак понавља. Користећи семафоре написати програм који описује понашање особе. Ниједној особи не треба давати предност на основу њиховог идентификатора.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Монитор треба да регулише распоред уласка пацијената на преглед код једног лекара. Сваки регуларно заказани пацијент је пре приступања том монитору добио један од 12 хронолошки поређаних полусатних интервала за тај дан (прављење распореда није део задатка). Пацијент када дође на преглед (не мора да буде тачан) позива мониторску процедуру &amp;lt;code&amp;gt;želim_da_se_pregledam&amp;lt;/code&amp;gt; и том приликом доставља ID и почетак полусатног интервала у коме је њему заказан преглед. Ако је лекар заузет, пацијенти на чекању ће се поређати на основу хронолошког редоследа у распореду за тај дан. Лекар позива мониторску процедуру &amp;lt;code&amp;gt;sledeći&amp;lt;/code&amp;gt;, која враћа идентификатор следећег пацијента, када жели да прегледа следећег пацијента. Ако нема пацијената у том случају, лекар се поствља у стање чекања из кога излази када наиђе први пацијент. Написати овакав монитор користећи дисциплину &#039;&#039;Signal and Wait&#039;&#039; и условне променљиве код којих нема приоритетних редова чекања. Монитор не треба да садржи синхронизацију везану за крај прегледа.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Трајект за превоз аутомобила, камиона и аутобуса превози возила са обале на обалу. Трајект поседује N позиција које су линеарно постављене једна иза друге. Камион заузима три, аутобус две, а аутомобил једну позицију. Возила чекају на трајект у реду и на њега улазе једно по једно по редоследу у којем чекају у реду, док на трајекту има места. Када наредно возило у реду за трајект нема места да се укрца или када је трајект пун, трајект започиње превоз возила на другу обалу. На другој обали возила се искрцавају у редоследу супротном од редоследа у којем су се укрцала. Када се сва возила искрцају, празан трајект се враћа на почетну обалу. Користећи регионе написати програм који решава овај проблем.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Trajekt{&lt;br /&gt;
   int cap = N;&lt;br /&gt;
   int cur=0, next=0, ticketIn = 0, ticketOut = 0;&lt;br /&gt;
   boolean ukrcavanje = false, iskrcavanje = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Trajekt t;&lt;br /&gt;
&lt;br /&gt;
void vozilo(int space){&lt;br /&gt;
   int myTicketIn, myTicketOut;&lt;br /&gt;
   regiot(t){&lt;br /&gt;
      myTicketIn = t.ticketIn++;&lt;br /&gt;
      await(t.ukrcavanje+=true &amp;amp;&amp;amp; t.ticketIn==myTicketIn)&lt;br /&gt;
      if(t.cap - t.curr &amp;lt; space){&lt;br /&gt;
         // ukoliko nema mesta za mene, posalji trajekt pa sacekaj da se vrati&lt;br /&gt;
         t.ukrcavanje = false;&lt;br /&gt;
         await(t.ukrcavanje==true)&lt;br /&gt;
      }&lt;br /&gt;
      t.curr+=space;&lt;br /&gt;
      myTicketOut = ++t.ticketOut;&lt;br /&gt;
      t.next++;&lt;br /&gt;
      if(t.curr==t.cap)&lt;br /&gt;
         t.ukrcavanje=false;&lt;br /&gt;
   }&lt;br /&gt;
   // prevozimo se&lt;br /&gt;
   region(t){&lt;br /&gt;
      await(t.iskrcavanje==true &amp;amp;&amp;amp; myTicketOut==t.ticketOut)&lt;br /&gt;
      if(--t.ticketOut == 0)&lt;br /&gt;
         // ukoliko sam poslednji, posalji trajekt nazad&lt;br /&gt;
         t.iskrcavanje = false&lt;br /&gt;
   }    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void trajekt(){&lt;br /&gt;
   while(1){&lt;br /&gt;
      region(t){&lt;br /&gt;
         t.ukrcavanje = true&lt;br /&gt;
         await(t.ukrcavanje == false)&lt;br /&gt;
      }&lt;br /&gt;
      preveziVozila()&lt;br /&gt;
      region(t){&lt;br /&gt;
         t.ukrcavanje = true&lt;br /&gt;
         await(t.ukrcavanje == false)&lt;br /&gt;
      }&lt;br /&gt;
      vratiSeNazad()&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи синхрону размену порука написати дистрибуирано решење за проблем филозофа који ручавају (&#039;&#039;The Dining Philosophers Problem&#039;&#039;). Код дистрибуираног решења процеси филозофи комуницирају само са процесима виљушкама и процеси виљушке комуницирају само са процесима филозофима.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void philosopher(int ID, chan&amp;lt;string&amp;gt; release, chan&amp;lt;char&amp;gt; forkL, chan&amp;lt;char&amp;gt; forkR) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Филозофирамо&lt;br /&gt;
        if (ID % 2 == 0) {&lt;br /&gt;
            forkL.send(&#039;R&#039;);&lt;br /&gt;
            forkR.send(&#039;L&#039;);&lt;br /&gt;
        } else {&lt;br /&gt;
            forkR.send(&#039;L&#039;);&lt;br /&gt;
            forkL.send(&#039;R&#039;);&lt;br /&gt;
        }&lt;br /&gt;
        // Једемо&lt;br /&gt;
        release.receive();&lt;br /&gt;
        release.receive();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void fork(chan&amp;lt;char&amp;gt; acquire, chan&amp;lt;string&amp;gt; philL, chan&amp;lt;string&amp;gt; philR) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        char dir = acquire.receive();&lt;br /&gt;
        if (dir == &#039;L&#039;) {&lt;br /&gt;
            philL.send(&amp;quot;release&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
            philR.send(&amp;quot;release&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоји P произвођача и C потрошача који деле заједнички бафер капацитета B (&#039;&#039;Atomic broadcast problem&#039;&#039;). Произвођачи генеришу производ по производ на које чекају свих C потрошача. Сваки потрошач мора да прими производе у тачно оном редоследу у коме су произведени, мада различити потрошачи могу у исто време да узимају различите производе. Решити проблем користећи &#039;&#039;C-Linda&#039;&#039;, тако да се ни у ком тренутку у заједничком простору не нађе више од B производа.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Тагови коришћени у овој имплементацији су:&lt;br /&gt;
* &amp;lt;code&amp;gt;buffer empty&amp;lt;/code&amp;gt;: постоји места да произвођач убацује у бафер&lt;br /&gt;
* &amp;lt;code&amp;gt;buffer full&amp;lt;/code&amp;gt;: постоје производи у баферу које потрошачи могу да читају&lt;br /&gt;
* &amp;lt;code&amp;gt;product&amp;lt;/code&amp;gt;: производ са одређеним индексом у низу&lt;br /&gt;
* &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: величина бафера&lt;br /&gt;
* &amp;lt;code&amp;gt;producer index&amp;lt;/code&amp;gt;: индекс у баферу до ког су произвођачи стигли са попуњавањем&lt;br /&gt;
* &amp;lt;code&amp;gt;consumer count&amp;lt;/code&amp;gt;: број потрошача који је преостао да прочита производ на одређеном индексу&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int P = 100;&lt;br /&gt;
const int C = 100;&lt;br /&gt;
const int B = 100;&lt;br /&gt;
&lt;br /&gt;
struct Product {};&lt;br /&gt;
Product produce();&lt;br /&gt;
void consume(Product p);&lt;br /&gt;
&lt;br /&gt;
int producer() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        Product p = produce();&lt;br /&gt;
        in(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
        int index;&lt;br /&gt;
        in(&amp;quot;producer index&amp;quot;, &amp;amp;index);&lt;br /&gt;
        out(&amp;quot;product&amp;quot;, index, p);&lt;br /&gt;
        out(&amp;quot;consumer count&amp;quot;, index, C);&lt;br /&gt;
        out(&amp;quot;producer index&amp;quot;, (index + 1) % B);&lt;br /&gt;
        int size;&lt;br /&gt;
        in(&amp;quot;size&amp;quot;, &amp;amp;size);&lt;br /&gt;
        if (size == 0) {&lt;br /&gt;
            out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        out(&amp;quot;size&amp;quot;, ++size);&lt;br /&gt;
        if (size &amp;lt; B) {&lt;br /&gt;
            out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void consumer() {&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        in(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        Product p;&lt;br /&gt;
        int count;&lt;br /&gt;
        in(&amp;quot;consumer count&amp;quot;, index, &amp;amp;count);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            in(&amp;quot;product&amp;quot;, index, &amp;amp;p);&lt;br /&gt;
            int size;&lt;br /&gt;
            in(&amp;quot;size&amp;quot;, &amp;amp;size);&lt;br /&gt;
            if (size == B) {&lt;br /&gt;
                out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            out(&amp;quot;size&amp;quot;, --size);&lt;br /&gt;
            if (size &amp;gt; 0) {&lt;br /&gt;
                out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            rd(&amp;quot;product&amp;quot;, index, &amp;amp;p);&lt;br /&gt;
            out(&amp;quot;consumer count&amp;quot;, index, count-1);&lt;br /&gt;
            out(&amp;quot;buffer full&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        index = (index + 1) % B;&lt;br /&gt;
        consume(p);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initialize() {&lt;br /&gt;
    out(&amp;quot;buffer empty&amp;quot;);&lt;br /&gt;
    out(&amp;quot;size&amp;quot;, 0);&lt;br /&gt;
    out(&amp;quot;producer index&amp;quot;, 0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%88%D1%83%D0%BB_2022&amp;diff=4476</id>
		<title>ИЕП/Јул 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%88%D1%83%D0%BB_2022&amp;diff=4476"/>
		<updated>2022-07-08T19:35:04Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Нерешен, тагови предмета и рока&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Испит у јулском року 2022. године&#039;&#039;&#039; одржан је 8. јула. Били су доступни материјали са предавања и трајао је 90 минута.&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Хостинг компанија планира да инвестира у сервер салу коју ће користити за сопствене потребе, али и за изнајмљивање. Сервер сала ће садржати 800 сервера величине 1RU(рек јунита), распоређених у рек ормане. Конфигурација сервера се састоји од 2 процесора, 64GB DRAM по процесору и два HD од 600GB. Планирани начин рада целокупне опреме 24 сати дневно, 7 дана недељно. У сваком тренутку рада сервер сале , неопходно је да постоји дежуран инжењер. Познато је да цена kWh износи 0,05. Сервери у једном реку су повезани помоћу једног рек рутера, док су сви рекови повезани једним агрегационим рутером са 128 порта. За потребе сервер сале потребан је простор од 4 метара квадратних по реку. Изнајмљивање климатизованог простора плаћа се 35 по квадрату месечно. За повезивање сервер сале на интернет користи се интернет 10Gbs по цени 3000 месечно. Плата дежурног инжењера за осмочасовно радно време је 1500 месечно. За потребе отпремања сале, компанија је узела позајмицу са фиксном каматном ратом од 5% на годишњем нивоу. Период амортизације рачунарске опреме је 3, мрежне опреме 4, а расхладне опреме 7 година.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Компонента&lt;br /&gt;
! Kaрактеристике&lt;br /&gt;
! Потрошња W&lt;br /&gt;
! Цена&lt;br /&gt;
|-&lt;br /&gt;
| Процесор&lt;br /&gt;
| 2.3GHz, 10 core&lt;br /&gt;
| 105&lt;br /&gt;
| 1200&lt;br /&gt;
|-&lt;br /&gt;
| DRAM&lt;br /&gt;
| 16GB, ECC&lt;br /&gt;
| 3.5&lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| HD&lt;br /&gt;
| 600GB, 10krpm, AFR=0.5%&lt;br /&gt;
| 6.5&lt;br /&gt;
| 700&lt;br /&gt;
|-&lt;br /&gt;
| Рек рутер&lt;br /&gt;
| 48 порта, 2RU&lt;br /&gt;
| 500&lt;br /&gt;
| 2500&lt;br /&gt;
|-&lt;br /&gt;
| Агрег. рутер&lt;br /&gt;
| 128 порта, 2RU&lt;br /&gt;
| 3000&lt;br /&gt;
| 70000&lt;br /&gt;
|-&lt;br /&gt;
| Рек орман&lt;br /&gt;
| 42RU&lt;br /&gt;
| 0&lt;br /&gt;
| 900&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Колико износе капитална улагања за опремање описане сервер сале. Занемарити потребу за резерцним деловима ?&lt;br /&gt;
&lt;br /&gt;
Колико износе оперативна улагања за месец дана планираног начина рада сервера ?&lt;br /&gt;
== ==&lt;br /&gt;
Ова компанија разматра издавање датог рачунарског центра клијентима из целог света за постављање њихових сајтова. Параметри приступа једном просечбном сајту су такви да се сваки посетилац задржава 8 минута у за то време посети 9 страница. Да би се учитала једна страница потребна су 24 захтева кастатичким елем, 10 ка динамичним. Код сваког динамичног потребна су у просеку 4 приступа бази података. Унутар вуртуелне машине на једном језгру време обраде статичких захтева износи 0.25мс и захтева 3GB, динамичких 0.4ms и захтева 5GB, a приступ бази траје 2.5ms и захтева 6GB меморије. Веб, апликативни и сервер БП се налазе на различитим виртуелним серверима. Број корисника током ноћи је 10 000 на сат, а током дана 30 000 на сат. Дан и ноћ су по 12 сати, сигурносни фактор је 2.5 .&lt;br /&gt;
Ова компанија наплаћује само сервере према приложеним конфигурацијама и ценовнику, док остале компоненте обезбеђује бесплатно својим клијентима.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Тип&lt;br /&gt;
! Цена по сату&lt;br /&gt;
! Број језгара&lt;br /&gt;
! Меморија GB&lt;br /&gt;
|-&lt;br /&gt;
| Стандардна мала&lt;br /&gt;
| 0.085&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Стандардна велика&lt;br /&gt;
| 0.340&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Стандардна веома велика &lt;br /&gt;
| 0.680&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
Предложити минималну хардверску конфугурацију за један овакав сајт. Уколико више њих задовољава услов одабрати најјефтинију&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
Сервери се могу користити да обављају функцију фајервола или балансера. Уколико се сервери користе као фајервол онда може обрадити 20000 захтева у секунди, а ако се користи као балансер онда се може обрадити 40000 захтева у секунди.&lt;br /&gt;
&lt;br /&gt;
Колико минимално оваквих сајтова хостинг компанија треба да хостује да би се инвестиција исплатила ?&lt;br /&gt;
&lt;br /&gt;
[[Категорија:ИЕП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%88%D1%83%D0%BB_2022&amp;diff=4475</id>
		<title>ИЕП/Јул 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%88%D1%83%D0%BB_2022&amp;diff=4475"/>
		<updated>2022-07-08T19:33:27Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Јулски рок испитни део, К3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит у јулском року 2022. године&#039;&#039;&#039; одржан је 8. јула. Били су доступни материјали са предавања и трајао је 90 минута.&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Хостинг компанија планира да инвестира у сервер салу коју ће користити за сопствене потребе, али и за изнајмљивање. Сервер сала ће садржати 800 сервера величине 1RU(рек јунита), распоређених у рек ормане. Конфигурација сервера се састоји од 2 процесора, 64GB DRAM по процесору и два HD од 600GB. Планирани начин рада целокупне опреме 24 сати дневно, 7 дана недељно. У сваком тренутку рада сервер сале , неопходно је да постоји дежуран инжењер. Познато је да цена kWh износи 0,05. Сервери у једном реку су повезани помоћу једног рек рутера, док су сви рекови повезани једним агрегационим рутером са 128 порта. За потребе сервер сале потребан је простор од 4 метара квадратних по реку. Изнајмљивање климатизованог простора плаћа се 35 по квадрату месечно. За повезивање сервер сале на интернет користи се интернет 10Gbs по цени 3000 месечно. Плата дежурног инжењера за осмочасовно радно време је 1500 месечно. За потребе отпремања сале, компанија је узела позајмицу са фиксном каматном ратом од 5% на годишњем нивоу. Период амортизације рачунарске опреме је 3, мрежне опреме 4, а расхладне опреме 7 година.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Компонента&lt;br /&gt;
! Kaрактеристике&lt;br /&gt;
! Потрошња W&lt;br /&gt;
! Цена&lt;br /&gt;
|-&lt;br /&gt;
| Процесор&lt;br /&gt;
| 2.3GHz, 10 core&lt;br /&gt;
| 105&lt;br /&gt;
| 1200&lt;br /&gt;
|-&lt;br /&gt;
| DRAM&lt;br /&gt;
| 16GB, ECC&lt;br /&gt;
| 3.5&lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| HD&lt;br /&gt;
| 600GB, 10krpm, AFR=0.5%&lt;br /&gt;
| 6.5&lt;br /&gt;
| 700&lt;br /&gt;
|-&lt;br /&gt;
| Рек рутер&lt;br /&gt;
| 48 порта, 2RU&lt;br /&gt;
| 500&lt;br /&gt;
| 2500&lt;br /&gt;
|-&lt;br /&gt;
| Агрег. рутер&lt;br /&gt;
| 128 порта, 2RU&lt;br /&gt;
| 3000&lt;br /&gt;
| 70000&lt;br /&gt;
|-&lt;br /&gt;
| Рек орман&lt;br /&gt;
| 42RU&lt;br /&gt;
| 0&lt;br /&gt;
| 900&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Колико износе капитална улагања за опремање описане сервер сале. Занемарити потребу за резерцним деловима ?&lt;br /&gt;
&lt;br /&gt;
Колико износе оперативна улагања за месец дана планираног начина рада сервера ?&lt;br /&gt;
== ==&lt;br /&gt;
Ова компанија разматра издавање датог рачунарског центра клијентима из целог света за постављање њихових сајтова. Параметри приступа једном просечбном сајту су такви да се сваки посетилац задржава 8 минута у за то време посети 9 страница. Да би се учитала једна страница потребна су 24 захтева кастатичким елем, 10 ка динамичним. Код сваког динамичног потребна су у просеку 4 приступа бази података. Унутар вуртуелне машине на једном језгру време обраде статичких захтева износи 0.25мс и захтева 3GB, динамичких 0.4ms и захтева 5GB, a приступ бази траје 2.5ms и захтева 6GB меморије. Веб, апликативни и сервер БП се налазе на различитим виртуелним серверима. Број корисника током ноћи је 10 000 на сат, а током дана 30 000 на сат. Дан и ноћ су по 12 сати, сигурносни фактор је 2.5 .&lt;br /&gt;
Ова компанија наплаћује само сервере према приложеним конфигурацијама и ценовнику, док остале компоненте обезбеђује бесплатно својим клијентима.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Тип&lt;br /&gt;
! Цена по сату&lt;br /&gt;
! Број језгара&lt;br /&gt;
! Меморија GB&lt;br /&gt;
|-&lt;br /&gt;
| Стандардна мала&lt;br /&gt;
| 0.085&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Стандардна велика&lt;br /&gt;
| 0.340&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Стандардна веома велика &lt;br /&gt;
| 0.680&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
Предложити минималну хардверску конфугурацију за један овакав сајт. Уколико више њих задовољава услов одабрати најјефтинију&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
Сервери се могу користити да обављају функцију фајервола или балансера. Уколико се сервери користе као фајервол онда може обрадити 20000 захтева у секунди, а ако се користи као балансер онда се може обрадити 40000 захтева у секунди.&lt;br /&gt;
&lt;br /&gt;
Колико минимално оваквих сајтова хостинг компанија треба да хостује да би се инвестиција исплатила&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A12/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2022&amp;diff=4043</id>
		<title>ОС2/Фебруар 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A12/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2022&amp;diff=4043"/>
		<updated>2022-02-23T10:42:18Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Добар линк до задатака на страници&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.rs/OS2/rokovi/2022/februar/Feb%202022.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Da li se kod algoritma raspoređivanja Multi-level Feedback Queue Scheduling procesu koji&lt;br /&gt;
je došao u red spremnih iz stanja suspenzije po pravilu smanjuje ili povećava prioritet? Zašto? &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Ставља се у виши(приоритетнији) ред.&lt;br /&gt;
* Зато што смо прошлом проценом преценили дужину његовог налета или смо потценили његову интерактивност. Зато стављамо процес у ред у којем ће краће чекати следећи налет, али ће имати и мање време налета&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na programskom jeziku Java realizovati monitor sa dve operacije, op1 i op2, pri čemu&lt;br /&gt;
monitor održava sledeću invarijantu: ukupan broj izvršavanja operacije op1 je uvek ne manji od&lt;br /&gt;
broja izvršavanja operacije op2. Zanemariti prekoračenje ograničenog opsega celobrojnih brojača. &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public class MyMonitor{&lt;br /&gt;
   private int count;&lt;br /&gt;
   &lt;br /&gt;
   public synchronized void op1(){&lt;br /&gt;
      this.count+=1;&lt;br /&gt;
      if(this.count == 1) notifyAll()&lt;br /&gt;
   }&lt;br /&gt;
   public synchronized void op2(){&lt;br /&gt;
      while(--this.count &amp;lt;0)wait()&lt;br /&gt;
   }&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;
U koju kategoriju međuprocesne komunikacije po pitanju imenovanja spada koncept&lt;br /&gt;
cevovoda (pipe)? Obrazložiti. Šta je osnovna motivacija za ovakav koncept? &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Индиректно, не морамо знати тачну индетификацију процеса којем шаљемо/узимамо податке, већ само име цевовода&lt;br /&gt;
* Мотивација је распрезање кода што омогућава лакше одржавање и независно мењање кода&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti i precizno objasniti bar dva načina sprečavanja mrtve blokade ukidanjem uslova&lt;br /&gt;
„držanje i čekanje“ (hold and wait). &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Процеси не смеју тражити нови ресурс уколико већ имају/треже неки други. За hold&amp;amp;wait су потребна бар 2 ресурса што овај приступ онемогућава.&lt;br /&gt;
* Процеси све своје ресурсе морају тражити истовремено, уколико не добију све све које заузели ослобађају па после неког времена покушавају поново све док не добију све тражене ресурсе. За hold&amp;amp;wait морамо држати неки ресурс док тражимо други, а овим приступом се то онемогућава јер се сви ресурси заузимају истовремено&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dati sistem primenjuje izbegavanje mrtve blokade. Tri procesa, P1, P2 i P3, najavila su&lt;br /&gt;
korišćenje oba resursa R1 i R2. Nacrtati graf zauzeća resursa nakon sledeće sekvence: P1 traži R1,&lt;br /&gt;
P3 traži R2, P2 traži R1, P1 oslobađa R1. Ako više procesa čeka na isti resurs, dobiće ga najpre onaj&lt;br /&gt;
koji ga je najranije tražio&lt;br /&gt;
=== Skica rešenja ===&lt;br /&gt;
* П1 најављује коришћење свих ресурса&lt;br /&gt;
* П2 тражи Р1, најављује корићење Р2&lt;br /&gt;
* П3 користи Р2, најављује коришћење Р1&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kod LRU algoritma zamene stranica korišćenjem dodatnih bita referenciranja, navesti šta&lt;br /&gt;
tačno radi operativni sistem u sledeće dve situacije: &lt;br /&gt;
* periodično ažuriranje evidencije: &lt;br /&gt;
* izbor žrtve za izbacivanje:&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Шифтује додатне бите референцирања и у њих убацује бит референцирања који угађа хардвер који потом ресетује на 0&lt;br /&gt;
* Путује по кружној листи и понавља корак под а док не наиђе на страницу којој сви бити референцирања 0&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem primenjuje sistem parnjaka (buddy) za alokaciju memorije. Stanje sistema u&lt;br /&gt;
datom trenutku prikazano je na sledećoj slici: &lt;br /&gt;
* X__XX__X_X__X___&lt;br /&gt;
Svako polje predstavlja jedan elementarni blok (najmanju jedinicu alokacije), a blokovi označeni sa&lt;br /&gt;
X su zauzeti. Prikazati stanje nakon zahteva za alokaciju segmenta veličine dva bloka: &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* X__XX__X_XXXX___ или X__XX__X_X__X_XX&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koja RAID konfiguracija ima veći efektivni prostor za podatke, RAID0 ili RAID1, i koliki&lt;br /&gt;
je efektivni prostor za 2N jednakih diskova? A koja ima veću pouzdanost? &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Већу поузданост има RAID0,а већи ефективни простор има RAID1&lt;br /&gt;
* У овом примеру RAID0 има 2N, a RAID1 има N ефективног простора&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti koncept modula jezgra u sistemu Linux, uključujući i motivaciju za&lt;br /&gt;
uvođenje tog kocnepta.  &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Језгро линукса &amp;quot;довлачи&amp;quot; потребне делове кода тек када му затребају, нпр драјвери, иначе их не садржи у свом коду. &lt;br /&gt;
* Мотивација је жеља да линукс може радити и на хардверски лошим рачунарима&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koji način alokacije fajlova primenjuje Linux ext fajl sistem? Ukratko ga objasniti. &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Индексни, са највише 3 нивоа индирекције. &lt;br /&gt;
* Налик је алокацији страница за процесе коришћењем PCBa.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС2]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A12/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2022&amp;diff=4042</id>
		<title>ОС2/Фебруар 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A12/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2022&amp;diff=4042"/>
		<updated>2022-02-23T10:40:47Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Нова страница: {{tocright}} [http://os.etf.rs/OS2/rokovi/2021/avgust/OS2%20avgust%202021.pdf Zadaci na stranici predmeta.]  == 1. zadatak == === Postavka === Da li se kod algoritma ra…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.rs/OS2/rokovi/2021/avgust/OS2%20avgust%202021.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Da li se kod algoritma raspoređivanja Multi-level Feedback Queue Scheduling procesu koji&lt;br /&gt;
je došao u red spremnih iz stanja suspenzije po pravilu smanjuje ili povećava prioritet? Zašto? &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Ставља се у виши(приоритетнији) ред.&lt;br /&gt;
* Зато што смо прошлом проценом преценили дужину његовог налета или смо потценили његову интерактивност. Зато стављамо процес у ред у којем ће краће чекати следећи налет, али ће имати и мање време налета&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na programskom jeziku Java realizovati monitor sa dve operacije, op1 i op2, pri čemu&lt;br /&gt;
monitor održava sledeću invarijantu: ukupan broj izvršavanja operacije op1 je uvek ne manji od&lt;br /&gt;
broja izvršavanja operacije op2. Zanemariti prekoračenje ograničenog opsega celobrojnih brojača. &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public class MyMonitor{&lt;br /&gt;
   private int count;&lt;br /&gt;
   &lt;br /&gt;
   public synchronized void op1(){&lt;br /&gt;
      this.count+=1;&lt;br /&gt;
      if(this.count == 1) notifyAll()&lt;br /&gt;
   }&lt;br /&gt;
   public synchronized void op2(){&lt;br /&gt;
      while(--this.count &amp;lt;0)wait()&lt;br /&gt;
   }&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;
U koju kategoriju međuprocesne komunikacije po pitanju imenovanja spada koncept&lt;br /&gt;
cevovoda (pipe)? Obrazložiti. Šta je osnovna motivacija za ovakav koncept? &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Индиректно, не морамо знати тачну индетификацију процеса којем шаљемо/узимамо податке, већ само име цевовода&lt;br /&gt;
* Мотивација је распрезање кода што омогућава лакше одржавање и независно мењање кода&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti i precizno objasniti bar dva načina sprečavanja mrtve blokade ukidanjem uslova&lt;br /&gt;
„držanje i čekanje“ (hold and wait). &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Процеси не смеју тражити нови ресурс уколико већ имају/треже неки други. За hold&amp;amp;wait су потребна бар 2 ресурса што овај приступ онемогућава.&lt;br /&gt;
* Процеси све своје ресурсе морају тражити истовремено, уколико не добију све све које заузели ослобађају па после неког времена покушавају поново све док не добију све тражене ресурсе. За hold&amp;amp;wait морамо држати неки ресурс док тражимо други, а овим приступом се то онемогућава јер се сви ресурси заузимају истовремено&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dati sistem primenjuje izbegavanje mrtve blokade. Tri procesa, P1, P2 i P3, najavila su&lt;br /&gt;
korišćenje oba resursa R1 i R2. Nacrtati graf zauzeća resursa nakon sledeće sekvence: P1 traži R1,&lt;br /&gt;
P3 traži R2, P2 traži R1, P1 oslobađa R1. Ako više procesa čeka na isti resurs, dobiće ga najpre onaj&lt;br /&gt;
koji ga je najranije tražio&lt;br /&gt;
=== Skica rešenja ===&lt;br /&gt;
* П1 најављује коришћење свих ресурса&lt;br /&gt;
* П2 тражи Р1, најављује корићење Р2&lt;br /&gt;
* П3 користи Р2, најављује коришћење Р1&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kod LRU algoritma zamene stranica korišćenjem dodatnih bita referenciranja, navesti šta&lt;br /&gt;
tačno radi operativni sistem u sledeće dve situacije: &lt;br /&gt;
* periodično ažuriranje evidencije: &lt;br /&gt;
* izbor žrtve za izbacivanje:&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Шифтује додатне бите референцирања и у њих убацује бит референцирања који угађа хардвер који потом ресетује на 0&lt;br /&gt;
* Путује по кружној листи и понавља корак под а док не наиђе на страницу којој сви бити референцирања 0&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem primenjuje sistem parnjaka (buddy) za alokaciju memorije. Stanje sistema u&lt;br /&gt;
datom trenutku prikazano je na sledećoj slici: &lt;br /&gt;
* X__XX__X_X__X___&lt;br /&gt;
Svako polje predstavlja jedan elementarni blok (najmanju jedinicu alokacije), a blokovi označeni sa&lt;br /&gt;
X su zauzeti. Prikazati stanje nakon zahteva za alokaciju segmenta veličine dva bloka: &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* X__XX__X_XXXX___ или X__XX__X_X__X_XX&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koja RAID konfiguracija ima veći efektivni prostor za podatke, RAID0 ili RAID1, i koliki&lt;br /&gt;
je efektivni prostor za 2N jednakih diskova? A koja ima veću pouzdanost? &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Већу поузданост има RAID0,а већи ефективни простор има RAID1&lt;br /&gt;
* У овом примеру RAID0 има 2N, a RAID1 има N ефективног простора&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti koncept modula jezgra u sistemu Linux, uključujući i motivaciju za&lt;br /&gt;
uvođenje tog kocnepta.  &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Језгро линукса &amp;quot;довлачи&amp;quot; потребне делове кода тек када му затребају, нпр драјвери, иначе их не садржи у свом коду. &lt;br /&gt;
* Мотивација је жеља да линукс може радити и на хардверски лошим рачунарима&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koji način alokacije fajlova primenjuje Linux ext fajl sistem? Ukratko ga objasniti. &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Индексни, са највише 3 нивоа индирекције. &lt;br /&gt;
* Налик је алокацији страница за процесе коришћењем PCBa.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС2]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%9E1/%D0%9A1_2021&amp;diff=3271</id>
		<title>ОО1/К1 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%9E1/%D0%9A1_2021&amp;diff=3271"/>
		<updated>2021-12-11T11:25:10Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* 4. zadatak */  Фали текст задатка, а врв је овако гласио&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Data je sledeća klasa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class X {&lt;br /&gt;
public:&lt;br /&gt;
    X(int a) {}&lt;br /&gt;
    explicit X(const string&amp;amp;) {}&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Koji isečci koda od navedenih će se uspešno izvršiti?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; class=&amp;quot;solution&amp;quot;&amp;gt;&lt;br /&gt;
X f() {&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
int main() {&lt;br /&gt;
    f();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
X g() {&lt;br /&gt;
    return &amp;quot;abc&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
int main() {&lt;br /&gt;
    g();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; class=&amp;quot;solution&amp;quot;&amp;gt;X(3);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; class=&amp;quot;solution&amp;quot;&amp;gt;X(&amp;quot;abc&amp;quot;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
Šta može da stoji umesto dela označenog sa *** a da se program uspešno prevodi?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int i = 0;&lt;br /&gt;
enum dan {PON, UTO, SRE};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    dan s;&lt;br /&gt;
    int j = 1;&lt;br /&gt;
    class L {&lt;br /&gt;
        void g() {&lt;br /&gt;
            ***&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;s = UTO;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;j++;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;i++;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;i = PON;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Šta ispisuje sledeći kod na programskom jeziku C++:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void f1(int&amp;amp; a) { cout &amp;lt;&amp;lt; 2; }&lt;br /&gt;
void f2(const int&amp;amp; a) { cout &amp;lt;&amp;lt; 1; }&lt;br /&gt;
void f3(int&amp;amp;&amp;amp; a) { cout &amp;lt;&amp;lt; 3; }&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int x = 0;&lt;br /&gt;
    const int y = 0;&lt;br /&gt;
    f1(x);&lt;br /&gt;
    f2(y);&lt;br /&gt;
    f3(x+1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;213&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
Šta ispisuje sledeći kod na programskom jeziku C++:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int x = 5;&lt;br /&gt;
&lt;br /&gt;
int f(int x) {&lt;br /&gt;
    return x = x+1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; f(x) &amp;lt;&amp;lt; ::x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;65&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
Šta u sledećem kodu može da stoji umesto dela označenog sa ### a da se on ispravno prevodi:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int a = 3;&lt;br /&gt;
    const int* const p = &amp;amp;a;&lt;br /&gt;
    ###&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;cout &amp;lt;&amp;lt; p;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;p++;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;*p = 4;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline class=&amp;quot;solution&amp;quot;&amp;gt;cout &amp;lt;&amp;lt; *p;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
Gde se skladište sledeći podaci:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Ponuđene opcije&lt;br /&gt;
! Podaci&lt;br /&gt;
! Lokacija&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;a,b,c,d&amp;quot;&amp;gt;&lt;br /&gt;
* Privremeni podaci &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;ref&amp;gt;Naknadno je za ovaj odgovor bila priznavana opcija pod c, jer privremeni podaci mogu da se čuvaju i na steku.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Dinamički podaci &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&lt;br /&gt;
* Automatski podaci &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| &amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Heap&lt;br /&gt;
# Registri&lt;br /&gt;
# Stek&lt;br /&gt;
# EPROM&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
&amp;lt;!-- &amp;quot;bilo je nesto za proceduralne i oo jezike pa tipa ogranizacija i reupotreba koda, ali fomrulacija se ne secam.&amp;quot; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
&amp;lt;!-- &amp;quot;Dat je bio opis vidljivosti za tri stavke i treba pored da se oznaci da li je resenje public, private, protected, global, namespace, nista od navedenog.&amp;quot; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
&amp;lt;!-- &amp;quot;Da se oznaci sta je tacno za strukture ali osim da su tacni odgovori da su clanovi strukture podrazumevano javni i da klasa i struktura ne mogu imati isto ime u istom fajli ne secam se nicega&amp;quot; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
&lt;br /&gt;
== Napomene ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОО1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D1%98%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%D0%B0%D1%9A%D0%B5_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80%D0%B0/%D0%9F%D1%80%D0%BE%D0%B1%D0%BD%D0%B8_%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%B8_2021&amp;diff=3047</id>
		<title>Пројектовање софтвера/Пробни тестови 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D1%98%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%D0%B0%D1%9A%D0%B5_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80%D0%B0/%D0%9F%D1%80%D0%BE%D0%B1%D0%BD%D0%B8_%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%B8_2021&amp;diff=3047"/>
		<updated>2021-10-25T19:30:05Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: исправка трећехг задатка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== Пробни тест ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Повезати појмове са одговарајућим дефиницијама принципа ОО модела.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Опције&lt;br /&gt;
! Дефиниција&lt;br /&gt;
! Појам&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;a,b,c&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tipizacija&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;рerzistencija&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;konkurentnost&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| &amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Oсобина по којој се постојање објекта протеже кроз време&lt;br /&gt;
# Особине да се објекти различитих класа не могу уопште или се могу замењивати на одређене начине &lt;br /&gt;
# Особина која разликује активне објекте од пасивних&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Навести симбол пакетског права приступа на језику UML&amp;lt;br&amp;gt;&lt;br /&gt;
Одговор: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;~&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
Означите тачна тврђења везана за класе у језику UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Класа је опис скупа објеката који деле исту спецификацију карактеристика (атрибута и операција), ограничења и семантике.&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Подразумевано право приступа за атрибуте/операције у класи је јавно&amp;lt;/span&amp;gt;&lt;br /&gt;
# Добро осмишљена класа треба да има велики број одговорности&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Атрибуте/операције класе је могуће груписати уз навођење описног префиксног назива групе&amp;lt;/span&amp;gt;&lt;br /&gt;
# Симбол класе може да садржи празан одељак за атрибуте/операције само ако одговарајућа класа нема атрибуте/операције&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
Која од следећих особина испуњава пакет на језику UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет је власник садржаних елемената&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет може да садржи друге пакете&amp;lt;/span&amp;gt;&lt;br /&gt;
# Пакет је физичка ствар&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет представља простор имена&amp;lt;/span&amp;gt;&lt;br /&gt;
# Пакет је стереотип класе&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
Ако се у пакету А налази јавна класа Х, да би се у пакету В та класа могла користити директним именовањем Х, али да се у пакету С не би могла користити под именом B::X, коју релацију треба успоставити између пакета В и пакета А ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# Стереотип асоцијације &amp;lt;&amp;lt;private&amp;gt;&amp;gt;&lt;br /&gt;
# Стереотип генерализације &amp;lt;&amp;lt;public&amp;gt;&amp;gt;&lt;br /&gt;
# Стереотип зависности &amp;lt;&amp;lt;import&amp;gt;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Стереотип зависности &amp;lt;&amp;lt;access&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Стереотип реализације &amp;lt;&amp;lt;include&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 6. задатак ===&lt;br /&gt;
Шта представља дијаграм објеката у UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# Дијаграм за приказ динамичких аспеката модела&lt;br /&gt;
# Дијаграм представља формалну спецификацију модела&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм за приказ статичких аспеката модела&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм представља само пример и служи за боље разумевање модела &amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм за приказ физичких аспеката модела&amp;lt;/span&amp;gt;&lt;br /&gt;
# Дијаграм за приказ логичких аспеката модела&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7. задатак ===&lt;br /&gt;
Која од понуђених тврњи су тачне за пројектни узорак УНИКАТ (енлг. Singleton) ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Уникат спада у објектне узорке стварања&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Иако то није по канонском узорку УНИКАТ, једноставно (по малој цени) се може контролисано повећати број дозвољених објеката&amp;lt;/span&amp;gt;&lt;br /&gt;
# Конструктор класе која имплементира објектни узорак увек мора бити приватан&lt;br /&gt;
# Добар примерак класе која га имплементира је услужна (енлг. utility) класа&lt;br /&gt;
# Канонски узорак не ограничава број објеката класе Unikat, која имплементира пројектни узорак&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8. задатак ===&lt;br /&gt;
Колико различитих типова учесника постоји у пројектном узорку &#039;&#039;Prototip&#039;&#039; ?&lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 9. задатак ===&lt;br /&gt;
У апликацији графичког едитора се примењује узорак &#039;&#039;Sastav&#039;&#039;. Упарити поједине називе класа у апликацији са називима учесника у пројектном узорку&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Опције&lt;br /&gt;
! Учесници&lt;br /&gt;
! Класе &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;a,b,c,d&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;List&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Sklop&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Element&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Klijent&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;d&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| &amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Crtez&lt;br /&gt;
# Linija&lt;br /&gt;
# Grafik&lt;br /&gt;
# Editor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 10. задатак ===&lt;br /&gt;
Пројектни узорак који не дозвољава више његових примерака&amp;lt;br&amp;gt;&lt;br /&gt;
Одговор: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;Unikat&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Пројектовање_софтвера]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D1%98%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%D0%B0%D1%9A%D0%B5_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80%D0%B0/%D0%9F%D1%80%D0%BE%D0%B1%D0%BD%D0%B8_%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%B8_2021&amp;diff=3043</id>
		<title>Пројектовање софтвера/Пробни тестови 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D1%98%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%D0%B0%D1%9A%D0%B5_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80%D0%B0/%D0%9F%D1%80%D0%BE%D0%B1%D0%BD%D0%B8_%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%B8_2021&amp;diff=3043"/>
		<updated>2021-10-25T19:09:43Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* 1. задатак */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== Пробни тест ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Повезати појмове са одговарајућим дефиницијама принципа ОО модела.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Опције&lt;br /&gt;
! Дефиниција&lt;br /&gt;
! Појам&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;a,b,c&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tipizacija&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;рerzistencija&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;konkurentnost&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| &amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Oсобина по којој се постојање објекта протеже кроз време&lt;br /&gt;
# Особине да се објекти различитих класа не могу уопште или се могу замењивати на одређене начине &lt;br /&gt;
# Особина која разликује активне објекте од пасивних&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Навести симбол пакетског права приступа на језику UML&lt;br /&gt;
Одговор: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;~&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
Означите тачна тврђења везана за класе у језику UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Класа је опис скупа објеката који деле исту спецификацију карактеристика (атрибута и операција), ограничења и семантике.&amp;lt;/span&amp;gt;&lt;br /&gt;
# Подразумевано право приступа за атрибуте/операције у класи је јавно&lt;br /&gt;
# Добро осмишљена класа треба да има велики број одговорности&lt;br /&gt;
# Атрибуте/операције класе је могуће груписати уз навођење описног префиксног назива групе&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Симбол класе може да садржи празан одељак за атрибуте/операције само ако одговарајућа класанема атрибуте/операције&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
Која од следећих особина испуњава пакет на језику UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет је власник садржаних елемената&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет може да садржи друге пакете&amp;lt;/span&amp;gt;&lt;br /&gt;
# Пакет је физичка ствар&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет представља простор имена&amp;lt;/span&amp;gt;&lt;br /&gt;
# Пакет је стереотип класе&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
Ако се у пакету А налази јавна класа Х, да би се у пакету В та класа могла користити директним именовањем Х, али да се у пакету С не би могла користити под именом B::X, коју релацију треба успоставити између пакета В и пакета А ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# Стереотип асоцијације &amp;lt;&amp;lt;private&amp;gt;&amp;gt;&lt;br /&gt;
# Стереотип генерализације &amp;lt;&amp;lt;public&amp;gt;&amp;gt;&lt;br /&gt;
# Стереотип зависности &amp;lt;&amp;lt;import&amp;gt;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Стереотип зависности &amp;lt;&amp;lt;access&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Стереотип реализације &amp;lt;&amp;lt;include&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 6. задатак ===&lt;br /&gt;
Шта представља дијаграм објеката у UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# Дијаграм за приказ динамичких аспеката модела&lt;br /&gt;
# Дијаграм представља формалну спецификацију модела&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм за приказ статичких аспеката модела&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм представља само пример и служи за боље разумевање модела &amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм за приказ физичких аспеката модела&amp;lt;/span&amp;gt;&lt;br /&gt;
# Дијаграм за приказ логичких аспеката модела&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7. задатак ===&lt;br /&gt;
Која од понуђених тврњи су тачне за пројектни узорак УНИКАТ (енлг. Singleton) ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Уникат спада у објектне узорке стварања&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Иако то није по канонском узорку УНИКАТ, једноставно (по малој цени) се може контролисано повећати број дозвољених објеката&amp;lt;/span&amp;gt;&lt;br /&gt;
# Конструктор класе која имплементира објектни узорак увек мора бити приватан&lt;br /&gt;
# Добар примерак класе која га имплементира је услужна (енлг. utility) класа&lt;br /&gt;
# Канонски узорак не ограничава број објеката класе Unikat, која имплементира пројектни узорак&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8. задатак ===&lt;br /&gt;
Колико различитих типова учесника постоји у пројектном узорку &#039;&#039;Prototip&#039;&#039; ?&lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 9. задатак ===&lt;br /&gt;
У апликацији графичког едитора се примењује узорак &#039;&#039;Sastav&#039;&#039;. Упарити поједине називе класа у апликацији са називима учесника у пројектном узорку&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Опције&lt;br /&gt;
! Учесници&lt;br /&gt;
! Класе &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;a,b,c,d&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;List&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Sklop&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Element&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Klijent&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;d&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| &amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Crtez&lt;br /&gt;
# Linija&lt;br /&gt;
# Grafik&lt;br /&gt;
# Editor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 10. задатак ===&lt;br /&gt;
Пројектни узорак који не дозвољава више његових примерака&lt;br /&gt;
Одговор: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;Unikat&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Пројектовање_софтвера]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D1%98%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%D0%B0%D1%9A%D0%B5_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80%D0%B0/%D0%9F%D1%80%D0%BE%D0%B1%D0%BD%D0%B8_%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%B8_2021&amp;diff=3042</id>
		<title>Пројектовање софтвера/Пробни тестови 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D1%98%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%D0%B0%D1%9A%D0%B5_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80%D0%B0/%D0%9F%D1%80%D0%BE%D0%B1%D0%BD%D0%B8_%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%B8_2021&amp;diff=3042"/>
		<updated>2021-10-25T19:09:06Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Пробни тест, 10*. питање нисам сц па нзм тачан текст&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== Пробни тест ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Повезати појмове са одговарајућим дефиницијама принципа ОО модела.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Опције&lt;br /&gt;
! Дефиниција&lt;br /&gt;
! Појам&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;a,b,c&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tipizacija&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;erzistencija&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;konkurentnost&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| &amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Oсобина по којој се постојање објекта протеже кроз време&lt;br /&gt;
# Особине да се објекти различитих класа не могу уопште или се могу замењивати на одређене начине &lt;br /&gt;
# Особина која разликује активне објекте од пасивних&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Навести симбол пакетског права приступа на језику UML&lt;br /&gt;
Одговор: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;~&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
Означите тачна тврђења везана за класе у језику UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Класа је опис скупа објеката који деле исту спецификацију карактеристика (атрибута и операција), ограничења и семантике.&amp;lt;/span&amp;gt;&lt;br /&gt;
# Подразумевано право приступа за атрибуте/операције у класи је јавно&lt;br /&gt;
# Добро осмишљена класа треба да има велики број одговорности&lt;br /&gt;
# Атрибуте/операције класе је могуће груписати уз навођење описног префиксног назива групе&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Симбол класе може да садржи празан одељак за атрибуте/операције само ако одговарајућа класанема атрибуте/операције&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
Која од следећих особина испуњава пакет на језику UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет је власник садржаних елемената&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет може да садржи друге пакете&amp;lt;/span&amp;gt;&lt;br /&gt;
# Пакет је физичка ствар&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Пакет представља простор имена&amp;lt;/span&amp;gt;&lt;br /&gt;
# Пакет је стереотип класе&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
Ако се у пакету А налази јавна класа Х, да би се у пакету В та класа могла користити директним именовањем Х, али да се у пакету С не би могла користити под именом B::X, коју релацију треба успоставити између пакета В и пакета А ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# Стереотип асоцијације &amp;lt;&amp;lt;private&amp;gt;&amp;gt;&lt;br /&gt;
# Стереотип генерализације &amp;lt;&amp;lt;public&amp;gt;&amp;gt;&lt;br /&gt;
# Стереотип зависности &amp;lt;&amp;lt;import&amp;gt;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Стереотип зависности &amp;lt;&amp;lt;access&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Стереотип реализације &amp;lt;&amp;lt;include&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 6. задатак ===&lt;br /&gt;
Шта представља дијаграм објеката у UML ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# Дијаграм за приказ динамичких аспеката модела&lt;br /&gt;
# Дијаграм представља формалну спецификацију модела&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм за приказ статичких аспеката модела&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм представља само пример и служи за боље разумевање модела &amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Дијаграм за приказ физичких аспеката модела&amp;lt;/span&amp;gt;&lt;br /&gt;
# Дијаграм за приказ логичких аспеката модела&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7. задатак ===&lt;br /&gt;
Која од понуђених тврњи су тачне за пројектни узорак УНИКАТ (енлг. Singleton) ?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Уникат спада у објектне узорке стварања&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Иако то није по канонском узорку УНИКАТ, једноставно (по малој цени) се може контролисано повећати број дозвољених објеката&amp;lt;/span&amp;gt;&lt;br /&gt;
# Конструктор класе која имплементира објектни узорак увек мора бити приватан&lt;br /&gt;
# Добар примерак класе која га имплементира је услужна (енлг. utility) класа&lt;br /&gt;
# Канонски узорак не ограничава број објеката класе Unikat, која имплементира пројектни узорак&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8. задатак ===&lt;br /&gt;
Колико различитих типова учесника постоји у пројектном узорку &#039;&#039;Prototip&#039;&#039; ?&lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 9. задатак ===&lt;br /&gt;
У апликацији графичког едитора се примењује узорак &#039;&#039;Sastav&#039;&#039;. Упарити поједине називе класа у апликацији са називима учесника у пројектном узорку&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Опције&lt;br /&gt;
! Учесници&lt;br /&gt;
! Класе &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;a,b,c,d&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;List&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Sklop&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Element&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Klijent&amp;lt;/code&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;d&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| &amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Crtez&lt;br /&gt;
# Linija&lt;br /&gt;
# Grafik&lt;br /&gt;
# Editor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 10. задатак ===&lt;br /&gt;
Пројектни узорак који не дозвољава више његових примерака&lt;br /&gt;
Одговор: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;Unikat&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Пројектовање_софтвера]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2021&amp;diff=3030</id>
		<title>Вероватноћа и статистика/Август 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2021&amp;diff=3030"/>
		<updated>2021-10-04T16:38:50Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: август овог лета&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
== Испитни део - Статистика ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Дате су променљиве X и Y, &amp;lt;math&amp;gt;Y = 2X + 1&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt; X \sim Uni[ \,0,2] \,&amp;lt;/math&amp;gt;. Нађи &amp;lt;math&amp;gt; \rho ( \,X,Y) \,&amp;lt;/math&amp;gt; . &lt;br /&gt;
&lt;br /&gt;
==== Решењe ====&lt;br /&gt;
*1&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
#Како гласи Чебишевљева неједнакост, извести је.&lt;br /&gt;
#Уколико ради 10 000 сијалица, одредити горњу границу за &amp;lt;math&amp;gt; P( \,|X-EX| &amp;lt;200)\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Решење ====  &lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
За {| border=&amp;quot;1&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
| -1&lt;br /&gt;
| 0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; \frac{p}{3}&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt; \frac{p}{3}&amp;lt;/math&amp;gt;&lt;br /&gt;
| 1-p&lt;br /&gt;
|&amp;lt;math&amp;gt; \frac{p}{3}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
оценити р са&amp;lt;br&amp;gt;&lt;br /&gt;
#Методом момента, узорак 1,1,0,0,0,-1,-1,-1,0,2,2,2&lt;br /&gt;
#Методом максималне веродостојности&lt;br /&gt;
==== Решење ==== &lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Имамо 213 места на авиону, шанса да путник не дође на резервисано место је 0.0995. Колико максимално резервација можемо направити ако шанса да свако има место буде већа од 0.9 ?&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Одредити област одбацивања за &amp;lt;math&amp;gt; \mathcal{N}( \,\mu,80^2) \, &amp;lt;/math&amp;gt; , узорак је величине 100. Одредити и вероватноћу грешке другог реда уколико је &amp;lt;math&amp;gt; \mu = 210&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Вероватноћа_и_статистика]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%88%D1%83%D0%BB_2021&amp;diff=3028</id>
		<title>Вероватноћа и статистика/Јул 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%88%D1%83%D0%BB_2021&amp;diff=3028"/>
		<updated>2021-10-03T17:50:08Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Поставка */  латек грешка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Испитни део - Статистика ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Наћи &amp;lt;math&amp;gt;\rho&amp;lt;/math&amp;gt;(x,y) и испитати јесу ли зависни&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
|x\y&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0.05&lt;br /&gt;
|0.05&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|0.1&lt;br /&gt;
|0.1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|0.1&lt;br /&gt;
|0.1&lt;br /&gt;
|0.2&lt;br /&gt;
|0.05&lt;br /&gt;
|0.1&lt;br /&gt;
|0.05&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
На журку нам долази 120 људи, вероватноће да ће неко узети 0,1 или 2 сендвича су &amp;lt;math&amp;gt;\frac{1}{4},\frac{1}{2},\frac{1}{4}&amp;lt;/math&amp;gt;&lt;br /&gt;
Колико је најмање сендвича потребно да се направи да би са вероватноћом од 0.95 били сигурни да ће их бити за све ? Коју теорему сте користили да би сте решили задатак ?&lt;br /&gt;
&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Коришћењем ЦГТ долази се до око 130 потребних сендвича&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Нека променљива имаваријансу 1.44 код је очекивање непознато. Приликом оцена параметра добијен је интервал поверењадужине 0.9408. Колики треба бити узорак да би се ово десило ? &amp;lt;math&amp;gt; \alpha = 0.05 &amp;lt;/math&amp;gt;&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Одузимањем горње и доње границе интерцала долазимо до израза из којег извлачима n које је минимум 25&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Нека су &amp;lt;math&amp;gt; X_1, X_2,...X_n&amp;lt;/math&amp;gt; променљиве са расподелом  &amp;lt;math&amp;gt; Exp(\frac{1}{\lambda}) &amp;lt;/math&amp;gt; . Aко је U оцена параметра добијена методом максималне веродостојности, V оцена &amp;lt;math&amp;gt; \lambda = min\{X_1, X_2,...X_n\}&amp;lt;/math&amp;gt;. Која од оцена је боља ?&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Мерен је промет аутомобила на неком месту у периоду од 100 минута (ауто/минут). Резултату су дати у табели. Да ли ови резултати прате Пуасонову расподелу ?&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
| Бр. аутомобила&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
|Бр. проласка&lt;br /&gt;
|8&lt;br /&gt;
|28&lt;br /&gt;
|31&lt;br /&gt;
|18&lt;br /&gt;
|9&lt;br /&gt;
|6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Прво морамо оценити параметар Пуасонове расподеле јер није дат. После правимо табелу за тестирање непараметарских хипотеза &amp;lt;math&amp;gt; \chi^2 &amp;lt;/math&amp;gt; јер је Пуасонова раподела дискретна. Након тога користимо квантили из  &amp;lt;math&amp;gt; \chi^2 &amp;lt;/math&amp;gt;  расподеле са степеном слободе 4 (6-1-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Вероватноћа_и_статистика]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%88%D1%83%D0%BB_2021&amp;diff=3027</id>
		<title>Вероватноћа и статистика/Јул 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%88%D1%83%D0%BB_2021&amp;diff=3027"/>
		<updated>2021-10-03T17:48:47Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Нова страница: == Испитни део - Статистика == === 1. задатак === ==== Поставка ==== Наћи &amp;lt;math&amp;gt;\rho&amp;lt;/math&amp;gt;(x,y) и испитати јесу л…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Испитни део - Статистика ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Наћи &amp;lt;math&amp;gt;\rho&amp;lt;/math&amp;gt;(x,y) и испитати јесу ли зависни&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
|x\y&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0.05&lt;br /&gt;
|0.05&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|0.1&lt;br /&gt;
|0.1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|0.1&lt;br /&gt;
|0.1&lt;br /&gt;
|0.2&lt;br /&gt;
|0.05&lt;br /&gt;
|0.1&lt;br /&gt;
|0.05&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
На журку нам долази 120 људи, вероватноће да ће неко узети 0,1 или 2 сендвича су &amp;lt;math&amp;gt;\frac{1}{4},\frac{1}{2},frac{1}{4}&amp;lt;/math&amp;gt;&lt;br /&gt;
Колико је најмање сендвича потребно да се направи да би са вероватноћом од 0.95 били сигурни да ће их бити за све ? Коју теорему сте користили да би сте решили задатак ?&lt;br /&gt;
&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Коришћењем ЦГТ долази се до око 130 потребних сендвича&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Нека променљива имаваријансу 1.44 код је очекивање непознато. Приликом оцена параметра добијен је интервал поверењадужине 0.9408. Колики треба бити узорак да би се ово десило ? &amp;lt;math&amp;gt; \alpha = 0.05 &amp;lt;/math&amp;gt;&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Одузимањем горње и доње границе интерцала долазимо до израза из којег извлачима n које је минимум 25&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Нека су &amp;lt;math&amp;gt; X_1, X_2,...X_n&amp;lt;/math&amp;gt; променљиве са расподелом  &amp;lt;math&amp;gt; Exp(\frac{1}{\lambda}) &amp;lt;/math&amp;gt; . Aко је U оцена параметра добијена методом максималне веродостојности, V оцена &amp;lt;math&amp;gt; \lambda = min\{X_1, X_2,...X_n\}&amp;lt;/math&amp;gt;. Која од оцена је боља ?&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Мерен је промет аутомобила на неком месту у периоду од 100 минута (ауто/минут). Резултату су дати у табели. Да ли ови резултати прате Пуасонову расподелу ?&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
| Бр. аутомобила&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
|Бр. проласка&lt;br /&gt;
|8&lt;br /&gt;
|28&lt;br /&gt;
|31&lt;br /&gt;
|18&lt;br /&gt;
|9&lt;br /&gt;
|6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Прво морамо оценити параметар Пуасонове расподеле јер није дат. После правимо табелу за тестирање непараметарских хипотеза &amp;lt;math&amp;gt; \chi^2 &amp;lt;/math&amp;gt; јер је Пуасонова раподела дискретна. Након тога користимо квантили из  &amp;lt;math&amp;gt; \chi^2 &amp;lt;/math&amp;gt;  расподеле са степеном слободе 4 (6-1-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Вероватноћа_и_статистика]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%9A_2021&amp;diff=3026</id>
		<title>Вероватноћа и статистика/К 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%9A_2021&amp;diff=3026"/>
		<updated>2021-10-03T17:10:34Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Колоквијум - Вероватноћа ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Искра и Марко се налазе између 15-18h, ко први дође чека 45 минута пре него што оде. Колика је шанса да ће се Марко и Искра срести.&lt;br /&gt;
&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Направити координатни систем који иде до 3 по обе осе. Повући праве &amp;lt;math&amp;gt;y = x + \frac{1}{4}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y = x - \frac{1}{4}&amp;lt;/math&amp;gt;, y=1 и x=1. Одредити површину шестоугла који они одређују у то је вероватноћа њиховог сусрета.&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
# Шта је условна вероватноћа ? &lt;br /&gt;
# Дефинисати независност догађаја?&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Дати дефиницију потпуне веротноће.&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Фирма А проиводи 23%, В 52%, а фирма С 27% производа. Шкарта има у А 1%, В 3% а у С 5%. Колика је шанса да смо изабрали неки неисправан производ са гомиле на којој се налазе производи само ових компанија ? &lt;br /&gt;
==== Скица Решења ====&lt;br /&gt;
Коришћењем формуле тоталне вероватноће и Бајесовe формулe се долази до решења&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
У просеку у пошту уђе две особе у 3 минута. Колика је вероватноћа да у 5 минута не уђе ниједна особа, а колика да је ушло бар 3 особе&lt;br /&gt;
&lt;br /&gt;
==== Скица Решења ====&lt;br /&gt;
Ретки догађаји као што је и овај имају Пуасонову расподелу. Пондеришемо број особа на 5 минута и израчунамо P(0) за ниједну и &amp;lt;br&amp;gt; 1 - [ P(0) + P(1) + P(2) ] за 3+ (преко инверзног догађаја).&lt;br /&gt;
&lt;br /&gt;
=== 6. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Написати дефиницију математичког очекивања и навести његове особине&lt;br /&gt;
&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 7. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Ако је Х непрекидна случајна променљива са густином &amp;lt;math&amp;gt;fx&amp;lt;/math&amp;gt; и расподелом &amp;lt;math&amp;gt;Fx&amp;lt;/math&amp;gt; одредити густину и расподелу за &amp;lt;math&amp;gt; Y=|X| &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Вероватноћа_и_статистика]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%9A%D0%9F_2021&amp;diff=3025</id>
		<title>Вероватноћа и статистика/КП 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%9A%D0%9F_2021&amp;diff=3025"/>
		<updated>2021-10-03T17:09:19Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Колоквијум - Вероватноћа ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Навести аксиоме вероватноће&lt;br /&gt;
&lt;br /&gt;
====  Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Бинарни сигнал може послати апарат А,В и С са шансама за слање са А,В,С од &amp;lt;math&amp;gt; \frac{1}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; \frac{1}{3}&amp;lt;/math&amp;gt; и&amp;lt;math&amp;gt; \frac{1}{6}&amp;lt;/math&amp;gt; респективно. Ако је послат сигнал са А, он садржи 20% јединица, са В садржи 30% док са С садржи 40% јединица. Примљен је сигнал од 10 знака са 4 јединице. Одредити вероватноћу да је сигнал послат са апарата В.&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Користити формулу тоталне вероватноће и Бајесову формулу&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
У пошту уђе једна особа у 9 минута. Одредити вероватноћу да у 9 минута : &amp;lt;br&amp;gt;&lt;br /&gt;
*Уђе више од три особе&lt;br /&gt;
*Не уђе ни једна особа&lt;br /&gt;
==== Решење ====&lt;br /&gt;
Ретки догађаји као што је и овај имају Пуасонову расподелу. Пондеришемо број особа на 9 минута и израчунамо P(0) за нула особа и &lt;br /&gt;
1 - [ P(0) + P(1) + P(2) ] за 3+ особе (преко инверзног догађаја).&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Навести дефиницију варијансе и три теорије њене особине.&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Штап дужине 3 метра јеполомљен.  Наћи расподелу и густину површине правоугаоника којег бисмо добили његовим деловима&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Вероватноћа_и_статистика]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%9A%D0%9F_2021&amp;diff=3024</id>
		<title>Вероватноћа и статистика/КП 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%9A%D0%9F_2021&amp;diff=3024"/>
		<updated>2021-10-03T17:01:52Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: страница поправног колоквијума 2021&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Колоквијум - Вероватноћа ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Навести аксиоме вероватноће&lt;br /&gt;
&lt;br /&gt;
====  Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Бинарни сигнал може послати апарат А,В и С са шансама за слање са А,В,С од &amp;lt;math&amp;gt; \frac{1}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; \frac{1}{3}&amp;lt;/math&amp;gt; и&amp;lt;math&amp;gt; \frac{1}{6}&amp;lt;/math&amp;gt; респективно. Ако је послат сигнал са А, он садржи 20% јединица, са В садржи 30% док са С садржи 40% јединица. Примљен је сигнал од 10 знака са 4 јединице. Одредити вероватноћу да је сигнал послат са апарата В.&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Користити формулу тоталне вероватноће и Бајесову формулу&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
У пошту уђе једна особа у 9 минута. Одредити вероватноћу да у 9 минута : &amp;lt;br&amp;gt;&lt;br /&gt;
*Уђе више од три особе&lt;br /&gt;
*Не уђе ни једна особа&lt;br /&gt;
==== Решење ====&lt;br /&gt;
Ретки догађаји као што је и овај имају Пуасонову расподелу. Пондеришемо број особа на 9 минута и израчунамо P(0) за нула особа и &lt;br /&gt;
1 - [ P(0) + P(1) + P(2) ] за 3+ особе (преко инверзног догађаја).&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Навести дефиницију варијансе и три теорије њене особине.&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Штап дужине 3 метра јеполомљен.  Наћи расподелу и густину површине правоугаоника којег бисмо добили његовим деловима&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Вероватноћа_и_статистика]]&lt;br /&gt;
[[Категорија:Колоквијуми]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0&amp;diff=3023</id>
		<title>Вероватноћа и статистика</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0&amp;diff=3023"/>
		<updated>2021-10-03T15:04:07Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: брисање редундантног линка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Вероватноћа и статистика&#039;&#039;&#039; је изборни предмет у четвртом семестру.&lt;br /&gt;
&lt;br /&gt;
== Странице ==&lt;br /&gt;
* [http://matematika.etf.bg.ac.rs/predmeti/vis.htm Страница предмета]&lt;br /&gt;
&amp;lt;!-- * [http://elearning.rcub.bg.ac.rs будући Moodle курс] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Корисне везе ==&lt;br /&gt;
{{Материјали&lt;br /&gt;
| vuk            = 1-BD4Q8qtq_R10M1Bn-kKO0f4EY8nm4UN &amp;lt;!-- идентификациони број директоријума, после https://drive.google.com/drive/folders/ --&amp;gt;&lt;br /&gt;
| box            = 8381665857 &amp;lt;!-- број директоријума, после https://app.box.com/s/0r50je333z1qyypz0h3rm0iqb9s0d64f/folder/ --&amp;gt;&lt;br /&gt;
| scientificmind = IR2VIS &amp;lt;!-- назив директоријума, после http://etf.scientificmind.net/ --&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
== Испитни рокови ==&lt;br /&gt;
{{#dpl:&lt;br /&gt;
| titleregexp     = Вероватноћа_и_статистика/.*&lt;br /&gt;
| noresultsheader = Тренутно нема решених рокова.&lt;br /&gt;
| format          = ,\n* [[%PAGE%|²{#invoke:String¦sub¦%PAGE%¦26¦-1}²]],,&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Потребна помоћ ==&lt;br /&gt;
* {{zadaci|postavke}}&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Четврти семестар]]&lt;br /&gt;
[[Категорија:Изборни предмети]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0&amp;diff=3022</id>
		<title>Вероватноћа и статистика</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0&amp;diff=3022"/>
		<updated>2021-10-03T15:01:21Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Вероватноћа и статистика&#039;&#039;&#039; је изборни предмет у четвртом семестру.&lt;br /&gt;
&lt;br /&gt;
== Странице ==&lt;br /&gt;
* [http://matematika.etf.bg.ac.rs/predmeti/vis.htm Страница предмета]&lt;br /&gt;
&amp;lt;!-- * [http://elearning.rcub.bg.ac.rs будући Moodle курс] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Корисне везе ==&lt;br /&gt;
{{Материјали&lt;br /&gt;
| vuk            = 1-BD4Q8qtq_R10M1Bn-kKO0f4EY8nm4UN &amp;lt;!-- идентификациони број директоријума, после https://drive.google.com/drive/folders/ --&amp;gt;&lt;br /&gt;
| box            = 8381665857 &amp;lt;!-- број директоријума, после https://app.box.com/s/0r50je333z1qyypz0h3rm0iqb9s0d64f/folder/ --&amp;gt;&lt;br /&gt;
| scientificmind = IR2VIS &amp;lt;!-- назив директоријума, после http://etf.scientificmind.net/ --&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
== Испитни рокови ==&lt;br /&gt;
{{#dpl:&lt;br /&gt;
| titleregexp     = Вероватноћа_и_статистика/.*&lt;br /&gt;
| noresultsheader = Тренутно нема решених рокова.&lt;br /&gt;
| format          = ,\n* [[%PAGE%|²{#invoke:String¦sub¦%PAGE%¦26¦-1}²]],,&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Колоквијуми ==&lt;br /&gt;
* [[Вероватноћа_и_статистика/К_2021|Колоквијум 2021 - регуларни]]&lt;br /&gt;
&lt;br /&gt;
== Потребна помоћ ==&lt;br /&gt;
* {{zadaci|postavke}}&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Четврти семестар]]&lt;br /&gt;
[[Категорија:Изборни предмети]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%9A_2021&amp;diff=3020</id>
		<title>Вероватноћа и статистика/К 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%9A_2021&amp;diff=3020"/>
		<updated>2021-10-03T14:52:16Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Овогодишњи регуларни колоквијум&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Колоквијум - Вероватноћа ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Искра и Марко се налазе између 15-18h, ко први дође чека 45 минута пре него што оде. Колика је шанса да ће се Марко и Искра срести.&lt;br /&gt;
&lt;br /&gt;
==== Скица решења ====&lt;br /&gt;
Направити координатни систем који иде до 3 по обе осе. Повући праве &amp;lt;math&amp;gt;y = x + \frac{1}{4}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y = x - \frac{1}{4}&amp;lt;/math&amp;gt;, y=1 и x=1. Одредити површину шестоугла који они одређују у то је вероватноћа њиховог сусрета.&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
# Шта је условна вероватноћа ? &lt;br /&gt;
# Дефинисати независност догађаја?&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Дати дефиницију потпуне веротноће.&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Фирма А проиводи 23%, В 52%, а фирма С 27% производа. Шкарта има у А 1%, В 3% а у С 5%. Колика је шанса да смо изабрали неки неисправан производ са гомиле на којој се налазе производи само ових компанија ? &lt;br /&gt;
==== Скица Решења ====&lt;br /&gt;
Коришћењем формуле тоталне вероватноће и Бајесовe формулe се долази до решења&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
У просеку у пошту уђе две особе у 3 минута. Колика је вероватноћа да у 5 минута не уђе ниједна особа, а колика да је ушло бар 3 особе&lt;br /&gt;
&lt;br /&gt;
==== Скица Решења ====&lt;br /&gt;
Ретки догађаји као што је и овај имају Пуасонову расподелу. Пондеришемо број особа на 5 минута и израчунамо P(0) за ниједну и &amp;lt;br&amp;gt; 1 - [ P(0) + P(1) + P(2) ] за 3+ (преко инверзног догађаја).&lt;br /&gt;
&lt;br /&gt;
=== 6. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Написати дефиницију математичког очекивања и навести његове особине&lt;br /&gt;
&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
=== 7. задатак ===&lt;br /&gt;
==== Поставка ====&lt;br /&gt;
Ако је Х непрекидна случајна променљива са густином &amp;lt;math&amp;gt;fx&amp;lt;/math&amp;gt; и расподелом &amp;lt;math&amp;gt;Fx&amp;lt;/math&amp;gt; одредити густину и расподелу за &amp;lt;math&amp;gt; Y=|X| &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Решење ====&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Вероватноћа_и_статистика]]&lt;br /&gt;
[[Категорија:Колоквијуми]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2015&amp;diff=3019</id>
		<title>ОС1/Фебруар 2015</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2015&amp;diff=3019"/>
		<updated>2021-10-03T14:02:52Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Додатне мане уколико немамо спулинг&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2015/feb/OS1%20Feb%202015.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je bio osnovni motiv za uvođenje multiprogramiranja u računarske sisteme?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Септембар 2011#1. zadatak|septembarskog roka 2011]].&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog dvoadresnog RISC procesora sa &#039;&#039;load/store&#039;&#039; arhitekturom napisati program koji vrši prenos bloka podataka iz memorije na izlazni uređaj tehnikom programiranog izlaza korišćenjem prekida. Samostalno usvojiti potrebne detaljne pretpostavke. &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;
		LD R3, #0&lt;br /&gt;
		ST [ctrl], #0..1&lt;br /&gt;
wait:	CMP R3, #1&lt;br /&gt;
		JNZ wait&lt;br /&gt;
		&lt;br /&gt;
intr:	LD R0, [R1]&lt;br /&gt;
		ST [data], R0&lt;br /&gt;
		INC R1&lt;br /&gt;
		DEC R2&lt;br /&gt;
		JNZ ret&lt;br /&gt;
		ST  R3, #1&lt;br /&gt;
		ST [ctrl], #0&lt;br /&gt;
ret:	RTI&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 Unix sistemskih poziva &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;execlp()&amp;lt;/code&amp;gt; napisati program koji prima jedan celobrojni  argument  i  koji,  ukoliko  se proces pokrene sa parametrom  -c, kreira još jedan isti takav proces,  samo  bez  parametra,  a  u  suprotnom  se  samo  završava.  Sistemski  poziv  &amp;lt;code&amp;gt;execlp&amp;lt;/code&amp;gt;  prima argumente komandne linije: &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
int execlp(char const *file, char const *arg0, ...)&lt;br /&gt;
&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 main(int argc, char* argv) {&lt;br /&gt;
	if(argc &amp;lt; 2) return -1;&lt;br /&gt;
	if(argv[2][1] == &#039;c&#039;) {&lt;br /&gt;
		int pid = fork();&lt;br /&gt;
		if(pid &amp;lt; 0) return -1;&lt;br /&gt;
		else if(pid == 0) execlp(argv[0], 0);&lt;br /&gt;
		else wait(0);&lt;br /&gt;
	}&lt;br /&gt;
	return 0;&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;
Napisati kod za međusobno isključenje kritične sekcije korišćenjem binarnih semafora.&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;
var mutex : Semaphore := 1;&lt;br /&gt;
&lt;br /&gt;
process P&lt;br /&gt;
begin&lt;br /&gt;
	loop&lt;br /&gt;
		wait(mutex);&lt;br /&gt;
		&amp;lt;critical&amp;gt;&lt;br /&gt;
		signal(mutex);&lt;br /&gt;
		&amp;lt;non-critical&amp;gt;&lt;br /&gt;
	end&lt;br /&gt;
end P;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Objasniti zašto linkeru ne predstavlja nikakav problem prilikom povezivanja to što fajl a.obj uvozi  simbol  koji  je  definisan  u  b.obj,  a  b.obj  uvozi  simbol  koji  je  definisan  u  a.obj.  Kako  se  ova situacija rešava? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U prvom prolazu će se napraviti tabele simbola, a u drugom prolazu razrešiti imena pa ova situacija nije nikakav problem sem ako se ne radi o istom simbolu kada će doći do linkerske greške ako simbol nije nigde definisan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U nekom sistemu primenjuje se &#039;&#039;best-fit&#039;&#039; algoritam kontinualne alokacije memorije. Inicijalno je prostor veličine 512KB potpuno slobodan za alokaciju korisničkih procesa. Potom su različiti procesi zadavali sledeće zahteve (slovna oznaka označava proces koji je postavio zahtev, brojna oznaka  označava  veličinu  alociranog  prostora  u  KB,  a  minus  označava  gašenje  procesa  i oslobađanje njegove memorije)&lt;br /&gt;
&lt;br /&gt;
A128, B32, C256, D64, A-, E16, F64, B- &lt;br /&gt;
&lt;br /&gt;
Odgovoriti na sledeća pitanja koja se odnose na stanje memorije nakon ove sekvence zahteva: &lt;br /&gt;
#Koliko je ukupno slobodnih fragmenata? &lt;br /&gt;
#Kolika je veličina najmanjeg slobodnog fragmenta?&lt;br /&gt;
#Kolika je veličina najvećeg slobodnog fragmenta?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#2&lt;br /&gt;
#16KB&lt;br /&gt;
#96KB&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelna memorija organizovana je stranično, a adresibilna jedinica je bajt. Virtuelna adresa je  32-bitna, stranica je veličine 4KB,  deskriptor  stranice je 32-bitni, a PMT je organizovana u dva nivoa, pri čemu je polje za straničenje prvog nivoa veličine 8 bita. Koliki prostor bi ukupno zauzimala PMT nekog procesa kada bi: &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
VA(32) page 4KB -&amp;gt; 12b, descriptor 4B&lt;br /&gt;
&lt;br /&gt;
pmt1 -&amp;gt; 8b&lt;br /&gt;
&lt;br /&gt;
VA(32) : page1(8) : page2(12) : offset(12)&lt;br /&gt;
&lt;br /&gt;
a) ceo prostor: 2^8 * 4 + 2^8 * 2^12 * 4 = 4MB + 1KB&lt;br /&gt;
&lt;br /&gt;
b) prva i poslednja stranica u v. a. prostoru: 2^8 * 4 + 2^12 * 4 * 2 = 1KB + 32KB = 33KB&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Umesto tehnike &#039;&#039;spooling&#039;&#039;, pristup uporednih procesa štampaču u nekom sistemu omogućuje se međusobnim isključenjem pomoću operacije rezervacije: svaki proces, pre nego što zatraži bilo koju operaciju sa štampačem, mora da ga rezerviše, a tu rezervaciju otpušta tek kada završi sa celim jednim poslom štampe. Pored eventualnog sprečavanja mrtve blokade, o čemu još mora da vodi računa operativni sistem da se ne bi dešavalo neograničeno zauzeće štampača&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Треба водити рачуна и о томе да ли је процес који тренутно користи уређај &amp;quot;отказао&amp;quot; или постао трајно суспендован без ослобађања уређаја.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Izvod iz jednog uputstva za Unix fajl sistem i dodelu prava pristupa fajlu iz komandne linije: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;To change the mode of a file, use the chmod command. The general form is chmod X@Y file1 file2 ... where: X is any combination of the letters &#039;u&#039; (for owner), &#039;g&#039; (for group), &#039;o&#039; (for others), &#039;a&#039; (for all; that  is,  for  &#039;ugo&#039;);  @  is  either  &#039;+&#039;  to  add  permissions,  &#039;-&#039;  to  remove  permissions,  or  &#039;=&#039;  to  assign permissions absolutely; and Y is any combination of &#039;r&#039;, &#039;w&#039;, &#039;x&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Na primer, komanda &amp;lt;code&amp;gt;chmod u=rx file&amp;lt;/code&amp;gt; daje vlasniku prava &#039;&#039;rx&#039;&#039;, ali ne i pravo &#039;&#039;w&#039;&#039;. &lt;br /&gt;
Napisati komande koje za dati fajl postavljaju prava na sledeći način:&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
a) grupi i ostalima oduzimaju prava na rx, ali ne i na w: &amp;lt;code&amp;gt;chmod go-rx file&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) svima dodaju pravo na izvršavanje: &amp;lt;code&amp;gt;chmod a+x file&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki fajl sistem podržava kombinovano indeksiran pristup alokaciji fajlova, pri čemu FCB sadrži 256 ulaza sa direktnim indeksom (sadrže brojeve blokova za podatke). Ako sadržaj fajla preraste  veličinu  koju  podržava ovaj indeks nultog nivoa, za blokove preko te veličine postoji indeks prvog nivoa sa 256 ulaza u FCB; svaki od tih ulaza sadrži pokazivač na indeks drugog nivoa u  kome  je  po  256  ulaza sa pokazivačima na blokove sa sadržajem. Koliki je maksimalni kapacitet fajla u blokovima? (Odgovor dati kao izraz.) &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
(256 + 256*256) * blockSize&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2013&amp;diff=3018</id>
		<title>ОС1/Фебруар 2013</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2013&amp;diff=3018"/>
		<updated>2021-10-03T14:00:54Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Опис пресликавања странице у оквир&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2013/feb/OS1%20Feb%202013.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki interaktivni višeprocesni i višekorisnički sistem ne podržava raspodelu vremena (&#039;&#039;time sharing&#039;&#039;). Šta je njegov osnovni problem? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Osnovni problem je nejednakost u vremenu odziva na korisničku akciju. Ukoliko je više procesa spremno i treba da obradi korisničku akciju, oni procesi koji ranije dobiju procesor imaće kraće vreme odziva, dok oni koji kasnije dobiju procesor imaju duže vreme odziva. Još gore, vreme odziva istog procesa na sukcesivne korisničke akcije potpuno je nedeterminističko i zavisi od toga kako se rasporede procesi čineći da se korinsici osećaju kao da &amp;quot;smetaju&amp;quot; jedni drugima.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ako  se nad sledećim programom kreira jedan proces, koliko će ukupno biti elemenata sa vrednošću 0 u nizovima pid svih kreiranih procesa (uključujući i taj jedan početni) kada svi ti procesi izađu iz petlje, 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++) &lt;br /&gt;
		pid[i] = fork(); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Biće ukupno 4 elemenata sa vrednošću 0.&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;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
process P1 &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;
  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;
=== Rešenje ===&lt;br /&gt;
Problem je u tome što ovo rešenje uopšte ne obezbeđuje međusobno isključenje jer oba procesa mogu da uđu u kritičnu sekciju.&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dva procesa &#039;&#039;X&#039;&#039; i &#039;&#039;Y&#039;&#039; &amp;quot;proizvode&amp;quot; cele brojeve uporedo, nezavisnim i promenljivim brzinama. Proces &#039;&#039;Z&#039;&#039; treba da uzima po dva proizvedena broja, i to uvek tačno jedan koji je proizveo &#039;&#039;X&#039;&#039; i jedan koji je proizveo  &#039;&#039;Y&#039;&#039;, i njihov zbir ispisuje na standardni izlaz. Važno je obezbediti da proces Z uvek uzima samo &amp;quot;sveže&amp;quot; proizvedene brojeve, tj. nikada ne uzme više puta isti proizvedeni broj. Korišćenjem deljenih promenljivih i klasičnih brojačkih semafora, napisati sve potrebne deklaracije i kod procesa &#039;&#039;X&#039;&#039; i &#039;&#039;Z&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Potrebno je &#039;&#039;X&#039;&#039; i &#039;&#039;Y&#039;&#039; implementirati kao bounded buffer jer mogu proizvoditi cele brojeve različitim brzinama. Proces &#039;&#039;Z&#039;&#039; će jednostavno pozivati operaciju take() nad tim dvama baferima.&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U prvom prolazu kroz ulazne .obj fajlove, linker nailazi na izvezeni simbol koji se već nalazi u njegovoj tabeli simbola. Da li će to prijaviti kao grešku? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Da, jer ako se nalazi u tabeli simbola znači da je već definisan i dolazi do sukoba imena.&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Da li kod stranične organizacije virtuelne memorije ima smisla hardverski vršiti proveru prekoračenja  granice  opsega  dozvoljenih  adresa  unutar  stranice  radi  zaštite  od  nedozvoljenog pristupa fizičkim adresama koje koriste drugi procesi? Kratko obrazložiti. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Нема потребе, код страничне организације величина странице у виртуелној меморији је иста као величина оквира у физичкој меморији тако да се не може десити да исти оквир деле 2 различита процеса, нити да је једна страница пресликана у 2+  oквира.&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:&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;
&amp;lt;/syntaxhighlight&amp;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;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti šta je &#039;&#039;spooling&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Kada neki nedeljivi spori uređaj želi da odradi posao, prvo se zatraži korišćenje tog uređaja sistemskim pozivom, OS tada pravi poseban fajl na određenom mestu u svom fajl sistemu u koji će preusmeriti sve ulazne operacije tog procesa sa štampaem i vraća kontrolu procesu. OS predaje fajl na obradu posebnom procesu ili niti (spuleru) koji će jedan po jedan fajl da uzima i njihove sadržaje da šalje datom uređaju.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki  fajl  sistem  podržava  implicitno  zaključavanje  fajla  prilikom  njegovog  otvaranja. Postoje dve vrste ključa: deljeni (&#039;&#039;shared&#039;&#039;), koji se traži prilikom otvaranja fajla samo za čitanje (proces koji je tako otvorio fajl ima pravo samo da čita iz fajla) i ekskluzivni (&#039;&#039;exclusive&#039;&#039;),  koji  se traži prilikom otvaranja fajla i za upis (proces koji je otvorio fajl ima pravo upisa). Popuniti sledeću tabelu upisivanjem oznaka onih procesa čiji će zahtev za otvaranjem istog fajla biti ispunjen, za svaki od dva data slučaja. Procesi postavljaju zahteve redom navedenim u drugoj koloni, pri čemu oznaka npr. A-Rd označava da proces A postavlja zahtev za otvaranjem fajla za čitanje, a B-Wr da proces B postavlja zahtev za otvaranjem fajla za upis&lt;br /&gt;
&lt;br /&gt;
1. A-Rd, B-Wr, C-Rd, D-Rd, E-Wr &lt;br /&gt;
&lt;br /&gt;
2. A-Wr, B-Rd, C-Wr, D-Rd, E-Rd&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U 1. slučaju A, C i D su uspeli da otvore fajl.&lt;br /&gt;
&lt;br /&gt;
U 2. slučaju samo A je uspeo da otvori fajl.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki  fajl  sistem  koristi  indeksirani  pristup  alokaciji  blokova  za  fajlove  sa  indeksima  u  dva nivoa.  Prvi nivo indeksa smešten je u sam FCB (&#039;&#039;file  control  block&#039;&#039;)  i  ima  256  ulaza  koji  direktno referenciraju blokove sa podacima, a još jedan ulaz u FCB ukazuje na jedan blok sa indeksom drugog nivoa čiji ulazi takođe ukazuju na blokove sa podacima. Veličina ulaza u indeksnom bloku (reference na blok diska) je 8 bajtova, a veličina bloka na disku je 512KB. Kolika  je  maksimalna veličina fajla u ovom fajl sistemu? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
512KB / 8B = 64K ulaza&lt;br /&gt;
&lt;br /&gt;
(256 + 2^16) * 512KB = 2^27 + 2^35 = 32GB + 128MB = 32.125GB&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2014&amp;diff=3017</id>
		<title>ОС1/Септембар 2014</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2014&amp;diff=3017"/>
		<updated>2021-10-03T13:58:09Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2014/sep/OS1%20Sep%202014.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je multiprocesni, a šta multiprocesorski operativni sistem?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Multiprocesni OS je OS koji podržava izvršavanje više procesa uporedo (nad istim procesorom).&lt;br /&gt;
&lt;br /&gt;
Multiprocesorski sistem je računarski sistem sa više procesora koji imaju deljenu memoriju. Procesori mogu da pristupaju toj deljenoj memoriji preko zajedničke magistrale na koju su povezani.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem operacije &amp;lt;code&amp;gt;yield(PCB* old, PCB* new)&amp;lt;/code&amp;gt; koja čuva kontekst izvršavanja prvog i restaurira kontekst izvršavanja drugog datog procesa, implementirati operaciju &#039;&#039;wait&#039;&#039; na semaforu koji je realizovan klasom &amp;lt;code&amp;gt;Semaphore&amp;lt;/code&amp;gt; poput one 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;
Semaphore::wait() {&lt;br /&gt;
	lock();&lt;br /&gt;
	if(--val &amp;lt; 0) {&lt;br /&gt;
		PCB* old = Thread::running-&amp;gt;myPCB;&lt;br /&gt;
		blocked.put(Thread::running);&lt;br /&gt;
		Thread::running = Scheduler::get();&lt;br /&gt;
		PCB* new = Thread::running-&amp;gt;myPCB;&lt;br /&gt;
		yield(old, new);&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;
Na  jeziku  C,  korišćenjem  sistemskih  poziva  &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt;  i  &amp;lt;code&amp;gt;execlp()&amp;lt;/code&amp;gt;  za  Unix, napisati program koji  pokreće  drugi  program  iz  fajla  čiji  je  naziv  zadat  kao  parametar  komandne  linije  prvog programa.&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 main(int argc, char* argv[]) {&lt;br /&gt;
	if(argc &amp;lt; 2)&lt;br /&gt;
		return -1;&lt;br /&gt;
	int pid = fork();&lt;br /&gt;
	if(pid &amp;lt; 0)&lt;br /&gt;
		return -2;&lt;br /&gt;
	else if(pid == 0) {&lt;br /&gt;
		execlp(argv[1]);&lt;br /&gt;
		return -3;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
		wait(0);&lt;br /&gt;
	return 0;&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;
Korišćenjem  standardnih  brojačkih  semafora  u  školskom  jezgru,  na  jeziku  C++  napisati globalne  deklaracije  i  inicijalizacije,  kao  i  kod  tela  dve  uporedne  niti  A  i  B  koje  ciklično  rade sledeće: &lt;br /&gt;
&lt;br /&gt;
A:  upisuje  vrednost  u  deljene  promenljive  x  i  y,  a  zatim  čeka  da  proces  B  upiše  zbir  x  i  y  u promenljivu z čiju vrednost onda ispisuje na standardni izlaz; &lt;br /&gt;
&lt;br /&gt;
B:  čeka  da  proces  A  upiše  vrednosti  u  deljene  promenljive  x  i  y,  zatim  ove  dve  vrednosti  sabira  i zbir upisuje u deljenu promenljivu z. &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;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Semaphore semA(0), semB(0);&lt;br /&gt;
int x, y, z;&lt;br /&gt;
&lt;br /&gt;
class A : public Thread {&lt;br /&gt;
protected:&lt;br /&gt;
	void run() {&lt;br /&gt;
		while(1) {&lt;br /&gt;
			x = ...&lt;br /&gt;
			y = ...&lt;br /&gt;
			semB.signal();&lt;br /&gt;
			semA.wait();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class B : public Thread {&lt;br /&gt;
protected:&lt;br /&gt;
	void run() {&lt;br /&gt;
		while(1) {&lt;br /&gt;
			semB.wait();&lt;br /&gt;
			z = x + y;&lt;br /&gt;
			semA.signal();&lt;br /&gt;
		}&lt;br /&gt;
	}&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 osnovni razlog za to da linker obavlja zadatak u dva prolaza? Precizno objasniti. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U prvom prolazu linker analizira ulazne fajlove, veličinu njihovog binarnog sadržaja i pravi maou izvršivog fajla. U tabelu simbola unosi sve izvezene simbole iz objektnih fajlova za koje može da izračuna adresu u odnosu na ceo izvršivi fajl.&lt;br /&gt;
U drugom prolazu linker generiše binarni kod i ujedno razrešava nerazrešena adresna polja mašinskih instrukcija na osnovu informacija o adresama u koje se premeštaju simboli iz tabele simbola.&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti  najmanje  tri  sličnosti  (npr.  zajednički  zahtevi,  ograničenja  ili  problemi)  između kontinualne alokacije memorije i segmentne alokacije memorije procesa.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
# OS mora da organizuje i održava strukturu podataka za evidenciju slobodnih fragmenata&lt;br /&gt;
# OS mora da sprovodi neku od tehnika dinamičke alokacije&lt;br /&gt;
# problem eksterne fragmentacije&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kojom  tehnikom  se  nedeljivi  uređaj  može  učiniti  virtuelno deljivim?  Navesti  klasičan primer takvog uređaja za koji se najčešće primenjuje ova tehnika. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Spooling-om. Klasičan primer je štampač.&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U  fajl  podsistemu  nekog  operativnog  sistema  ne  vodi  se tabela  otvorenih  fajlova  za  svaki proces, već postoji samo jedna globalna tabela otvorenih fajlova za ceo sistem. Drugim rečima, ne postoji nikakva informacija o upotrebi otvorenog fajla lokalna (privatna) za pojedinačni proces, već su  sve  takve  informacije  globalno  deljene.  Da  li  pojam pokazivača  trenutne  lokacije  (kurzora)  za čitanje/upis u fajl ima smisla čuvati u globalnoj tabeli otvorenih fajlova i zašto?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Не, јер се више различитих процеса могу имати различиту вредност курзора.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dati  procenu  kompleksnosti  datih  operacija  sa direktorijumom u odnosu na broj postojećih fajlova n u direktorijumu, za navedene implementacije direktorijuma, ukoliko u slučaju hash tabele nema nijedne kolizije.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki  fajl  sistem  koristi  indeksirani  pristup  alokaciji  fajlova  sa  indeksima  u  dva  nivoa, blokom veličine 256KB i 64-bitnim adresama fizičkih blokova. Kolika je maksimalna veličina fajla u ovom sistemu? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Broj ulaza: 256KB / 8B = 2^15&lt;br /&gt;
&lt;br /&gt;
Maksimalna veličina fajla: 2^15 * 2^15 * 2^18 = 2^48&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2012&amp;diff=3016</id>
		<title>ОС1/Септембар 2012</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2012&amp;diff=3016"/>
		<updated>2021-10-03T13:56:40Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Base  и Limit за контекст континуалне алокације&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2012/septembar/Septembar%202012.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kod kakvih sistema se najpre pojavljuje &#039;&#039;time sharing&#039;&#039; i sa kakvim motivom?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Time sharing se najpre pojavljuje kod interaktivnih višekorisničkih sistema. Motiv je da se postigne ravnomerniji odziv na akcije više korisnika nego bez time sharing-a.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem funkcija &amp;lt;code&amp;gt;setjmp&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;longjmp&amp;lt;/code&amp;gt; iz standardne C biblioteke realizovati operaciju &amp;lt;code&amp;gt;wait&amp;lt;/code&amp;gt; na binarnom semaforu u školskom jezgru&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2012#2. zadatak|julskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem sistemskih poziva &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;execlp()&amp;lt;/code&amp;gt; napisati program &#039;&#039;P&#039;&#039; koji pokreće proces nad programom u fajlu čiji je naziv zadat kao argument izvršavanja programa &#039;&#039;P&#039;&#039;. &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 main(int argc, char* argv[]) {&lt;br /&gt;
	if(argc &amp;lt; 2) return -1;&lt;br /&gt;
	pid_t pid = fork();&lt;br /&gt;
	if(pid &amp;lt; 0) return -2;&lt;br /&gt;
	if(pid == 0) {&lt;br /&gt;
		execlp(argv[1]);&lt;br /&gt;
		return -3;&lt;br /&gt;
	}&lt;br /&gt;
	else wait(0);&lt;br /&gt;
	return 0;&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;
Proces &#039;&#039;P&#039;&#039; treba da sačeka da sva tri procesa &#039;&#039;X&#039;&#039;, &#039;&#039;Y&#039;&#039; i &#039;&#039;Z&#039;&#039; ispune neki svoj uslov, u bilo kom redosledu. Napisati deo koda procesa &#039;&#039;P&#039;&#039; i bilo kog od druga tri procesa, uz potrebne deklaracije, koji obezbeđuju ovu uslovnu sinhronizaciju pomoću jednog standardnog brojačkog semafora.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Фебруар 2012#4. zadatak|februarskog roka 2012]].&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koja dva podatka čine memorijski kontekst procesa kod kontinualne alokacije memorije za proces sa dinamičkim preslikavanjem adresa? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
SegmentBase ponter - говори која је почетна адреса од које се пресликава меморија &amp;lt;br&amp;gt;&lt;br /&gt;
limit Pointer - садржи или величину сегмента или последњу адресу у њему, зависно од имплементације хардвера&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 stranicom veličine 32KB.  Fizički  adresni  prostor  je veličine 2GB.  Tabele  preslikavanja  stranica  su  organizovane u  dva  nivoa,  s  tim  da  tabela  drugog nivoa ima 1K ulaza. Ako deskriptori u PMT i prvog i drugog nivoa sadrže samo broj okvira u koji se stranica preslikava i ništa više (posebna vrednost označava da preslikavanje nije moguće), koliko bajtova zauzima jedna PMT prvog, a koliko drugog nivoa?&lt;br /&gt;
&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;
Zaokružiti slovo ispred one ili onih podataka koji &#039;&#039;nisu&#039;&#039; neophodni  u  deskriptoru  stranice  u PMT koji koristi hardver za preslikavanje adresa kod virtuelne memorije: &lt;br /&gt;
#Informacija da preslikavanje nije moguće izvršiti&lt;br /&gt;
#Adresa bloka na disku u kome se nalazi stranica &lt;br /&gt;
#Informacija da je stranica deljena sa drugim procesom tehnikom copy-on-write &lt;br /&gt;
#Informacija da je stranica zabranjena za izbacivanje jer se koristi kao I/O bafer &lt;br /&gt;
#Da li je dozvoljen upis u stranicu &lt;br /&gt;
#Broj okvira u koji se stranica preslikava.&lt;br /&gt;
&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 na zadatu adresu sa ulaznog uređaja 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, [data]&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;
U  fajl  podsistemu  nekog  operativnog  sistema  ne  vodi  se  tabela  otvorenih  fajlova  za  svaki proces, već postoji samo jedna globalna tabela otvorenih fajlova za ceo sistem. Drugim rečima, ne postoji nikakva informacija o upotrebi otvorenog fajla lokalna (privatna) za pojedinačni proces, već su sve takve informacije globalno deljene. Kako treba da izgleda API funkcija za čitanje bloka podataka dužine &amp;lt;code&amp;gt;len&amp;lt;/code&amp;gt;  iz nekog fajla, da bi se procesu obezbedila mogućnost sekvencijalnog čitanja svih podataka iz fajla? &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;
IOStatus readFile(FHANDLE fh, void* buffer, long len, long offset);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Posmatra se disk kapaciteta 80MB i blokom veličine 1KB. Ako se za evidenciju slobodnog prostora  koristi  bit-vektor sa maksimalnom kompakcijom (svih 8 bita u bajtu su iskorišćeni itd.), koliko celih blokova treba zauzeti na disku za smeštanje ovog vektora? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
80MB / 1KB = 80K blokova&lt;br /&gt;
&lt;br /&gt;
80K / 8b/B = 10KB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9E%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2012&amp;diff=3015</id>
		<title>ОС1/Октобар 2012</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9E%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2012&amp;diff=3015"/>
		<updated>2021-10-03T13:53:09Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2012/oktobar/Oktobar%202012.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je multiprocesorski, a šta distribuirani sistem?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Мултипроцесорски систем је сиситем у коме више процесора раде над истом оперативном меморијом.&amp;lt;br&amp;gt;&lt;br /&gt;
Дистрибуирани систем је систем у коме више одвојених рачунара уз помоћ рачунарских мрежа чини једну логичку целину.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Data  je  operacija  &amp;lt;code&amp;gt;yield(jmp_buf  old,  jmp_buf  new)&amp;lt;/code&amp;gt;  koja  čuva  kontekst  niti  čiji  je &amp;lt;code&amp;gt;jmp_buf&amp;lt;/code&amp;gt;  dat kao prvi argument, oduzima joj procesor i restaurira kontekst niti čiji je  &amp;lt;code&amp;gt;jmp_buf&amp;lt;/code&amp;gt;  dat kao  drugi  argument,  kojoj  predaje  procesor.  Koristeći  ovu  operaciju,  realizovati  operaciju &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; koja ima isti efekat kao i ona data 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 dispatch () {&lt;br /&gt;
	lock();&lt;br /&gt;
	jmp_buf old = Thread::running-&amp;gt;context;&lt;br /&gt;
	Scheduler::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;
	unlock();&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;
Kako se u kodu koji se izvršava nakon sistemskog poziva &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt; može znati da li se taj kod izvršava u kontekstu procesa-roditelja ili procesa-deteta? Objasniti i dati primer.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Može se znati u kom se kontekstu izvršava kod na osnovu povratne vrednosti fork-a. Tj. 0 u kontekstu deteta, vrednost veća od 0 u kontekstu roditelja, a manja od 0 ako dođe do greške.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
	pid_t pid = fork();&lt;br /&gt;
	&lt;br /&gt;
	if(pid &amp;lt; 0) {&lt;br /&gt;
		return -1; &lt;br /&gt;
		// greska&lt;br /&gt;
	}&lt;br /&gt;
	else if(pid == 0) {&lt;br /&gt;
		// dete&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		// roditelj&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return 0;&lt;br /&gt;
	&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;
Napisati kod jednog od dva procesa koji pristupaju kritičnoj sekciji sa međusobnim isključenjem pomoću uposlenog čekanja (&#039;&#039;busy waiting&#039;&#039;) Petersonovim algoritmom&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;
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 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;
&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 section&amp;gt;&lt;br /&gt;
			flag2 := false;&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;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Date  su  sledeće  deklaracije  u  jednom  izvornom  C  fajlu.  Koji  od  ovih  simbola  će  biti označeni kao „izveženi“, a koji kao „uveženi“ u .obj fajlu? &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern int a(int); &lt;br /&gt;
void b(int);  &lt;br /&gt;
void b(int) {}&lt;br /&gt;
void c(int); &lt;br /&gt;
extern int d; &lt;br /&gt;
static int e; &lt;br /&gt;
int f;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Uveženi: a, c, d&lt;br /&gt;
Izveženi: b, f&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem koristi kontinualnu alokaciju operativne memorije. Data je deklaracija strukture podataka  koja  predstavlja  zaglavlje  svakog  slobodnog  fragmenta  memorije.  Ova  zaglavlja  čine dvostruko  ulančanu  listu  slobodnih  fragmenata  i  upisuju  se  na  sam  početak  svakog  slobodnog fragmenta memorije. Napisati telo funkcije &amp;lt;code&amp;gt;getFirstFitFragment()&amp;lt;/code&amp;gt; koja  treba  da  pronađe fragment slobodne memorije veličine date argumentom po &#039;&#039;first-fit&#039;&#039; algoritmu i vrati njegovu adresu. Preostali deo fragmenta treba da postane novi (manji) fragment u listi slobodnih&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef unsigned int size_t; &lt;br /&gt;
struct FreeFragment { &lt;br /&gt;
  size_t size; // Veličina fragmenta u jedinicama sizeof(char) &lt;br /&gt;
  FreeFragment* prev; // Prethodni u listi &lt;br /&gt;
  FreeFragment* next; // Sledeći u listi &lt;br /&gt;
} &lt;br /&gt;
FreeFragment* head; // Glava liste slobodnih fragmenata &lt;br /&gt;
void* getFirstFitFragment(size_t);&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;
void* getFirstFitFragment(size_t sz) {&lt;br /&gt;
	if(head == 0 || sz == 0) return 0;&lt;br /&gt;
	for(FreeFragment* cur = head; cur; cur = cur-&amp;gt;next) {&lt;br /&gt;
		if(cur-&amp;gt;size &amp;lt; sz) continue;&lt;br /&gt;
		FreeFragment* newFrg = (FreeFragment*)((char*)cur + sz);&lt;br /&gt;
		if(cur-&amp;gt;prev) cur-&amp;gt;prev-&amp;gt;next = newFrg;&lt;br /&gt;
		else head = cur-&amp;gt;next;&lt;br /&gt;
		if(cur-&amp;gt;next) cur-&amp;gt;next-&amp;gt;prev = newFrg;&lt;br /&gt;
		newFrg-&amp;gt;prev = curr-&amp;gt;prev;&lt;br /&gt;
		newFrg-&amp;gt;next = curr-&amp;gt;next;&lt;br /&gt;
		newFrg-&amp;gt;size = cur-&amp;gt;size - sz;&lt;br /&gt;
		return cur;&lt;br /&gt;
	}&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Objasniti  šta  je  osnovni  motiv  i  pogodnost  tehnike  straničenja  u  više  nivoa  u  odnosu  na straničenje u jednom nivou?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Veći kapacitet virtuelne memorije.&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kojom tehnikom se fizički nedeljivi izlazni uređaj može učiniti logički (virtuelno) deljivim između procesa koji ga uporedo koriste? &lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Spooling-om.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki proces otvara neki fajl samo za čitanje, iako „vlasnik“ tog procesa ima i pravo upisa u taj fajl. Da li se informacija da je taj  proces otvorio taj fajl samo za čitanje čuva u tabeli otvorenih fajlova koja je globalna za sve procese, ili u onoj koja je lokalna za taj proces&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Ta informacija čuva se u tabeli otvorenih fajlova lokalnoj za taj proces.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki  fajl  sistem  koristi  indeksiranu  alokaciju  fajlova  na  disku  sa  jednostrukim indeksom. Ako se pretpostavlja da je prostor za smeštanje fajlova (uključujući i njihove indekse) na disku  veličine  32 GB,  veličina  klastera  (jedine  jedinice  alokacije)  2 KB,  i  ceo  prostor  potpuno ispunjen  fajlovima  tako  da  je  svaki  fajl  maksimalne  veličine  takve  da  ima  samo  jedan  indeksni klaster, koliki procenat ukupnog prostora za smeštanje fajlova na ovom disku zauzimaju indeksi? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
32GB / 2KB = 16M = 2^24 -&amp;gt; 3B adresa&lt;br /&gt;
&lt;br /&gt;
2KB / 3B = 682 ulaza u indeksu&lt;br /&gt;
&lt;br /&gt;
procenat zauzetosti: 100/(682 + 1)%&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9E%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2011&amp;diff=3014</id>
		<title>ОС1/Октобар 2011</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9E%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2011&amp;diff=3014"/>
		<updated>2021-10-03T13:51:21Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Проверити, а би требало бити вишеструко дефинисано, а б недефинисано&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2011/oktobar/Okt%202011.doc Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti osnovni motiv uvođenja raspodele vremena (&#039;&#039;time sharing&#039;&#039;) u multiprogramiranje.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U zavisnosti od toga u kom hronološkom poretku su se dogodile akcije korisnika, što je potpuno proizvoljno, korisnici bi dobijali odzive nakon različitog vremena i zavisili bi od broja i aktivnosti drugih korisnika, te bi korisnici imali osećaj da smetaju jedni drugima. Mehanizmom raspodele vremena korisniku se odaje utisak da računar radi samo za njega sa dovoljno dobrim i ujednačenim vremenom odziva, iako opslužuje više korisnika istovremeno.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji vrši učitavanje bloka podataka sa ulaznog uređaja tehnikom programiranog ulaza korišćenjem prekida. Samostalno usvojiti potrebne detaljne pretpostavke.&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, count&lt;br /&gt;
		LD R3, #0&lt;br /&gt;
		ST [ctrl], #00..01&lt;br /&gt;
wait:	CMP R3, #1&lt;br /&gt;
		JNZ wait&lt;br /&gt;
		HALT&lt;br /&gt;
&lt;br /&gt;
intr:	LD R0, [data]&lt;br /&gt;
		ST [R1], R0&lt;br /&gt;
		INC R1&lt;br /&gt;
		DEC R2&lt;br /&gt;
		JNZ ret&lt;br /&gt;
		LD R3, #1&lt;br /&gt;
		ST [ctrl], #0&lt;br /&gt;
ret: 	RTI&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 četiri uzroka zbog kojih proces može izgubiti procesor. Za svaki od navedenih načina navesti da li se dešava sinhrono (kao posledica operacije koju je izvršio sam proces) ili asinhrono (nezavisno od izvršavanja procesa).&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
# Eksplicitnim zahtevom za promenu konteksta - dispatch, yield - sinhrono.&lt;br /&gt;
# Isteklo je dodeljeno CPU vreme - time exceeded - asinhrono.&lt;br /&gt;
# Prekid - maskirajući ili nemaskirajući - asinhrono.&lt;br /&gt;
# Zbog operacije na nekoj sinhronizacionoj primitivi tj. semaforu ili događaju - sinhrono.&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem standardnih brojačkih semafora u školskom jezgru, na jeziku C++ u potpunosti realizovati klasu za ograničeni bafer (&#039;&#039;bounded buffer&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Јул 2011#4. zadatak|julskog roka 2011]].&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dati primer delova koda dva fajla sa izvornim C/C++ kodom za koje će linker generisati grešku tipa višestrukih simbola i nedefinsanih simbola, pod pretpostavkom da su to jedina dva fajla koja se linkuju.&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;
//a.h&lt;br /&gt;
#include &amp;quot;b.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int a;&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    cout&amp;lt;&amp;lt;b;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
//b.h&lt;br /&gt;
&lt;br /&gt;
double a;&lt;br /&gt;
&lt;br /&gt;
int function(){&lt;br /&gt;
     a=12;&lt;br /&gt;
     return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelna memorija nekog računara organizovana je stranično. Veličina virtuelnog adresnog prostora je 2 MB, adresibilna jedinica je 16-bitna reč, a veličina stranice je 128 KB. Veličina fizičkog adresnog prostora je 32 MB. Operativni sistem učitava stranice na zahtev, tako što se stranica učitava u prvi slobodni okvir fizičke memorije kada joj se pristupi. Kada se kreira proces, ni jedna njegova stranica se ne učitava odmah, već tek kad joj se prvi put pristupi. U početnom trenutku, slobodni okviri fizičke memorije su okviri počev od 10h zaključno sa 1Fh. Neki proces generiše sledeću sekvencu virtuelnih adresa tokom svog izvršavanja (sve vrednosti su heksadecimalne):&lt;br /&gt;
&lt;br /&gt;
30F00, 30F02, 30F04, 922F0, 922F2, 322F0, 322F2, 322F4, 522F0, 522F2, 402F0, 402F2&lt;br /&gt;
&lt;br /&gt;
Prikazati izgled cele tabele preslikavanja stranica (PMT) za ovaj proces nakon izvršavanja ove sekvence. Za svaki ulaz u PMT prikazati indikator prisutnosti stranice u fizičkoj memoriji (0 ili 1) i broj okvira u fizičkoj memoriji u koji se stranica preslikava, ukoliko je stranica učitana; ukoliko nije, prikazati samo ovaj indikator.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
VAS: 2MB = 2^21B -&amp;gt; VA: 20b&lt;br /&gt;
&lt;br /&gt;
page = 128KB = 64K AU -&amp;gt; 16b&lt;br /&gt;
&lt;br /&gt;
VA: page(4) : offset(16)&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti tipične operacije apstrakcije blokovski orijentisanog ulazno/izlaznog uređaja sa direktnim pristupom.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Tipične operacije su:&lt;br /&gt;
*&amp;lt;code&amp;gt;int readBlock(BlockNo block, void* buffer);&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;int writeBlock(BlockNo block, void* buffer);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki proces izvršava sistemski poziv za upis u fajl koji je prethodno uspešno otvorio i sistem mu to ne dozvoljava, sa porukom da tom procesu nije dozvoljena ta operacija, iako je korisniku u čije ime se taj proces izvršava dozvoljena operacija upisa u taj fajl. Objasnite zašto se ovo dogodilo.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Fajl je otvoren u režimu čitanja.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta znači termin „presna particija“ (&#039;&#039;raw partition&#039;&#039;)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Presna particija je particija koja nije formatizovana, na njoj nije organizovan fajl sistem. Može se upotrebljavati za posebne namene, npr. za zamenu stranica.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koliko pristupa blokovima na disku treba izvršiti za pristup &#039;&#039;n&#039;&#039;-tom logičkom bloku sadržaja fajla ako je alokacija fajla &lt;br /&gt;
#ulančana lista, &lt;br /&gt;
#kontinualna&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
# &#039;&#039;n&#039;&#039;&lt;br /&gt;
# &#039;&#039;1&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BD_2011&amp;diff=3013</id>
		<title>ОС1/Јун 2011</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_2011&amp;diff=3013"/>
		<updated>2021-10-03T13:45:36Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2011/jun/Jun%202011.doc Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dati kratke definicije multiprocesorskog sistema i distribuiranog sistema.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Multiprocesorski sistem je računarski sistem sa više procesora koji imaju zajedničku (deljenu) operativnu memoriju (&#039;&#039;engl. shared memory&#039;&#039;). Procesori mogu da pristupaju toj deljenoj memoriji, tj. da čitaju iz nje i u nju upisuju, npr. preko zajedničke magistrale na koju su povezani.&lt;br /&gt;
&lt;br /&gt;
Distribuirani sistem je računarski sistem sa više procesora koji nemaju zajedničku operativnu memoriju, već svaki procesor ima svoju, ali su svi povezani komunikacionom mrežom.&lt;br /&gt;
	&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koji je razlog deobe procesorskog vremena (&#039;&#039;time sharing&#039;&#039;) kod interaktivnih sistema?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Ravnomerniji odziv na akcije više korisnika nego bez deobe vremena.&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Zašto je stek deo konteksta izvršavanja programa?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Stek predstavlja deo konteksta izvršavanja programa zato što se prilikom poziva bilo kog potprograma u programu na steku pamti mesto odakle je potprogram pozvan kako bi se po povratku moglo nastaviti odakle se stalo.&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Napisati deo koda koji obezbeđuje kritičnu sekciju pomoću brojačkih semafora, uz dozvolu konkurentnog izvršavanja kritične sekcije do &#039;&#039;N&#039;&#039; uporednih procesa.&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;
var mutex : Semaphore := N;&lt;br /&gt;
process P&lt;br /&gt;
begin&lt;br /&gt;
	loop&lt;br /&gt;
	wait(mutex);&lt;br /&gt;
	&amp;lt;critical section&amp;gt;&lt;br /&gt;
	signal(mutex);&lt;br /&gt;
	&amp;lt;non-critical section&amp;gt;&lt;br /&gt;
end&lt;br /&gt;
end P&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem sistemskih poziva &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;execlp()&amp;lt;/code&amp;gt; napisati C program koji kreira proces nad programom u fajlu čije je ime zadato argumentom komandne linije.&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 main(int argc, char* argv[]) {&lt;br /&gt;
	if(argc &amp;lt; 2)&lt;br /&gt;
		return -1;&lt;br /&gt;
	&lt;br /&gt;
	pid_t pid = fork();&lt;br /&gt;
	&lt;br /&gt;
	if(pid &amp;lt; 0)&lt;br /&gt;
		return -2;&lt;br /&gt;
	else if(pid == 0)&lt;br /&gt;
		execlp(argv[1]);&lt;br /&gt;
	else wait(0);&lt;br /&gt;
	&lt;br /&gt;
	return 0;&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Memorija nekog računara organizovana je stranično, sa stranicom veličine 4KB. Adresibilna jedinica je bajt, a virtuelna adresa je 32-bitna. Fizička adresa je veličine 32 bita. Ako je PMT organizovana u dva nivoa, s tim da su veličine polja za broj ulaza u tabele oba nivoa isti, kolika je veličina (u bajtovima) PMT prvog nivoa?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
VA(32): 10,10,12&amp;lt;br&amp;gt;&lt;br /&gt;
Улаз је величине 32b тј 4В &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 2^{10} \cdot 4B = 2^{12}B &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Da li linker prilikom povezivanja sa ciljem dobijanja izvršnog programa (.exe) pravi razliku između fajlova tipa .obj i tipa .lib?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Linker ne pravi razliku između .obj i .lib fajlova prilikom povezivanja. Razlika je jedino što je .obj fajl nastao prevođenjem jednog fajla dok je lib fajl nastao povezivanjem više objektnih, moguće i više drugih fajlova.&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kojom tehnikom se znakovno orijentisani ulazni uređaj može učiniti logički (virtuelno) blokovski orijentisanim?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Tehnikom baferisanja.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
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).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
FHANDLE f1 = fopen(“x.doc”,read);&lt;br /&gt;
FHANDLE f2 = fopen(“y.doc”,read|write);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;fread(f1,buffer1,n1);&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;fwrite(f1,buffer2,n2);&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;fread(f2,buffer1,n1);&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;fwrite(f2,buffer2,n2);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#uspešan&lt;br /&gt;
#neuspešan&lt;br /&gt;
#uspešan&lt;br /&gt;
#uspešan&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem podataka iz koje tabele otvorenih fajlova sistem proverava pravo pristupa za pozive iz prethodnog zadatka (&amp;lt;code&amp;gt;fread&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;fwrite&amp;lt;/code&amp;gt;), u globalnoj tabeli ili u tabeli koja je deo konteksta datog procesa?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U tabeli koja je kontekst datog procesa.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BB_2019&amp;diff=3012</id>
		<title>ОС1/Јул 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%BB_2019&amp;diff=3012"/>
		<updated>2021-10-03T13:42:32Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Ваљало би проверити&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2019/jul/Jul%202019.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta se smatra multiprocesorskim računarskim sistemom? Šta je simetričan multiprocesorski sistem?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Multiprocesorski sistem je sistem sa više procesora koji imaju zajedničku memoriju. Simetričan multiprocesorski sistem znači da su svi procesori opšte namene, jednaki i imaju isto vreme pristupa operativnoj memoriji. Asimetrični multiprocesorski sistem ima i specijalizovane procesore ili procesore sa različitim vremenom pristupa memoriji.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki procesor prilikom obrade prekida prebacuje svoje izvršavanje na korišćenje posebnog pokazivača steka koji se koristi u privilegovanom režimu rada, i pritom čuva sve registre na steku na čiji vrh ukazuje ovaj pokazivač. Operativni sistem na ovom procesoru koristi samo jedan sistemski stek za izvršavanje celog kernel koda. Da li se kontekst izvršavanja procesa (kontekst procesora) može čuvati na ovom steku?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Не. Уколико би се на том стеку чувао контекст прекинутог процеса, једино на њега бисмо се могли и вратити јер би сви остали контексти били испод контектекста тренутног процеса на стеку.&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem niti u školskom jezgru 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;int sum (int array[], size_t size, long* result);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class SumThread {&lt;br /&gt;
    public:&lt;br /&gt;
        SumThread(int* arr, size_t _size, long* res): array(arr), size(_size), result(res) {}&lt;br /&gt;
        void run() {&lt;br /&gt;
            long res = 0;&lt;br /&gt;
            for (size_t i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
                res += array[i];&lt;br /&gt;
            }&lt;br /&gt;
            *result = res;&lt;br /&gt;
        }&lt;br /&gt;
    private:&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;
int sum (int array[], size_t size, long* result) {&lt;br /&gt;
    if (result == nullptr) return -1;&lt;br /&gt;
    SumThread* st = new SumThread(array, size, result);&lt;br /&gt;
    st-&amp;gt;start();&lt;br /&gt;
    delete st;&lt;br /&gt;
    return 0;&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;
Napisati pseudokod koji obezbeđuje međusobno isključenje pristupa kritičnoj sekciji dva procesa pomoću Petersonovog algoritma.&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;&lt;br /&gt;
        turn := 2;&lt;br /&gt;
        while flag2 and turn = 2 do null;&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;
process P2&lt;br /&gt;
begin&lt;br /&gt;
    loop&lt;br /&gt;
        flag2 := true;&lt;br /&gt;
        turn := 1;&lt;br /&gt;
        while flag1 and turn = 1 do null;&lt;br /&gt;
        &amp;lt;critical section&amp;gt;&lt;br /&gt;
        flag2 := false;&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;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Zbog čega operativni sistem ne radi zamenu (&#039;&#039;swapping&#039;&#039;) procesa njegovim izbacivanjem iz memorije prilikom svake promene konteksta, kada procesu koji je izgubio procesor memorija svakako nije potrebna?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Zato što je pristup hard disku vrlo spor te će takva implementacija znatno uticati na performanse. Ovo se primenjivalo na &#039;&#039;[[wikipedia:Windows 3.1|Windows 3.1]]&#039;&#039;, i bilo je vrlo sporo. Danas, &#039;&#039;swapping&#039;&#039; se koristi kada nema dovoljno mesta u operativnoj memoriji.&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta je kompakcija kod kontinualne alokacije memorije?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Kod kontinualne alokacije može doći do eksterne fragmentacije, odnosno da su slobodni fragmenti toliko mali da ni jedan proces ne može stati na tom delu, ali zbirno ih ima dovoljno za neki procos. Kompakcija rešava taj problem realokacijom svih zauzetih delova i spajanjem svih slobodnih fragmenata u jedan veliki slobodan fragment. Dok se dešava kompakcija, nijedan proces koji se pomera se ne može izvršavati.&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelni adresni prostor je velične 8GB, a adresibilna jedinica je 16-bitna reč. Stranica je veličine 4KB, a preslikavanje je u dva nivoa, s tim da PMT prvog nivoa ima dva puta manje ulaza nego PMT drugog nivoa. Prikazati strukturu virtuelne adrese i označiti širinu svakog polja.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
VA(32): Page1(10), Page2(11), Offset(11)&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navesti tipične usluge operativnog sistema vezane za pristup blokovski orijentisanom ulaznom uređaju sa direktnim pristupom i predložiti potpise odgovarajućih funkcija za te sistemske pozive.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Osnovne usluge jesu pisanje i čitanje.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int readBlock(int fd, BlockNo block, void* buffer);&lt;br /&gt;
int writeBlock(int fd, BlockNo block, void* buffer);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Objasniti koncept ACL (&#039;&#039;access control list&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Da bi se fajlovi zaštitili, jedan način je da se ograniče prava pristupa korisnika. Potrebno je definisati koji korisnik (ili grupa korisnika) može da izvršava koju operaciju. Jedan pristup je svakom fajlu pridružiti listu ovih parova (korisnik i operacija). Takva lista je lista kontrole pristupa (ACL).&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Fajl sistem primenjuje FAT alokaciju, s tim da se i slobodni blokovi ulančavaju u listu. U strukturi FCB polje &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; sadrži broj prvog bloka sa sadržajem fajla, a polje &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt; veličinu sadržaja. Globalna promenljiva &amp;lt;code&amp;gt;fat_free_head&amp;lt;/code&amp;gt; sadrži broj prvog bloka (glavu liste), a &amp;lt;code&amp;gt;fat_free_tail&amp;lt;/code&amp;gt; poslednjeg bloka (rep liste) u lancu slobodnih. FAT je u memoriju učitana kao niz. Napisati funkciju jezgra &amp;lt;code&amp;gt;truncate&amp;lt;/code&amp;gt; koja briše sadržaj fajla na čiji FCB ukazuje argument.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const unsigned long FAT_SIZE = ...;&lt;br /&gt;
unsigned long FAT[FAT_SIZE];&lt;br /&gt;
&lt;br /&gt;
void truncate(FCB* file) {&lt;br /&gt;
    unsigned long b = file-&amp;gt;head;&lt;br /&gt;
    for (unsigned long i = 0; i &amp;lt; file-&amp;gt;size; ++i) {&lt;br /&gt;
        unsigned long next = FAT[b];&lt;br /&gt;
        FAT[b] = 0;&lt;br /&gt;
        // Ovde se smatra da fat_free_tail pokazuje na blok 0 kada nema slobodnih blokova.&lt;br /&gt;
        if (fat_free_tail) {&lt;br /&gt;
            FAT[fat_free_tail] = b;&lt;br /&gt;
            fat_free_tail = b;&lt;br /&gt;
        } else {&lt;br /&gt;
            fat_free_head = b;&lt;br /&gt;
            fat_free_tail = b;&lt;br /&gt;
        }&lt;br /&gt;
        b = next;&lt;br /&gt;
    }&lt;br /&gt;
    file-&amp;gt;size = 0;&lt;br /&gt;
    file-&amp;gt;head = 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</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=3011</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=3011"/>
		<updated>2021-10-03T13:38:30Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Опис copyOnWrite&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;
#Pri sinhronoj I/O operaciji, posledica sistemskopg poziva tog procesa&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;
Десиће се &amp;quot;access violeation&amp;quot;, јер процес има све странице тренутно учитане, али у њиховим дескрипторима у PMT je записано да се у њих несме уписивати, ОС погледа у описе сегмената и види да је дозвољен упис у ту страницу па је закључак да се она тренутно дели са неким другим процесом, страница ће се копирати и у ту нову копију, чији је власник тренутни процес, ће бити извршен упис.&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>IvnSvc</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=3010</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=3010"/>
		<updated>2021-10-03T13:34:02Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* 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;
#Pri sinhronoj I/O operaciji, posledica sistemskopg poziva tog procesa&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>IvnSvc</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_2012&amp;diff=3009</id>
		<title>ОС1/Јануар 2012</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_2012&amp;diff=3009"/>
		<updated>2021-10-03T13:31:17Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Пошто је ФАТ у једном блоку, онда имамо само један приступ, по тражени блок у фајлу&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2012/januar/Jan%202012.doc Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti osnovni motiv uvođenja multiprogramiranja u računarske sisteme.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Multiprogramiranje se uvodi kako bi se izvršavalo više poslova uporedo. Dok jedan proces čeka na završetak I/O operacije, procesor može da izvršava i opslužuje neki drugi proces.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji vrši prenos bloka podataka iz memorije na izlazni uređaj tehnikom programiranog izlaza korišćenjem prozivanja (&#039;&#039;polling&#039;&#039;). Samostalno usvojiti potrebne detaljne pretpostavke.&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;
		LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #00..01&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1&lt;br /&gt;
		JZ wait&lt;br /&gt;
		&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;
		HALT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukoliko su svi sistemski pozivi izvršeni uspešno, koliko procesa se ukupno kreira kada se nad sledećim programom kreira jedan proces (računajući i taj jedan)?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void main () {&lt;br /&gt;
  for (int i=0; i&amp;lt;3; i++) fork();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1 + 2^N - 1 = 2^3 = 8&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem školskog jezgra napisati kod klase koja apstrahuje nit koja, ukoliko se kreira sa neparnim celobrojnim parametrom, kreira još jednu takvu istu nit, samo sa parnim celobrojnim parametrom, a u suprotnom se samo završava.&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;
class myThead : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
	myThead(int val) {&lt;br /&gt;
		this-&amp;gt;val = val;&lt;br /&gt;
		start();&lt;br /&gt;
	}&lt;br /&gt;
protected:&lt;br /&gt;
	void run() {&lt;br /&gt;
		if(val &amp;amp; 1) {&lt;br /&gt;
			new myThead(val + 1);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
private: &lt;br /&gt;
	int val;&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;
Kada najranije linker može prijaviti grešku tipa nedefinisanog simbola, a kada višestruko definisanog simbola (tokom prvog prolaza, nakon prvog prolaza, tokom drugog prolaza, ili nakon drugog prolaza)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Nedefinisan simbol - nakon drugog prolaza&lt;br /&gt;
#Višestruko definisan simbol - tokom prvog prolaza&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&lt;br /&gt;
U nekom sistemu primenjuje se &#039;&#039;best-fit&#039;&#039; algoritam kontinualne alokacije memorije. Inicijalno je prostor veličine 256KB potpuno slobodan za alokaciju korisničkih procesa. Potom su različiti procesi zadavali sledeće zahteve (slovna oznaka označava proces koji je postavio zahtev, brojna oznaka  označava  veličinu  alociranog  prostora  u  KB,  a  minus  označava  gašenje  procesa  i oslobađanje njegove memorije)&lt;br /&gt;
&lt;br /&gt;
A64, B16, C128, D32, A-, E8, F32, B-&lt;br /&gt;
&lt;br /&gt;
Odgovoriti na sledeća pitanja koja se odnose na stanje memorije nakon ove sekvence zahteva: &lt;br /&gt;
#Koliko je ukupno slobodnih fragmenata? &lt;br /&gt;
#Kolika je veličina najmanjeg slobodnog fragmenta?&lt;br /&gt;
#Kolika je veličina najvećeg slobodnog fragmenta?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1. Остала су два слободна фрагмента&amp;lt;br&amp;gt;&lt;br /&gt;
2. Најмањи је величине 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
3. Највећи је величине 48КВ&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скица решења, једна цртица = 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 --------------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAA------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABB----------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCC------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF----BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF------CCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelna memorija organizovana je stranično, a adresibilna jedinica je bajt. Virtuelna adresa je 32-bitna, stranica je veličine 4KB, deskriptor stranice je 32-bitni, a PMT je organizovana u dva nivoa, pri čemu je polje za straničenje prvog nivoa veličine 8 bita. Koliki prostor bi ukupno zauzimala PMT nekog procesa kada bi:&lt;br /&gt;
#Proces koristio ceo svoj virtuelni adresni prostor?&lt;br /&gt;
#Proces koristio samo jednu stranicu?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
Страница од 4KB нам захтева 12 бита за померај, 8 бита за страницу првог нивоа и остатак битова за страницу другог нивоа &amp;lt;br&amp;gt;&lt;br /&gt;
VA(32):8,12,12 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Уколико процес користи све странице, потребна му је страница првог нивоа и све странице другог нивоа, улаз у обе је по 32b,тј 4В &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;2^8 \cdot 4B + 2^8 \cdot 2^12 \cdot 4B = 2^{10}B + 2^{22} = 1KB + 4MB&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt;2^8 \cdot 4B + 2^12 \cdot 4B = 2^{10}B + 2^{16} = 65KB&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Umesto tehnike &#039;&#039;spooling&#039;&#039;, pristup uporednih procesa štampaču u nekom sistemu omogućuje se međusobnim isključenjem pomoću operacije rezervacije: svaki proces, pre nego što zatraži bilo koju operaciju sa štampačem, mora da ga rezerviše, a tu rezervaciju otpušta tek kada završi sa celim jednim poslom štampe. Šta je nedostatak ove tehnike?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Pošto operacije sa štampačem traju prilično dugo, primenom opisane tehnike rezervacije, proces može vrlo dugo da zauzima štampač zbog čega će se ostali procesi suspendovati. Ovo je veoma loše jer se gubi konkurentnost.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki fajl sistem pruža sledeće operacije u svom API za tekstualne fajlove:&lt;br /&gt;
#&amp;lt;code&amp;gt;FHANDLE open(char* filename)&amp;lt;/code&amp;gt; Otvara fajl sa datim imenom.&lt;br /&gt;
#&amp;lt;code&amp;gt;void close(FHANDLE)&amp;lt;/code&amp;gt; Zatvara dati fajl.&lt;br /&gt;
#&amp;lt;code&amp;gt;int size(FHANDLE)&amp;lt;/code&amp;gt;	Vraća trenutnu veličinu sadržaja fajla u znakovima.&lt;br /&gt;
#&amp;lt;code&amp;gt;void append(FHANDLE,int)&amp;lt;/code&amp;gt; Proširuje sadržaj fajla za dati broj znakova na kraju.&lt;br /&gt;
#&amp;lt;code&amp;gt;void seek(FHANDLE,int)&amp;lt;/code&amp;gt; Postavlja kurzor datog fajla na datu poziciju (redni broj znaka počev od 0).&lt;br /&gt;
#&amp;lt;code&amp;gt;void write(FHANDLE,char*)&amp;lt;/code&amp;gt;	Na poziciju kurzora datog fajla upisuje dati niz znakova, ne uključujući završni znak ‘\0’, i pomera kurzor iza upisanog niza znakova.&lt;br /&gt;
Napisati program koji na kraj postojećeg fajla sa imenom &amp;lt;code&amp;gt;proba.txt&amp;lt;/code&amp;gt; upisuje sve što je uneseno preko standardnog ulaza, sve dok se na ulazu ne unese znak ’X’. Zanemariti sve potencijalne greške u ulazu/izlazu.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Исписује &amp;quot;Hello world!&amp;quot;.&lt;br /&gt;
int main(void) {&lt;br /&gt;
    FILE f = open(&amp;quot;proba.txt&amp;quot;);&lt;br /&gt;
    char a;&lt;br /&gt;
    int size = size(f);&lt;br /&gt;
    while(1){&lt;br /&gt;
        cin &amp;gt;&amp;gt; a;&lt;br /&gt;
        if(a==&#039;X&#039;)break;&lt;br /&gt;
        &lt;br /&gt;
        append(f,2);                  //проширивање фајла, 1 за слово и 1 јер се курзор помера на место после уписаног знака&lt;br /&gt;
        seek(f,size);           &lt;br /&gt;
        write(f,&amp;amp;a);&lt;br /&gt;
        &lt;br /&gt;
        size+=2;                      //ажурирање тренутне величине фајла&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koliko pristupa blokovima na disku treba izvršiti za pristup &#039;&#039;n&#039;&#039;-tom logičkom bloku sadržaja fajla ako je alokacija fajla:&lt;br /&gt;
#FAT, pri čemu je FAT uvek inicijalno učitana u memoriju prilikom montiranja fajl sistema&lt;br /&gt;
#indeksna, pri čemu je ceo indeks fajla u jednom bloku?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#1&lt;br /&gt;
#2&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</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_2012&amp;diff=3008</id>
		<title>ОС1/Јануар 2012</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_2012&amp;diff=3008"/>
		<updated>2021-10-03T13:29:54Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */   Ово би било добро проверити&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2012/januar/Jan%202012.doc Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti osnovni motiv uvođenja multiprogramiranja u računarske sisteme.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Multiprogramiranje se uvodi kako bi se izvršavalo više poslova uporedo. Dok jedan proces čeka na završetak I/O operacije, procesor može da izvršava i opslužuje neki drugi proces.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji vrši prenos bloka podataka iz memorije na izlazni uređaj tehnikom programiranog izlaza korišćenjem prozivanja (&#039;&#039;polling&#039;&#039;). Samostalno usvojiti potrebne detaljne pretpostavke.&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;
		LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #00..01&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1&lt;br /&gt;
		JZ wait&lt;br /&gt;
		&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;
		HALT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukoliko su svi sistemski pozivi izvršeni uspešno, koliko procesa se ukupno kreira kada se nad sledećim programom kreira jedan proces (računajući i taj jedan)?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void main () {&lt;br /&gt;
  for (int i=0; i&amp;lt;3; i++) fork();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1 + 2^N - 1 = 2^3 = 8&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem školskog jezgra napisati kod klase koja apstrahuje nit koja, ukoliko se kreira sa neparnim celobrojnim parametrom, kreira još jednu takvu istu nit, samo sa parnim celobrojnim parametrom, a u suprotnom se samo završava.&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;
class myThead : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
	myThead(int val) {&lt;br /&gt;
		this-&amp;gt;val = val;&lt;br /&gt;
		start();&lt;br /&gt;
	}&lt;br /&gt;
protected:&lt;br /&gt;
	void run() {&lt;br /&gt;
		if(val &amp;amp; 1) {&lt;br /&gt;
			new myThead(val + 1);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
private: &lt;br /&gt;
	int val;&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;
Kada najranije linker može prijaviti grešku tipa nedefinisanog simbola, a kada višestruko definisanog simbola (tokom prvog prolaza, nakon prvog prolaza, tokom drugog prolaza, ili nakon drugog prolaza)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Nedefinisan simbol - nakon drugog prolaza&lt;br /&gt;
#Višestruko definisan simbol - tokom prvog prolaza&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&lt;br /&gt;
U nekom sistemu primenjuje se &#039;&#039;best-fit&#039;&#039; algoritam kontinualne alokacije memorije. Inicijalno je prostor veličine 256KB potpuno slobodan za alokaciju korisničkih procesa. Potom su različiti procesi zadavali sledeće zahteve (slovna oznaka označava proces koji je postavio zahtev, brojna oznaka  označava  veličinu  alociranog  prostora  u  KB,  a  minus  označava  gašenje  procesa  i oslobađanje njegove memorije)&lt;br /&gt;
&lt;br /&gt;
A64, B16, C128, D32, A-, E8, F32, B-&lt;br /&gt;
&lt;br /&gt;
Odgovoriti na sledeća pitanja koja se odnose na stanje memorije nakon ove sekvence zahteva: &lt;br /&gt;
#Koliko je ukupno slobodnih fragmenata? &lt;br /&gt;
#Kolika je veličina najmanjeg slobodnog fragmenta?&lt;br /&gt;
#Kolika je veličina najvećeg slobodnog fragmenta?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1. Остала су два слободна фрагмента&amp;lt;br&amp;gt;&lt;br /&gt;
2. Најмањи је величине 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
3. Највећи је величине 48КВ&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скица решења, једна цртица = 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 --------------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAA------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABB----------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCC------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF----BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF------CCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelna memorija organizovana je stranično, a adresibilna jedinica je bajt. Virtuelna adresa je 32-bitna, stranica je veličine 4KB, deskriptor stranice je 32-bitni, a PMT je organizovana u dva nivoa, pri čemu je polje za straničenje prvog nivoa veličine 8 bita. Koliki prostor bi ukupno zauzimala PMT nekog procesa kada bi:&lt;br /&gt;
#Proces koristio ceo svoj virtuelni adresni prostor?&lt;br /&gt;
#Proces koristio samo jednu stranicu?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
Страница од 4KB нам захтева 12 бита за померај, 8 бита за страницу првог нивоа и остатак битова за страницу другог нивоа &amp;lt;br&amp;gt;&lt;br /&gt;
VA(32):8,12,12 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Уколико процес користи све странице, потребна му је страница првог нивоа и све странице другог нивоа, улаз у обе је по 32b,тј 4В &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;2^8 \cdot 4B + 2^8 \cdot 2^12 \cdot 4B = 2^{10}B + 2^{22} = 1KB + 4MB&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt;2^8 \cdot 4B + 2^12 \cdot 4B = 2^{10}B + 2^{16} = 65KB&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Umesto tehnike &#039;&#039;spooling&#039;&#039;, pristup uporednih procesa štampaču u nekom sistemu omogućuje se međusobnim isključenjem pomoću operacije rezervacije: svaki proces, pre nego što zatraži bilo koju operaciju sa štampačem, mora da ga rezerviše, a tu rezervaciju otpušta tek kada završi sa celim jednim poslom štampe. Šta je nedostatak ove tehnike?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Pošto operacije sa štampačem traju prilično dugo, primenom opisane tehnike rezervacije, proces može vrlo dugo da zauzima štampač zbog čega će se ostali procesi suspendovati. Ovo je veoma loše jer se gubi konkurentnost.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki fajl sistem pruža sledeće operacije u svom API za tekstualne fajlove:&lt;br /&gt;
#&amp;lt;code&amp;gt;FHANDLE open(char* filename)&amp;lt;/code&amp;gt; Otvara fajl sa datim imenom.&lt;br /&gt;
#&amp;lt;code&amp;gt;void close(FHANDLE)&amp;lt;/code&amp;gt; Zatvara dati fajl.&lt;br /&gt;
#&amp;lt;code&amp;gt;int size(FHANDLE)&amp;lt;/code&amp;gt;	Vraća trenutnu veličinu sadržaja fajla u znakovima.&lt;br /&gt;
#&amp;lt;code&amp;gt;void append(FHANDLE,int)&amp;lt;/code&amp;gt; Proširuje sadržaj fajla za dati broj znakova na kraju.&lt;br /&gt;
#&amp;lt;code&amp;gt;void seek(FHANDLE,int)&amp;lt;/code&amp;gt; Postavlja kurzor datog fajla na datu poziciju (redni broj znaka počev od 0).&lt;br /&gt;
#&amp;lt;code&amp;gt;void write(FHANDLE,char*)&amp;lt;/code&amp;gt;	Na poziciju kurzora datog fajla upisuje dati niz znakova, ne uključujući završni znak ‘\0’, i pomera kurzor iza upisanog niza znakova.&lt;br /&gt;
Napisati program koji na kraj postojećeg fajla sa imenom &amp;lt;code&amp;gt;proba.txt&amp;lt;/code&amp;gt; upisuje sve što je uneseno preko standardnog ulaza, sve dok se na ulazu ne unese znak ’X’. Zanemariti sve potencijalne greške u ulazu/izlazu.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Исписује &amp;quot;Hello world!&amp;quot;.&lt;br /&gt;
int main(void) {&lt;br /&gt;
    FILE f = open(&amp;quot;proba.txt&amp;quot;);&lt;br /&gt;
    char a;&lt;br /&gt;
    int size = size(f);&lt;br /&gt;
    while(1){&lt;br /&gt;
        cin &amp;gt;&amp;gt; a;&lt;br /&gt;
        if(a==&#039;X&#039;)break;&lt;br /&gt;
        &lt;br /&gt;
        append(f,2);                  //проширивање фајла, 1 за слово и 1 јер се курзор помера на место после уписаног знака&lt;br /&gt;
        seek(f,size);           &lt;br /&gt;
        write(f,&amp;amp;a);&lt;br /&gt;
        &lt;br /&gt;
        size+=2;                      //ажурирање тренутне величине фајла&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koliko pristupa blokovima na disku treba izvršiti za pristup &#039;&#039;n&#039;&#039;-tom logičkom bloku sadržaja fajla ako je alokacija fajla:&lt;br /&gt;
#FAT, pri čemu je FAT uvek inicijalno učitana u memoriju prilikom montiranja fajl sistema&lt;br /&gt;
#indeksna, pri čemu je ceo indeks fajla u jednom bloku?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#n&lt;br /&gt;
#2&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</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_2012&amp;diff=3007</id>
		<title>ОС1/Јануар 2012</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_2012&amp;diff=3007"/>
		<updated>2021-10-03T13:22:05Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Додато решење&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2012/januar/Jan%202012.doc Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti osnovni motiv uvođenja multiprogramiranja u računarske sisteme.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Multiprogramiranje se uvodi kako bi se izvršavalo više poslova uporedo. Dok jedan proces čeka na završetak I/O operacije, procesor može da izvršava i opslužuje neki drugi proces.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji vrši prenos bloka podataka iz memorije na izlazni uređaj tehnikom programiranog izlaza korišćenjem prozivanja (&#039;&#039;polling&#039;&#039;). Samostalno usvojiti potrebne detaljne pretpostavke.&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;
		LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #00..01&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1&lt;br /&gt;
		JZ wait&lt;br /&gt;
		&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;
		HALT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukoliko su svi sistemski pozivi izvršeni uspešno, koliko procesa se ukupno kreira kada se nad sledećim programom kreira jedan proces (računajući i taj jedan)?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void main () {&lt;br /&gt;
  for (int i=0; i&amp;lt;3; i++) fork();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1 + 2^N - 1 = 2^3 = 8&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem školskog jezgra napisati kod klase koja apstrahuje nit koja, ukoliko se kreira sa neparnim celobrojnim parametrom, kreira još jednu takvu istu nit, samo sa parnim celobrojnim parametrom, a u suprotnom se samo završava.&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;
class myThead : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
	myThead(int val) {&lt;br /&gt;
		this-&amp;gt;val = val;&lt;br /&gt;
		start();&lt;br /&gt;
	}&lt;br /&gt;
protected:&lt;br /&gt;
	void run() {&lt;br /&gt;
		if(val &amp;amp; 1) {&lt;br /&gt;
			new myThead(val + 1);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
private: &lt;br /&gt;
	int val;&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;
Kada najranije linker može prijaviti grešku tipa nedefinisanog simbola, a kada višestruko definisanog simbola (tokom prvog prolaza, nakon prvog prolaza, tokom drugog prolaza, ili nakon drugog prolaza)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Nedefinisan simbol - nakon drugog prolaza&lt;br /&gt;
#Višestruko definisan simbol - tokom prvog prolaza&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&lt;br /&gt;
U nekom sistemu primenjuje se &#039;&#039;best-fit&#039;&#039; algoritam kontinualne alokacije memorije. Inicijalno je prostor veličine 256KB potpuno slobodan za alokaciju korisničkih procesa. Potom su različiti procesi zadavali sledeće zahteve (slovna oznaka označava proces koji je postavio zahtev, brojna oznaka  označava  veličinu  alociranog  prostora  u  KB,  a  minus  označava  gašenje  procesa  i oslobađanje njegove memorije)&lt;br /&gt;
&lt;br /&gt;
A64, B16, C128, D32, A-, E8, F32, B-&lt;br /&gt;
&lt;br /&gt;
Odgovoriti na sledeća pitanja koja se odnose na stanje memorije nakon ove sekvence zahteva: &lt;br /&gt;
#Koliko je ukupno slobodnih fragmenata? &lt;br /&gt;
#Kolika je veličina najmanjeg slobodnog fragmenta?&lt;br /&gt;
#Kolika je veličina najvećeg slobodnog fragmenta?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1. Остала су два слободна фрагмента&amp;lt;br&amp;gt;&lt;br /&gt;
2. Најмањи је величине 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
3. Највећи је величине 48КВ&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скица решења, једна цртица = 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 --------------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAA------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABB----------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCC------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF----BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF------CCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelna memorija organizovana je stranično, a adresibilna jedinica je bajt. Virtuelna adresa je 32-bitna, stranica je veličine 4KB, deskriptor stranice je 32-bitni, a PMT je organizovana u dva nivoa, pri čemu je polje za straničenje prvog nivoa veličine 8 bita. Koliki prostor bi ukupno zauzimala PMT nekog procesa kada bi:&lt;br /&gt;
#Proces koristio ceo svoj virtuelni adresni prostor?&lt;br /&gt;
#Proces koristio samo jednu stranicu?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
Страница од 4KB нам захтева 12 бита за померај, 8 бита за страницу првог нивоа и остатак битова за страницу другог нивоа &amp;lt;br&amp;gt;&lt;br /&gt;
VA(32):8,12,12 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Уколико процес користи све странице, потребна му је страница првог нивоа и све странице другог нивоа, улаз у обе је по 32b,тј 4В &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;2^8 \cdot 4B + 2^8 \cdot 2^12 \cdot 4B = 2^{10}B + 2^{22} = 1KB + 4MB&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt;2^8 \cdot 4B + 2^12 \cdot 4B = 2^{10}B + 2^{16} = 65KB&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Umesto tehnike &#039;&#039;spooling&#039;&#039;, pristup uporednih procesa štampaču u nekom sistemu omogućuje se međusobnim isključenjem pomoću operacije rezervacije: svaki proces, pre nego što zatraži bilo koju operaciju sa štampačem, mora da ga rezerviše, a tu rezervaciju otpušta tek kada završi sa celim jednim poslom štampe. Šta je nedostatak ove tehnike?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Pošto operacije sa štampačem traju prilično dugo, primenom opisane tehnike rezervacije, proces može vrlo dugo da zauzima štampač zbog čega će se ostali procesi suspendovati. Ovo je veoma loše jer se gubi konkurentnost.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki fajl sistem pruža sledeće operacije u svom API za tekstualne fajlove:&lt;br /&gt;
#&amp;lt;code&amp;gt;FHANDLE open(char* filename)&amp;lt;/code&amp;gt; Otvara fajl sa datim imenom.&lt;br /&gt;
#&amp;lt;code&amp;gt;void close(FHANDLE)&amp;lt;/code&amp;gt; Zatvara dati fajl.&lt;br /&gt;
#&amp;lt;code&amp;gt;int size(FHANDLE)&amp;lt;/code&amp;gt;	Vraća trenutnu veličinu sadržaja fajla u znakovima.&lt;br /&gt;
#&amp;lt;code&amp;gt;void append(FHANDLE,int)&amp;lt;/code&amp;gt; Proširuje sadržaj fajla za dati broj znakova na kraju.&lt;br /&gt;
#&amp;lt;code&amp;gt;void seek(FHANDLE,int)&amp;lt;/code&amp;gt; Postavlja kurzor datog fajla na datu poziciju (redni broj znaka počev od 0).&lt;br /&gt;
#&amp;lt;code&amp;gt;void write(FHANDLE,char*)&amp;lt;/code&amp;gt;	Na poziciju kurzora datog fajla upisuje dati niz znakova, ne uključujući završni znak ‘\0’, i pomera kurzor iza upisanog niza znakova.&lt;br /&gt;
Napisati program koji na kraj postojećeg fajla sa imenom &amp;lt;code&amp;gt;proba.txt&amp;lt;/code&amp;gt; upisuje sve što je uneseno preko standardnog ulaza, sve dok se na ulazu ne unese znak ’X’. Zanemariti sve potencijalne greške u ulazu/izlazu.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koliko pristupa blokovima na disku treba izvršiti za pristup &#039;&#039;n&#039;&#039;-tom logičkom bloku sadržaja fajla ako je alokacija fajla:&lt;br /&gt;
#FAT, pri čemu je FAT uvek inicijalno učitana u memoriju prilikom montiranja fajl sistema&lt;br /&gt;
#indeksna, pri čemu je ceo indeks fajla u jednom bloku?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#n&lt;br /&gt;
#2&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</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_2012&amp;diff=3006</id>
		<title>ОС1/Јануар 2012</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_2012&amp;diff=3006"/>
		<updated>2021-10-03T13:12:42Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  словна грешка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2012/januar/Jan%202012.doc Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti osnovni motiv uvođenja multiprogramiranja u računarske sisteme.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Multiprogramiranje se uvodi kako bi se izvršavalo više poslova uporedo. Dok jedan proces čeka na završetak I/O operacije, procesor može da izvršava i opslužuje neki drugi proces.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji vrši prenos bloka podataka iz memorije na izlazni uređaj tehnikom programiranog izlaza korišćenjem prozivanja (&#039;&#039;polling&#039;&#039;). Samostalno usvojiti potrebne detaljne pretpostavke.&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;
		LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #00..01&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1&lt;br /&gt;
		JZ wait&lt;br /&gt;
		&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;
		HALT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukoliko su svi sistemski pozivi izvršeni uspešno, koliko procesa se ukupno kreira kada se nad sledećim programom kreira jedan proces (računajući i taj jedan)?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void main () {&lt;br /&gt;
  for (int i=0; i&amp;lt;3; i++) fork();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1 + 2^N - 1 = 2^3 = 8&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem školskog jezgra napisati kod klase koja apstrahuje nit koja, ukoliko se kreira sa neparnim celobrojnim parametrom, kreira još jednu takvu istu nit, samo sa parnim celobrojnim parametrom, a u suprotnom se samo završava.&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;
class myThead : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
	myThead(int val) {&lt;br /&gt;
		this-&amp;gt;val = val;&lt;br /&gt;
		start();&lt;br /&gt;
	}&lt;br /&gt;
protected:&lt;br /&gt;
	void run() {&lt;br /&gt;
		if(val &amp;amp; 1) {&lt;br /&gt;
			new myThead(val + 1);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
private: &lt;br /&gt;
	int val;&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;
Kada najranije linker može prijaviti grešku tipa nedefinisanog simbola, a kada višestruko definisanog simbola (tokom prvog prolaza, nakon prvog prolaza, tokom drugog prolaza, ili nakon drugog prolaza)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Nedefinisan simbol - nakon drugog prolaza&lt;br /&gt;
#Višestruko definisan simbol - tokom prvog prolaza&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&lt;br /&gt;
U nekom sistemu primenjuje se &#039;&#039;best-fit&#039;&#039; algoritam kontinualne alokacije memorije. Inicijalno je prostor veličine 256KB potpuno slobodan za alokaciju korisničkih procesa. Potom su različiti procesi zadavali sledeće zahteve (slovna oznaka označava proces koji je postavio zahtev, brojna oznaka  označava  veličinu  alociranog  prostora  u  KB,  a  minus  označava  gašenje  procesa  i oslobađanje njegove memorije)&lt;br /&gt;
&lt;br /&gt;
A64, B16, C128, D32, A-, E8, F32, B-&lt;br /&gt;
&lt;br /&gt;
Odgovoriti na sledeća pitanja koja se odnose na stanje memorije nakon ove sekvence zahteva: &lt;br /&gt;
#Koliko je ukupno slobodnih fragmenata? &lt;br /&gt;
#Kolika je veličina najmanjeg slobodnog fragmenta?&lt;br /&gt;
#Kolika je veličina najvećeg slobodnog fragmenta?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1. Остала су два слободна фрагмента&amp;lt;br&amp;gt;&lt;br /&gt;
2. Најмањи је величине 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
3. Највећи је величине 48КВ&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скица решења, једна цртица = 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 --------------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAA------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABB----------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCC------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF----BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF------CCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelna memorija organizovana je stranično, a adresibilna jedinica je bajt. Virtuelna adresa je 32-bitna, stranica je veličine 4KB, deskriptor stranice je 32-bitni, a PMT je organizovana u dva nivoa, pri čemu je polje za straničenje prvog nivoa veličine 8 bita. Koliki prostor bi ukupno zauzimala PMT nekog procesa kada bi:&lt;br /&gt;
#Proces koristio ceo svoj virtuelni adresni prostor?&lt;br /&gt;
#Proces koristio samo jednu stranicu?&lt;br /&gt;
&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;
Umesto tehnike &#039;&#039;spooling&#039;&#039;, pristup uporednih procesa štampaču u nekom sistemu omogućuje se međusobnim isključenjem pomoću operacije rezervacije: svaki proces, pre nego što zatraži bilo koju operaciju sa štampačem, mora da ga rezerviše, a tu rezervaciju otpušta tek kada završi sa celim jednim poslom štampe. Šta je nedostatak ove tehnike?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Pošto operacije sa štampačem traju prilično dugo, primenom opisane tehnike rezervacije, proces može vrlo dugo da zauzima štampač zbog čega će se ostali procesi suspendovati. Ovo je veoma loše jer se gubi konkurentnost.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki fajl sistem pruža sledeće operacije u svom API za tekstualne fajlove:&lt;br /&gt;
#&amp;lt;code&amp;gt;FHANDLE open(char* filename)&amp;lt;/code&amp;gt; Otvara fajl sa datim imenom.&lt;br /&gt;
#&amp;lt;code&amp;gt;void close(FHANDLE)&amp;lt;/code&amp;gt; Zatvara dati fajl.&lt;br /&gt;
#&amp;lt;code&amp;gt;int size(FHANDLE)&amp;lt;/code&amp;gt;	Vraća trenutnu veličinu sadržaja fajla u znakovima.&lt;br /&gt;
#&amp;lt;code&amp;gt;void append(FHANDLE,int)&amp;lt;/code&amp;gt; Proširuje sadržaj fajla za dati broj znakova na kraju.&lt;br /&gt;
#&amp;lt;code&amp;gt;void seek(FHANDLE,int)&amp;lt;/code&amp;gt; Postavlja kurzor datog fajla na datu poziciju (redni broj znaka počev od 0).&lt;br /&gt;
#&amp;lt;code&amp;gt;void write(FHANDLE,char*)&amp;lt;/code&amp;gt;	Na poziciju kurzora datog fajla upisuje dati niz znakova, ne uključujući završni znak ‘\0’, i pomera kurzor iza upisanog niza znakova.&lt;br /&gt;
Napisati program koji na kraj postojećeg fajla sa imenom &amp;lt;code&amp;gt;proba.txt&amp;lt;/code&amp;gt; upisuje sve što je uneseno preko standardnog ulaza, sve dok se na ulazu ne unese znak ’X’. Zanemariti sve potencijalne greške u ulazu/izlazu.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koliko pristupa blokovima na disku treba izvršiti za pristup &#039;&#039;n&#039;&#039;-tom logičkom bloku sadržaja fajla ako je alokacija fajla:&lt;br /&gt;
#FAT, pri čemu je FAT uvek inicijalno učitana u memoriju prilikom montiranja fajl sistema&lt;br /&gt;
#indeksna, pri čemu je ceo indeks fajla u jednom bloku?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#n&lt;br /&gt;
#2&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</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_2012&amp;diff=3005</id>
		<title>ОС1/Јануар 2012</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_2012&amp;diff=3005"/>
		<updated>2021-10-03T13:06:34Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Додато решење&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2012/januar/Jan%202012.doc Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukratko objasniti osnovni motiv uvođenja multiprogramiranja u računarske sisteme.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Multiprogramiranje se uvodi kako bi se izvršavalo više poslova uporedo. Dok jedan proces čeka na završetak I/O operacije, procesor može da izvršava i opslužuje neki drugi proces.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji vrši prenos bloka podataka iz memorije na izlazni uređaj tehnikom programiranog izlaza korišćenjem prozivanja (&#039;&#039;polling&#039;&#039;). Samostalno usvojiti potrebne detaljne pretpostavke.&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;
		LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #00..01&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1&lt;br /&gt;
		JZ wait&lt;br /&gt;
		&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;
		HALT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ukoliko su svi sistemski pozivi izvršeni uspešno, koliko procesa se ukupno kreira kada se nad sledećim programom kreira jedan proces (računajući i taj jedan)?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void main () {&lt;br /&gt;
  for (int i=0; i&amp;lt;3; i++) fork();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1 + 2^N - 1 = 2^3 = 8&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem školskog jezgra napisati kod klase koja apstrahuje nit koja, ukoliko se kreira sa neparnim celobrojnim parametrom, kreira još jednu takvu istu nit, samo sa parnim celobrojnim parametrom, a u suprotnom se samo završava.&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;
class myThead : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
	myThead(int val) {&lt;br /&gt;
		this-&amp;gt;val = val;&lt;br /&gt;
		start();&lt;br /&gt;
	}&lt;br /&gt;
protected:&lt;br /&gt;
	void run() {&lt;br /&gt;
		if(val &amp;amp; 1) {&lt;br /&gt;
			new myThead(val + 1);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
private: &lt;br /&gt;
	int val;&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;
Kada najranije linker može prijaviti grešku tipa nedefinisanog simbola, a kada višestruko definisanog simbola (tokom prvog prolaza, nakon prvog prolaza, tokom drugog prolaza, ili nakon drugog prolaza)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#Nedefinisan simbol - nakon drugog prolaza&lt;br /&gt;
#Višestruko definisan simbol - tokom prvog prolaza&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&lt;br /&gt;
U nekom sistemu primenjuje se &#039;&#039;best-fit&#039;&#039; algoritam kontinualne alokacije memorije. Inicijalno je prostor veličine 256KB potpuno slobodan za alokaciju korisničkih procesa. Potom su različiti procesi zadavali sledeće zahteve (slovna oznaka označava proces koji je postavio zahtev, brojna oznaka  označava  veličinu  alociranog  prostora  u  KB,  a  minus  označava  gašenje  procesa  i oslobađanje njegove memorije)&lt;br /&gt;
&lt;br /&gt;
A64, B16, C128, D32, A-, E8, F32, B-&lt;br /&gt;
&lt;br /&gt;
Odgovoriti na sledeća pitanja koja se odnose na stanje memorije nakon ove sekvence zahteva: &lt;br /&gt;
#Koliko je ukupno slobodnih fragmenata? &lt;br /&gt;
#Kolika je veličina najmanjeg slobodnog fragmenta?&lt;br /&gt;
#Kolika je veličina najvećeg slobodnog fragmenta?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
1. Остала су два слободна фрагмента&amp;lt;br&amp;gt;&lt;br /&gt;
2. Најмањи је величине 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
3. Највечи је величине 48КВ&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скица решења, једна цртица = 8KB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 --------------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAA------------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABB----------------------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCC------&amp;lt;br&amp;gt;&lt;br /&gt;
 AAAAAAAABBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDD--&amp;lt;br&amp;gt;&lt;br /&gt;
 --------BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF----BBCCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
 FFFF------CCCCCCCCCCCCCCCCDDDDE-&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelna memorija organizovana je stranično, a adresibilna jedinica je bajt. Virtuelna adresa je 32-bitna, stranica je veličine 4KB, deskriptor stranice je 32-bitni, a PMT je organizovana u dva nivoa, pri čemu je polje za straničenje prvog nivoa veličine 8 bita. Koliki prostor bi ukupno zauzimala PMT nekog procesa kada bi:&lt;br /&gt;
#Proces koristio ceo svoj virtuelni adresni prostor?&lt;br /&gt;
#Proces koristio samo jednu stranicu?&lt;br /&gt;
&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;
Umesto tehnike &#039;&#039;spooling&#039;&#039;, pristup uporednih procesa štampaču u nekom sistemu omogućuje se međusobnim isključenjem pomoću operacije rezervacije: svaki proces, pre nego što zatraži bilo koju operaciju sa štampačem, mora da ga rezerviše, a tu rezervaciju otpušta tek kada završi sa celim jednim poslom štampe. Šta je nedostatak ove tehnike?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Pošto operacije sa štampačem traju prilično dugo, primenom opisane tehnike rezervacije, proces može vrlo dugo da zauzima štampač zbog čega će se ostali procesi suspendovati. Ovo je veoma loše jer se gubi konkurentnost.&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki fajl sistem pruža sledeće operacije u svom API za tekstualne fajlove:&lt;br /&gt;
#&amp;lt;code&amp;gt;FHANDLE open(char* filename)&amp;lt;/code&amp;gt; Otvara fajl sa datim imenom.&lt;br /&gt;
#&amp;lt;code&amp;gt;void close(FHANDLE)&amp;lt;/code&amp;gt; Zatvara dati fajl.&lt;br /&gt;
#&amp;lt;code&amp;gt;int size(FHANDLE)&amp;lt;/code&amp;gt;	Vraća trenutnu veličinu sadržaja fajla u znakovima.&lt;br /&gt;
#&amp;lt;code&amp;gt;void append(FHANDLE,int)&amp;lt;/code&amp;gt; Proširuje sadržaj fajla za dati broj znakova na kraju.&lt;br /&gt;
#&amp;lt;code&amp;gt;void seek(FHANDLE,int)&amp;lt;/code&amp;gt; Postavlja kurzor datog fajla na datu poziciju (redni broj znaka počev od 0).&lt;br /&gt;
#&amp;lt;code&amp;gt;void write(FHANDLE,char*)&amp;lt;/code&amp;gt;	Na poziciju kurzora datog fajla upisuje dati niz znakova, ne uključujući završni znak ‘\0’, i pomera kurzor iza upisanog niza znakova.&lt;br /&gt;
Napisati program koji na kraj postojećeg fajla sa imenom &amp;lt;code&amp;gt;proba.txt&amp;lt;/code&amp;gt; upisuje sve što je uneseno preko standardnog ulaza, sve dok se na ulazu ne unese znak ’X’. Zanemariti sve potencijalne greške u ulazu/izlazu.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koliko pristupa blokovima na disku treba izvršiti za pristup &#039;&#039;n&#039;&#039;-tom logičkom bloku sadržaja fajla ako je alokacija fajla:&lt;br /&gt;
#FAT, pri čemu je FAT uvek inicijalno učitana u memoriju prilikom montiranja fajl sistema&lt;br /&gt;
#indeksna, pri čemu je ceo indeks fajla u jednom bloku?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
#n&lt;br /&gt;
#2&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F2/%D0%9A2_2018&amp;diff=1487</id>
		<title>АСП2/К2 2018</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F2/%D0%9A2_2018&amp;diff=1487"/>
		<updated>2020-12-10T20:28:33Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: Није било урађено брисање 4,11 и 9 после додавања 1-14.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[https://rti.etf.bg.ac.rs/rti/ri3sp/rokovi/13S112ASP2_K2_1819.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U 2-3-4 stablo sa slike ubaciti ključeve 17 i 25 i prikazati ekvivalentno crveno-crno stablo.&lt;br /&gt;
            [  |23|45]&lt;br /&gt;
           /   |     \&lt;br /&gt;
 [ 1|15|20] [28|36|  ] [  |72|  ]&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
[[Датотека:ASP2 K2 2018 zadatak 1 stablo.png|thumb|Ekvivalentno crveno-crno stablo u rešenju 1. zadatka.]]&lt;br /&gt;
Ključ 17 dolazi između ključeva 15 i 20. Pošto je taj čvor pun, crni ključ 15 ide u roditeljski čvor, ključ 1 dolazi u sredinu i postaje crn, ključ 20 se odvaja u desni čvor i postaje crn a ključ 17 završava kao crveni ključ levo od ključa 20.&lt;br /&gt;
            [15|23|45]&lt;br /&gt;
           /   |     \&lt;br /&gt;
 [  | 1|  ] [17|20|  ] [28|36|  ] [  |72|  ]&lt;br /&gt;
Ključ 20 dolazi levo od ključa 28.&lt;br /&gt;
                  [15|23|45]&lt;br /&gt;
              /      |  |      \&lt;br /&gt;
 [  | 1|  ] [17|20|  ] [20|28|36] [  |72|  ]&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
B+-stabla&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Prikazati maksimalno popunjeno B+-stablo reda &#039;&#039;m&#039;&#039; = 3 i visine &#039;&#039;h&#039;&#039; = 1. Odrediti za ovo stablo prosečan broj pristupa prilikom uspešne i neuspešne pretrage.&lt;br /&gt;
# Posmatra se B+-stablo reda 4 koje sadrži 7 ključeva. Odrediti za ovo stablo srednji broj pristupa prilikom uspešne i neuspešne pretrage i obrazložiti odgovor.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
        (2|4)&lt;br /&gt;
       /  |  \&lt;br /&gt;
 [1|2]-&amp;gt;[3|4]-&amp;gt;[5|6]&lt;br /&gt;
2 je prosečan broj pristupa i pri uspešnoj i pri neuspešnoj pretrazi.&lt;br /&gt;
          (3|6| )&lt;br /&gt;
        /   |   \&lt;br /&gt;
 [1|2|3]-&amp;gt;[4|5|6]-&amp;gt;[7| | ]&lt;br /&gt;
Pretpostavljajući da se ovde radi o broju ključeva u listovima (pošto se ključevi iz unutrašnjih čvorova dupliciraju u listovima), prosečan broj pristupa je ponovo 2. Sve uspešne pretrage, kao i neuspešne, moraju završiti u listovima jer se samo u listovima nalaze pokazivači ka traženim strukturama, a visina ovako napravljenog stabla je 1.&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Posmatra se &#039;&#039;trie&#039;&#039; stablo čiji su ključevi znakovni nizovi koji sadrže cifre u brojnom sistemu sa osnovom 10. Napisati u pseudokodu funkciju koja za dato stablo na čiji koren pokazuje pokazivač &#039;&#039;root&#039;&#039; računa razliku najvećeg i najmanjeg tako predstavljenog broja.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
CALC(root)&lt;br /&gt;
if root = nil then&lt;br /&gt;
    return 0&lt;br /&gt;
end_if&lt;br /&gt;
min, max = CALC_R(root)&lt;br /&gt;
return max - min&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
CALC R(root)&lt;br /&gt;
min = +∞&lt;br /&gt;
max = -∞&lt;br /&gt;
for i = 0 to 9 do&lt;br /&gt;
    field = fields(root)[i]&lt;br /&gt;
    if field ≠ nil then&lt;br /&gt;
        if is_leaf(field) then&lt;br /&gt;
            f_max = f_min = value(field)&lt;br /&gt;
        else&lt;br /&gt;
            f_max, f_min = CALC_R(field)&lt;br /&gt;
        end_if&lt;br /&gt;
        if f_max &amp;gt; max then&lt;br /&gt;
            max = f_max&lt;br /&gt;
        end_if&lt;br /&gt;
        if f_min &amp;lt; min then&lt;br /&gt;
            min = f_min&lt;br /&gt;
        end_if&lt;br /&gt;
    end_if&lt;br /&gt;
end_for&lt;br /&gt;
return max, min&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Posmatra se B stablo reda m u kojem su svi listovi minimalno popunjeni, a njihovi roditelji su popunjeni iznad minimuma. Iz takvog stabla se briše ključ key iz lista sa adresom node. Napisati iterativnu funkciju u pseudokodu za datu situaciju brisanja. Smatrati da u čvoru postoji pokazivač na roditelja i podatak o broju ključeva smeštenih u njemu.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
B-DELETE-NO-BORROW(root, m, node, key)&lt;br /&gt;
child_index = 0&lt;br /&gt;
parent = parent(node)&lt;br /&gt;
for i = 0 to num(parent) do&lt;br /&gt;
    if pointers(parent)[i] = node then&lt;br /&gt;
        child_index = i&lt;br /&gt;
        break&lt;br /&gt;
    end_if&lt;br /&gt;
end_for&lt;br /&gt;
if child_index = num(parent) then&lt;br /&gt;
    left_node = pointers(parent)[child_index-1]&lt;br /&gt;
    num(left_node) = num(left_node) + 1&lt;br /&gt;
    keys(left_node)[num(left_node)] = keys(parent)[child_index]&lt;br /&gt;
    for i = 1 to num(node) do&lt;br /&gt;
        if keys(node)[i] ≠ key then&lt;br /&gt;
            num(left_node) = num(left_node) + 1&lt;br /&gt;
            keys(left_node)[num(left_node)] = keys(node)[i]&lt;br /&gt;
        end_if&lt;br /&gt;
    end_for&lt;br /&gt;
    FREENODE(node)&lt;br /&gt;
else&lt;br /&gt;
    right_node = pointers(parent)[child_index+1]&lt;br /&gt;
    offset = 0&lt;br /&gt;
    for i = 1 to num(node) then&lt;br /&gt;
        if keys(node)[i] = key then&lt;br /&gt;
            offset = 1&lt;br /&gt;
        else&lt;br /&gt;
            keys(node)[i-offset] = keys(node)[i]&lt;br /&gt;
        end_if&lt;br /&gt;
    end_for&lt;br /&gt;
    keys(node)[num(node)] = keys(parent)[child_index+1]&lt;br /&gt;
    for i = 1 to num(right_node) do&lt;br /&gt;
        num(node) = num(node) + 1&lt;br /&gt;
        keys(node)[num(node)] = keys(right_node)[i]&lt;br /&gt;
    end_for&lt;br /&gt;
    for i = child_index to num(parent)-1 do&lt;br /&gt;
        keys(parent)[i+1] = keys(parent)[i+2]&lt;br /&gt;
        pointers(parent)[i] = pointers(parent)[i+1]&lt;br /&gt;
    end_for&lt;br /&gt;
    FREENODE(right_node)&lt;br /&gt;
end_if&lt;br /&gt;
num(parent) = num(parent) - 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U B* stablo reda 4 se umeću ključevi od 1 do 14. Nakon toga se redom brišu ključevi 4, 11 i 9. Nacrtati izgled stabla nakon svake izmene.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Red stabla: &amp;lt;math&amp;gt;m = 4&amp;lt;/math&amp;gt;&lt;br /&gt;
* Minimalni broj ključeva u ne-korenskom čvoru: &amp;lt;math&amp;gt;\left\lceil\frac{2m - 1}{3}\right\rceil - 1 = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
* Maksimalni broj ključeva u korenu: &amp;lt;math&amp;gt;2 \left\lfloor\frac{2m - 2}{3}\right\rfloor = 4&amp;lt;/math&amp;gt;&lt;br /&gt;
* Raspodela ključeva pri prelomu: 2-2-2&lt;br /&gt;
Umećemo ključ 1 u prazno stablo.&lt;br /&gt;
 [ 1|  |  |  ]&lt;br /&gt;
Umećemo ključ 2.&lt;br /&gt;
 [ 1| 2|  |  ]&lt;br /&gt;
Umećemo ključ 3.&lt;br /&gt;
 [ 1| 2| 3|  ]&lt;br /&gt;
Umećemo ključ 4.&lt;br /&gt;
 [ 1| 2| 3| 4]&lt;br /&gt;
Pri umetanju ključa 5 dolazi do prelamanja čvora, tako da ključevi 1 i 2 idu u levi a 4 i 5 u desni čvor.&lt;br /&gt;
          [ 3|  |  |  ]&lt;br /&gt;
          |  |&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5|  ]&lt;br /&gt;
Umećemo ključ 6.&lt;br /&gt;
          [ 3|  |  |  ]&lt;br /&gt;
          |  |&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5| 6]&lt;br /&gt;
Pri umetanju ključa 7 desni čvor se prepunjuje, pa se dešava prelivanje u levi čvor. Ključ 3 iz roditeljskog čvora silazi u levi a ključ 4 iz desnog ide u roditeljski.&lt;br /&gt;
          [ 4|  |  |  ]&lt;br /&gt;
          |  |&lt;br /&gt;
 [ 1| 2| 3] [ 5| 6| 7]&lt;br /&gt;
Pri umetanju ključa 8 desni čvor se ponovo prepunjuje, pa se dešava prelamanje. Ključevi 1 i 2 ostaju u levom čvoru, ključ 3 ide u roditeljski čvor, 4 i 5 dolaze u novi, srednji čvor, 6 ide u roditeljski čvor a 7 i 8 ostaju u desnom čvoru.&lt;br /&gt;
            [ 3| 6|  |  ]&lt;br /&gt;
           /   |     \&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5|  ] [ 7| 8|  ]&lt;br /&gt;
Umećemo ključ 9.&lt;br /&gt;
            [ 3| 6|  |  ]&lt;br /&gt;
           /   |     \&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5|  ] [ 7| 8| 9]&lt;br /&gt;
Pri umetanju ključa 10 dešava se prelivanje iz desnog u srednji čvor.&lt;br /&gt;
            [ 3| 7|  |  ]&lt;br /&gt;
           /   |     \&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5| 6] [ 8| 9|10]&lt;br /&gt;
Pri umetanju ključa 11 dešava se prelamanje.&lt;br /&gt;
              [ 3| 6| 9|  ]&lt;br /&gt;
            /    |    \        \&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5|  ] [ 7| 8|  ] [10|11|  ]&lt;br /&gt;
Umećemo ključ 12.&lt;br /&gt;
              [ 3| 6| 9|  ]&lt;br /&gt;
            /    |    \        \&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5|  ] [ 7| 8|  ] [10|11|12]&lt;br /&gt;
Pri umetanju ključa 13 dešava se prelivanje.&lt;br /&gt;
              [ 3| 6|10|  ]&lt;br /&gt;
            /    |    \        \&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5|  ] [ 7| 8| 9] [11|12|13]&lt;br /&gt;
Pri umetanju ključa 14 dešava se prelamanje.&lt;br /&gt;
                     [ 3| 6| 9|12]&lt;br /&gt;
            /         /    |    \        \&lt;br /&gt;
 [ 1| 2|  ] [ 4| 5|  ] [ 7| 8|  ] [10|11|  ] [13|14|  ]&lt;br /&gt;
При брисању кључа 4, због немогућности позајмице, спајање три чвора у два.&lt;br /&gt;
                  [ 5| 9| 12 |]&lt;br /&gt;
            /         /      |        \&lt;br /&gt;
 [ 1| 2| 3 ] [ 6| 7| 8 ]  [ 10|11| ] [13|14| ]&lt;br /&gt;
При брисању кључа 11 могућа је позајмица, али од левог брата.&lt;br /&gt;
                  [ 5| 8| 12 |]&lt;br /&gt;
            /         /      |        \&lt;br /&gt;
 [ 1| 2| 3 ] [ 6| 7|]  [ 9 |10| ] [13|14| ]&lt;br /&gt;
При брисању кључа 9 могућа је  позајмица али од брата са удаљеношћу два.&lt;br /&gt;
                 [ 3| 7| 12 |]&lt;br /&gt;
            /         /      |        \&lt;br /&gt;
 [ 1| 2| ] [ 5| 6| ]  [ 8 |10| ] [13|14| ]&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dato je digitalno stablo formirano od nekog skupa ključeva tipa znakovnih nizova. Implementirati funkciju COUNT_KEYS koja pronalazi broj ključeva u stablu koji odgovaraju zadatom formatu znakovnog niza. Pokazivač na koren stabla i zadati format su prosleđeni kao parametri funkcije. Format znakovnog niza pored cifara i slova može sadržati i simbole koji imaju specijano značenje. Specijalni simboli su tačka (.) koja menja bilo koji znak niza i zvezda (*) koja predstavlja ponavljanje nekog znaka niza 0 ili više puta. Smatrati da se zvezda odnosi na prvi znak koji joj prethodi.&lt;br /&gt;
&lt;br /&gt;
Primer:&lt;br /&gt;
&lt;br /&gt;
skup ključeva u stablu: abccc4a, ab3a, aacda&lt;br /&gt;
&lt;br /&gt;
format: abc*.a&lt;br /&gt;
&lt;br /&gt;
rezultat: 2 &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
COUNT KEYS(root, format)&lt;br /&gt;
len = STRING_LENGTH(format)&lt;br /&gt;
if len = 0 then&lt;br /&gt;
    return 0&lt;br /&gt;
end_if&lt;br /&gt;
count = 0&lt;br /&gt;
for i = 1 to num(root) do&lt;br /&gt;
    node = pointers(root)[i]&lt;br /&gt;
    if (len &amp;gt; 1) and (format[2] = &#039;*&#039;) then&lt;br /&gt;
        if (key(node) = format[1]) or (format[1] = &#039;.&#039;) then&lt;br /&gt;
            count = count + COUNT_KEYS(node, format)&lt;br /&gt;
        else&lt;br /&gt;
            count = count + COUNT_KEYS(root, format + 2)&lt;br /&gt;
        end_if&lt;br /&gt;
    else if (key(node) = format[1]) or (format[1] = &#039;.&#039;) then&lt;br /&gt;
        count = count + COUNT_KEYS(node, format + 1)&lt;br /&gt;
    end_if&lt;br /&gt;
end_for&lt;br /&gt;
return count&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neka se u &#039;&#039;top-down&#039;&#039; stablo &#039;&#039;m&#039;&#039;-arnog pretraživanja redom ubacuju ključevi &#039;&#039;k&#039;&#039;, 2&#039;&#039;k&#039;&#039;, 3&#039;&#039;k&#039;&#039;, …, &#039;&#039;nk&#039;&#039;, &#039;&#039;nk&#039;&#039; – 1, &#039;&#039;nk&#039;&#039; – 2, &#039;&#039;nk&#039;&#039; – 3, …, &#039;&#039;n&#039;&#039;(&#039;&#039;k&#039;&#039; – 1) +1. Nacrtati izgled stabla i odrediti visinu. Pretpostaviti da su &#039;&#039;n&#039;&#039; i &#039;&#039;k&#039;&#039; mnogo veći od &#039;&#039;m&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Nakon ubacivanja ključa &#039;&#039;nk&#039;&#039; dobiće se degenerisano stablo udesno, tj. jedino najdesniji pokazivači u svakom unutrašnjem čvoru će pokazivati na sledeći list, i većina ključeva će biti popunjena, tako da će visina stabla biti &amp;lt;math&amp;gt;\left\lceil\frac{n}{m - 1}\right\rceil&amp;lt;/math&amp;gt; a u listu će ostati &amp;lt;math&amp;gt;(m - 1) - (n \bmod (m - 1))&amp;lt;/math&amp;gt; slobodnih mesta. Nakon ubacivanja svih ključeva stablo će u listovima krenuti da raste ulevo iz listova, tako da će visina porasti na ukupno: &amp;lt;math&amp;gt;h = \left\lceil\frac{n}{m - 1}\right\rceil + \left\lceil\frac{k - 1 - (m - 1) + (n \bmod (m - 1))}{m - 1}\right\rceil&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Heširanje.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Šta je minimalna savršena heš funkcija?&lt;br /&gt;
# Za ključeve 54, 91, 57, 23 i 28 naći što jednostavniju minimalnu savršenu heš funkciju i ispisati je. Obrazložiti odgovor i nacrtati heš tabelu sa umetnutim ključevima.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:АСП2]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F2/%D0%9A2_2019&amp;diff=1442</id>
		<title>АСП2/К2 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F2/%D0%9A2_2019&amp;diff=1442"/>
		<updated>2020-11-21T21:48:40Z</updated>

		<summary type="html">&lt;p&gt;IvnSvc: /* Rešenje */  Преправио 61 у 64. 64 се нигде не појављује у задатку па је врв грешка у куцању&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[https://rti.etf.bg.ac.rs/rti/ri3sp/rokovi/13S112ASP2_K2_1920.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Izomorfizam crveno-crnih i 2-3-4 stabala.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Dato binarno crveno-crno stablo transformisati u izomorfno 2-3-4 stablo. Osenčeni čvorovi su crni.&lt;br /&gt;
# Iz stabla dobijenog pod a) brišu se ključevi 63 i 60. Nacrtati stabla dobijena nakon svakog od ova dva brisanja.&lt;br /&gt;
# Ako se stablo dobijeno pod a) posmatra kao obično B stablo reda 4, da li bi bilo razlike u konačnom izgledu stabla nakon brisanja ključeva 63 i 60? Ukratko objasniti.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Ekvivalentno izomorfno 2-3-4 stablo je:&lt;br /&gt;
            [57|74|  ]&lt;br /&gt;
           /   |      \&lt;br /&gt;
 [21|43|  ] [60|63|  ] [88|91|94]&lt;br /&gt;
Pri izbacivanju ključa 63, ključ 60 dolazi na njegovo mesto (i postaje crn).&lt;br /&gt;
            [57|74|  ]&lt;br /&gt;
           /     |    \&lt;br /&gt;
 [21|43|  ] [  |60|  ] [88|91|94]&lt;br /&gt;
Pri izbacivanju ključa 60, vrši se pozajmljivanje od pravog brata, koji je ovde levi brat u izomorfnom 2-3-4 stablu, pa ključ 43 postaje razdelni a ključ 57 silazi u čvor iz kojeg se briše.&lt;br /&gt;
            [43|74|  ]&lt;br /&gt;
           /     |    \&lt;br /&gt;
 [  |21|  ] [  |57|  ] [88|91|94]&lt;br /&gt;
Ekvivalentna crveno-crna stabla su data ispod.&lt;br /&gt;
&lt;br /&gt;
Da je stablo bilo obično B stablo reda 4, u drugom koraku bi se pozajmljivalo od desnog brata umesto od levog brata, jer B stabla nemaju pravilo da se prvo pozajmljuje od pravog brata. Takođe, ključevi 21 i 57 ne bi stajali u središnjem polju čvora, već najlevljem.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  ASP2 K2 2019 zadatak 1 stablo.png  | Originalno crveno-crno stablo&lt;br /&gt;
  ASP2 K2 2019 zadatak 1 korak 1.png | Crveno-crno stablo nakon brisanja čvora 63&lt;br /&gt;
  ASP2 K2 2019 zadatak 1 korak 2.png | Crveno-crno stablo nakon brisanja čvora 60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U B+ stablo sa slike redom se umeću ključevi 6, 25, 21 i 27, nakon čega se uklanjaju ključevi 33, 27 i 6. Prikazati ažuriranje stabla po koracima.&lt;br /&gt;
             [33|64|  ]&lt;br /&gt;
           /     |     \&lt;br /&gt;
 [20|22|33]-&amp;gt;[42|64|  ]-&amp;gt;[71|81|  ]&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Red stabla: &amp;lt;math&amp;gt;m = 4&amp;lt;/math&amp;gt;&lt;br /&gt;
* Minimalni broj ključeva u unutrašnjim čvorovima: &amp;lt;math&amp;gt;\left\lceil\frac{m}{2}\right\rceil-1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
* Minimalni broj ključeva u listovima: &amp;lt;math&amp;gt;\left\lfloor\frac{m}{2}\right\rfloor = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
Ključ 6 se umeće levo od čvora 20. Dolazi do preloma i 6 i 20 ostaju u čvoru, 20 ide u roditelja, a 22 i 33 se odvajaju u novi čvor.&lt;br /&gt;
                   (20|33|64)&lt;br /&gt;
             /        |  |     \&lt;br /&gt;
 [ 6|20|  ]-&amp;gt;[22|33|  ]-&amp;gt;[42|64|  ]-&amp;gt;[71|81|  ]&lt;br /&gt;
Ključ 25 se umeće između ključeva 22 i 33.&lt;br /&gt;
                   (20|33|64)&lt;br /&gt;
             /        |  |     \&lt;br /&gt;
 [ 6|20|  ]-&amp;gt;[22|25|33]-&amp;gt;[42|64|  ]-&amp;gt;[71|81|  ]&lt;br /&gt;
Ključ 21 se umeće levo od ključa 22. Dolazi do preloma, 21 i 22 ostaju u čvoru, 22 ide u roditeljski čvor, a 25 i 33 se odvajaju u novi čvor. Pošto u roditelju nema mesta, i on se prelama tako da koren postaje čvor sa 22, levi čvor sa 20 i desni sa 33 i 64.&lt;br /&gt;
                          (22|  |  )&lt;br /&gt;
                       /              \&lt;br /&gt;
           (20|  |  )                   (33|64|  )&lt;br /&gt;
          /   |                    /       |   \&lt;br /&gt;
 [ 6|20|  ]-&amp;gt;[21|22|  ]-&amp;gt;[25|33|  ]-&amp;gt;[42|64|  ]-&amp;gt;[71|81|  ]&lt;br /&gt;
Ključ 27 se umeće između ključeva 25 i 33.&lt;br /&gt;
                          (22|  |  )&lt;br /&gt;
                       /              \&lt;br /&gt;
           (20|  |  )                   (33|64|  )&lt;br /&gt;
          /   |                    /       |   \&lt;br /&gt;
 [ 6|20|  ]-&amp;gt;[21|22|  ]-&amp;gt;[25|27|33]-&amp;gt;[42|64|  ]-&amp;gt;[71|81|  ]&lt;br /&gt;
Pri uklanjanju ključa 33, pošto je najveći ključ u čvoru, mora se ažurirati roditeljski čvor tako da 33 u roditeljskom čvoru postaje 27.&lt;br /&gt;
                          (22|  |  )&lt;br /&gt;
                       /              \&lt;br /&gt;
           (20|  |  )                   (27|64|  )&lt;br /&gt;
          /   |                    /       |   \&lt;br /&gt;
 [ 6|20|  ]-&amp;gt;[21|22|  ]-&amp;gt;[25|27|  ]-&amp;gt;[42|64|  ]-&amp;gt;[71|81|  ]&lt;br /&gt;
Pri uklanjanju ključa 27, ostaje manje nego dovoljno ključeva u tom čvoru. Pozajmica od oba brata nije moguća, i zato se taj čvor spaja sa svojim desnim bratom. U tom procesu se takođe izbacuje ključ iz roditeljskog čvora.&lt;br /&gt;
                          (22|  |  )&lt;br /&gt;
                       /              \&lt;br /&gt;
           (20|  |  )                   (64|  |  )&lt;br /&gt;
          /   |                    /       |&lt;br /&gt;
 [ 6|20|  ]-&amp;gt;[21|22|  ]-&amp;gt;[25|42|64]-&amp;gt;[71|81|  ]&lt;br /&gt;
Pri uklanjanju ključa 6, ostaje manje nego dovoljno ključeva u tom čvoru. Pozajmica od brata nije moguća, i zato se taj čvor spaja sa svojim desnim bratom. U tom procesu roditeljski čvor ostaje prazan, tako da se spajaju svi unutrašnji čvorovi u jedan, čime se dobija konačno stablo:&lt;br /&gt;
             (22|64|  )&lt;br /&gt;
           /    |       \&lt;br /&gt;
 [20|21|22]-&amp;gt;[25|42|64]-&amp;gt;[71|81|  ]&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dato digitalno stablo je potrebno transformisati u kompaktniju formu kako bi se smanjila veličina stabla.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Predložiti i objasniti način na koji se može ostvariti transformacija digitalnog stabla u kompaktniju formu i prikazati izgled digitalnog stabla nakon opisane transformacije.&lt;br /&gt;
# Implementirati funkciju &amp;lt;u&amp;gt;TRIE COMPACTION&amp;lt;/u&amp;gt; koja transformiše stablo na prethodno opisani način. Pokazivač na koren stabla &#039;&#039;root&#039;&#039; je prosleđen funkciji. Smatrati da je digitalno stablo predstavljeno po principu levi sin - desni brat.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
       A&lt;br /&gt;
    /  |  \&lt;br /&gt;
   B   C   S&lt;br /&gt;
   |   |   |&lt;br /&gt;
   K   J   4&lt;br /&gt;
  / \  |   |&lt;br /&gt;
 D   T M   6&lt;br /&gt;
 |   | |   |&lt;br /&gt;
 9   * *   A&lt;br /&gt;
 |         |&lt;br /&gt;
 3         *&lt;br /&gt;
 |&lt;br /&gt;
 *&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Kompaktnija forma ovog stabla može se dobiti tako što sve čvorove koji imaju samo jednu putanju do listova zamenimo sa listovima koji sadrže pokazivače na zapise na koje su listovi prethodno pokazivali i celu vrednost ključa. U tom slučaju ne mora da postoji čvor za kraj ključa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
TRIE COMPACTION(root)&lt;br /&gt;
if root ≠ nil then&lt;br /&gt;
    compacted_root = COMPACT(root, &amp;quot;&amp;quot;)&lt;br /&gt;
    if compacted_root ≠ nil then&lt;br /&gt;
        root = compacted_root&lt;br /&gt;
    end_if&lt;br /&gt;
end_if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
COMPACT(node, str)&lt;br /&gt;
if key(node) = &#039;*&#039; then&lt;br /&gt;
    FREENODE(node)&lt;br /&gt;
    return str&lt;br /&gt;
end_if&lt;br /&gt;
compacted_child = COMPACT(right(node), str + key(node))&lt;br /&gt;
if left(node) = nil then&lt;br /&gt;
    FREENODE(node)&lt;br /&gt;
    return compacted_child&lt;br /&gt;
else&lt;br /&gt;
    COMPACT(left(node))&lt;br /&gt;
    if compacted_child ≠ nil then&lt;br /&gt;
        right(node) = compacted_child&lt;br /&gt;
    end_if&lt;br /&gt;
    return nil&lt;br /&gt;
end_if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Napisati u pseudokodu funkciju koja iz &#039;&amp;lt;nowiki /&amp;gt;&#039;&#039;top-down&#039;&#039;&#039; stabla &#039;&#039;m&#039;&#039;-arnog pretraživanja briše na čiji koren pokazuje pokazivač &#039;&#039;root&#039;&#039; briše zadati ključ key.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
DELETE(root, m, key)&lt;br /&gt;
parent = nil&lt;br /&gt;
parent_index = 0&lt;br /&gt;
p = root&lt;br /&gt;
i = 0&lt;br /&gt;
found = false&lt;br /&gt;
while (p ≠ nil) and (not found) do&lt;br /&gt;
    for i = 1 to num(p) do&lt;br /&gt;
        if keys(p)[i] = key then&lt;br /&gt;
            found = true&lt;br /&gt;
            break&lt;br /&gt;
        else if keys(p) &amp;gt; key then&lt;br /&gt;
            parent = p&lt;br /&gt;
            parent_index = i&lt;br /&gt;
            p = pointers(p)[i-1]&lt;br /&gt;
            break&lt;br /&gt;
        end_if&lt;br /&gt;
    end_for&lt;br /&gt;
    if i = num(p) + 1 then&lt;br /&gt;
        p = pointers(p)[i-1]&lt;br /&gt;
    end_if&lt;br /&gt;
end_while&lt;br /&gt;
if p = nil then&lt;br /&gt;
    ERROR(Ključ nije pronađen)&lt;br /&gt;
end_if&lt;br /&gt;
q = pointers(p)[i]&lt;br /&gt;
if q ≠ nil then&lt;br /&gt;
    prev = p&lt;br /&gt;
    while q ≠ nil do&lt;br /&gt;
        parent = prev&lt;br /&gt;
        parent_index = 1&lt;br /&gt;
        prev = q&lt;br /&gt;
        q = pointers(q)[0]&lt;br /&gt;
    end_while&lt;br /&gt;
    keys(p)[i] = key(prev)&lt;br /&gt;
    p = prev&lt;br /&gt;
    i = 1&lt;br /&gt;
end_if&lt;br /&gt;
for j = i to num(p) do&lt;br /&gt;
    keys(node)[i-1] = keys(node)[i]&lt;br /&gt;
end_for&lt;br /&gt;
num(p) = num(p) - 1&lt;br /&gt;
if num(p) = 0 then&lt;br /&gt;
    FREENODE(p)&lt;br /&gt;
    pointers(parent)[parent_index-1] = nil&lt;br /&gt;
end_if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U B* stablo reda 5 sa slike se umeću ključevi 18, 23, 7, 37, 19. Nakon toga se redom brišu ključevi 80, 55, 18, 9 i 15. Nacrtati izgled stabla nakon svake izmene.&lt;br /&gt;
                             [15|24|41|80]&lt;br /&gt;
              /             /      |      \             \&lt;br /&gt;
 [ 2| 9|10|  ] [16|20|21|  ] [27|33|40|  ] [55|75|  |  ] [93|96|  |  ]&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
* Red stabla: &amp;lt;math&amp;gt;m = 5&amp;lt;/math&amp;gt;&lt;br /&gt;
* Minimalan broj ključeva u ne-korenskim čvorovima: &amp;lt;math&amp;gt;\left\lceil\frac{2m - 1}{3}\right\rceil-1 = 3 - 1 = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
* Maksimalan broj ključeva u korenu: &amp;lt;math&amp;gt;2\left\lfloor\frac{2m - 2}{3}\right\rfloor = 4&amp;lt;/math&amp;gt;&lt;br /&gt;
* Raspodela ključeva pri prelomu: 2-3-3&lt;br /&gt;
Ključ 18 umećemo između ključeva 16 i 20.&lt;br /&gt;
                             [15|24|41|80]&lt;br /&gt;
              /             /      |      \             \&lt;br /&gt;
 [ 2| 9|10|  ] [16|18|20|21] [27|33|40|  ] [55|75|  |  ] [93|96|  |  ]&lt;br /&gt;
Ključ 23 umećemo desno od ključa 21. Dešava se prelivanje u desni čvor, 23 završava u roditelju a 24 u desnom čvoru.&lt;br /&gt;
                             [15|23|41|80]&lt;br /&gt;
              /             /      |      \             \&lt;br /&gt;
 [ 2| 9|10|  ] [16|18|20|21] [24|27|33|40] [55|75|  |  ] [93|96|  |  ]&lt;br /&gt;
Ključ 7 umećemo između ključeva 2 i 9.&lt;br /&gt;
                             [15|23|41|80]&lt;br /&gt;
              /             /      |      \             \&lt;br /&gt;
 [ 2| 7| 9|10] [16|18|20|21] [24|27|33|40] [55|75|  |  ] [93|96|  |  ]&lt;br /&gt;
Ključ 37 umećemo između ključeva 33 i 40. Dešava se prelivanje u desni čvor, 40 završava u roditelju a 41 u desnom čvoru.&lt;br /&gt;
                             [15|23|40|80]&lt;br /&gt;
              /             /      |      \             \&lt;br /&gt;
 [ 2| 7| 9|10] [16|18|20|21] [24|27|33|37] [41|55|75|  ] [93|96|  |  ]&lt;br /&gt;
Ključ 19 umećemo između ključeva 18 i 20. Prelivanje u levog i desnog brata je nemoguće, pa se dešava prelom. Ključevi 16 i 18 ostaju u čvoru, 19 ide u roditeljski čvor, 20, 21 i 23 idu u novi čvor, 24 ide u roditeljski čvor i 27, 33 i 37 ostaju u desnom bratu. Prelom se dešava i u roditeljskom čvoru, tako da 15 i 19 idu u levo dete novog korena, 24 ide u novi koren a 40 i 80 idu u desno dete novog korena.&lt;br /&gt;
                                                 [24|  |  |  ]&lt;br /&gt;
                                        /                      \&lt;br /&gt;
               [15|19|  |  ]                                           [40|80|  |  ]&lt;br /&gt;
              /   |      \                                            /   |      \&lt;br /&gt;
 [ 2| 7| 9|10] [16|18|  |  ] [20|21|23|  ]               [27|33|37|  ] [41|55|75|  ] [93|96|  |  ]&lt;br /&gt;
Ključ 80 menjamo svojim sledbenikom, 93, pa ga brišemo iz lista. U listu ostaje nedovoljno mnogo ključeva, pa vršimo pozajmicu od levog brata. Tom prilikom se ključ 93 vraća nazad u list u kojem je bio a 75 dolazi na mesto gde je ranije bio ključ 80.&lt;br /&gt;
                                                 [24|  |  |  ]&lt;br /&gt;
                                        /                      \&lt;br /&gt;
               [15|19|  |  ]                                           [40|75|  |  ]&lt;br /&gt;
              /   |      \                                            /   |      \&lt;br /&gt;
 [ 2| 7| 9|10] [16|18|  |  ] [20|21|23|  ]               [27|33|37|  ] [41|55|  |  ] [93|96|  |  ]&lt;br /&gt;
Pri brisanju ključa 55 iz lista ostaje nedovoljno ključeva, pa pozajmljujemo od levog brata. Tom prilikom ključ 37 dolazi na mesto 40 u roditeljskom čvoru a 40 se spušta u list.&lt;br /&gt;
                                                 [24|  |  |  ]&lt;br /&gt;
                                        /                      \&lt;br /&gt;
               [15|19|  |  ]                                           [37|75|  |  ]&lt;br /&gt;
              /   |      \                                            /   |      \&lt;br /&gt;
 [ 2| 7| 9|10] [16|18|  |  ] [20|21|23|  ]               [27|33|  |  ] [40|41|  |  ] [93|96|  |  ]&lt;br /&gt;
Pri brisanju ključa 18 iz lista ostaje nedovoljno ključeva, pa pozajmljujemo od desnog brata. Tom prilikom ključ 20 ide u roditeljski čvor a ključ 19 se spušta u list.&lt;br /&gt;
                                                 [24|  |  |  ]&lt;br /&gt;
                                        /                      \&lt;br /&gt;
               [15|20|  |  ]                                           [37|75|  |  ]&lt;br /&gt;
              /   |      \                                            /   |      \&lt;br /&gt;
 [ 2| 7| 9|10] [16|19|  |  ] [21|23|  |  ]               [27|33|  |  ] [40|41|  |  ] [93|96|  |  ]&lt;br /&gt;
Brišemo ključ 9 iz lista.&lt;br /&gt;
                                                 [24|  |  |  ]&lt;br /&gt;
                                        /                      \&lt;br /&gt;
               [15|20|  |  ]                                           [37|75|  |  ]&lt;br /&gt;
              /   |      \                                            /   |      \&lt;br /&gt;
 [ 2| 7|10|  ] [16|19|  |  ] [21|23|  |  ]               [27|33|  |  ] [40|41|  |  ] [93|96|  |  ]&lt;br /&gt;
Ključ 15 menjamo svojim sledbenikom, 16, pa brišemo ključ iz lista. U tom listu ostaje nedovoljno mnogo ključeva, pa se pozajmljuje od levog brata tako što se ključ 16 vrati na svoje prethodno mesto a ključ 10 ode u roditeljski čvor.&lt;br /&gt;
                                                 [24|  |  |  ]&lt;br /&gt;
                                        /                      \&lt;br /&gt;
               [10|20|  |  ]                                           [37|75|  |  ]&lt;br /&gt;
              /   |      \                                            /   |      \&lt;br /&gt;
 [ 2| 7|  |  ] [16|19|  |  ] [21|23|  |  ]               [27|33|  |  ] [40|41|  |  ] [93|96|  |  ]&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Posmatra se baza podataka studenata.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ukoliko se zna da je najčešći upit nad zadatom bazom dohvatanje svih studenata koji su fakultet upisali u zadatom periodu (između dve godine), predložiti strukturu podataka koja bi podržala efikasno izvršavanje ovakvog upita i detaljno opisati razloge.&lt;br /&gt;
# Implementirati funkciju FIND_STUDENTS_IN_RANGE koja nad odabranom strukturom vrši pretragu i vraća rezultat upita navedenog pod tačkom a). Parametri funkcije su pokazivač na odabranu strukturu, početna godina i krajnja godina traženog perioda, respektivno. Rezultat vratiti u formi niza.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Struktura koja se ovde može upotrebiti je B+ stablo, jer nam dozvoljava lak sekvencijalni pristup (za izlistavanje svih studenata u rasponu od dve godine) kao i brzo pronalaženje prvog ključa (za prvog studenta iz raspona). Ključevi ovakvog stabla mogu biti kombinacija godine i broja indeksa studenta, tako da je godina primarni a broj indeksa sekundarni ključ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
FIND STUDENTS IN RANGE(structure, year1, year2)&lt;br /&gt;
p = structure&lt;br /&gt;
while (not IS_LEAF(p)) do&lt;br /&gt;
    if key(p) &amp;lt; year1 then&lt;br /&gt;
        p = right(p)&lt;br /&gt;
    else&lt;br /&gt;
        p = left(p)&lt;br /&gt;
    end_if&lt;br /&gt;
end_while&lt;br /&gt;
length = 0&lt;br /&gt;
q = p&lt;br /&gt;
while (q ≠ nil) and (year(q) ≤ year2) do&lt;br /&gt;
    length = length + 1&lt;br /&gt;
    q = next(q)&lt;br /&gt;
end_while&lt;br /&gt;
arr = ALLOCATE(length)&lt;br /&gt;
for i = 1 to length do&lt;br /&gt;
    arr[i] = p&lt;br /&gt;
    p = next(p)&lt;br /&gt;
end_while&lt;br /&gt;
return arr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neka se za indeksnu strukturu datoteke koristi B stablo reda &#039;&#039;m&#039;&#039;. U okviru datoteke se smeštaju zapisi veličine 256 bitova zajedno sa 32-bitnim poljem ključa. Neka se na datom sistemu adrese predstavljaju na 64 bita. Odrediti vrednosti &#039;&#039;m&#039;&#039; u zavisnosti od toga da li se u čvoru B stabla smešta samo ključ ili čitav podataka, pod pretpostavkom da je veličina bloka na disku 2KB. Diskutovati rešenje.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Jedan čvor B stabla mora stati u jedan blok na disku, što je 2KiB, odnosno 2048B, odnosno 16384b. Zapis čvora obuhvata:&lt;br /&gt;
* &amp;lt;math&amp;gt;m-1&amp;lt;/math&amp;gt; ključeva (32b) zajedno sa adresama njihovih zapisa (64b), odnosno u drugoj varijanti ceo zapis (256b)&lt;br /&gt;
* &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; adresa (64b) podstabala&lt;br /&gt;
Tako je veličina jednog čvora stabla u prvoj varijanti jednaka &amp;lt;math&amp;gt;(m-1) \cdot (32 + 64) + m \cdot 64 = m \cdot 96 + m \cdot 64 - 96 = m \cdot 160 - 96&amp;lt;/math&amp;gt;. Ako pretpostavimo da je ovo jednako veličini bloka, dobijamo &amp;lt;math&amp;gt;m \cdot 160 = 16480 \implies m = \frac{16480}{160} = 103&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
U drugoj varijanti, veličina čvora je jednaka &amp;lt;math&amp;gt;(m-1) \cdot 256 + m \cdot 64 = m \cdot 256 - 256 + m \cdot 64 = m \cdot 320 - 256&amp;lt;/math&amp;gt;. Sa istom pretpostavkom dobijamo &amp;lt;math&amp;gt;m \cdot 320 = 16640 \implies m = \frac{16640}{320} = 52&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Heširanje.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Kako funkcioniše metod deljenja i koje su njegove osnovne osobine? Koje vrednosti delioca treba izbegavati?&lt;br /&gt;
# Neka je dat skup ključeva 19, 10, 4, 37, 49, 52. Ukoliko je poznatao da se prilikom heširanja koristi metod deljenja i veličina tabele &#039;&#039;n&#039;&#039; = 9, komentarisati izbor veličine tabele u odnosu na verovatnoću mogućih kolizija zadatog skupa ključeva. Predložiti alternativnu, blisku veličinu tabele kako bi se verovatnoća kolizija smanjila.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:АСП2]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>IvnSvc</name></author>
	</entry>
</feed>