<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bilgisayar Kavramları &#187; Donanım ( Hardware )</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/donanim/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Encoder (Kodlayıcı)</title>
		<link>http://www.bilgisayarkavramlari.com/2012/01/19/encoder-kodlayici/</link>
		<comments>http://www.bilgisayarkavramlari.com/2012/01/19/encoder-kodlayici/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 03:54:00 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[Mantık Devreleri (Logic Circuits)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6150</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, bir mantıksal devre elemanı olan kolayıcının (encoder) çalışma mantığını ve tasarımını açıklamaktır. Basit bir kodlayıcı, kod çözücünün (decoder) tersine üssel işlemi geri alır. Örneğin bir kod çözücüde, yapılan işlem 2n şeklinde gelen girdinin (input) üstünü almaktır. 3&#215;8 bir kod çözücüde, gelen 3 bitlik girdinin (input) değeri n [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu yazının amacı, bir mantıksal devre elemanı olan kolayıcının (encoder) çalışma mantığını ve tasarımını açıklamaktır.</p>
<p>Basit bir kodlayıcı, <a href="http://www.bilgisayarkavramlari.com/2007/12/09/kod-cozucu-decoder/">kod çözücünün (decoder)</a> tersine üssel işlemi geri alır. Örneğin bir kod çözücüde, yapılan işlem 2<sup>n</sup> şeklinde gelen girdinin (input) üstünü almaktır. 3&#215;8 bir kod çözücüde, gelen 3 bitlik girdinin (input) değeri n olarak kabul edilirse, kod çözücü bu değere göre 8 farklı çıktıdan (output) bir tanesini seçer.</p>
<p>Kodlayıcı ise bu işlemin tam tersi yönde 8 farklı girdiden birisinden sinyal gelmesi halinde 3 çıktıdan (output) ilgili ihtimalleri işaretleyerek üst alma işleminin tersini (logaritma) yapar.</p>
<p>Örneğin aşağıda bir 4&#215;2 kodlayıcının (encoder) <a href="http://www.bilgisayarkavramlari.com/2007/12/08/dogruluk-cizelgesi-truth-table/">doğruluk tablosu (truth table)</a> verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011912_0355_EncoderKodl1.png" alt="" /></p>
<p>Tabloda I ile ifade edilen kolonlar girdi (input) ve O ile ilfade edilen kolonlar ise çıktı (output) değerlerdir. Örneğin 0100 değerinin 10&#8242;luk tabanda karşılığı 4 olarak yazılabilir. Bu değerin tablodaki çıktı değeri (output) 10 olarak okunacaktır. 10 değeri ise 10&#8242;luk tabanda 2 olarak yazılabilir. Gerçekten de log<sub>2</sub>4 = 2 olmaktadır ve kodlayıcının bir logaritma işlemi olduğu görülebilir.</p>
<p>Yukarıdaki tabloyu gerçekleyen kodlayıcının genelde kullanlıan blok çizimi aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011912_0355_EncoderKodl2.png" alt="" /></p>
<p>Ayrıca doğruluk tablosunda görülebileceği üzere, V biti (valid bit, kabul edilebilir) kullanılarak tanımsız durumlar ortadan kaldırılabilir. Örneğin logaritmanın tanımından bilindiği üzere 0&#8242;ın logaritması tanımsızdır. Bu durumda bütün girdi (input) bitlerinin 0 olması durumunda çıktı belirsiz olacaktır. İşte bu belirsizlik durumunda çıktının kabul edilemez (invalid) olduğunu ifade için V biti 0 değerinde verilebilir.</p>
<p>Şayet bir <a href="http://www.bilgisayarkavramlari.com/2007/12/09/kod-cozucu-decoder/">kod çözücü (decoder)</a> ile bir kodlayıcı (encoder) arka arkaya bağlanırsa, sistemin girdi değeri, çıktı değeri olarak okunur.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011912_0355_EncoderKodl3.png" alt="" /></p>
<p>Yukarıdaki devrede, soldan verilen girdi sağdan değişmeden okunurken devre tam tersine çevrilerek, sağdan bir girdi verilmesi halinde de soldan okunacaktır.</p>
<p>Kodlayıcı devresini, kapılar kullanarak yapmak da mümkündür. Örnek bir tasarım aşağıda verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011912_0355_EncoderKodl4.png" alt="" /></p>
<p>Doğruluk tablosunun <a href="http://www.bilgisayarkavramlari.com/2007/12/07/karnaugh-haritasi-karnaugh-map/">karnaugh haritasını (karnaugh map)</a> çizersek:</p>
<p>O<sub>0</sub> için</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 75px;" />
<col style="width: 67px;" />
<col style="width: 66px;" />
<col style="width: 66px;" />
<col style="width: 66px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>1</sub>I<sub>0</sub>= 00</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>1</sub>I<sub>0</sub>= 01</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>1</sub>I<sub>0</sub>= 11</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>1</sub>I<sub>0</sub>= 10</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>3</sub>I<sub>2</sub>= 00</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>3</sub>I<sub>2</sub>= 01</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>3</sub>I<sub>2</sub>= 11</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>3</sub>I<sub>2</sub>= 10</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki haritada, sonucu etkilemeyen (kodlayıcının çalışması belirsiz ve hiçbir şekilde girdi olarak gelemeyecek değerler) X ile ifade edilmiştir. Bu tip kodlayıcılara (encoder) özel olarak öncelik kodlayıcısı (priority encoder) ismi de verilmektedir. Bu haritada X değerleri 1 veya 0 olarak kabul edilebilir. O halde yukarıdaki tabloda mavi ile işaretlenmiş olan 4 ihtimal tek başına alınarak O<sub>0</sub> için I<sub>0</sub>&#8216;I<sub>2</sub>&#8216; sonucuna varılabilir.</p>
<p>O<sub>1</sub> için</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 75px;" />
<col style="width: 67px;" />
<col style="width: 66px;" />
<col style="width: 66px;" />
<col style="width: 66px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>1</sub>I<sub>0</sub>= 00</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>1</sub>I<sub>0</sub>= 01</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>1</sub>I<sub>0</sub>= 11</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>1</sub>I<sub>0</sub>= 10</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>3</sub>I<sub>2</sub>= 00</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="background: white; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>3</sub>I<sub>2</sub>= 01</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>3</sub>I<sub>2</sub>= 11</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">I<sub>3</sub>I<sub>2</sub>= 10</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
<td style="background: white; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">X</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki tabloda da benzer şekilde O<sub>1</sub> için I<sub>1</sub>&#8216;I<sub>0</sub>&#8216; sonucuna varılabilir.</p>
<p>Yukarıdaki sonuçlara göre bir kodlayıcıyı (encoder) aşağıdaki şekilde çizebiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011912_0355_EncoderKodl5.png" alt="" /></p>

