<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8%2F%D0%9A2_2021</id>
	<title>Мултипроцесорски системи/К2 2021 - Историја измена</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8%2F%D0%9A2_2021"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;action=history"/>
	<updated>2026-06-04T04:53:04Z</updated>
	<subtitle>Историја измена ове странице на пројекту</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7023&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7023&amp;oldid=prev"/>
		<updated>2023-12-05T09:04:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 5. децембар 2023. у 11:04&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l129&quot;&gt;Ред 129:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 129:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Rešenje ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Rešenje ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;Napomena:&#039;&#039; Uzeli smo pretpostavku da operacija flush samo upiše ažuran podatak u memoriju i uopšte ga ne prosledi drugom kešu koji ga je tražio, već će on morati da pristupi memoriji da bi pročitao tu vrednost. Moguća je i drugačija implementacija kod koje bi procesor koji uradi flush takođe i prosledio odmah procesoru koji je tražio podatak tu vrednost i onda taj drugi procesor uopšte ne bi pristupao memoriji jer bi imao taj podatak u svom kešu - tada bismo kod njega imali RH umesto RM pri pristupu tom podatku. Ako isprobate sekvence pristupa iz zadatka u Vivio simulatoru 5.1 videćete da flush funkcioniše ovako.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! CPU&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! CPU&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7022&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7022&amp;oldid=prev"/>
		<updated>2023-12-03T19:55:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:55&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Ред 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i u okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i u okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 od strane istog procesa na istom procesoru - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;upisu &lt;/del&gt;upisu prešlo sa ažuriranja na invalidaciju, drugi proces na drugom procesoru bi pronašao podatak u svom kešu). Kao što je bilo i očekivano, na osnovu rezultata simulacija zaključeno je da je bolje da se prelazi sa ažuriranja na invalidaciju tek pri trećem upisu i to samo kada svi procesori koji imaju kopiju tog podatka detektuju upisni niz dužine tri upisa (može se desiti da su neki procesori detektovali upisni niz dužine tri upisa, a da npr. jedan procesor prekine taj upisni niz tako što će da pročita taj podatak, pa je onda za njega upisni niz dužine nula upisa - u tom slučaju će se nastaviti sa primenom ažurirajućeg protokola sve dok nisu svi procesori (osim, naravno, onog koji upisuje u podatak) detektovali upisni niz dužine tri upisa, i tada će se preći na poništavajući protokol zbog čega će se onda invalidovati kopije u njihovim keševima).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 od strane istog procesa na istom procesoru - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu prešlo sa ažuriranja na invalidaciju, drugi proces na drugom procesoru bi pronašao podatak u svom kešu). Kao što je bilo i očekivano, na osnovu rezultata simulacija zaključeno je da je bolje da se prelazi sa ažuriranja na invalidaciju tek pri trećem upisu i to samo kada svi procesori koji imaju kopiju tog podatka detektuju upisni niz dužine tri upisa (može se desiti da su neki procesori detektovali upisni niz dužine tri upisa, a da npr. jedan procesor prekine taj upisni niz tako što će da pročita taj podatak, pa je onda za njega upisni niz dužine nula upisa - u tom slučaju će se nastaviti sa primenom ažurirajućeg protokola sve dok nisu svi procesori (osim, naravno, onog koji upisuje u podatak) detektovali upisni niz dužine tri upisa, i tada će se preći na poništavajući protokol zbog čega će se onda invalidovati kopije u njihovim keševima).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7021&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7021&amp;oldid=prev"/>
		<updated>2023-12-03T19:47:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:47&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l44&quot;&gt;Ред 44:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 44:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Rešenje ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Rešenje ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;u &lt;/ins&gt;okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 od strane istog procesa na istom procesoru - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju, drugi proces na drugom procesoru bi pronašao podatak u svom kešu). Kao što je bilo i očekivano, na osnovu rezultata simulacija zaključeno je da je bolje da se prelazi sa ažuriranja na invalidaciju tek pri trećem upisu i to samo kada svi procesori koji imaju kopiju tog podatka detektuju upisni niz dužine tri upisa (može se desiti da su neki procesori detektovali upisni niz dužine tri upisa, a da npr. jedan procesor prekine taj upisni niz tako što će da pročita taj podatak, pa je onda za njega upisni niz dužine nula upisa - u tom slučaju će se nastaviti sa primenom ažurirajućeg protokola sve dok nisu svi procesori (osim, naravno, onog koji upisuje u podatak) detektovali upisni niz dužine tri upisa, i tada će se preći na poništavajući protokol zbog čega će se onda invalidovati kopije u njihovim keševima).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 od strane istog procesa na istom procesoru - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju, drugi proces na drugom procesoru bi pronašao podatak u svom kešu). Kao što je bilo i očekivano, na osnovu rezultata simulacija zaključeno je da je bolje da se prelazi sa ažuriranja na invalidaciju tek pri trećem upisu i to samo kada svi procesori koji imaju kopiju tog podatka detektuju upisni niz dužine tri upisa (može se desiti da su neki procesori detektovali upisni niz dužine tri upisa, a da npr. jedan procesor prekine taj upisni niz tako što će da pročita taj podatak, pa je onda za njega upisni niz dužine nula upisa - u tom slučaju će se nastaviti sa primenom ažurirajućeg protokola sve dok nisu svi procesori (osim, naravno, onog koji upisuje u podatak) detektovali upisni niz dužine tri upisa, i tada će se preći na poništavajući protokol zbog čega će se onda invalidovati kopije u njihovim keševima).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key si:diff::1.12:old-7020:rev-7021 --&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7020&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7020&amp;oldid=prev"/>
		<updated>2023-12-03T19:42:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:42&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Ред 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Rešenje ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Rešenje ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dva moguća &lt;/del&gt;načina:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Do problema keš koherencije čak i kada se radi o privatnim podacima može doći na sledeća dva &lt;/ins&gt;načina:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Migracija procesa:&amp;lt;/b&amp;gt; Do problema keš koherencije može doći čak i kada je reč o privatnim podacima zbog migracije procesa sa jednog procesora na drugi - to se može dogoditi npr. kada raspoređivač procesa pokuša da poboljša balans opterećenja u sistemu. Neka postoji podatak na adresi A0 u operativnoj memoriji sa vrednošću 0 i neka ga trenutno nijedan procesor nema u svom kešu. Neka se proces P0 nalazi na procesoru Proc1 sa keš memorijom C0. On može da dovuče podatak u keš i izmeni mu vrednost na 1 samo u svom kešu tako da podatak u memoriji sada nije ažuran. Neka se sada dogodi migracija procesa P0 sa procesora Proc0 na procesor Proc1 sa keš memorijom C1. Ako proces P1 sada pokuša da pročita podatak, prvo će ga potražiti u kešu C1, pa pošto ga tu neće pronaći pročitaće ga iz memorije, a pošto podatak u memoriji nije ažuran, sistem će ući u nekonzistentno stanje i time upravo nastaje problem keš koherencije.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Migracija procesa:&amp;lt;/b&amp;gt; Do problema keš koherencije može doći čak i kada je reč o privatnim podacima zbog migracije procesa sa jednog procesora na drugi - to se može dogoditi npr. kada raspoređivač procesa pokuša da poboljša balans opterećenja u sistemu. Neka postoji podatak na adresi A0 u operativnoj memoriji sa vrednošću 0 i neka ga trenutno nijedan procesor nema u svom kešu. Neka se proces P0 nalazi na procesoru Proc1 sa keš memorijom C0. On može da dovuče podatak u keš i izmeni mu vrednost na 1 samo u svom kešu tako da podatak u memoriji sada nije ažuran. Neka se sada dogodi migracija procesa P0 sa procesora Proc0 na procesor Proc1 sa keš memorijom C1. Ako proces P1 sada pokuša da pročita podatak, prvo će ga potražiti u kešu C1, pa pošto ga tu neće pronaći pročitaće ga iz memorije, a pošto podatak u memoriji nije ažuran, sistem će ući u nekonzistentno stanje i time upravo nastaje problem keš koherencije.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Lažno deljenje:&amp;lt;/b&amp;gt; Do problema keš koherencije može doći čak i kada je reč o privatnim podacima zbog pojave &amp;quot;lažne deljivosti&amp;quot;. Neka proces na procesoru Proc0 upisuje u podatak koji je u memoriji na adresi A0 i neka ga ima u svom kešu. Neka proces na procesoru Proc1 upisuje u podatak koji je u memoriji na adresi A1 i neka ga ima u svom kešu. Neka je veličina jednog bloka koji keševi dohvataju i smeštaju u jednu keš liniju veličine dve susedne memorijske lokacije. To bi značilo da, iako procesor Proc0 menja samo podatak sa adrese A0, a procesor Proc1 samo podatak sa adrese A1 (dakle, različite podatke) svaka takva modifikacija biće detektovana kao problem keš koherencije koji treba razrešiti iako tog problema uopšte nema, pa onda dolazi do bespotrebnog poništavanja ili ažuriranja podataka u zavisnosti od protokola koji se koristi za obezbeđivanje keš koherencije. Ovog problema ne bi bilo kada bi veličina bloka koji dohvataju keševi bila veličine jedne memorijske reči, ali je onda pitanje koliko bi bilo korisno takvo keširanje - zato je potrebno dobro razmisliti pri projektovanju keš memorije kolika bi trebalo da bude veličina jedne keš linije kako bi se istovremeno što bolje iskoristilo keširanje, ali isto tako i smanjila pojava &amp;quot;lažnog deljenja&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Lažno deljenje:&amp;lt;/b&amp;gt; Do problema keš koherencije može doći čak i kada je reč o privatnim podacima zbog pojave &amp;quot;lažne deljivosti&amp;quot;. Neka proces na procesoru Proc0 upisuje u podatak koji je u memoriji na adresi A0 i neka ga ima u svom kešu. Neka proces na procesoru Proc1 upisuje u podatak koji je u memoriji na adresi A1 i neka ga ima u svom kešu. Neka je veličina jednog bloka koji keševi dohvataju i smeštaju u jednu keš liniju veličine dve susedne memorijske lokacije. To bi značilo da, iako procesor Proc0 menja samo podatak sa adrese A0, a procesor Proc1 samo podatak sa adrese A1 (dakle, različite podatke) svaka takva modifikacija biće detektovana kao problem keš koherencije koji treba razrešiti iako tog problema uopšte nema, pa onda dolazi do bespotrebnog poništavanja ili ažuriranja podataka u zavisnosti od protokola koji se koristi za obezbeđivanje keš koherencije. Ovog problema ne bi bilo kada bi veličina bloka koji dohvataju keševi bila veličine jedne memorijske reči, ali je onda pitanje koliko bi bilo korisno takvo keširanje - zato je potrebno dobro razmisliti pri projektovanju keš memorije kolika bi trebalo da bude veličina jedne keš linije kako bi se istovremeno što bolje iskoristilo keširanje, ali isto tako i smanjila pojava &amp;quot;lažnog deljenja&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7019&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7019&amp;oldid=prev"/>
		<updated>2023-12-03T19:19:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:19&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Ред 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 od strane istog procesa na istom procesoru - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju, drugi proces na drugom procesoru bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 od strane istog procesa na istom procesoru - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju, drugi proces na drugom procesoru bi pronašao podatak u svom kešu&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;). Kao što je bilo i očekivano, na osnovu rezultata simulacija zaključeno je da je bolje da se prelazi sa ažuriranja na invalidaciju tek pri trećem upisu i to samo kada svi procesori koji imaju kopiju tog podatka detektuju upisni niz dužine tri upisa (može se desiti da su neki procesori detektovali upisni niz dužine tri upisa, a da npr. jedan procesor prekine taj upisni niz tako što će da pročita taj podatak, pa je onda za njega upisni niz dužine nula upisa - u tom slučaju će se nastaviti sa primenom ažurirajućeg protokola sve dok nisu svi procesori (osim, naravno, onog koji upisuje u podatak) detektovali upisni niz dužine tri upisa, i tada će se preći na poništavajući protokol zbog čega će se onda invalidovati kopije u njihovim keševima&lt;/ins&gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7018&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7018&amp;oldid=prev"/>
		<updated>2023-12-03T19:12:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:12&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Ред 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 od strane istog procesa na istom procesoru - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 od strane istog procesa na istom procesoru - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju, drugi proces &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;na drugom procesoru &lt;/ins&gt;bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7017&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7017&amp;oldid=prev"/>
		<updated>2023-12-03T19:12:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:12&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Ред 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;od strane istog procesa na istom procesoru &lt;/ins&gt;- tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7016&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7016&amp;oldid=prev"/>
		<updated>2023-12-03T19:10:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:10&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Ред 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dužina upisnog niza bila npr. tri upisa&lt;/del&gt;, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se tek pri trećem upisu upisu prešlo sa ažuriranja na invalidaciju&lt;/ins&gt;, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key si:diff::1.12:old-7015:rev-7016 --&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7015&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7015&amp;oldid=prev"/>
		<updated>2023-12-03T19:09:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:09&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Ред 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi dužina upisnog niza bila tri upisa, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju (ta promena se dogodi već pri drugom upisu). Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi dužina upisnog niza bila &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;npr. &lt;/ins&gt;tri upisa, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7014&amp;oldid=prev</id>
		<title>Etfsibg: /* Rešenje */</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2021&amp;diff=7014&amp;oldid=prev"/>
		<updated>2023-12-03T19:08:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Rešenje&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 3. децембар 2023. у 21:08&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Ред 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Motivacija:&amp;lt;/b&amp;gt; Ne može se reći da su generalno poništavajući protokoli za održavanje keš koherencije bolji od ažurirajućih ili obratno, zato što direktno zavisi od karakteristika same aplikacije koji tip protokola je bolje primeniti. Osnovni kriterijum koji se razmatra pri odabiru tipa protokola jeste procesorska lokalnost, tj. koliko se podaci koriste od strane samo jednog procesora. Indikator procesorske lokalnosti je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;), tj. koliko puta neki procesor uspe da upiše u dati podatak pre nego što ga neki drugi procesor zatraži za čitanje ili upis. Poništavajući protokoli su efikasniji za duže upisne nizove (npr. ako je dužina upisnog niza 20, jednom bismo javili ostalim procesorima na početku da invalidiraju svoje kopije, pa bismo onda lokalnim, jeftinim upisima u našu keš memoriju menjali podatak i onda bismo ga dostavili procesoru koji ga zatraži nakon naših 20 upisa; ovo je dosta efikasnije nego kada bismo koristili ažurirajući protokol jer bi se tada bespotrebno na svaki naš upis slala vrednost podatka svim procesorima iako nijednom ne treba ništa drugo osim vrednosti podatka nakon našeg poslednjeg, tj. 20. upisa). Ažurirajući protokoli su efikasniji za kraće upisne nizove (npr. ako je dužina upisnog niza 1, nakon svake izmene podatka u našem kešu slali bismo novu vrednost svim procesorima koji imaju kopiju tog podatka i u ovom slučaju je to odlično jer će svakako uvek neki drugi procesor zatražiti taj podatak nakon samo jednog našeg upisa, a ovako će ga tada uvek pronaći u svom kešu; ovo je dosta efikasnije nego kada bismo koristili poništavajući protokol jer bi onda vrednost podatka u ostalim procesorima nakon svakog upisa našeg procesora bila invalidirana, što znači da bi svi ostali procesori naredni put kada im zatreba taj podatak uvek promašili u svojim keševima). Sada kada znamo šta tačno znači procesorska lokalnost, jasno je da ona može biti promenljiva i okviru jedne aplikacije, što znači da je moguće da nekim delovima aplikacije više odgovaraju poništavajući protokoli, a drugim ažurirajući, pa se tako došlo do ideje o adaptivnim protokolima koji bi trebalo da kombinuju oba tipa protokola kako bi potencijalno bile ostvarene bolje performanse.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Uobičajeni način rada:&amp;lt;/b&amp;gt; Adaptivni protokoli keš koherencije obično prvo pretpostave da je dužina upisnog niza (&amp;#039;&amp;#039;write run&amp;#039;&amp;#039;) mala i zato prvo počnu sa primenom ažurirajućeg protokola. Ukoliko dužina upisnog niza poraste preko nekog unapred definisanog praga, onda se smatra da se tada više isplati poništavajući protokol i zato se onda prelazi na njegovo korišćenje. Pošto je ovo obično realizovano hardverski, transparentno je za programera, ali takođe povećava hardversku složenost sistema.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju. Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi dužina upisnog niza bila tri upisa, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;b&amp;gt;Invalidacija u protokolu EDWP:&amp;lt;/b&amp;gt; Kao preteča &amp;#039;&amp;#039;EDWP (Efficient Distributed Writing Protocol)&amp;#039;&amp;#039; protokolu prvo se pojavio &amp;#039;&amp;#039;RWB (Read and Write Broadcast)&amp;#039;&amp;#039; protokol kod kog se već za dužinu upisnog niza od dva upisa prelazi sa ažuriranja na invalidaciju &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(ta promena se dogodi već pri drugom upisu)&lt;/ins&gt;. Zaključeno je da je to prerano (npr. kod sinhronizacije procesa prvo se dogodi upis vrednosti 0 u deljenu promenljivu mutex, pa onda upis vrednosti 1 - tada npr. treba neki drugi proces na drugom procesoru da pročita tu vrednost mutex-a kako bi nastavio svoj rad, međutim ona je invalidirana jer je u nju pisano dva puta, pa će on promašiti u svom kešu; kada bi dužina upisnog niza bila tri upisa, drugi proces bi pronašao podatak u svom kešu).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 5. zadatak ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Etfsibg</name></author>
	</entry>
</feed>