<p class="sayac_bilgi">66 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2012/01/19/encoder-kodlayici/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Banker Algoritması (Banker&#8217;s Algorithm)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/06/26/banker-algoritmasi-bankers-algorithm/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/06/26/banker-algoritmasi-bankers-algorithm/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 21:09:29 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[işletim sistemleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/06/26/banker-algoritmasi-bankers-algorithm/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde işletim sistemi tasarımı konusunda geçen ve kaynaklar üzerindeki kilitlenmeyi (deadlock)engelleme amaçlı algoritmadır. Algoritma Dijkstra tarafından geliştirilmiştir. Algoritmanın temel 3 durumu ve 2 şartı bulunur: Bilmesi gerekenler: Her işlem (process) ne kadar kaynağa ihtiyaç duyar? Her işlem (process) şu anda ne kadar kaynağı elinde tutmaktadır? Şu anda ne kadar [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="margin-bottom: 0cm;">Yazan : Şadi Evren ŞEKER</p>
<p style="margin-bottom: 0cm;">Bilgisayar bilimlerinde işletim sistemi tasarımı konusunda geçen ve kaynaklar üzerindeki <a href="http://www.bilgisayarkavramlari.com/2008/11/20/kilitlenme-deadlock/">kilitlenmeyi (deadlock)</a>engelleme amaçlı algoritmadır. Algoritma Dijkstra tarafından geliştirilmiştir.</p>
<p style="margin-bottom: 0cm;">Algoritmanın temel 3 durumu ve 2 şartı bulunur:</p>
<p style="margin-bottom: 0cm;">Bilmesi gerekenler:</p>
<ol>
<li>
<p style="margin-bottom: 0cm;">Her işlem (process) ne kadar kaynağa ihtiyaç duyar?</p>
</li>
<li>
<p style="margin-bottom: 0cm;">Her işlem (process) şu anda ne kadar kaynağı elinde tutmaktadır?</p>
</li>
<li>
<p style="margin-bottom: 0cm;">Şu anda ne kadar kaynak ulaşılabilir durumdadır?</p>
</li>
</ol>
<p style="margin-bottom: 0cm;">Yukarıdaki bu bilgileri bildikten sonra kaynak ayrılması sırasında aşağıdaki şartları uygular:</p>
<ol>
<li>
<p style="margin-bottom: 0cm;">Şayet talep edilen kaynak, azami kaynaktan (maximum) fazla ise izin verme</p>
</li>
<li>
<p style="margin-bottom: 0cm;">Şayet talep edilen kaynak eldeki kaynaktan fazla ise, kaynak boşalana kadar  <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlemi (process)</a> beklet.</p>
</li>
</ol>
<p style="margin-bottom: 0cm;">Yukarıdaki algoritma detayında, kaynak olarak geçen değer, işletim sistemi için herhangi bir şey olabilir (hafıza (RAM), giriş çıkış işlemleri (I/O), gerçek sistemler için çalışma zamanı gibi)</p>
<p style="margin-bottom: 0cm;">Banker algoritması ayrıca çalışması sırasında yukarıdaki takipleri yapabilmek için bazı veri yapılarına ihtiyaç duyar. Aşağıdaki veri yapıları için n, sistemdeki  <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlem (process)</a> sayısı ve m birbirinden farklı kaynak sayısı (resource) olmak üzere:</p>
<p style="margin-bottom: 0cm;">Müsait : m adet elemanı olan bir dizidir. Dizinin her elemanı o kaynak tipinden ne kadar müsait olduğunu tutar. Örneğin M[i] = 5 değerinin anlamı, i kaynak tipinden beşinin müsait olduğudur.</p>
<p style="margin-bottom: 0cm;">Azami : iki boyutlu dizi ile tutulur ve n x m boyutlarındadır. Her işlem için ilgili kaynaktan ne kadar ayrım yapıldığı dizide işaretlenir. Örneğin Az[2][3]=5 gösteriminin anlamı, 2. işlemin 3. kaynak üzerinde 5 birimlik ayrım hakkı olduğudur. Diğer bir deyişle 2. işlem, 3. kaynaktan 5 birimden fazla kullanmaz, kullanmak istemez, kullanamaz.</p>
<p style="margin-bottom: 0cm;">Ayrım : yine iki boyutlu bir dizidir ve yine boyutu n x m olarak tutulur. Her işlemin her kaynağın ne kadarını kullandığını gösterir. Örneğin Ay[2][3] = 4 gösteriminin anlamı, o anda, 2. işlemin 3. kaynaktan 4 birim kullanıyor olduğudur (ayırmış olduğudur).</p>
<p style="margin-bottom: 0cm;">İhtiyaç: Benzer şekilde nxm boyutlarında bir dizi olarak tutulur ve her işlemin her kaynaktan ne kadar ihtiyaç duyduğunu tutar. Örneğin İ[2][3] = 1 gösteriminin anlamı, 2. işlemin, 3. kaynaktan 1 birim ihtiyacı olduğudur.</p>
<p style="margin-bottom: 0cm;">&nbsp;</p>
<p style="margin-bottom: 0cm;">Algoritmanın çıktısı güvenli veya değildir (safe state, unsafe state). Buna göre algoritma, işlemlerin çalışıp bitme ihtimali varsa güvenli sonucunu döndürürken, işlemler, birbirini kilitliyorsa bu durumda güvensiz sonucunu döndürür.</p>
<p style="margin-bottom: 0cm;">&nbsp;</p>
<p style="margin-bottom: 0cm;">Hesaplama:</p>
<p style="margin-bottom: 0cm;">Algoritma, güveni veya güvensiz sonucuna ulaşmak için adıma bağlı olarak, aşağıdaki hesaplamaları yapar:</p>
<p style="margin-bottom: 0cm;">Müsait = Müsait – İhtiyaç</p>
<p style="margin-bottom: 0cm;">Ayrım = Ayrım + İhtiyaç</p>
<p style="margin-bottom: 0cm;">İhtiyaç = Azami – Ayrım</p>
<p style="margin-bottom: 0cm;">&nbsp;</p>
<p style="margin-bottom: 0cm;">&nbsp;</p>
<p style="margin-bottom: 0cm;">Bu durumu bir örnek üzerinden açıklayalım. Örneğin A,B,C isimli üç kaynağımız olsun ve bu kaynakların müsaitlik durumları aşağıdaki şekilde olsun:</p>
<pre class="western">Kaynaklar
 A B C
10 5 7</pre>
<p>Ayrıca 5 adet işlemimiz olsun ve bu işlemlerin anlık olarak azami ihtiyaçları, ayrılmış olan kaynaklar ve ihtiyaçları aşağıda verildiği gibi olsun:</p>
<pre class="western">     Azami       Ayrım
     A B C       A B C
P0   7 5 3       0 1 0
P1   3 2 2       2 0 0
P2   9 0 2       3 0 2
P3   2 2 2       2 1 1
P4   4 3 3       0 0 2
</pre>
<p>Soru bu durumun güvenli bir durum olup olmadığıdır. Diğer bir deyişle acaba bir kilitlenme riski bulunur mu? Yukarıda verilen değerlerin üzerinden ihtiyaç tablomuzu hesaplayalım:</p>
<pre>
     Azami   -   Ayrım    =  İhtiyaç
     A B C       A B C       A B C
P0   7 5 3       0 1 0       7 4 3
P1   3 2 2       2 0 0       1 2 2
P2   9 0 2       3 0 2       6 0 0
P3   2 2 2       2 1 1       0 1 1
P4   4 3 3       0 0 2       4 3 1</pre>
<p style="margin-bottom: 0cm;">Yukarıdaki işlemden anlaşılacağı üzere Azami tablosundan, Ayrım tablosu çıkarılmış ve ihtiyaçlar bulunmuştur.</p>
<p style="margin-bottom: 0cm;">Bu durumda, sistem güvenli denilebilir çünkü ihtiyaç tablosundaki hiçbir değer, müsait dizimizdeki değeri geçmemektedir. Demek ki sistem bütün ihtiyaçlara cevap verebilecek kapasitededir.</p>
<p style="margin-bottom: 0cm;">Bu durumun daha iyi anlaşılması için P1, P2, P3, P4, P0 sırası ile çalışmayı görelim:</p>
<pre class="western">     Azami   -   Ayrım  =    İhtiyaç Müsait
     A B C       A B C       A B C            A B C
P1   3 2 2       2 0 0       1 2 2    3 3 2   3 3 2
P3   2 2 2       2 1 1       0 1 1    5 3 2
P4   4 3 3       0 0 2       4 3 1    7 4 3
P2   9 0 2       3 0 2       6 0 0    7 4 5
P0   7 5 3       0 1 0       7 4 3   10 4 7
                                     10 5 7&lt;&lt;&lt; Kaynaklar
</pre>
<p>Görüldüğü üzere işlemlerin sonucunda ilk kaynak değerlerine geri dönülmüştür (aslında bütün işlemler bitince müsait olan kaynak değeri, başlangıçtaki değerdir).<br />
Yukarıdaki çalışma sırası (yani  P1, P2, P3, P4, P0 sırası) güvenli çalışma olarak kabul edilir. Örneğimizi biraz daha ilerletelim :<br />
Acaba P1 işlemi (1,0,2) ihtiyacında olsaydı yine de güvenli durumda olur muyduk?<br />
İhtiyaç kontrolümüz (1,0,2)<code class="western">&lt;=</code> (1,2,2)  olacaktı<br />
ve müsait durumumuz : (1,0,2)<code class="western">&lt;=</code> (3 3 2)  olacaktı<br />
Bu durumda tablomuz aşağıdaki şekilde olabilirdi:</p>
<pre>
      Azami      Ayrım      İhtiyaç  Müsait
      A B C       A B C     A B C    A B C
P0   7 5 3       0 1 0       7 4 3     2 3 0&lt;&lt;&lt;
P1   3 2 2       3 0 2&lt;&lt;&lt;    0 2 0&lt;&lt;&lt;
P2   9 0 2       3 0 2       6 0 0
P3   2 2 2       2 1 1       0 1 1
P4   4 3 3       0 0 2       4 3 1
</pre>
<p>Bu durum güvenli midir?<br />
Evet !<br />
Çalışma sırası olarak P1, P3, P4, P0 ve P2 sırasında olması durumunda işlemler kilitlenme olmaksızın başarı ile çalışacaktır. Örneğin P4 için ihtiyacı (3,3,0) olarak yeniden ayarlasaydık güvenli bir durum elde edemeyecektik çünkü bu adımdaki (3,3,0) değeri o anda müsait olan (2,3,0) değerinden büyük olacaktı ve <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlem (process)</a> çalışamayacaktı.</pre>
<p>&nbsp;</p>
</div>

<p class="sayac_bilgi">658 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/06/26/banker-algoritmasi-bankers-algorithm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ondalıklı sayıların taban dönüşümleri</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/01/ondalikli-sayilarin-taban-donusumleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/01/ondalikli-sayilarin-taban-donusumleri/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 00:02:45 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Matematiği]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/01/ondalikli-sayilarin-taban-donusumleri/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı sayıların ondalıklı olması halinde (floating numbers, küsuratlı sayılar, real numbers, reel sayılar, gerçel sayılar) tabanlarının nasıl değiştiğini anlatmaktır. Normal sayıların taban dönüşümü için buraya tıklarayarak ilgil yazıyı okuyabilirsiniz. (number bases) Öncelikle küsurat kısmının payda olarak değerlendirilmesi gerektiğini bilmemiz gerekir. Normalde bir sayıyı farklı bir tabana çevirirken, sayının [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bu yazının amacı sayıların ondalıklı olması halinde (floating numbers, küsuratlı sayılar, real numbers, reel sayılar, gerçel sayılar) tabanlarının nasıl değiştiğini anlatmaktır. <a href="http://www.bilgisayarkavramlari.com/2008/10/17/sayi-tabanlari-number-bases/">Normal sayıların taban dönüşümü için buraya tıklarayarak ilgil yazıyı okuyabilirsiniz. (number bases)</a>
	</p>
<p>Öncelikle küsurat kısmının payda olarak değerlendirilmesi gerektiğini bilmemiz gerekir.
</p>
<p>Normalde bir sayıyı farklı bir tabana çevirirken, sayının çevrileceği tabandaki, taban değerinin üstleri ile çarpılması beklenir.
</p>
<p>Örneğin onluk tabandaki 13 sayını ikilik tabana çevirirsek:
</p>
<p>1 x 10<sup>1</sup> + 3 x 10<sup>0</sup> = 1 x 2<sup>3</sup> + 1 x 2<sup>2</sup> + 0x 2<sup>1</sup> +  1 x 2<sup>0<br />
</sup></p>
<p>Şeklinde yazabiliriz. Yani
</p>
<p>(13)<sub>10</sub> = (1101)<sub>2</sub> şeklinde yazılabilir
</p>
<p>Diğer bir deyişle, sayılar dönüştürüldüğü tabandaki kaçıncı hane ise, o tabanın hane sayısı kadar üstü ile çarpılır.
</p>
<p>Ondalıklı sayılar için bu durum tam tersidir. Yani üstler tabanın üstü şeklinde değil tabanın eksi üstü (veya bir bölü tabanın üstü) şeklinde düşünülmelidir.
</p>
<p>Örneğin onluk tabandaki bir sayıyı :
</p>
<p>0.123 = 1x 1/10 + 2x 1/100 + 3x 1/1000 şeklinde düşünebiliriz.
</p>
<p>Benzer şekilde farklı bir tabandaki sayıyı da o tabandaki üstler olarak düşünmek gerekir:
</p>
<p>(0.23)<sub>8</sub> = 2 x 1/8 + 3 x 1/64
</p>
<p>Ondalıklı sayılarda dikkat edilecek bir husus, sayının üstünün normal sayılarda olduğu gibi 0&#8242;dan değil 1&#8242;den başlamasıdır.
</p>
<p>Sayıların anlamını yukarıdaki şekilde açıkladıktan sonra çevirme işlemine geçebiliriz.  Önce basit bir iki uygulamadan başlayalım:
</p>
<p>(13.5)<sub>10</sub> = ( ? )<sub>2</sub>
	</p>
<p>Yukarıdaki soruda onluk tabandaki bir sayıyı ikilik tabana çevirmemiz istenmiş. Çevirme işlemini tam sayı ve küsuratı olarak iki aşamada yapabiliriz. Önce tam kısım olan 13&#8242;ü çevirelim :
</p>
<p>(13)<sub>10</sub> = (1101)<sub>2</sub> şimdi küsuratı çevirelim:
</p>
<p>0.5 = ½ = (0.1)<sub>2<br />
</sub></p>
<p>Sayının 0.1 olmasının sebebi ikilik tabandaki ilk kat sayının zaten ½ olmasıdır.
</p>
<p>Sonuç olarak
</p>
<p>(13.5)<sub>10</sub> = (1101.1)<sub>2</sub>
	</p>
<p>Olarak bulunur.
</p>
<p>Biraz daha ilerleyerek farklı bir soru çözelim (bundan sonraki örneklerde sayının sadece ondalık kısmı verilecektir, tam kısım ile nasıl birleştiği anlatılmıştır)
</p>
<p>(0.125)<sub>10</sub> = ( ? )<sub>2</sub>
	</p>
<p>Hemen sayımızı kesirli sayıya çevirelim : 0.125 = 1/8
</p>
<p>Bu durumda ondalık kısmına bakıyoruz:  0 x ½ + 0 x ¼ + 1 x 1/8 , o halde sayımız (0.001)<sub> 2</sub> olarak bulunuyor.
</p>
<p>Farklı bir örnek yapalım
</p>
<p>(0.625)<sub>10</sub> = ( ? )<sub>2</sub>
	</p>
<p>Sayının çevrilmiş haline bakalım (aslında 0.625 = 0.5 + 0.125 olduğunu biliyoruz) :  1 x ½ + 0 x ¼ + 1 x 1/8 , o halde sayımız (0.101)<sub> 2</sub> olarak bulunuyor.
</p>
<p>Buna benzer şekillerde çevirim işlemi için değerler kullanılabilir. Kolaylık olması açısından çevrilen tabanın çevrilmeden önceki tabandaki değerlerini bulmak işe yarayabilir.
</p>
<p>Örneğin ½ , ¼ gibi sayıların onluk tabandaki karşılığını bilmek işe yarar.
</p>
<p>Farklı bir örnek ile devam edelim. 1/8&#8242;in 0.125 olduğunu biliyoruz ve bunu kullanarak 8&#8242;lik tabana çevirim yapalım:
</p>
<p>(0.125)<sub>10</sub> = ( ? )<sub>8</sub>
	</p>
<p>Bildiğimiz üzere 1/8 , 8&#8242;lik tabandaki ilk çarpan, o halde çözüm (0.1)<sub> 8</sub>  olarak bulunmuş olunur.
</p>
<p>Gelelim farklı tabanlar arası çevirime. Örneğin on altılık tabandan çevirim yapmak istiyor olalım
</p>
<p>(0.AB)<sub>16</sub> = ( ? )<sub>8 </sub>= ( ? )<sub>2 </sub>şeklinde sayının hem 8&#8242;lik hem de 2&#8242;lik tabandaki karşılıklarını soralım.
</p>
<p>Bilindiği üzere onaltılık tabandaki sayıların (hexadecimal) sekizlik tabana (octal) ve ikilik tabana (binary) çevirimi sırasında bir kolaylık vardır.
</p>
<p>Öncelikle ikilik tabandan başlayalım. Tek bir onaltılık sayı, ikilik tabanda 4 haneye tekabül eder.
</p>
<p>A = 1010
</p>
<p>B = 1011
</p>
<p>Olarak yazılabilir. Bu değerleri çevirelim ve yazalım.
</p>
<p>Örneğin sorumuz (0.A)<sub>16</sub> = ( ? )<sub>2 </sub>şeklinde olsaydı hemen ( 0.1010 )<sub>2 </sub>yazabilirdik. Elbette sonda buluna 0 değeri hükümsüz olduğu için sonuca ( 0.101 )<sub>2 </sub>diyecektik.
</p>
<p>Sorumuza dönersek (0.AB)<sub>16</sub> = ( 0.10101011 )<sub>2 </sub>şeklinde bulmuş oluruz.
</p>
<p>Gelelim sekizlik tabana. Bu sonucu, ikilik tabandan bulmak çok daha kolaydır. Burada her 3 biti (ikilik tabandaki her bir haneye bit denir) bir sayıya karşılık gelecek şekilde çeviriyoruz.
</p>
<p>0.101 010 011  = 0. 5 2 6
</p>
<p>Olarak çevrilir. Burada dikkat edilecek husus, çevirim işleminin tersten yapılmasıdır. Yukarıda da yazarken belirttiğim üzere hanelerin üstlerinin mutlak değeri, sağa doğru giderken büyür. Yani 0.101010011 sayısının çarpanlarının  üstlerinin en küçüğü (veya bölüm olduğu için veya üstler eksi değerde olduğu için, mutlak değeri en büyük olan üst) sonda buluna 1 sayısının çarpanıdır. Ki bu sayı aşağıdaki şekilde düşünülebilir:
</p>
<p>1 x ½ + 0 x ¼ + 1 x 1/8 + 0 x 1/16 + 1 x 1/32 + 0 x 1/64 + 0 x 1/128 + 1 x 1/256 + 1 x 1/512
</p>
<p>Görüldüğü üzere en büyük çarpan 512 değeridir. Dolayısıyla 8&#8242;lik tabana çevirirken en önemli bit bu değerle çarpılacaktır.
</p>
<p>Aslında literatürde bu çarpımda en küçük değere sahip bit anlamında least significant bit tabiri kullanılır. (En yüksek etkiye sahip bit için de most significant bit kullanılmaktadır).
</p>
<p>Dolayısıyla 8&#8242;lik tabana çevirirken her üçlüyü kendi içinde ters çeviriyoruz:
</p>
<p>0.101 010 011  = çevirim için 101 010 110 halini alır ve bunların onluk tabandaki karşılıkları, sonucu verir = 0. 5 2 6 olarak bulunmuş olur.</p>

<p class="sayac_bilgi">1,469 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/01/ondalikli-sayilarin-taban-donusumleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mealy ve Moore Makineleri (Mealy and Moore Machines)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 11:02:02 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde sıkça kullanılan sonlu durum makinelerinin (finite state machine, FSM veya Finite State Automaton , FSA) gösteriminde kullanılan iki farklı yöntemdir. Genelde literatürde bir FSM&#8217;in gösteriminde en çok moore makinesi kullanılır. Bu iki yöntem (mealy ve moore makinaları) sonuçta bir gösterim farkı olduğu için bütün mealy gösterimlerinin moore ve [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde sıkça kullanılan sonlu durum makinelerinin <a href="http://www.bilgisayarkavramlari.com/2007/12/25/sonlu-durum-makinasi-finite-state-machine-finite-state-automaton/">(finite state machine, FSM</a> veya <a href="http://www.bilgisayarkavramlari.com/2008/08/02/sonlu-ototmatlar-finite-automaton/">Finite State Automaton , FSA</a>) gösteriminde kullanılan iki farklı yöntemdir. Genelde literatürde bir FSM&#8217;in gösteriminde en çok moore makinesi kullanılır. Bu iki yöntem (mealy ve moore makinaları) sonuçta bir gösterim farkı olduğu için bütün mealy gösterimlerinin moore ve bütün moore gösterimlerinin mealy gösterimine çevrilmesi mümkündür.</p>
<p>Klasik bir FSM&#8217;de bir giriş bir de çıkış bulunur (input / output). Bu değerlerin nereye yazılacağı aslında iki makine arasındaki farkı belirler.</p>
<p>Moore makinelerinde çıkış değerleri <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğümlere (node</a>) yazılırken, giriş değerleri kenarlar (edges) üzerinde gösterilir.</p>
<p>Mealy makinelerinde ise giriş ve çıkış değerleri kenarlar (edges) üzerinde aralarına bir taksim işareti (slash) konularak gösterilir. Örneğin 1/0 gösterimi, girişin 1 ve çıktının 0 olduğunu ifade eder.</p>
<p>Basit bir örnek olarak <a href="http://www.bilgisayarkavramlari.com/2008/03/13/ozel-veya-exclusive-or-farklilik-operatoru/">özel veya (exclusive or, <span style="font-family: Symbol;">Ä</span>)</a> işlemini ele alalım ve her iki makine gösterimi ile de çizmeye çalışalım.</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 66px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Girdi 1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Girdi 2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Çıktı</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
</tr>
</tbody>
</table>
</div>
<p>Klasik bir XOR kapısı, yukarıdaki <a href="http://bilgisayarkavramlari.com/2007/12/08/dogruluk-cizelgesi-truth-table/">doğruluk çizelgesinde (truth table)</a> gösterildiği üzere iki giriş ve bir çıkıştan oluşur. Bizim makinemiz de ilk girdiden sonra ikinci girdiyi aldığında beklenen çıktıyı vermeli. Ayrıca makine sürekli olarak çalışmaya devam edecek. Örneğin 101011 şeklinde bir veri akışı sağlanması durumunda, sonuç olarak 1<span style="font-family: Symbol;">Ä</span>0<span style="font-family: Symbol;">Ä</span>1<span style="font-family: Symbol;">Ä</span>0<span style="font-family: Symbol;">Ä</span>1<span style="font-family: Symbol;">Ä</span>1 değerini hesaplamasını isteriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012611_1102_MealyveMoor1.png" alt="" /></p>
<p>Yukarıdaki gösterim bir mealy makinesidir. Makinede görüldüğü üzere 3 farklı durum arasındaki geçişler üzerine iki adet değer yazılmıştır. Bu değerlerden ilki giriş ikincisi ise çıkış değeridir.</p>
<p>Makineyi beraber okumaya çalışalım.</p>
<p>Makinenin boşluktan bir ok ile başlayan durumu, yani örneğimizdeki S0 durumu, başlangıç durumudur. Bu durumdan başlanarak gelen değerlere göre ilgili duruma geçilir.</p>
<p>Örneğimizi hatırlayalım. Giriş olarak 101011 <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgisini (string)</a> almayı planlamıştık. Bu durumda ilk bitimiz 1 olarak geliyor ve S0 durumunda 1 girişi ile S2 durumuna geçiyoruz. Burada geçiş sırasında kullanılan kenarın üzerindeki değeri okuyalım: 1/0 bunun anlamı 1 geldiğinde geçilecek kenar olması ve çıktının 0 olmasıdır. Yani şu anda çıktımız 0</p>
<p>Ardından gelen değer 0 (yani şimdiye kadar 01 değerleri geldi). En son makinemizdeki durum, S2 durumuydu, şimdi yeni gelen değeri bu durumdaki kollardan takip ediyor ve S1&#8242;e giden 0/1 kenarını izliyoruz. Bu kolu izleme sebebimiz, S2 durumundan gidilen tek 0 girdisi kolu olmasıdır. Bu kol üzerindeki ikinci değer olan 1 ise, çıktının 1 olduğudur. Yani buraya kadar olan girdiyi alacak olsaydık 01 için 1 çıktısı alacaktık.</p>
<p>İşlemlere devam edelim ve durumları yazmaya çalışalım:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 41px;"></col>
<col style="width: 56px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Gelen Değer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Durum</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Çıkış</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Yeni Durum</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki tablomuzun son halinde, çıkış değeri olarak 0 okunmuştur. Yani örneğimizin neticesi 0 olacaktır.</p>
<p>Aynı örneği moore makinesi olarak tasarlayacak olsaydık:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012611_1102_MealyveMoor2.png" alt="" /></p>
<p>Moore makinesinde, mealy makinesine benzer şekilde boşluktan gelen bir ok, başlangıç durumunu belirtir.</p>
<p>Makinenin, durumlarında, mealy makinesinde olmayan değerler eklenmiştir. Bu değerler, ilgili durumdaki çıktıyı gösterir. Örneğin makinemiz S1 durumundayken çıktı 0 olarak okunabilir.</p>
<p>Şimdi moore makinesinde, aynı örneği çalıştırıp sonucu karşılaştıralım.</p>
<p>Giriş olarak 101011 <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgisini (string)</a> almayı planlamıştık. Bu durumda ilk bitimiz 1 olarak geliyor ve S0 durumunda 1 girişi ile S2 durumuna geçiyoruz. Bu geçiş sonucunda geldiğimiz S2 durumunda okunan çıktı değeri 0 yani sonuç şimdilik 0.</p>
<p>Ardından gelen 0 değeri ile S3 durumuna geçiyoruz ve çıktımız 1 oluyor. Çünkü S3 durumu 1 çıktısı veren durumdur. Bu şekilde durumları ve durumlar arasındaki geçişleri izlersek, aşağıdaki tabloyu çıkarabiliriz:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 41px;"></col>
<col style="width: 56px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Gelen Değer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Durum</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Çıkış</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Yeni Durum</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S3</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S3</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
</tbody>
</table>
</div>
<p>Görüldüğü üzere, makinemiz, örnek girdi için S2 durumunda sonlanıyor ve bu durumda çıktımız 0 olarak okunuyor.</p>

<p class="sayac_bilgi">812 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Translation Lookaside Buffer (TLB, Dönüşüm Hafızası)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/12/04/translation-lookaside-buffer-tlb-donusum-hafizasi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/12/04/translation-lookaside-buffer-tlb-donusum-hafizasi/#comments</comments>
		<pubDate>Sat, 04 Dec 2010 09:17:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[işletim sistemleri]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[TLB]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/12/04/translation-lookaside-buffer-tlb-donusum-hafizasi/</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER TLB, sayfalama işleminin (paging) hızını arttırmaya yarayan bir hafıza bölümüdür. Kısaca TLB olması için sayfalama olmalıdır. Günümüzdeki çoğu bilgisayar mimarisi tarafından desteklenmektedir. TLB kullanılabilmesi için sayfalama (paging) sistemde yapılıyor olmalıdır. Basitçe, RAM&#8217;in yetersiz olduğu durumlarda hafıza ihtiyacının diskten karşılanmasını sağlayan sanal hafızanın verimli kullanılması için, diskte tutulan veri ve RAM&#8217;de duran [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p>TLB, <a href="http://www.bilgisayarkavramlari.com/2009/05/31/sayfalama-paging/">sayfalama işleminin (paging)</a> hızını arttırmaya yarayan bir hafıza bölümüdür. Kısaca TLB olması için sayfalama olmalıdır. Günümüzdeki çoğu bilgisayar mimarisi tarafından desteklenmektedir. TLB kullanılabilmesi için sayfalama (paging) sistemde yapılıyor olmalıdır.</p>
<p>Basitçe, RAM&#8217;in yetersiz olduğu durumlarda hafıza ihtiyacının diskten karşılanmasını sağlayan sanal hafızanın verimli kullanılması için, diskte tutulan veri ve RAM&#8217;de duran veri arasında bir dönüşüm işlemi gerekmektedir. Bu işin hızlanması için dönüşümü TLB üzerinde tutar ve hız artışı sağlarız.</p>
<p>Bu yapıp, disk ile RAM arasında bir <a href="http://www.bilgisayarkavramlari.com/2010/05/21/on-hafiza-cache/">önbellek (cache)</a> olarak düşünmek mümkündür. Basitçe diskte olan bir veriye erişilmek istendiğinde TLB üzerinde bu veri aranır. Şayet veriye ulaşılırsa buna TLB bulma (TLB hit) ismi verilir ve dönüşüm sağlanır. Şayet veri bulunamazsa buna TLB kayıp (TLB miss ) ismi verilir ve sanki TLB hiç yokmuş gibi klasik <a href="http://www.bilgisayarkavramlari.com/2009/05/31/sayfalama-paging/">sayfalama tablosunda (page table)</a> arama işlemi yapılarak bu hafıza sayfasına(page) erişilmeye çalışılır. Elbette bu işlem çok daha maliyetlidir. Dolayısıyla TLB üzerindeki bulma işlemini (hit) arttırmak isteriz.</p>
<p>TLB yapısını, aşağıdaki şekil üzerinden anlamaya çalışalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120410_0917_Translation1.png" alt="" /></p>
<p>Yukarıdaki örnekte, bir sanal adresin, fiziksel adrese dönüşmesi sırasında geçtiği yol gösterilmiştir. Örneğin gelen sanal adres talebimiz, 2 veya 0 ise, bu değerler TLB üzerinden karşılanır. Şayet talep 0 veya 1 ise bu değerler sayfa tablosu üzerinde aranarak karşılanır. Sayfa tablosu üzerindeki arama işlemi, TLB üzerindeki arama işlemine göre çok daha uzun sürmektedir.</p>
<p>Konuyu, Sayfalama (paging) ile birlikte ele almak için, öncelikle sayfalama işlemini hatırlayalım.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120410_0917_Translation2.png" alt="" /></p>
<p>Yukarıda görüldüğü üzere, sayfalama işlemi, programın kendi adresinden, gerçek adrese (fiziksel adres) dönüşümü sırasında kullanılır. Bu sırada, sayfalama yaklaşımı hafızadaki bilgilerin dağılımını tutan bir sayfalama tablosu bulundurur.</p>
<p>Şayet yukarıdaki şekle, TLB ve sanal hafıza (virtual memory) konularını da eklersek, aşağıdaki şekli elde ederiz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120410_0917_Translation3.png" alt="" /></p>
<p>Yukarıdaki yeni şekilde, bir sanal adresin, talep edilmesi durumunda yaşananları anlatmaya çalışalım.</p>
<p>Öncelikle bu adresin sayfa numarası, (ki <a href="http://www.bilgisayarkavramlari.com/2009/05/31/sayfalama-paging/">sayfalama konusundan hatırlanacağı</a> üzere sayfa numarası, adresin sayfa boyuna (page size) bölünmesi ile elde edilir).</p>
<p>Bu sayfa numarası, önce TLB üzerinde aranır. Bulunursa çerçeve numarasına ofset eklenerek hafızadan alınır.</p>
<p>Şayet TLB üzerinde bulunamazsa, TLB kayı (TLB miss) olur ve bu durumda Sayfa Tablosu üzerinde aranır. Şayet sayfa tablosunda bulunursa, yine ofset eklenir ve hafızadaki yerine ulaşılmış olunur.</p>
<p>Şayet Sayfa Tablosu üzerinde de bulunamazsa bu durumda sayfa hatası (Page fault) olur ve bunun anlamı, bu bilginin hafızada olmadığıdır. Artık bilgi diskten aranır ve bulunur. Ardından hafızaya (RAM) yüklenir ve sayfa tablosunda ilgili güncellemeler yapılır.</p>
<p>Yukarıdaki yazıda bazı terminolojik problemleri çözmek için bu notu eklemeyi önemli buluyorum. Bazı kaynaklarda, yukarıda sanal adres (virtual address) olarak geçen terime mantıksal adres (logical address), gerçek adres (real address) olarak geçen terime ise fiziksel adres (physical address) isimleri verilmektedir.</p>
<p><strong>TLB tablosunun güncellenmesi<br />
</strong></p>
<p>Klasik bir TLB tablosunda, bir verinin TLB üzerinde bulunamaması halinde bu veri güncellenir. Yani şayet veri TLB üzerinde bulunuyorsa, bu durumda bir güncellemeye ihtiyaç duyulmaz. Ama bir şekilde TLB kayıp oluşursa (TLB miss), bu durumda talebin Sayfa Tablosundan (Page Table) veya diskten karşılanması halinde TLB tablosu güncellenir.</p>
<p>Ancak daha önce de bahsedildiği üzere TLB aslında bir önbellek olarak düşünülebilir ve klasik önbellek güncelleme algoritmaları veya erişimli önbellek algoritmaları (associative cache) TLB için de kullanılabilir.</p>

<p class="sayac_bilgi">188 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/12/04/translation-lookaside-buffer-tlb-donusum-hafizasi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Çok Çekirdekli İşlemciler (Multi-Core Processors)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/10/05/cok-cekirdekli-islemciler-multi-core-processors/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/10/05/cok-cekirdekli-islemciler-multi-core-processors/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 11:01:32 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[multi-core]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/10/05/cok-cekirdekli-islemciler-multi-core-processors/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar mimarisi konusunda kullanılan bir teknolojidir. İşlemcinin alt çekirdeklerinin oluşturulması ve yükün bu çekirdekler üzerine dağıtılarak, aynı anda işlenmesini ve böylece işlem gücü elde edilmesini hedefler. Çok çekirdekli işlemci mimarisinin anlaşılabilmesi için öncelikle çekirdek (core) kavramını anlamalıyız. Çekirdek, temel olarak bir işlemcinin okuma ve çalıştırma yapan kısmıdır. (read and execute) [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar mimarisi konusunda kullanılan bir teknolojidir. İşlemcinin alt çekirdeklerinin oluşturulması ve yükün bu çekirdekler üzerine dağıtılarak, aynı anda işlenmesini ve böylece işlem gücü elde edilmesini hedefler.</p>
<p>Çok çekirdekli işlemci mimarisinin anlaşılabilmesi için öncelikle çekirdek (core) kavramını anlamalıyız. Çekirdek, temel olarak bir işlemcinin okuma ve çalıştırma yapan kısmıdır. (read and execute)</p>
<p>Klasik bütün işlemciler tek çekirdeklidir. Bunun anlamı, klasik bir işlemcide, tek bir okumadan ve çalıştırmadan sorumlu parça bulunur. Dolayısıyla klasik bir işlemci, aynı anda tek bir işlem çalıştırabilir.</p>
<p>Çok çekirdekli mimarilerde, birden fazla çekirdek (genelde 2 4 veya 6 gibi 2&#8242;nin katları şeklinde) çekirdek, entegre devre olarak bulunur. Bu entegre devre yaklaşımından dolayı, literatürde, CMP (chip multi processor) tabiri de, çok çekirdekli işlemciler için kullanılmaktadır.</p>
<p>Çok çekirdekli işlemciler, oldukça geniş alanlarda kullanılabilir. Örneğin resim işleme, bilimsel verilerin işlenmesi veya dijital sinyal işleme gibi alanlarda kullanılabilirler.  Problemlerin paralelleştirilebilmesi, işlemcideki hız artışı ile doğru orantılıdır. Örneğin, çok çekirdekli bir işlemci, paralel hale getirilemeyen bir problem için bir hız avantajı sağlamayabilir.</p>
<p>Dikkat edilmesi gereken bir nokta, çok çekirdekli mimariler ile, çok işlemcili mimariler arasında fark olduğudur. Çok çekirdek ile kast edilen bir işlemcinin içerisinde birden fazla çekirdek bulunmasıdır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100510_1101_okekirdekli1.png" alt="" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere, Tek bir veriyoluna bağlı çok sayıda çekirdek ve her çekirdeğin kendi içerisinde 1. seviye önbellek (level 1 cache, L1 cache) bulunmakta, 2. seviye önbellek ise, veri yolu üzerinde durmaktadır.</p>
<p>Bu sayede <a href="http://www.bilgisayarkavramlari.com/2010/05/21/on-hafiza-cache/">önbellek açısından (cache),</a> her çekirdek kendi belleğini kullanırken, aynı zamanda, veri yolu üzerinde paylaşılmış bir önbellek kullanımı da mümkündür.</p>

<p class="sayac_bilgi">170 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/10/05/cok-cekirdekli-islemciler-multi-core-processors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flynn Sınıflanırması (Flynn’s Taxonomy)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/10/05/flynn-siniflanirmasi-flynn%e2%80%99s-taxonomy/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/10/05/flynn-siniflanirmasi-flynn%e2%80%99s-taxonomy/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 09:03:54 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[flynn]]></category>
		<category><![CDATA[mimd]]></category>
		<category><![CDATA[misd]]></category>
		<category><![CDATA[simd]]></category>
		<category><![CDATA[sisd]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/10/05/flynn-siniflanirmasi-flynn%e2%80%99s-taxonomy/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Micheal Flynn tarafından 1966 yılında yapılan bu sınıflandırma, bilgisayar mimarilerini 4 ana grup altında toplar. Bu gruplar aşağıdaki şekilde sıralanabilir: SISD (Single Instruction Single Datastream) Tek Komut Tek Veri akışı SIMD (Single Instruction Multiple Datastream) Tek Komut Çok Veri akışı MISD (Multiple Instruction Single Datastream) Çok Komut Tek Veri akışı [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Micheal Flynn tarafından 1966 yılında yapılan bu sınıflandırma, bilgisayar mimarilerini 4 ana grup altında toplar. Bu gruplar aşağıdaki şekilde sıralanabilir:</p>
<ul>
<li>SISD (Single Instruction Single Datastream) Tek Komut Tek Veri akışı</li>
<li>SIMD (Single Instruction Multiple Datastream) Tek Komut Çok Veri akışı</li>
<li>MISD (Multiple Instruction Single Datastream) Çok Komut Tek Veri akışı</li>
<li>MIMD (Multiple Instruction Multiple Datastream) Çok Komut Çok Veri akışı</li>
</ul>
<p>Yukarıdaki bu sınıfların açıklamaları, aşağıda sunulmuştur.</p>
<p><strong>SISD<br />
</strong></p>
<p>Bu sınıfta, tek işlemci ve tek hafıza bulunmaktadır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100510_0903_FlynnSnflan1.png" alt="" /></p>
<p>Yukarıda görüldüğü üzere, tek işlemci bulunmakta, bu tek işlemciye bilgisayarda bulunan veri yolu (BUS) sayesinde komutlar ve veriler akmaktadır. İşlemci bu akan veriler ve komutları alarak, işlenmiş verileri üretmektedir. Bu mimari klasik olarak <a href="http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/">Von Neumann makinesidir</a>.</p>
<p><strong>MISD<br />
</strong></p>
<p>Bu sınıfta, birden fazla işlemci bulunmaktadır. Veri tek bir kaynaktan akmakta ve verinin işlenmiş hali yine tek bir kaynakta toplanmaktadır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100510_0903_FlynnSnflan2.png" alt="" /></p>
<p>Bu anlamda, yukarıdaki işlemci modeli, bir önceki modelde olan SISD modelinde bulunan işlemci kutusunun açılmışı olarak düşünülebilir. Yani kutuya dışarıdan bakan kişinin, sistemden beklentileri ve sisteme etkisi, sanki tek işlemci bulunuyormuş gibidir. Ancak sistemin içerisinde, işlemci kutusu alt işlemciler tarafından desteklenmektedir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100510_0903_FlynnSnflan3.png" alt="" /></p>
<p>Burada unutulmaması gereken, verinin tek olması ancak komutların çoklu olmasıdır. Bu mimari, gerçek uygulamalarda çok kullanılmaz. Biraz daha teorik bir tasarımdır. Bunun en büyük sebebi, kaynakları kullanımda MISD yaklaşımının, MIMD veya SIMD kadar başarılı olamamasıdır.</p>
<p><strong>SIMD<br />
</strong></p>
<p>Şayet veri farklı kaynaklardan geliyor ancak işlemci tek ise ve bu farklı kaynaklardan gelen veri, aynı anda işlemcide işleniyorsa, bu modele SIMD ismi verilir</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100510_0903_FlynnSnflan4.png" alt="" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere, birden fazla veri akışı üzerinde tek komut listesi çalışmaktadır. Bu tek komutlu yaklaşım, SIMD mimarisinde işlemcilere uygun şekilde bölünmelidir.</p>
<p>SIMD mimarisinin en büyük avantajı, büyük, özdeş verilerin işlenmesinde ortaya çıkar. Örneğin resim işleme sırasında <a href="http://www.bilgisayarkavramlari.com/2007/11/24/piksel-benek-imgecik-pixel/">imgecik (pixel)</a> bazlı yapılan işlemlerin dağıtılması ve birden fazla işlemci üzerine aynı komutun verilmesi mümkündür. Örneğin resimin aydınlatılması için, resimde bulunan her <a href="http://www.bilgisayarkavramlari.com/2007/11/24/piksel-benek-imgecik-pixel/">imgeciğin (pixel),</a> belirli oranlarda aydınlatılması isteniyorsa, resimdeki imgecikler farklı işlemcilerde aynı komut ile paralel olarak aydınlatılabilir.</p>
<p>Diğer bir örnek matris çarpımı olabilir. Büyük bir matrisin, farklı işlemcilere bölünmesi ve bu bölünmüş işlemcilere aynı komutun verilmesi sonucunda matris üzerinde çarpma gibi işlemler gerçekleştirilebilir.</p>
<p><strong>MIMD<br />
</strong></p>
<p>Birden çok veri kaynağı, birden çok komut girişi ile çalışmaktadır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100510_0903_FlynnSnflan5.png" alt="" /></p>
<p>Bu mimari modelinde, işlemciler bağımsız olarak ve asenkron olarak çalışabilmektedir. Bunun anlamı, bir işlemcinin diğer işlemcileri beklemesi gerekmemesi ve sonuçların birbirinden bağımsız olarak işlenebilmesidir.</p>
<p>MIMD modelinde, SISD modelinde oluşturulmuş birden fazla makine varmış gibi düşünülebilir.  Bu düşünce, doğru olmakla birlikte, çoklu SISD modeline göre avantajlar vardır. Örneğin işlemcilerin aynı donanım içerisinde olması sayesinde, veri iletişimi kolaylaşabilmektedir.</p>
<p>Zaten MIMD mimarisi de, kendi içerisinde paylaşılmış hafıza (shared memory) ve dağıtılmış hafıza (distributed memory) olarak iki grupta incelenir.</p>
<p>Paylaşılmış hafıza için durum, tek bir hafıza üzerinde çalışan birden fazla işlemcidir. Burada hafızdan kasıt, bilgisayarın <a href="http://www.bilgisayarkavramlari.com/2008/11/07/rastgele-erisilebilir-bellek-random-access-memory-ram/">birincil hafızası (primary memory, veya RAM)</a> olarak düşünülebilir. Aynı problem işlemcilerin ön hafızaları (cache) için de bulunur. Yani işlemcilerin birden fazla önbellek kullanmaları veya tek önbellek üzerinden, birden fazla işlemcinin çalışıyor olması birer tasarım kriteridir.</p>
<p>Paylaşılmış hafıza olarak UMA, COMA veya NUMA mimari alternatifleri bulunur.</p>

<p class="sayac_bilgi">127 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/10/05/flynn-siniflanirmasi-flynn%e2%80%99s-taxonomy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Von Neumann Makinesi</title>
		<link>http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 07:52:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[von neumann]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimleri açısından, von neumann makineleri, günümüz klasik bilgisayarlarının temellerini oluşturur. Bu makine tanımında basitçe bir işlemci, bir hafıza ve giriş / çıkış sistemleri modellenmiştir. Yukarıdaki şekilde görüldüğü üzere, hafıza (memory) ile bir kontrol birimi (control unit) ve bir de aritmetik mantıksal birim (artihmetic logical unit) arasında iletişim kurulmaktadır. Ayrıca [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimleri açısından, von neumann makineleri, günümüz klasik bilgisayarlarının temellerini oluşturur. Bu makine tanımında basitçe bir işlemci, bir hafıza ve giriş / çıkış sistemleri modellenmiştir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100510_0752_VonNeumannM1.png" alt="" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere<a href="http://www.bilgisayarkavramlari.com/2008/11/07/rastgele-erisilebilir-bellek-random-access-memory-ram/">, hafıza (memory</a>) ile bir kontrol birimi (control unit) ve bir de aritmetik mantıksal birim (artihmetic logical unit) arasında iletişim kurulmaktadır. Ayrıca aritmetik mantıksal birim içerisinde bir adet biriktirici bulunmaktadır.</p>
<p>Von neumann makinesi, tasarım olarak, evrensel Turing makinesi (universal Turing Machine) problemlerini çözebilmektedir.</p>
<p>Von Neumann makineleri, teoride &#8221; kayıtlı program &#8221; olarak geçen (stored programm) problemi çözebilmeleri açısından, &#8220;kayıtlı program makinesi&#8221; (stored programm machine) olarak geçmektedir. Bunun anlamı, program tarafından kontrol edilebilen bilgisayarların bir üst seviyesi olarak, programın ve giriş çıkışların kayıt edilebilmesidir.</p>
<p>Von Neumann makinelerinin ayrıca bir üst seviyesi olarak, yeniden programlanabilir makineler (reprogramming) olarak kullanılabilmesidir. Örneğin bir hesap makinesi için geliştirilen cihaz, üzerinde bir program bulundurur. Bu program, hesap işlemlerinin yapıldığı temel özellikleri içerir ve donanımla doğrudan ilişkilidir. Von Neumann makineleri, bu kavramı yıkarak aynı cihaz üzerinden, hesaplama işlemlerinin yapıldığı bir programı tamamen farklı amaçlara hizmet eden bir programla değiştirmeye izin verir. Örneğin bir oyun veya bir tablolama yazılımına geçilmesi cihaz üzerinde ciddi yenileme işlemleri gerektirir.</p>
<p>Yukarıda anlatılan bu yeniden programlama özelliğinin desteklenebildiği ilk bilgisayar tasarımı Von Neumann bilgisayarlarıdır. Bu bilgisayarlar üzerinde hafızada kayıtlı bir program amaca yönelik olarak yüklenebilmektedir. Elbette aynı anda <a href="http://www.bilgisayarkavramlari.com/2007/11/18/cok-islemlik-multi-processing/">birden fazla programın çalışabilmesi (multi processing)</a> çok daha sonradan geliştirilmiştir.</p>

<p class="sayac_bilgi">177 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ön Hafıza (Cache)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/05/21/on-hafiza-cache/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/05/21/on-hafiza-cache/#comments</comments>
		<pubDate>Fri, 21 May 2010 19:23:38 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[işletim sistemleri]]></category>
		<category><![CDATA[önbellek]]></category>
		<category><![CDATA[belady]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[direct mapping]]></category>
		<category><![CDATA[lfu]]></category>
		<category><![CDATA[lru]]></category>
		<category><![CDATA[mru]]></category>
		<category><![CDATA[ram]]></category>
		<category><![CDATA[set associativity]]></category>
		<category><![CDATA[write back]]></category>
		<category><![CDATA[write through]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/05/21/on-hafiza-cache/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının bütün hakları saklıdır ve izinsiz kopyalanması veya alıntı yapılması kanunen koruma altındadır. Bu yazıya dilediğiniz şekilde atıfta bulunabilir (reference) ve bağlantı (link) verebilirsiniz. Bilgisayar bilimlerinde sıklıkla kullanılan ve herhangi bir hafıza işleminin nispeten daha küçük ve daha hızlı dolayısıyla da daha pahalı ilave bir hafızada yapılmasını ifade eden [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p><span style="color:red">Bu yazının bütün hakları saklıdır ve izinsiz kopyalanması veya alıntı yapılması kanunen koruma altındadır. Bu yazıya dilediğiniz şekilde atıfta bulunabilir (reference) ve bağlantı (link) verebilirsiniz.<br />
</span></p>
<p>Bilgisayar bilimlerinde sıklıkla kullanılan ve herhangi bir hafıza işleminin nispeten daha küçük ve daha hızlı dolayısıyla da daha pahalı ilave bir hafızada yapılmasını ifade eden terimdir.</p>
<p>Aslında kelime anlamı olarak Türkçedeki zula kelimesi ile de karşılanabilen cache kelimesi, değerli şeylerin saklandığı yer anlamına gelmektedir. Bilgisayar bilimlerinde ise sık erişilen ve dolayısıyla bizim için daha değerli olan bilgilerin saklandığı yere verilen isimdir.</p>
<p>Kısacası bir ön hafıza (cache) gerçek hafızaya erişmeyi azaltmak ve daha hızlı bir şekilde çözmek için tasarlanır. Gerçek hafızadan daha hızlı ve daha pahalıdır. Gerçek hafızadaki her şeyi içeremez dolayısıyla küçük bir kısmını içerir.</p>
<p>En çok kullanıldığı yerler aşağıdaki şekilde sıralanabilir:</p>
<ul>
<li>İşlemci önbelleği</li>
<li>Disk önbelleği</li>
<li>Web önbelleği</li>
</ul>
<p>Elbette yukarıdakiler dışında farklı alanlarda da veriye erişim hızını arttırmak için önbellekler kullanılabilir.</p>
<p>Örneğin aşağıda, <a href="http://www.bilgisayarkavramlari.com/2008/11/07/rastgele-erisilebilir-bellek-random-access-memory-ram/">RAM (hafıza)</a> ile işlemci (CPU) arasına yerleştirilmiş ve işlemci ön belleği (CPU Cache) ismi verilen erişim şekli gösterilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach1.png" alt="" /></p>
<p>Buradaki amaç, işlemcinin hafızada ihtiyaç duyduğu verilerin bir kısmını önbellekten karşılamasıdır. Benzer şekilde hafızadaki veriler ile disk arasında da önbellek olabilir. Bu durumda bir verinin diskten ihtiyaç duyulması halinde diskten daha hızlı olan ön bellek devreye girerek hafızaya yükleme işlemi gerçekleştirebilir. Elbette burada iki ihtimal vardır:</p>
<p>Hit: isabet, işlemcinin isteğinin önbellekten karşılanması</p>
<p>Miss: kayıp, işlemcinin isteğinin önbellekten karşılanamayarak hafızaya erişim yapılması</p>
<p>Bu sayıların oranlanması ile de aşağıdaki değerler bulunur:</p>
<p>İsabet oranı (hit ratio) = isabet (hit)  / Toplam talep (veya isabet + kayıp)</p>
<p>Kayıp oranı (miss ratio) = kayıp (miss) / Toplam talep (veya isabet + kayıp)</p>
<p>Örneğin 45 hafıza erişim talebinin olduğunu (request) ve bunların 21&#8242;inin önbellekten karşılandığını düşünelim. Bu durumda</p>
<p>Kayıp (miss) = 45 – 21 = 24</p>
<p>İsabet oranı (hit ratio) = 21 / 45 = %47</p>
<p>Kayıp oranı (miss ratio) = 23 / 45 = %53</p>
<p>Olarak hesaplanabilir.</p>
<p><strong>Önbellek yazma politikası (write policy)<br />
</strong></p>
<p>Önbelleklerin birinci görevi, ihtiyaç duyulan verinin hızlı karşılanmasıdır. Ancak bu durum veri okunurken avantaj sağlar. Verinin değiştirilmesi veya yazılması gibi durumlarda önbellekte nasıl bir politika izleneceğine de yazma politikası (write policy) ismi verilir. Buna göre 3 farklı politika izlenebilir:</p>
<p><span style="text-decoration: underline;">Üzerine yazma (write through) :</span> her yazma işlemi, önbellekte bir isabet olsa bile hafızada güncelleme gerektirir. Buna göre önbellekteki veri ile hafızadaki veri birebir yanı olur. Birisindeki değişiklik diğerini etkiler ve verinin iki ayrı kopyası arasında bir eşleşme gerektirmez.</p>
<p><span style="text-decoration: underline;">Geri yazma (write back):</span> Bu yazma politikasında, bir bilginin değiştirilmesi durumunda, bilgi ön bellekte bulunuyorsa, önbellek üzerinde değişiklik yapılır ve hafızadaki kopya hemen değiştirilmez. Dolayısıyla anlık olarak bilginin iki farklı kopyası bulunur. Bilginin iki kopyasının birbirinden farklı olduğunu göstermek için de kirli (dirty) bit kullanılır. Dolayısıyla bu politikada, ön bellek üzerinde ilave bir bite ihtiyaç vardır.</p>
<p>Bu yazma politikasında veriler ön bellekten kaldırılırken hafızadaki veri ile güncellenir. Yani ön bellek sürekli olarak değiştirilmiş veriyi tutar, veri ön bellekten kaldırılıp yerine yeni veri geleceği zaman, bu veri hafızadaki verinin üzerine yazılarak iki kopya aynı hale getirilir.</p>
<p>Bu yazma politikasının hafızayı değiştirmesindeki tutumundan dolayı <span style="text-decoration: underline;">tembel yazma (lazy write)</span> ismi de verilir.</p>
<p>Bu yazma politikasında ayrıca herhangi bir verinin önbellekten kaldırılıp yerine yeni veri gelmesi durumunda iki kere hafıza erişimi gerekir. Birincisi eski verinin hafıza ile güncellenmesi ikincisi ise yeni verinin hafızaya yüklenmesi için. Üzerine yazma politikasında ise sadece tek erişim yeterlidir.</p>
<p><span style="text-decoration: underline;">Yazmama politikası (no-write allocation):</span> bu politikada, önbellek üzerinde bir yazma işlemi yapılmaz. Veri önbellekte sadece okunmak için tutulur ve bir yazma işlemi gerçekleştiğinde bu işlem doğrudan hafızaya yazılır.</p>
<p>Bu durumda önbellekteki verinin doğruluğunda problem olacaktır. Yani hafızadaki veri daha güncel ve önbellekteki veri eski kalmış olacaktır. Bunu belirtmek için önbellek üzerinde bir doğruluk biti (valid bit) kullanılır. Bu bit, verinin değiştiğini ve önbellekteki verinin eski kaldığını belirtir. Herhangi bir şekilde bu değişen veriye okumak için erişim olmazsa önbellekte güncellemeye gerek de kalmaz (örneğin bu veri bir daha hiç erişilmeden önbellekten kaldırılabilir) ancak bir şekilde bu veriye tekrar okumak için erişim olursa bu durumda hafızadaki veri ile güncellenmesi için hafızadan verinin okunup önbelleğe yeni halinin yazılması gerekir.</p>
<p>Bu politikada bir veri değiştirildiğinde ardından gelen yazma işlemlerinin önbellek tarafından karşılanması gerekmez. Ancak bir yazma işleminden sonraki okuma işlemlerinin hafızadan yeni veriyi önbelleğe yüklemesi gerekir.</p>
<p><strong>Önbellek ilişkilendirmesi (Cache Associativity)<br />
</strong></p>
<p>Ön bellek kullanılırken bir verinin önbellek üzerinde nereye yazılacağını belirleyen yöntemlere verilen isimdir. Bu yöntemler temel olarak üç grupta toplanabilir.</p>
<ul>
<li>Doğrudan haritalama (direct mapped cache) yönteminde veri önbellek üzerinde tek bir yere yazılabilir.</li>
<li>Küme ilişkilendirme (set associativity) yönteminde veri önbellek üzerinde birden fazla yere yazılabilir.</li>
<li>Tam ilişkilendirme (full associativity) yönteminde ise veri önbellekteki her yere yazılabilir.</li>
</ul>
<p>Yukarıdaki bu ilişkilendirme yöntemlerini aşağıda daha detaylı açıklamaya çalışalım.</p>
<p><span style="text-decoration: underline;">Doğrudan haritalama (direct mapped cache)<br />
</span></p>
<p>Bu yöntemde, hafızada tutulan veriler ile önbellek adresleri arasında tam bir bağlantı vardır. Örneğin 4 satırdan oluşan bir önbelleğimiz olsun (yani önbelleğimizin kapasitesi 4 veri tutmaya yetiyor). Bu durumda önbelleğin adres için ayrılan bit sayısı 2 olur (2<sup>2</sup> = 4)</p>
<p>Yine örnek olarak hafızadaki verilerin uzunluğu da 8 bit olsun.</p>
<p>En basit doğrudan haritalama için mod alma işlemi kullanılabilir. Yani örneğin adresin son iki bitine göre (yada ilk iki bitine göre) hafızada erişilmek istenen adresi önbellekte adresleyeceğiz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach3.png" alt="" /></p>
<p>Örneğin yukarıdaki şekilde görüldüğü üzere ön bellek 3 sütundan oluşmuştur. Bu sütunların ilki önbellek satır numarasını belirtmeye yarayan ve bir bilginin önbellekte olması durumunda hangi satırda tutulduğunu gösteren sütundur.</p>
<p>Etiket kısmı, önbellekteki verinin aslında hafızadaki gerçek adresini belirten sütundur.</p>
<p>Veri sütunu ise önbellekte duran veridir. Bilginin önbellek tarafından karşılanması durumunda buradaki veri sütununda bulunan veri okunur.</p>
<p>Yukarıda anlatıldığı üzere kullanılan yazma politikasına göre önbellekte ilave sütunlar bulunabilir (kirli (dirty) veya doğru (valid) bitleri gibi).</p>
<p>Örneğin adres olarak tutulan veri 8 bit uzunluğunda olsun ve önbellekte bu verinin ilk iki bitine göre indeksleme yapılıyor olsun.</p>
<p>Örnek hafıza erişimlerini aşağıdaki şekilde ele alalım:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 103px;"></col>
<col style="width: 77px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Hafıza adresi</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Veri</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">11010100</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">www.</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">10101001</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">bilgisayar</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">00010101</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">kavramlari</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">01001101</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">.com</td>
</tr>
</tbody>
</table>
</div>
<p>Bu verilerin ilk iki bitleri birbirinden farklıdır ve hepsi önbellekte farklı sıralara yerleştirilecektir. Bu verilerin yerleştirilmiş hali aşağıdadır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach5.png" alt="" /></p>
<p>Yukarıda görüldüğü üzere, veriler önbellek üzerinde doğru yerlere yerleştirilmiş ve etiket kısmında adresi tamamlayıcı bilgiler bulunmaktadır. Bu yerleştirme işleminden sonra herhangi bir veriye erişilmek istendiğinde önbellek şu şekilde çalışır:</p>
<p>Örneğin erişilecek hafıza adresi 01001101 olsun.</p>
<p>Bu durumda ilk iki bitine bakılacak ve 01 indeksinde bulunan etiket kontrol edilecektir.</p>
<p>Buradaki etiket değeri ulaşılmak istenen adresin son 6 biti ile aynı olduğu için ( 001101 = 001101 olduğu için) verinin önbellekte bulunduğuna karar verilip hafıza erişimi önbellekten karşılanacaktır ve veri olarak &#8220;.com&#8221; işlemciye iletilecektir.</p>
<p>Örneğin erişilecek hafıza adresi 01001111 olsun.</p>
<p>Bu durumda ilk iki bitine bakılacak ve 01 indeksinde bulunan etiket kontrol edilecektir. Bu etiket ulaşılmak istenen hafıza adresi ile uyuşmamaktadır ( 001101 != 001111 olduğu için).</p>
<p>Dolayısıyla veri önbellekte olmadığı için verinin hafızadan karşılanması gerekir. Hafızadan karşılanan bu veri, önbellek değiştirme algoritmasına göre (aşağıda anlatılacaktır) önbellekte bir değiştirmeye sebep olur veya olmaz ancak her halükarda bir hafıza erişimi gerekecektir.</p>
<p>Örneğin hafıza erişiminin ardından verinin değiştirileceğini düşünelim. Bu durumda önbellekteki 01 indeksinde olan veri değiştirilecek ve hafızadan yüklenen veri bu indekse yazılacaktır. Doğrudan erişim algoritmasında verinin yazılabileceği tek adres bulunur.</p>
<p>Doğrudan haritalama yöntemini örnek bir şekil üzerinden gösterecek olursak:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach7.png" alt="" /></p>
<p>Yukarıda görülen şekilde hafızada, örnek adresler verilmiştir. Elbette 8 bitlik hafızada daha fazla adres vardır ancak yukarıdaki temsili şeklin amacı durumu anlatmak olduğu için ilk iki biti aynı olan ikişer adres üzerinden örnek gösterilmiştir.</p>
<p>Yukarıda görüldüğü üzere hafızadaki adresler doğrudan önbellek üzerinde tek bir indekse haritalanmış ve birden fazla hafıza adresi aynı indekse haritalanmış durumdadır.</p>
<p><span style="text-decoration: underline;">Küme ilişkilendirme (Set Associativity)<br />
</span></p>
<p>Bu erişim yönteminde bir önceki doğrudan erişimden farklı olarak veri kesin ve net bir şekilde bir yere eklenmez.  Bunun yerine bir bilginin önbellek üzerinde gidebileceği birden fazla yer bulunur.</p>
<p>Bu küme ilişkilendirme yönteminde bir bilginin önbellek üzerinde gidebileceği alana göre sayılar belirtilir. Örneğin ön bellek üzerinde 2 farklı yere eklenebiliyorsa 2 yönlü küme ilişkilendirme (2-way set associativity) veya 4 farklı yere erişilebilirse dört yönlü küme ilişkilendirme (4-way set associativity) ismi verilir. Bu durumu aşağıdaki örnek üzerinden anlamaya çalışalım.</p>
<p>Örneğimizde bir önceki örnekle aynı yapıyı kullanalım ancak farklı olarak veri, hafıza adresinin ilk iki biti ve ilk iki biti +1 indekslerine yazılabilsin.</p>
<p>Yani bir bilgi aşağıdaki iki adresten birisinde indekslenecektir:</p>
<p>A : ilk iki bit değerindeki indeks</p>
<p>B: (ilk iki bit + 1) mod önbellek boyutu değerindeki indeks.</p>
<p>Bu durumda erişim aşağıdaki şekilde haritalanmış olacaktır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach9.png" alt="" /></p>
<p>Yukarıda görüldüğü üzere ilk iki bitine göre veri hem bu adrese hem de bu adresin bir sonraki adresine haritalanmıştır. Bu durumu aşağıdaki tablo ile de gösterebiliriz:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 103px;"></col>
<col style="width: 85px;"></col>
<col style="width: 85px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Hafıza adresi</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Önbellek 1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Önbellek 2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">00</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">00</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">01</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">01</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">01</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">10</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">10</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">10</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">11</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">11</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">11</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">00</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki tabloda da gösterildiği üzere bir hafıza adresi iki farklı önbellek adresi ile haritalanmıştır.</p>
<p>Bu adresleme için örnek veri erişim tablomuz aşağıdaki şekilde olsun:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 103px;"></col>
<col style="width: 77px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Hafıza adresi</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Veri</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">11010100</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">www.</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">10101001</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">bilgisayar</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">10010101</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">kavramlari</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">01001101</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">.com</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">11010101</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Sadi</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">00101111</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Evren</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıda verilen sırayla erişimi aşağıdaki şekiller üzerinden açıklamaya çalışalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach11.png" alt="" /></p>
<p>Yukarıdaki şekilde, daha önceki doğrudan haritalamadan farklı olarak yön (way) bitleri tutulmuştur. Bu bitlerin amacı bu indekste bulunan verinin aslında hangi yönden geldiğini tutmaktır. Örneğin 11 indeksine, 11 veya 10 yönünden veri yazılabilir bu durumda verinin hafıza adresini tam olarak bulabilmek için hangi yönden verinin yazıldığı tutulmalıdır.</p>
<p>İlk olarak 11 indeksine veriyi yerleştiriyoruz. Ardından gelen 10101001 adresindeki veri ilk iki biti itibariyle 10 adresine yerleştiriliyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach13.png" alt="" /></p>
<p>Sonraki verimiz 10010101 adresinde. Bu verinin yerleştirileceği ilk adres, 10 indeksi dolu, 2 yönlü haritalama kullandığımız için bir sonraki alternatif adrese bakıyoruz ve 11 adresi kontrol ediliyor. Bu adres de dolu olarak görülüyor. Sonuçta önbellek üzerinde yerleştirilebilir bütün alanlar dolu olduğu için önbellek değiştirme algoritması devreye giriyor ve önbellekteki bilgilerden birisinin değiştirilmesi gerekiyor. Örneğin kullanacağımız değiştirme algoritması FIFO (ilk giren ilk çıkar (first in first out)) olsun. Bu durumda 10 ve 11 adreslerinden eski olanı ile yeni gelen veri değiştirilecektir. Şu anda eski olan bilgi 11 adresindeki bilgidir dolayısıyla önbelleğin yeni hali aşağıdaki şekilde olacaktır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach15.png" alt="" /></p>
<p>Yukarıdaki önbellek değiştirme (cache replacement) işleminin ardından 01001101 adresine erişim yapılıyor. Bu adres boş olduğu için ön bellek burada bilgiyi tutabilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach17.png" alt="" /></p>
<p>Ardından gelen 11010101 erişimi ise yine önbellekte dolu olan indekse yapılmaktadır. Ancak 2 yönlü  kümeleme kullanıldığı için veriyi diğer alternatifi olan ve şu anda boş olan 00 indeksine koyabiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach19.png" alt="" /></p>
<p>Sonraki erişim 00101111 erişimidir. Burada yine FIFO önbellek değiştirme algoritması (cache replacement algorithm) gereği 00 ve 01 indekslerinden önce girenin değiştirilmesi gerekir. Bu bilgilerden 01 indeksindeki veri daha önce önbelleğe alındığı için veri buraya yerleştirilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach21.png" alt="" /></p>
<p>Yukarıdaki önbellek yerleştirilmesinden sonra herhangi bir bilgiye erişilmek istendiğinde ilk iki bitine bakılır, ardından bu iki bitin girebileceği indeksler taranır.</p>
<p>Örneğin erişilmek istenen veri 11010101 adresinde olsun. Bu durumda ilk iki bite bakılıp 11 değeri ile arama yapılacak. 11 değeri ise 2 yönlü küme ilişkilendirmesi gereği 11 ve 00 adreslerinde tutulabilecek bilgidir. Bu durumda önbellekte iki yere de bakılacak 00 indeksindeki yön + etiket bilgisi aranan adresin bu indekste olduğunu gösterecek ve veri buradan karşılanacaktır.</p>
<p>Küme ilişkilendirme yöntemlerinde, verinin birden fazla yere yazılabilmesi, veriye erişim sırasında bütün bu alanların aranmasını gerektirir. Dolayısıyla önbellek üzerinde birden fazla erişime sebep olarak belki de önbellekte hiç tutulmayan bir veri için uzun süreli bir arama ile sonuçlanabilir.</p>
<p>Küme ilişkilendirme yöntemlerinin avantajı ise hiç erişilmeyen hafıza alanlarının önbellekte durmasını engellemesidir. Örneğin yukarıdaki şekil için, 00 ile başlayan hafıza alanına uzun süre hiç erişim olmayacağını düşünelim. Bu durumda doğrudan haritalama (Direct mapping) yöntemi bu önbellek alanını hiçbir zaman kullanmaz. Oysaki küme ilişkilendirme yönteminde alternatif bir önbellek indeksi bu alanı kullanabilir. Böylelikle önbelleğin daha verimli kullanılması sağlanır.</p>
<p><span style="text-decoration: underline;">Bütün küme ilişkilendirme (full set associativity)<br />
</span></p>
<p>Bu yaklaşımda önbellekteki her indekste her adres durabilir. Yani bir önceki örnekte iki yönlü küme ilişkilendirme sırasında bir hafıza adresi, sadece iki indeksten birisine gidebilirken şimdi bütün önbelleğe yerleştirilebilir. Bu durumda önbellekteki arama süresi uzarken, önbellekte atıl kalan indeks miktarı azaltılmış olunur.</p>
<p><strong>Önbellek değiştirme algoritmaları (Cache replacement algorithms)<br />
</strong></p>
<p>Bu algoritmaların amacı, önbellek üzerinde küme ilişkilendirilmesi kullanıldığında ve verinin önbellekte birden fazla alana yazılabileceği durumlarda nereye yazılacağını belirlemektir.</p>
<p>Temel olarak aşağıdaki algoritmalar en bilinenleri olarak sayılabilir:</p>
<p>FIFO , first in first out , ilk giren ilk çıkar</p>
<p>LRU, least recently used, en eski erişilen</p>
<p>LFU, least frequently used, en seyrek erişilen</p>
<p>MRU, most recently used, en son erişilen</p>
<p>Belady&#8217;s, Belady&#8217;s algorithm, Belady algoritması</p>
<p>Yukarıdaki bu algoritmaları sırasıyla örnek üzerinden anlatmaya çalışalım. Örneğimizdeki önbelleğin iki indeksi bulunsun ve bütün küme ilişkilendirmesi (fully set associative) yapısında olsun. Buna göre aşağıdaki veriler önbelleğe geldiğinde sırasıyla yukarıdaki değiştirme algoritmalarının nasıl çalıştığını görelim:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 103px;"></col>
<col style="width: 77px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Hafıza adresi</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Veri</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">11010100</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">www.</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">10101001</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">bilgisayar</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">00010101</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">kavramlari</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">01001101</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">.com</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki verileri aşağıdaki önbellek yapısına sırasıyla yerleştireceğiz. 2 satırdan oluşan önbelleği indekslemek için tek bit yeterlidir. Bu durumda hafıza adresinin ilk bitini önbellek indekslemesi için kullanacağız.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach23.png" alt="" /></p>
<p>Bu durumda yukarıdaki ön bellek üzerinde bütün küme ilişkilendirme kullanılacaktır. Aslında önbellek iki satırdan oluştuğu için 2 yönlü küme ilişkilendirme de denilebilir.</p>
<p><span style="text-decoration: underline;">FIFO (First in first out, ilk giren ilk çalışır)<br />
</span></p>
<p>Bu algoritmada, önbellekte bir bilgi yazılacağı sırada, önbelleğe ilk girmiş, en eski verinin üzerine yazılması tercih edilir.</p>
<p>Yukarıdaki verilere erişimi sıra ile aşağıdaki şekiller üzerinden anlamaya çalışalım. İlk erişim 11010100 adresine yapılıyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach25.png" alt="" /></p>
<p>Bu adres 1 ile başladığı için 1. İndekse yerleştiriyoruz.  Ardından gelen veri de 1 ile başladığı için 1. Adrese yerleşmesi gerekiyor ancak bu adres dolu ve 0. Adres boş, o halde boş olan yere yerleştiriliyor:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach27.png" alt="" /></p>
<p>Şimdi gelen veri ise hem 0 hem de 1 e yerleşebilir (bütün küme ilişkilendirmesi olduğu için) dolayısıyla FIFO devreye giriyor ve en eski olan &#8220;www.&#8221; Bilgisi kaldırılıp yerine yazılıyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach29.png" alt="" /></p>
<p>Sonraki veri yine iki indekse de yazılabilecek durumda ve veri en eski olan &#8220;bilgisayar&#8221;&#8216;ın üzerine yazılıyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach31.png" alt="" /></p>
<p><span style="text-decoration: underline;">LRU (Least Recently Used, En Eski Erişilen)<br />
</span></p>
<p>Bu önbellek değiştirme algoritmasında amaç, önbellekte yapılan erişimleri takip etmek ve en geç erişilmiş olan veriyi değiştirmektir. Örneğimizi yine yukarıdaki gibi 2 satırlı bir önbellek üzerinden ve aşağıdaki erişim sırasıyla takip etmeye çalışalım:</p>
<p>1010 1010</p>
<p>0100 0100</p>
<p>1010 1010</p>
<p>1101 1111</p>
<p>0100 0100</p>
<p>Yukarıdaki bu erişim sıralarına göre önbellek üzerindeki yerleşimler aşağıdaki şekilde olacaktır. İlk gelen iki veri sırasıyla önbelleğe yerleştirilecektir, buraya kadar herhangi bir değiştirme algoritmasına ihtiyaç duyulmaz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach33.png" alt="" /></p>
<p>Ardından 1. İndekste bulunan veriye ikinci kere erişilir. Buradan anlaşılacağı üzere en son erişilen veri ikinci satırdaki veridir. Yeni gelen veri en eski erişilmiş olan verinin üzerine yazılır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach35.png" alt="" /></p>
<p>Şu anda en son erişilen veri yeni yazdığımız veridir ve yeni gelen veri diğer verinin üzerine yazılır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach37.png" alt="" /></p>
<p>Görüldüğü üzere bu algoritmada, her zaman için en eski erişilmiş olan verinin üzerine yeni gelen veri yazılmaktadır.</p>
<p><span style="text-decoration: underline;">LFU (Least frequently used, en nadir kullanılan veya en seyrek kullanılan)<br />
</span></p>
<p>Bu algoritmada amaç ön bellekte bulunan verilere yapılan erişim miktarlarını saymak ve bu erişim miktarlarından en az olanını değiştirmektir.</p>
<p>Bu durumu yine bir önceki alt başlıkta incelediğimiz örnek üzerinden anlamaya çalışalım.</p>
<p>1010 1010</p>
<p>0100 0100</p>
<p>1010 1010</p>
<p>1101 1111</p>
<p>0100 0100</p>
<p>Yukarıdaki bu erişim sıralarına göre önbellek üzerindeki yerleşimler aşağıdaki şekilde olacaktır. İlk gelen iki veri sırasıyla önbelleğe yerleştirilecektir, buraya kadar herhangi bir değiştirme algoritmasına ihtiyaç duyulmaz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach39.png" alt="" /></p>
<p>Ardından 1. İndekste bulunan veriye ikinci kere erişilir. Buradan anlaşılacağı üzere en son erişilen veri ikinci satırdaki veridir. Yeni gelen veri en az erişilmiş olan verinin üzerine yazılır. Burada en az erişilen veri 0. İndekste olan veridir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach41.png" alt="" /></p>
<p>Yeni yüklenen veri, şu andaki en az erişilmiş olan veridir. Dolayısıyla değiştirme işlemi yine 0. Satırdaki veri üzerine yapılır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach43.png" alt="" /></p>
<p>Görüldüğü üzere değiştirme işlemi sürekli olarak, o ana kadar en az erişilen önbellek alanında olmaktadır.</p>
<p><span style="text-decoration: underline;">MRU (Most Recently Used, En sık kullanılan)<br />
</span></p>
<p>Bu değiştirme algoritmasında amaç en son erişilen veriyi değiştirmektir. Bu algoritma ilk başta çok anlamlı gelmeyebilir, sonuçta önbellekteki en taze bilgi en son erişilen bilgidir ve dolayısıyla işlemcinin bir sonraki adımda erişme ihtimali yüksek olan veridir.</p>
<p>Ancak bazı durumlarda anlamlı olabilir. Örneğin bir dosyadan sürekli olarak okuma yapıldığını veya bir sıkıştırma algoritmasının büyük bir dosyayı açmak için uğraştığını dolayısıyla hafızada yüklü bu dosyanın sürekli işlemci üzerinde işlendiğini ve işlenen bir veriye bir daha geri dönülmeyeceğini düşünün.</p>
<p>Örneğin 100MB boyutundaki sıkıştırılmış bir dosyayı açmak istiyoruz. Bu durumda dosyadan okunan ve işlenen bir bilgi kısmı açılacak ve işlemcinin dosyanın bu kısmı ile olan işi bitecektir.</p>
<p>Bundan sonraki adımlarda önbelleğe yüklenen verilerin tamamı taze olacak ve daha önceden yüklenen bir veriye ihtiyaç duyulmayacaktır.</p>
<p>Bu durumda önbelleğin bir daha kullanılmayacak veriler ile işgal edilmesi yerine önbellek üzerinde en son erişilen verinin değiştirilmesi ve diğer işlemlerin önbellek üzerinde kullandıkları verilerin daha sonraki erişimler için saklanması mantıklı olur.</p>
<p>Bu algoritmanın çalışmasını yine bir örnek üzerinden inceleyelim.</p>
<p>1010 1010</p>
<p>0100 0100</p>
<p>1010 1010</p>
<p>1101 1111</p>
<p>0100 0100</p>
<p>Yukarıdaki bu erişim sıralarına göre önbellek üzerindeki yerleşimler aşağıdaki şekilde olacaktır. İlk gelen iki veri sırasıyla önbelleğe yerleştirilecektir, buraya kadar herhangi bir değiştirme algoritmasına ihtiyaç duyulmaz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach45.png" alt="" /></p>
<p>Ardından 1. İndekste bulunan veriye ikinci kere erişilir. Buradan anlaşılacağı üzere en son erişilen veri ikinci satırdaki veridir. Yeni gelen veri en son erişilmiş olan verinin üzerine yazılır. Burada en az erişilen veri 1. İndekste olan veridir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach47.png" alt="" /></p>
<p>Yeni yüklenen veri, şu andaki en son erişilmiş olan veridir. Gelen erişim talebi ise zaten önbellekte bulunan veridir ve herhangi bir değiştirme işlemi gerekmeden çalışma sonuçlanır.</p>
<p><span style="text-decoration: underline;">Belady&#8217;s Algorithm (Belady algoritması)<br />
</span></p>
<p>Teorik olarak tanımlı olan bu algoritmanın gerçekte uygulanması mümkün değildir. Bu algoritma temel olarak ileride en çok erişilecek hafıza adreslerini önbellekte tutmayı hedefler. Elbette gerçekte bir çalışma olmadan ileride neyin çalışacağı bilinemeyeceği için de bu algoritmanın kullanılması imkansızdır.</p>
<p>Yine bir örnek üzerinden algoritmanın çalışmasını inceleyelim:</p>
<p>1010 1010</p>
<p>0100 0100</p>
<p>1010 1010</p>
<p>1101 1111</p>
<p>0100 0100</p>
<p>Yukarıdaki bu erişim sıralarına göre önbellek üzerindeki yerleşimler aşağıdaki şekilde olacaktır. İlk gelen iki veri sırasıyla önbelleğe yerleştirilecektir, buraya kadar herhangi bir değiştirme algoritmasına ihtiyaç duyulmaz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach49.png" alt="" /></p>
<p>Ardından 1. İndekste bulunan veriye ikinci kere erişilir. Daha sonra gelen erişimler incelendiğinde sıradaki erişim olan 11011111, şu anda 1. İndekste olan değer ile değiştirilmelidir çünkü 0100 0100 adresine ileride erişim olacaktır ve bu bilgi ile değiştirilmesi durumunda ileride yine bir önbellek değiştirme işlemi gerekecektir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052110_1923_nHafzaCach51.png" alt="" /></p>
<p>Görüldüğü üzere ileride yapılacak değişiklik önceden hesaplanmış ve bunu engellemek için en makul değişiklik yapılmıştır.</p>
<p>Sonuçta bu algoritma ile her zaman en az önbellek kayıp oranı (cache miss) yakalanır.</p>
<p><strong>Kaynakça<br />
</strong></p>
<p>Aşağıdaki kitaplar kaynak olarak kullanılmıştır.</p>
<ul>
<li>Morris Mano, Computer System Architecture</li>
<li>Tanenbaum, Structured Computer Organization</li>
<li>J. Hayes, Computer Architecture and Organization</li>
<li>R. Williams, Computer System Architecture</li>
<li>D.A. Patterson, J.L. Hennessy, Computer Organization and Design</li>
<li>V.C. Hamacher, Z. Vranesic, S. G. Zaky, Computer Organization</li>
</ul>

<p class="sayac_bilgi">478 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/05/21/on-hafiza-cache/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Turing Makinesi (Turing Machine)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 13:55:12 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Bilgisayar Standartları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[Dosya Organizasyonu (File Organisation)]]></category>
		<category><![CDATA[işletim sistemleri]]></category>
		<category><![CDATA[Mantık Devreleri (Logic Circuits)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Sistem Programlama (System Programming)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[Turing]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2681</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinin önemli bir kısmını oluşturan otomatlar (Automata) ve Algoritma Analizi (Algorithm analysis) çalıştırmalarının altındaki dil bilimin en temel taşlarından birisidir.1936 yılında Alan Turing tarafından ortaya atılan makine tasarımı günümüzde pekçok teori ve standardın belirlenmesinde önemli rol oynar. Turing Makinesinin Tanımı Basitçe bir kafadan (head) ve bir de teyp bandından [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinin önemli bir kısmını oluşturan <a href="http://www.bilgisayarkavramlari.com/category/automata-otomatlar/">otomatlar (Automata) </a>ve <a href="http://www.bilgisayarkavramlari.com/category/algoritma-analizi-teory-of-algorithms/">Algoritma Analizi (Algorithm analysis) </a>çalıştırmalarının altındaki dil bilimin en temel taşlarından birisidir.1936 yılında Alan Turing tarafından ortaya atılan makine tasarımı günümüzde pekçok teori ve standardın belirlenmesinde önemli rol oynar.</p>
<p><strong>Turing Makinesinin Tanımı</strong></p>
<p>Basitçe bir kafadan (head) ve bir de teyp bandından (tape) oluşan bir makinedir.</p>
<p><img class="alignnone size-full wp-image-2683" title="turingtape" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingtape.jpg" alt="turingtape" width="425" height="148" /></p>
<p>Makinede yapılabilecek işlemler</p>
<ul>
<li>Yazmak</li>
<li>Okumak</li>
<li>Bandı ileri sarmak</li>
<li>Bandı geri sarmak</li>
</ul>
<p>şeklinde sıralanabilir.</p>
<p><strong>Chomsky hiyerarşisi ve Turing Makinesi</strong></p>
<p>Bütün teori bu basit dört işlem üzerine kurulmuştur ve sadece yukarıdaki bu işlemleri kullanarak bir işin yapılıp yapılamayacağı veya bir dilin bu basit 4 işleme indirgenip indirgenemeyeceğine göre diller ve işlemler tasnif edilmiştir.</p>
<p><img class="alignnone size-full wp-image-2682" title="turingkumesi" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingkumesi.jpg" alt="turingkumesi" width="496" height="359" /></p>
<p>Bu sınıflandırma yukarıdaki venn şeması ile gösterilmiştir. Aynı zamanda <a href="http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/">chomsky hiyerarşisi (chomsky hierarchy)</a> için 1. seviye (type-1) olan ve Turing makinesi ile kabul edilebilen diller bütün tip-2 ve tip-3 dilleri yani içerk bağımsız dilleri ve düzenli dilleri kapsamaktadır. Ayrıca ilave olarak içerik bağımsız dillerin işleyemediği (üretemediği veya parçalayamadığı (parse) ) a<sup>n</sup>b<sup>n</sup>c<sup>n</sup> şeklindeki kelimeleri de işleyebilmektedir.  Düzenli ifadelerin işleyememesi konusunda bilgi için <a href="http://www.bilgisayarkavramlari.com/2009/03/22/duzenli-ifadelerde-pompalama-onsavi-pumping-lemma-for-regular-expressions/">düzenli ifadelerde pompalama savı (pumping lemma in regular expressions)</a> ve <a href="http://www.bilgisayarkavramlari.com/2009/03/22/icerik-bagimsiz-gramerler-icin-pompalama-onsavi-pumping-lemma-for-context-free-grammers/">içerik bağımsız dillerin işlemeyemesi için de içerik bağımsız dillerde pompalama savı (pumping lemma for CFG)</a> başlıklı yazıları okuyabilirsiniz.</p>
<p><strong>Turing Makinesinin Akademik Tanımı</strong></p>
<p>Turing makineleri literatürde akademik olarak aşağıdaki şekilde tanımlanır:</p>
<p><img class="alignnone size-full wp-image-2685" title="turing_akademik" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing_akademik.jpg" alt="turing_akademik" width="167" height="24" /></p>
<p>Burada M ile gösterilen makinenin parçaları aşağıda listelenmiştir:</p>
<p>Q sembolü sonlu sayıdaki durumların <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">kümesidir</a>. Yani makinenin işleme sırasında aldığı durumardır.</p>
<p>Γ sembolü dilde bulunan bütün harfleri içeren alfabeyi gösterir. Örneğin ikilik tabandaki sayılar ile işlem yapılıyorsa {0,1} şeklinde kabul edilir.</p>
<p>Σ sembolü ile makineye verilecek girdiler (input)<a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/"> kümesi</a> gösterilir. Girdi <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">kümesi</a> dildeki harfler dışında bir sembol taşıyamayacağı için Σ <span class="b">⊆ </span>Γ demek doğru olur.</p>
<p>δ sembolü dilde bulunan ve makinenin çalışması sırasında kullanacağı geçişleri (transitions) tutmaktadır.</p>
<p><span class="b">◊ sembolü teyp bandı üzerindeki boşlukları ifade etmektedir. Yani teyp üzerinde hiçbir bilgi yokken bu sembol okunur.<br />
</span></p>
<p>q<sub>0</sub> sembolü makinenin başlangıç durumunu (state) tutmaktadır ve dolayısıyla q<sub>0</sub> <span class="b">⊆</span> Q olmak zorundadır.</p>
<p>F sembolü makinenin bitiş durumunu (state) tutmaktadır ve yine F <span class="b">⊆ Q olmak zorundadır. </span></p>
<p><strong><span class="b">Örnek Turing Makinesi</span></strong></p>
<p><span class="b">Yukarıdaki sembolleri kullanarak örnek bir Turing makinesini aşağıdaki şekilde inşa edebiliriz. </span></p>
<p><span class="b">Örneğin basit bir kelime olan a* <a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/">düzenli ifadesini (regular expression)</a> Turing makinesi ile gösterelim ve bize verilen aaa şeklindeki 3 a yı makinemizin kabul edip etmediğine bakalım. </span></p>
<p><span class="b">Tanım itibariyle makinemizi aşağıdaki şekilde tanımlayalım:</span></p>
<p>M = { {q<sub>0</sub>,q<sub>1</sub>} , { a } , { a,x } , { q<sub>0</sub> a→a R q<sub>0</sub> , q<sub>0</sub> x→x L q<sub>1</sub>} , q<sub>0</sub> , x , q<sub>1</sub> }</p>
<p>Yukarıdaki bu makineyi yorumlayacak olursak:</p>
<p>Q değeri olarak   {q<sub>0</sub>,q<sub>1</sub>} verilmiştir. Yani makinemizin ik idurumu olacaktır.</p>
<p>Γ değeri olarak { a,x } verilmiştir. Yani makinemizdeki kullanılan semboller a ve x&#8217;ten ibarettir.</p>
<p>Σ değeri olara {a} verilmiştir. Yani makinemize sadece a girdisi kabul edilmektedir.</p>
<p>δ değeri olarak iki geçiş verilmiştir { q<sub>0</sub> a→a R q<sub>0</sub> , q<sub>0</sub> x→x L q<sub>1</sub>} buraadki R sağa sarma L ise sola sarmadır ve görüleceği üzere Q değerindeki durumlar arasındaki geçişleri tutmaktadır.</p>
<p><span class="b">◊ değeri olarak x sembolü verilmiştir. Buradan x sembolünün aslında boş sembolü olduğu ve bantta hiçbir değer yokken okunan değer olduğu anlaşılmaktadır.<br />
</span></p>
<p>q<sub>0</sub> ile makinenin başlangıç durumundaki hali belirtilmiştir.</p>
<p>F değeri olarak q<sub>1</sub> değeri verilmiştir. Demek ki makinemiz q<sub>1</sub> durumuna geldiğinde bitmektedir (halt) ve bu duruma gelmesi halinde bu duruma kadar olan girdileri kabul etmiş olur<span class="b">. </span></p>
<p>Yukarıdaki bu tanımı görsel olarak göstermek de mümkündür:</p>
<p><img class="alignnone size-full wp-image-2686" title="turingornek" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingornek.jpg" alt="turingornek" width="432" height="225" /></p>
<p><strong><span class="b"><br />
</span></strong></p>
<p><span class="b">Yukarıdaki bu temsili resimde verilen turing makinesi çizilmiştir.</span></p>
<p><span class="b">Makinemizin örnek çalışmasını ve bant durumunu adım adım inceleyelim. </span></p>
<p><span class="b">Birinci adımda bandımızda aaa (3 adet a) yazılı olduğunu kabul edelim ve makinemizin bu aaa değerini kabul edip etmeyeceğini adım adım görelim. Zaten istediğimiz de aaa değerini kabul eden bir makine yapabilmekti.</span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2687" title="turing1" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing1.jpg" alt="turing1" width="487" height="412" /></span></p>
<p><span class="b">Yukarıdaki ilk durumda bant üzerinde beklenen ve kabul edilip edilmeyeceği merak edilen değerimiz bulunuyor. Makinemizin kafasının okuduğu değer a sembolü. Makinemizin geçiş tasarımına göre q<sub>0</sub> halinde başlıyoruz ve a geldiğinde teybi sağa sarıp yine q<sub>0</sub> durumunda kalmamız gerekiyor.</span></p>
<p><span class="b"><br />
</span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2689" title="turing21" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing21.jpg" alt="turing21" width="509" height="407" /></span></p>
<p>Yeni durumda kafamızın okuduğu değer banttaki 2. a harfi ve bu durumda yine <span class="b">q<sub>0</sub> </span> durumundayken teybi sağa sarıp yine <span class="b">q<sub>0</sub> </span> durumunda kalmamız tasarlanmış<span class="b"> </span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2690" title="turing3" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing3.jpg" alt="turing3" width="515" height="380" /></span></p>
<p>3. durumda kafamızın okuduğu değer yine a sembolü olmakta ve daha önceki 2 duruma benzer şekilde <span class="b">q<sub>0</sub> </span> durumundayken a sembolü okumanın sonucu olarak teybi sağa sarıp <span class="b">q<sub>0</sub> </span>durumunda sabit kalıyoruz.</p>
<p><span class="b"><img class="alignnone size-full wp-image-2691" title="turing4" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing4.jpg" alt="turing4" width="487" height="364" /></span></p>
<p>4. adımda teypten okuduğumuz değer boşluk sembolü x oluyor. Bu değer makinemizin tasarımında <span class="b">q<sub>1</sub> </span><span class="b"> </span>durumuna gitmemiz olarak tasarlanmış ve teybe sola sarma emri veriyoruz.</p>
<p><span class="b"><img class="alignnone size-full wp-image-2692" title="turing5" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing5.jpg" alt="turing5" width="586" height="322" /></span></p>
<p><span class="b">Makinenin son durumunda </span><span class="b">q<sub>1</sub> </span><span class="b"> durumu makinenin kabul ve bitiş durumu olarak tasarlanmıştı ( makinenin tasarımındaki F kümesi) dolayısıyla çalışmamız burada sonlanmış ve giriş olarak aaa girdisini kabul etmiş oluyoruz.</span></p>
<p><strong><span class="b">2. Örnek</span></strong></p>
<p><span class="b">Hasan Bey&#8217;in sorusu üzerine bir örnek makine daha ekleme ihtiyacı zuhur etti. Makinemiz {a,b} sembolleri için çalışsın ve ilk durum olarak bandın en solunda başlayarak bantta bulunan sembolleri silmek için tasarlansın. Bu tasarımı aşağıdaki temsili resimde görülen otomat ile yapabiliriz:</span></p>
<p><span class="b"><img class="alignnone" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/turing_silici.jpg" alt="" width="454" height="123" /></span></p>
<p><span class="b">Görüldüğü üzere makinemizde 4 durum bulunuyor, bunlardan en sağda olan h durumu bitişi (halt) temsil ediyor. Şimdi bu makinenin bir misal olarak &#8220;aabb&#8221; yazılı bir bantta silme işlemini nasıl yaptığını adım adım izah etmeye çalışalım. </span></p>
<p><span class="b">Aşağıda, makinenin her adımda nasıl davranacağı bant üzerinde gösterilmiş ve altında açıklanmıştır. Sarı renge boyalı olan kutular, kafanın o anda üzerinde durduğu bant konumunu temsil etmektedir.<br />
</span></p>
<p><span class="b"><img class="alignnone" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/turing_silici_adimlar.jpg" alt="" width="374" height="590" /></span></p>
<p><span class="b">Netice olarak Hasan Bey&#8217;in sorusuna temel teşkil eden ve örneğin q1 üzerindeki döngülerden birisi olan b/a,R geçişi, banttan b okunduğunda banta a değerini yaz manasındadır.</span></p>
<p><span class="b">Yine bu yazıya yapılan yorumlarda sorulan bir sorunun cevabını aşağıdaki bağlantıda çözdüm. Soru, eşit a ve b içeren Turing makinesinin tasarımı idi, bağlantıya tıklayarak okuyabilirsiniz. </span></p>
<p><a href="http://www.bilgisayarkavramlari.com/2010/11/19/esit-a-ve-b-bulunduran-turing-makinesi-ornegi/">http://www.bilgisayarkavramlari.com/2010/11/19/esit-a-ve-b-bulunduran-turing-makinesi-ornegi/</a></p>

<p class="sayac_bilgi">1,677 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

