<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>C ve Sistem Programlama</title>
	<atom:link href="http://kutalmis.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kutalmis.wordpress.com</link>
	<description>Programcılığın Ağır Sanayisi</description>
	<lastBuildDate>Sun, 08 Jan 2012 00:28:04 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='kutalmis.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>C ve Sistem Programlama</title>
		<link>http://kutalmis.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://kutalmis.wordpress.com/osd.xml" title="C ve Sistem Programlama" />
	<atom:link rel='hub' href='http://kutalmis.wordpress.com/?pushpress=hub'/>
		<item>
		<title>FireX Programlama dili :) Alp Güleç</title>
		<link>http://kutalmis.wordpress.com/2010/08/29/firex-programlama-dili-alp-gulec/</link>
		<comments>http://kutalmis.wordpress.com/2010/08/29/firex-programlama-dili-alp-gulec/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 14:57:48 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=129</guid>
		<description><![CDATA[Öncelile uzun bir aradan sonra herkese merhaba. Bilen bilir, Türkiye de ileri seviye de programlama ile ilgilenen tüm insanlar (zaten yeterince azdır) birbirini bir yerlerden tanır. Biliyorum ki reserve engineering ya da sistem programlama ile ilgilenmiş arkadaşlar Firex yani Alp güleç&#8217; i zaten tanıyordur  ya da duymuştur. Bende kendisiyle tahribat.com aracılığı ile tanışmıştım ve gerçekten [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=129&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Öncelile uzun bir aradan sonra herkese merhaba.</p>
<p>Bilen bilir, Türkiye de ileri seviye de programlama ile ilgilenen tüm insanlar (zaten yeterince azdır) birbirini bir yerlerden tanır.</p>
<p>Biliyorum ki reserve engineering ya da sistem programlama ile ilgilenmiş arkadaşlar Firex yani Alp güleç&#8217; i zaten tanıyordur  ya da duymuştur.</p>
<p>Bende kendisiyle tahribat.com aracılığı ile tanışmıştım ve gerçekten bilgisine saygı duyduğum ve çok sevdiğim bir dostumdur alp.</p>
<p>Alp&#8217;in uzun süredir üzerinde çalıştığı ama pek fazla duyurmaya meraklı olmadığı projesinden bahsedeceğim bu yazıda size :)</p>
<p>Sadece Türkiye de değil dünyada da çoğu programcının tek başına cesaret edip başlayamayacağı bir proje bu, yeni bir programlama dili ve derleyici..</p>
<p>Tabi ki alp bu dili ve derleyiciyi programlama dili pazarına girip rekabete atılmak için yazmadı,  birincisi bunu yapabileceğini biliyordu ve bunu da hepimize gösterdi, ikincisi bu tür projeler insana gerçekten çok fazla şey katar.  Basit bir veritabanı projesinde çalışırken 50 yıl boyunca program da yazsanız kendinizi geliştiremezsiniz, kendini geliştirmenin yolu kendini zorlamaktan geçer.</p>
<p>Hülasa, alp bu projeyi kısa bir süre önce tamamladı ve derleyiciyi yayınladı. Açıkçası ben çok gururlandım, birincisi ülkemizde böyle işler yapabilen programcıların olduğunu gördüğüm için, ikincisi alp benim arkadaşım olduğu için  :)</p>
<p>Her nekadar benim, yapma alp C ile yaz şunu asm ile uğraşma, yapma alp derleyiciyle bağlayıcı tek program olurmu gibi eleştirilerime kulak asmasa da :D</p>
<p>Sonuç olarak, alp i bir kez de buradan tebrik ediyorum ve hepinizi bu projeyi incelemeye davet ediyorum.</p>
<p><a href="http://www.alpgulec.com">www.alpgulec.com</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=129&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2010/08/29/firex-programlama-dili-alp-gulec/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>
	</item>
		<item>
		<title>PuLsAr = Okan Akyuz :/</title>
		<link>http://kutalmis.wordpress.com/2010/04/09/pulsar-okan-akyuz/</link>
		<comments>http://kutalmis.wordpress.com/2010/04/09/pulsar-okan-akyuz/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 15:39:57 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=124</guid>
		<description><![CDATA[Yıl 2004 sonu ya da 2005 başları, evimde internet yok, oyun oynamaktan da hoşlanmadığım için kendimi programlamaya vermiştim, beyazıttan 5 tl ye aldığım Visual Studio 6.0 Cd si ve trscene dergileri. O dönemde sık sık internet cafelere gidip, döküman indirir (bazen de teleport la siteyi indirir) evde çalışırdım. Derslerim kötü olduğu için ve öss ye [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=124&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yıl 2004 sonu ya da 2005 başları, evimde internet yok, oyun oynamaktan da hoşlanmadığım için kendimi programlamaya vermiştim, beyazıttan 5 tl ye aldığım Visual Studio 6.0 Cd si ve trscene dergileri.</p>
<p>O dönemde sık sık internet cafelere gidip, döküman indirir (bazen de teleport la siteyi indirir) evde çalışırdım. Derslerim kötü olduğu için ve öss ye hazırlanmam gerektiği için babam bilgisayar başında oturmamdan pek hoşlanmazdı.</p>
<p>Herşey trscene nin 7. sayısında, Darkapocalypse nin sistem programlama yazısıyla başladı, o dönemde ne söylediğini tam olarak anlamasam da temel olarak mantığını anlamıştım.  Sonra  internette sistem programlama ile ilgili araştırma yapmaya başladım, sanırım boot program ile ilgili birşeyler araştırırken PuLsAr&#8217; ın redrival deki sitesinde bulunan BOOT Nasıl?  yazısını görmüştüm, bu yazı sayesinde ilk boot programımı yazmış, nero ile başlangıç CD si olarak oluşturmuş, hatta bu CD den birkaç tane oluşturmuş millete göstermiş payalanmıştım :)</p>
<p>Aynı dönemde, sistem programlama konusunda, Türkiye&#8217;deki tek kuruluş olan C ve Sistem Programcıları Derneği ile de tanışmış, kayıtlı olmadığım halde hafta sonları mecidiyeköy e gidip ders aralarında kaan hocanın kafasını ütülemeye başlamıştım.</p>
<p>Aradan 5-6 sene geçti, birçok kişinin yardımını gördüm, birçok farklı alanda bilgi edindim, sonunda geçen sene bir arkadaşımla ilk 32 bit kernelimizi yazdım ancak birisi bana bu işe nasıl bulaştın derse her zaman bir kilometre taşı olarak PuLsAr&#8217;ın o yazısını söylerim.</p>
<p>Belki o dönemde ingilizcem olsa birçok farklı yerden çok daha ileri programlar yazacak bilgiyi edinebilirdim ancak döneminde sanırım bu yazı tek Türkçe kaynaktı.</p>
<p>4-5 aydır da fırsat buldukça ceviz forumda takılıyorum, orada da bilgili olarak gördüğüm ve saygı duyduğum bir kaç kişi var, bunlardan birisi okanakyuz, bir süre önce küçük bir tartışma yaşadığım ama onun olgunluğu sayesinde sonuçta daha da saygı duyduğum bir insan :)</p>
<p>Bugün , MDK konusunda konuşurken Okan Akyuz un aslında PuLsAr olduğunu öğrendim :) belki herhangi biri olsa bu kadar önemsemezdim ancak daha önce de belirttiğim gibi, PuLsAr ın yazıları benim için kilometre taşı niteliğindedir. Bu nedenle konuyla ilgili bir yazı yazıp kendisine buradan <strong>teşekkür etmek </strong>istiyorum. Tesadüfün böylesi diyorum :)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/124/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=124&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2010/04/09/pulsar-okan-akyuz/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>
	</item>
		<item>
		<title>Cumhuriyet Bayramı</title>
		<link>http://kutalmis.wordpress.com/2009/10/29/cumhuriyet-bayrami/</link>
		<comments>http://kutalmis.wordpress.com/2009/10/29/cumhuriyet-bayrami/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 13:33:13 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[Genel]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=117</guid>
		<description><![CDATA[Türk ulusunun Cumhuriye bayramı kutlu olsun. Bu kutlu günde büyük Atatürk&#8217;ü özlemle anıyor ve şükranlarımızı sunuyoruz. Nice Cumhuriyet bayramlarına&#8230;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=117&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Türk ulusunun Cumhuriye bayramı kutlu olsun. Bu kutlu günde büyük Atatürk&#8217;ü özlemle anıyor ve şükranlarımızı sunuyoruz.</p>
<p>Nice Cumhuriyet bayramlarına&#8230;</p>
<p><img class="aligncenter size-full wp-image-118" title="ataturk18" src="http://kutalmis.files.wordpress.com/2009/10/ataturk18.jpg?w=495" alt="ataturk18"   /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/117/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=117&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2009/10/29/cumhuriyet-bayrami/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/ataturk18.jpg" medium="image">
			<media:title type="html">ataturk18</media:title>
		</media:content>
	</item>
		<item>
		<title>Koruma Mekanizması ve Erişim kontrolleri</title>
		<link>http://kutalmis.wordpress.com/2009/10/23/koruma-mekanizmasi-ve-erisim-kontrolleri/</link>
		<comments>http://kutalmis.wordpress.com/2009/10/23/koruma-mekanizmasi-ve-erisim-kontrolleri/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 23:20:01 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[Sistem Programlama]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[Korumalı mod nedir]]></category>
		<category><![CDATA[Programlama]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=96</guid>
		<description><![CDATA[Intel 386 Ailesi ve Korumalı Mod Yazılım Mimarisi başlıklı yazımda korumalı mod&#8217;un getirdiği yenilikleri, Korumalı Mod’da Hafıza Yönetimi, Segmentasyon ve Sayfalama başlıklı yazımda ise, korumalı modda bellek erişimini ayrıntılarıyla anlatmıştım. Bu yazıda, bellek erişimi sırasında uygulanan koruma mekanizmasının ayrıntılarını ve aşamalarını inceleyeceğiz. Ancak tam olarak kavramanız için öncelikle diğer iki yazıyı okumuş olmanız gerekir. Koruma [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=96&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://kutalmis.wordpress.com/2009/10/21/intel-386-ailesi-ve-korumali-mod-yazilim-mimarisi/">Intel 386 Ailesi ve Korumalı Mod Yazılım Mimarisi</a> başlıklı yazımda korumalı mod&#8217;un getirdiği yenilikleri, </em></p>
<p><em> <a href="http://kutalmis.wordpress.com/2009/10/22/korumali-modda-hafiza-yonetimi-segmentasyon-ve-sayfalama/">Korumalı Mod’da Hafıza Yönetimi, Segmentasyon ve Sayfalama </a>başlıklı yazımda ise, korumalı modda bellek erişimini ayrıntılarıyla anlatmıştım. </em></p>
<p><em>Bu yazıda, bellek erişimi sırasında uygulanan koruma mekanizmasının ayrıntılarını ve aşamalarını inceleyeceğiz. Ancak tam olarak kavramanız için öncelikle diğer iki yazıyı okumuş olmanız gerekir. </em></p>
<h3><strong>Koruma Mekanizması</strong></h3>
<p>Koruma mekanizması, çeşitli koruma bitleri sayesinde  bellek erişimine izin verilip verilmesine mantığına dayanır. Bir çok aşaması vardır.</p>
<p>Koruma mekanizmasını, segment düzeyinde koruma ve sayfa düzeyinde koruma olarak inceleyebiliriz.<strong><em> </em></strong></p>
<p><strong>Segment düzeyinde koruma</strong></p>
<p>Segment düzeyinde korumanın aşamaları şunlardır.</p>
<ul>
<li> Ayrıcalık seviyesi kontrolü</li>
<li> Limit kontrolü</li>
<li> Tip kontrolü</li>
</ul>
<p>Şimdi bunları ayrıntılı olarak inceleyelim.<span id="more-96"></span></p>
<p><strong><em></em></strong><strong><em>Ayrıcalık seviyesi Kontrolü</em></strong></p>
<p>Korumalı mod&#8217;un en temel kontrolü Ayrıcalık kontroldür, Korumalı mod&#8217;a biraz ilgi duydıysanız  Kernel mod, user mod, ring0, ring 3 , page fault, General Protection Fault gibi kavramlar size yabancı gelmeyecektir. Bu kavramların hepsinin altında Ayrıcalık seviyesi kontrolü yatar.</p>
<p>Korumalı modda çalışan süreçlerin 4 ayrıcalık seviyesi vardır. 0. ayrıcalık seviyesi en yetkili seviyedir, 3. seviye ise en kısıtlı seviyedir. 0. seviyeye kernel mod ya da ring 0 denilir, 3. seviyeye ise user mod yada ring3 denilir.</p>
<p>Peki bir sürecin hangi ayrıcalık seviyesinde çalıştığı neye göre belirlenir ?</p>
<p>Her sürecin çalıştığı segmentin bir segment tanımlayıcısı tarafından tutulduğunu biliyorsunuz. Tanımlayıcılar konusunu hatırlarsanız, her tanımlayıcının DPL denilen iki biti vardı. Bu bitlerdeki değer o segmentin ayrıcalık düzeyini belirliyordu.</p>
<p>Ayrıca segment yazmaçlarında selektör değeri haricinde iki bitinde koruma biti olarak bulunduğunu hatırlayın (RPL).</p>
<p>Bu iki bit sahası, segment düzeyinde ayrıcalık kontrolünün temelini oluştururlar.  O an çalışmakta olan kod segmentin DPL değerine özel olarak CPL denilmektedir.  CPL, DPL den  ayrı bir bit sahası değildir, sadece çalışmakta olan segment vurgusu için kullanılır.</p>
<p>Şimdi bellek erişimi konusunu hatırlayalım ve bu erişim sırasında uygulanan ayrıcalık seviyesi kontrolünü görelim.</p>
<p>Öncelikle bir sürecin başka bir adrese erişmeye çalıştığını varsayalım.  Çalışan sürecin kod segment ayrıcalık seviyesi CPL=3 olsun. Erişim için kullanılan selektörün RPL değeri de 3 olsun. Eğer erişmeye çalıştığımız segmentin DPL değeri 2,1,0 değerlerinden biriyse bu erişime izin verilmez ve genel koruma hatası oluşur.</p>
<p>Erişilmek istenen segmentin DPL değeri 3 ise erişime izin verilir.</p>
<p>Ayrıca selektörün RPL değerinin de önemli olduğunu hatırlayalım. Eğer CPL ve DPL değerleri 0 ise ancak o segmente erişirken kullanılan selektörün RPL si 3 ise bu erişime yine izin verilmez.</p>
<p>Genellikle sorun RPL değildir. Çünkü bir program segment yazmacının RPL bitlerini 0 yapıp, DPL=0 olan bir segment adresine atlamak isteyebilir, segment yazmacını uygun doldurması yeterlidir ancak bu işi yapmaya çalışan sürecin CPL si 3 ise yapılacak birşey yoktur.</p>
<p>Eğer burada anlattığım DPL ve RPL kavramlarını tam anlayamadıysanız bir önceki yazımdaki çizimlere göz atmanızı tavsiye ederim. DPL tanımlayıcı üzerindeki RPL ise selektör üzerindeki koruma bitleridir. DPL, tanımlayıcının gösterdiği segmentin ayrıcalık düzeyidir. Eğer bu segment çalışan bir kod segmentse DPL ye CPL denir. Sanırım  anladınız :)</p>
<p><em><strong>Limit Kontrolü</strong></em></p>
<p>Koruma mekanizmasının bir diğer ayağı limit kontrolüdür. Tanımlayıcılar konusundan hatırlayacağınız üzere her segmentin bir taban adresi birde limiti vardır.</p>
<p>Bir süreç çalışırken erişmek istediği adres, segmentin taban adresi ile toplanır ve limit değerini geçiyormu diye kontrol edilir. Eğer segment limiti aşılmışsa genel koruma hatası oluşur ve süreç sonlandırılır.</p>
<p>Yani bir sürecin erişmeye çalıştığı adres o segmentin  Taban+Limit değerinden büyükse bu erişim engellenir, bu da segment düzeyinde korumanın limit kontrolü aşamasıdır.</p>
<p><em><strong>Tip Kontrolü</strong></em></p>
<p>Segment tanımlayıcıları konusunu hatırlarsak, tanımlayıcının S biti o segmentin sistem segmenti mi yoksa hafıza segmenti mi olduğunu belirliyordu. Ayrıca tip sahasının nasıl yorumlanacağı da bu bit e bağlıydı.</p>
<p>Tip kontrolü, erişilmek istenen segmentin sistem segmenti mi yoksa hafıza segmenti mi olduğunu, erişilmek istenen kod segment ise selektörün  CS yazmacında olup olmadığını, SS (yığın yazmacı) deki selektör ile erişilen segment yazılabilir bir segment mi gibi birçok kontrol yapar.</p>
<p>Eğer erişmek istediğimiz segment bir kod segment ise CS yazmacındaki selektör ile erişmeliyiz. Aynı şekilde SS ya da DS yazmacları ile bir kod segmente erişemeyiz. Bunlarla erişmek istediğimiz segmentin muhakkak yazılabilir olması gereklidir.</p>
<p>Eğer bir segmente çalıştırmak amacıyla erişiyorsak  (yani call ya da jmp komutları ile) CS deki selektör bir kod segmenti ya da bir kapıyı(gate) göstermelidir.</p>
<p>Yani tip kontrolü, kurallara uyup uymadığımızı kontrol eder, Derleyicilerin semantik analizine benzetebiliriz (yada ben benzetiyorum :)</p>
<p><strong>Sayfa Düzeyinde Koruma</strong></p>
<p>Sayfa düzeyinde korumanın aşamaları şunlardır.</p>
<ul>
<li>Ayrıcalık seviyesi kontrolü</li>
<li>Yazma koruması kontrolü</li>
</ul>
<p><strong><em>Ayrıcalık Seviyesi Kontrolü</em></strong></p>
<p>Önceki yazımda sayfa tablosu girdilerini tablo üzerinde anlatmıştım, bu girdilerden birisi U/S bitiydi.</p>
<p>U/S biti 0 ise o sayfa sistem sayfasıdır. U/S 1 ise o sayfa kullanıcı sayfasıdır.</p>
<p>Segment düzeyinde koruma doğal olarak sayfa düzeyinde korumadan daha önce uygulanır ve daha ayrıntılıdır.</p>
<p>U/S biti 0 olan bir sayfaya uygulama programcıları erişemez. U/S biti 1 olan sayfalara ise erişim serbesttir. Ancak sayfa düzeyinde korumanın bir diğer önemli biti de R/W bitidir.</p>
<p><em><strong>Yazma Koruması Kontrolü</strong></em></p>
<p>Sayfa düzeyinde korumanın R/W biti ile ilgili kontroldür. Eğer R/W biti 0 ise o sayfa yazma korumalıdır. R/W biti 1 ise yazılabilir bir sayfadır.</p>
<p>Son olarak şunu belirtelim, Sayfa düzeyinde koruma dan sistem programcısı etkilenmez.   R/W ve U/S bitinin korumaya etlkisini şu tabloyla inceleyelim.</p>
<p><img class="aligncenter size-full wp-image-80" title="RW_US" src="http://kutalmis.files.wordpress.com/2009/10/rw_us.jpg?w=495" alt="RW_US"   /></p>
<p>Görüldüğü gibi sistem programı (CPL 0) sayfa düzeyinde korumadan etkilenmez.</p>
<p>Ancak pentium işlemcileri ile birlikte CR0 a WP biti eklenmiştir. Bu bit sistem programcısını sayfa düzeyinde kısıtlamak üzere düşünülmüştür.</p>
<p>Eğer WP biti 1 ise, sistem programcısı yazma korumalı bir sayfaya yazamaz. WP 0 ise sistem programcısı yine korumadan etkilenmez.</p>
<p><em>Korumalı modda bellek erişimini ve koruma mekanizmasını bitirdik. Sonraki yazıda Kapıları (Gate) işleyeceğim. </em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=96&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2009/10/23/koruma-mekanizmasi-ve-erisim-kontrolleri/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/rw_us.jpg" medium="image">
			<media:title type="html">RW_US</media:title>
		</media:content>
	</item>
		<item>
		<title>Korumalı Mod&#8217;da Hafıza Yönetimi, Segmentasyon ve Sayfalama</title>
		<link>http://kutalmis.wordpress.com/2009/10/22/korumali-modda-hafiza-yonetimi-segmentasyon-ve-sayfalama/</link>
		<comments>http://kutalmis.wordpress.com/2009/10/22/korumali-modda-hafiza-yonetimi-segmentasyon-ve-sayfalama/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:02:22 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[Sistem Programlama]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[Korumalı mod nedir]]></category>
		<category><![CDATA[Programlama]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=71</guid>
		<description><![CDATA[Ön bilgilendirme: Daha önce yazdığım yazılar sistem programlama konusuna birer giriş niteliği taşıyordu. Ancak bu yazıyla birlikte gerçekten başlamış oluyoruz. Öncelikle şunu belirtmek isterim, eğer bir uygulama programcısıysanız ve bu yazıları genel kültür olsun diye okuyorsanız bundan sonrası pek size göre değil. Ancak sistem programlama konusunda ciddiyseniz muhakkak öğrenmeniz gerekli. Muhtemelen sevineceğiniz bir haber de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=71&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em><strong>Ön bilgilendirme:</strong></em></p>
<p><em>Daha önce yazdığım yazılar sistem programlama konusuna birer giriş niteliği taşıyordu. Ancak bu yazıyla birlikte gerçekten başlamış oluyoruz.</em></p>
<p><em>Öncelikle şunu belirtmek isterim, eğer bir uygulama programcısıysanız ve bu yazıları genel kültür olsun diye okuyorsanız bundan sonrası pek size göre değil. Ancak sistem programlama konusunda ciddiyseniz muhakkak öğrenmeniz gerekli.</em></p>
<p><em>Muhtemelen sevineceğiniz bir haber de vermek istiyorum. Burada öğrendiklerimiz sadece teorik bilgi olarak kalmayacak. Bu bilgileri doğrudan kullanarak C ve Asm ile bir hobby OS yazacağız.</em></p>
<p><em>Bu korumalı mod&#8217;u tam olarak anlamamızı sağlayacak.  Tamamen gelişime açık olarak tasarlayacağız ve iyi dökümante edeceğiz. Böylece Türk Sistem programcılarının elinde,  korumalı mod mimarisini inceleyebilecekleri basit bir kernel bulunmuş olacak.</em></p>
<p><em>Bu yüzden burada anlatacaklarımı anlamaya çalışın ve sadece teorik olmayacağı konusunda bana güvenin. Sanırım artık başlayabiliriz.</em></p>
<p><strong>Korumalı Mod Hafıza Yönetimi</strong></p>
<p>Korumalı mod&#8217;da hafıza erişimi iki biçimde gerçekleşir. Eğer sayfalama mekanizması pasifse, yalnızca Segmentasyon mekanizması ile eğer  Sayfalama aktif ise önce Segmentasyon sonra sayfalama mekanizmaları ile iki aşamada gerçekleşir.</p>
<p>Segmentasyon mekanizması bir sürecin, kod, veri , yığın gibi bölgelerin diğer süreçlerden soyutlamaktadır. Birden fazla süreç çalıştığında hepsi kendi segmentlerinde çalışır ve segment dışına çıktıklarında Genel Koruma Hatası (General Protection Fault) oluşur. Sonrası malum, süreç sonlandırılır.</p>
<p>Sayfalama mekanizmasıyla birlikte süreçlere sanal bellek servisi sunulur , o sürece ait sayfa dizini ve  sayfa tabloları  yardımıyla ,  lineer bellek adresleri  fiziksel adreslerle dönüştürülür.</p>
<p>Segmentasyon mekanizması daima aktiftir , ancak sayfalama mekanizmasını aktiflemek programcının görevidir.</p>
<p><strong>GDT Nedir:</strong> GDT (Global Tanımlayıcı Tablosu) bir tanımlayıcı dizisi olarak düşünülebilir. GDT en fazla 8192 tanımlayıcı içerir. Bu tanımlayıcılardan her biri bellekteki bir segmentin özelliklerini tutar. GDTR yazmacı bu tablonun bellek adresini tutar..</p>
<p>Örneğin 10. tanımlayıcı bellekte 0x785400A5 adresinden başlayan ve 0x504F limitine sahip 3. ayrıcalık düzeyinde olan bir segmentin tanımlayıcısı olabilir,  bu durumda segmente erişebilmek için öncelikle GDT tablosunun 10. elemanına erişilir. Segmentin tüm bilgileri alınır.</p>
<p><strong>Segmentasyon Mekanizması :</strong> Korumalı modda, segment yazmaçları selektör denilen bir değer tutarlar. Adından da anlaşıldığı üzere bu değer bir seçicidir ve GDT (global tanımlayıcı tablosu) den bir tanımlayıcı seçmeye yarar.</p>
<p>Korumalı mod&#8217;da kullanılan bellek adresleri iki bölümden oluşur. Bu 16 bitlik bir selektör  ve 32 bitlik bir offset değeridir.</p>
<p>Önce selektör yardımıyla GDT den bir tanımlayıcı seçilir. Tanımlayıcının içerisinde  segmentin taban adresinin ve limit bilgisinin olduğunu hatırlayın. Daha sonra tanımlayıcıdan alınan taban adresine offset değeri eklenerek gerçek adres elde edilir.</p>
<p>Eğer Sayfalama mekanizması kapalı durumdaysa elde edilen bu adres fiziksel adrestir.  Ancak Sayfalama açıksa bu adres lineer adrestir ve fiziksel hafızadaki karşılığını bulmak için sayfa dizini, sayfa tablosu kullanılır.</p>
<p>Segmentasyon mekanizması ile adresin nasıl elde edildiğini aşağıdaki çizimle inceleyelim.<span id="more-71"></span></p>
<p style="text-align:center;"><img class="size-full wp-image-73 aligncenter" title="Segmentasyon2" src="http://kutalmis.files.wordpress.com/2009/10/segmentasyon2.jpg?w=495" alt="Segmentasyon2"   /></p>
<p>Görüldüğü gibi Segment yazmacındaki selektör değeri ile GDT tablosundan bir tanımlayıcı seçiyoruz. Segment yazmaçlarının GDT deki bir indexi tuttuğunu hatırlayalım.</p>
<p>GDT deki segment tanımlayıcısına eriştikten sonra artık o segment ile ilgili tüm bilgilere sahibiz. Segmentin taban adresini alıyoruz ve 32 bitlik offset değerimizle topluyoruz.  Böylece son adresi elde ediyoruz.</p>
<p>Bu adres eğer sayfalama mekanizması kapalıysa doğrudan fiziksel adrestir, sayfalama açıksa lineer adrestir ve fiziksel adrese dönüşümü sayfalama mekanizmasından geçişiyle olur.</p>
<p>Segmentasyon öncesi adresin toplamda 48 bit ile gösterildiğine dikkat edelim.  Hatırlarsanız gerçek modda 16 bit segment yazmacı ile 16 bit offset yazmacı toplamda 20 bitlik bir adresi gösteriyordu. Burada segment yazmacının tuttuğu değer doğrudan fiziksel adresin tabanıydı.</p>
<p>Oysa korumalı modda segment yazmacları adres tutmazlar. Buna karşılık GDT deki bir tanımlayıcının index değerini tutarlar. Sanırım anlaşıldı :).</p>
<p><strong>Sayfalama Mekanizması : </strong>Korumalı mod da hafıza yönetiminin diğer önemli ayağı sayfalama mekanizmasıdır. Bu mekanizma süreçlere sanal bellek servisi sunmamızı sağlar ve birçok avantajı vardır.</p>
<p>Dosya Sistemi Nedir, yazımı okuduysanız orada parçalanma(fragmentation) dan bahsetmiştim.  Aynı konu bellek için de gereklidir. Örnek verecek olursak,  Bir programımız olduğunu düşünelim, 50 kb bellek kullanıyor. Biz bu programı çalıştırdıktan sonra başka bir program daha çalıştırmış olalım.</p>
<p>Daha sonra 50 kb lik programımızı sonlandırdığımızda bellekte 50kb boyunda bir boşluk oluşur. Bu boşluğa 51 kb bellek ihtiyacı olan bir program dahi yerleştirilemez. Bu tür boşluklar biriktikçe bellekte toplamda birsürü boş yer olduğu halde bellek kullanılmaz hale gelebilir.</p>
<p>İşte sayfalama mekanizması bunu önler, bellek 4 kb lik sayfalara ayrılmıştır ve bir program belleğe yüklenmeden önce sayfalara ayrılır. Daha sonra bulunan boş sayfalara yüklenir.  Böylece program sonlandığında arkasında bıraktığı boşluklar da 4 kb boyutundadır ve yeni gelen herhangi bir program da sayfalara ayrılacağı için bu boşluklara rahatlıkla yerleştirilebilir.</p>
<p>Hatırlarsanız harddiskte bir clusterden sonra hangisinin geleceği FAT tablolarında kayıtlıydı ve program diskten okunacağı zaman bu clusterler sırasıyla gezilerek program belleğe yükleniyordu.</p>
<p>Bellek yönetimide ise sayfalar sayfa tablosunda tutulur. Bir sürecin tüm bellek sayfalarına sayfa tabloları aracılığıyla erişilebilir. Sayfa tablosu ve FAT tablosu yapı bakımından oldukça farklı olmakla birlikte amaç bakımından benzerdir.</p>
<p>Üstelik sayfalama mekanizması birinci elden işlemci tarafından sağlanır.</p>
<p>Sayfalama mekanizması CR0 yazmacının 31. biti (PG) set edilerek açılır. Tabi ki sayfalamayı açmadan önce bazı hazırlıkların yapılmış olması gerekir.</p>
<p>Şimdi sayfalama mekanizması açıkken adres dönüşümünün nasıl yapıldığını inceleyelim.</p>
<p>Öncelikle 16 bitlik bir selektör ve 32 bitlik bir offset değerinden oluşan adres, segmentasyon mekanizmasından geçerek 32 bitlik bir adres oluşuyordu.  Eğer sayfalama mekanizması aktif ise bu adres lineer adresti.</p>
<p>İşte bu lineer adresin fiziksel adrese dönüşmesi için Sayfa dizini ve sayfa tablosu kullanılıyordu. Şimdi bunlardan bahsedelim.</p>
<p><em>Sayfa tablosu</em>:  Sayfaların (4 kb) bellekteki fiziksel adres karşılıklarını tutar.</p>
<p>Sayfanın fiziksel bellekteki karşılığı çerçeve(frame) dir.  Sayfa tablosunu bir adres dizisi olarak düşünebiliriz.</p>
<p><em>Sayfa dizini</em> : Sayfa tablolarının bellekteki fiziksel adreslerini tutar, yapı olarak sayfa tablolarına çok benzer, ancak sayfa tabloları, sayfaların fiziksel bellek adreslerini tutarken, sayfa dizini , sayfa tablolarının fiziksel adresini tutar.</p>
<p>Her sürecin bir adet sayfa dizini vardır ancak birden çok sayfa tablosu olabilir.</p>
<p>Her sayfa tablosu en fazla 1024 girdiye sahip olabilir. Böylece bir sayfa tablosu ile 4 MB lik bir bellek adreslenebilir.  1024* 4 kb.</p>
<p>Örneğin sürec 6 MB bellek kulanıyorsa sürece 1 adet sayfa dizini, 2 adet sayfa tablosu tahsis edilmiştir.</p>
<p>Sayfa dizini de sayfa tabloları gibi 1024 girdiye sahip olabilir. O halde bir sürecin 1024 tane sayfa tablosu olabilir. Bu durumda bir sürec toplamda 1024*1024*4kb= 4 GB lik bir fiziksel adres alanına sahip olabilir. Görüldüğü gibi sayfa dizini ve sayfa tabloları ile 32 bitlik işlemcinin adresleyebileceği tüm bellek kullanılabilmektedir.</p>
<p>Her sürecin bir sayfa dizini vardır ve birden fazla sayfa tablosu olabilir, sayfa tablolarına sayfa dizini ile erişilebilir ancak sayfa dizinine nasıl erişilecek.</p>
<p>CR3 kaydedicisi sürecin sayfa dizin tablosunun fiziksel adresini tutar.  O halde korumalı modda sayfalama işlemi açıkken bellek erişimi tam olarak şu şekilde olur.</p>
<p>*16 bitlik bir selektör ve 32 bitlik bir offset ile belleğe erişilmeye çalışılır.</p>
<p>*GDTR yazmacından GDT nin adresi alınır.</p>
<p>*Segment kaydedicisindeki index numarasına göre GDT den bir tanımlayıcı seçilir.</p>
<p>*Bu tanımlayıcının tanımladığı segmentin taban adresi alınır ve offset değeri buna eklenir. Böylece lineer adres elde edilir.</p>
<p>*CR3 kaydedicisinden sayfa dizininin adresi alınır.</p>
<p>*32 bitlik lineer adresin ilk 10 bitindeki değere göre sayfa dizininden bir index seçilir. İlk 10 bitteki değer 5 ise sayfa dizinindeki 5 girdi seçilir.</p>
<p>*Seçilen girdide gösterilen fiziksel adres ile sayfa tablosuna ulaşılır. Sayfa tablosundan da bir girdi seçmek için lineer adresin ikinci 10 bitindeki değere bakılır. Bu değer 9 ise o sayfa tablosundaki 9. girdi demektir.</p>
<p>*Sayfa tablosundaki girdiden sayfanın fiziksel adresi alınmıştır ancak sayfa 4 kb boyutundadır. Daha sonra lineer adresin kalan 12 biti offset olarak kullanılır ve bu sayfa adresine eklenir.</p>
<p>Tüm bu işlemlerin sonucunda fiziksel adrese erişilmiş olur. Bu aşamalarda birçok koruma testi de yapılır.</p>
<p>Dikkat ettiyseniz lineer adresin 10 biti ile 1024 girdiye sahip olabilecek sayfa dizininden bir girdi seçilir. 2^10=1024</p>
<p>Aynı şekilde ikinci 10 bit ile sayfa tablosundan bir girdi seçilir. Sayfa tablosu da en fazla 1024 girdiye sahip olabilir. 2^10=1024</p>
<p>Daha sonra kalan 12 bit  (32-10-10=12) offset değeri olarak kullanılır. Elimizdeki sayfa 4 kb boyutundadır ve 12 bitlik offset değeri ile bu sayfanın her bitine erişilebilir. 2^12=4096.</p>
<p>Şimdi bu bellek erişimini daha iyi anlamak için bir tabloyla gösterelim.</p>
<p style="text-align:center;"><img class="size-full wp-image-74 aligncenter" title="sayfalama" src="http://kutalmis.files.wordpress.com/2009/10/sayfalama.jpg?w=495" alt="sayfalama"   /></p>
<p>Görüldüğü gibi Adres önce segmentasyon sonra sayfalama mekanizmasından geçerek fiziksel adrese eşlendi.  Lineer adresin ilk 10 biti sayfa dizin indexi oldu ve sayfa tablosunun adresini bulmamıza yaradı. İkinci 10 bit ise sayfa tablosu indexi oldu sayfamızı bulmaya yaradı. Son olarak 12 bit offset oldu ve tam adrese ulaşmamızı sağladı.</p>
<p>Belleğe nasıl erişildiğini öğrendiğimize göre artık tanımlayıcıları bit bit tanıma vakti geldi.</p>
<p><strong>Tanımlayıcılar (Descriptors)</strong></p>
<p>GDT ve LDT tablolarının her bir elemanının bir segment tanımlayıcısı olduğunu söylemiştik. Bir segment tanımlayıcısı segmente ait bilinmesi gerekli tüm bilgileri tutar.  Tanımlayıcılar 64 bit boyundadır ve bir tablo en fazla 8192 tanımlayıcı tutabilir. Bu tablolar birer tanımlayıcı dizisidir.</p>
<p>Şimdi bir tanımlayıcıyı şekil üzerinde inceleyelim.</p>
<p><img class="aligncenter size-full wp-image-76" title="tanimlayici" src="http://kutalmis.files.wordpress.com/2009/10/tanimlayici1.jpg?w=495&#038;h=111" alt="tanimlayici" width="495" height="111" />Bu grafiği hazırlamak yarım saatimi aldı :( blog dar olduğu için zar zor sıkıştırdım. Edit: O kadar da dar değilmiş :)</p>
<p>En sağdan itibaren tüm bölümlerin anlamlarını açıklayalım.</p>
<p>Limit 0-15   : Segmentin taban adresinden itibaren boyutunu tutan 20 bitlik limit bölümünün 0-15 arasındaki 16 biti.</p>
<p>Taban 0-15   :  Segmentin taban adresinin ilk 16 biti.</p>
<p>Taban 16-23 :  Segmentin taban adresinin 16-23 arasındaki 8 biti.</p>
<p>Tip :  O segmentin tipi, bitsel olarak anlamlıdır, kod segmentmi veri segmentimi olduğu gibi önemli bilgiler barındırır.</p>
<p>S biti : Eğer o segment normal bir hafıza segmentiyse (kod, veri ,yığın) bu bit 1 değerini taşır. Eğer sistem segmentiyse 0 değerini taşır. Sistem segmenti kavramını ilerde açacağım.</p>
<p>DPL biti :  Bu iki bit segmentin ayrıcalık düzeyini belirler. 2 bit ile ancak 4 ayrıcalık düzeyi tanımlanabilir 2^2=4. 0 ayrıcalık düzeyi işletim sistemi segmentlerinin ayrıcalık düzeyidir, 3. ayrıcalık düzeyi kullanıcı programlarının ayrıcalık düzeyidir. 1 ve 2. ayrıcalık düzeyleri windows ve linux sistemlerinde kullanılmaz.</p>
<p>P biti : Segmentin o an hafızada olup olmadığını belirtir. Eğer segment hafızada ise bu bit 1 dir. Bu bit sıfırken segmente erişilmeye çalışılırsa &#8220;Segment Not Present&#8221; istisnası oluşur. Aslında sayfalarda bu bit daha önemlidir. Mesela Windows da programın tamamı değil bir bölümü bellekte tutulur. Eğer programın bellekte olmayan bir sayfasına erişilmeye çalışılırsa page fault oluşur ve windows o sayfayı diskten belleğe yükler. Sonra bellekteki bir sayfayı da diske yazar.</p>
<p>Peki hangi sayfanın erişim hatası verdiğini nerden bulur. bkz:CR2 :)</p>
<p>Limit 16-19:  Segment limitinin son 4 biti, toplamda 20 bit olduğunu söylemiştik.</p>
<p>AVL biti : İşlemci tarafından kullanılmaz, işletim sisteminin emrine verilmiştir,  İşletim sistemi genellikle istatistik amacıyla kullanır.  Genelde büyük işletim sistemlerinin bellek-disk cache işlemleri için kullanılabilir. İstersek kullanmayabilirizde.</p>
<p>O biti : Aslında ordaki o değil 0. Gerçi bu blog sıfır ve o yu aynı şekilde gösteriyor :). Bu bit daima sıfırdır ve rezerve edilmiştir. AVL ile birleştirip gereksiz amaçlar için kullanabilirsiniz :).</p>
<p>D/B biti: Bu bit segmentin 16 bitlik bir segment mi yoksa 32 bitlik bir segmentmi olduğunu belirtir. Eğer 1 ise 32 bitlik bir segmenttir, 0 ise 16 bitliktir.</p>
<p>G biti : Bu bit limit ile gösterilen sayının bayt mı yoksa sayfa mı olduğunu belirtir. Limit sahası toplam 20 bittir ve eğer bayt olarak kullanılırsa bir segment en fazla 1 MB olabilir(2^20). Ancak sayfa olursa 2^20*4096 =4 GB  gibi bir limit tanımlayabiliriz :).</p>
<p>Taban 24-31:  Segment taban adresinin son 8 biti. toplamda 32 bit olduğunu hatırlayalım.</p>
<p>Evet sanırım artık GDT tablosundaki her bir tanımlayıcının iç yapısını anladık.</p>
<p>Şimdi Tip sahasındaki 4 bitin farklı segment türlerinde hangi anlamları ifade ettiklerinden bahsetmek istiyorum.</p>
<p><strong><em>Eğer tanımlayıcı bir hafıza segmenti tanımlıyorsa :</em></strong></p>
<p><strong><em> (kod, veri, yığın)</em></strong></p>
<p>1. bit : exe biti, eğer bu bit 0 ise o segment veri yada yığındır. Yani executable bir segment değildir. 1 ise kod segmenttir.</p>
<p>2. bit :  Eğer segment kod segment değilse o zaman veri mi yoksa yığın mı olduğu bu bitten anlaşılır. Bu bit 1 ise yığın, 0 ise veri segmentidir.</p>
<p>Eğer segment kod segmenti ise , bu bit apayrı bir anlam taşır. Bu durumda bu bit 0 ise bu segmente erişimde ayrıcalık düzeyi (DPL) göz önüne alınmaz. Eğer 1 ise ayrıcalık düzeyi kontrolü yapılır.</p>
<p>3. bit : Bu bit de segmentin kod segmenti olup olmamasına göre farklı anlam kazanır.</p>
<p>Eğer segment veri ya da yığın segmenti ise bu bit yazma kontrolü bitidir.  Eğer bu bit 1 ise o segment hem yazılır hem okunur, 0 ise sadece okunur.</p>
<p>Eğer segment kod segmenti ise bu durumda okuma kontrolü biti olur. Eğer bu bit 0 ise o kod segment sadece çalıştırılabilir, ancak 1 ise veri segmenti gibi okunabilir de.</p>
<p>4. ve son bit : bu bit ortakdır ve işlemci o segmente her eriştiğinde 1 yapılır. İstatistik amacıyla düşünülmüştür.</p>
<p><em><strong>Eğer tanımlayıcı bir Sistem Segment tanımlayıcısıysa :</strong></em></p>
<p>Sistem segmenti kavramını, işletim sistemi kodlarının çalıştığı segmentler olarak algılamayın.</p>
<p>Bunlar sıradan hafıza segmentleri değil özel amaçlarla düşünülmüş yapılardır. Tip sahasındaki bitlere göre farklı yapılar olabilirler.</p>
<p>Şimdi grafik üzerinde hangi bit kombinasyonunun hangi sistem segmetn türü olduğunu inceleyelim.</p>
<p><img class="aligncenter size-full wp-image-77" title="tip" src="http://kutalmis.files.wordpress.com/2009/10/tip.jpg?w=495" alt="tip"   /></p>
<p>Buradaki Kapı(Gate), TSS gibi kavramlar süreç yönetimiyle ilgili olduğu için sonraya saklıyorum.  Bu tabloda şimdilik dikkat etmemiz gereken LDT bölümüdür.  Geçen yazıdan hatırlarsanız LDTR yazmacının LDT yi doğrudan göstermediğini, onun GDT tablosunda bir index gösterdiğini söylemiştim.</p>
<p>Bu indexdeki tanımlayıcı LDT tablosunu gösteriyordu. İşte bir tanımlayıcının S biti 0 ise ve tip sahası LDT ise o tanımlayıcı bir LDT yi gösterir.</p>
<p>Tanımlayıcılar ile ilgili bilmemiz gereken herşeyi öğrendik.  Şimdi de Tanımlayıcılara işaret eden ve selektör değeri tutan segment yazmaçlarından bahsedeyim.</p>
<p><em><strong>Segment Yazmaçları Yoluyla  Tanımlayıcılara Erişim ve Selektörler</strong></em></p>
<p>Segment yazmaçlarının korumalı modda adres değil GDT tablosundaki bir indexi tuttuğunu söylemiştim.  Şimdi de segment yazmaclarının içeriğini bit bit inceleyelim.</p>
<p>Segment yazmaçlarının 16 bit olduğunu biliyoruz.  Bu 16 bitin ilk iki biti RPL denilen bir değer taşır. Bu değer korumayla ilgilidir ve ilerleyen yazılarda anlatılacaktır. Ancak şunu bilelim ki bir selektörün RPL değeri ulaşmak istediği segmentin DPL değerinden daha büyükse, Koruma mekanizması bu erişime izin vermez.</p>
<p>3. bit ise o selektörün hangi tablodan eleman gösterdiğini belirler. Bu bit sıfır ise index GDT tablosunun 1 ise LDT tablosunundur.</p>
<p>Geriye kalan 13 bit ise selektörün kendisidir. 13 bit ile yazılabilecek en büyük sayı (2^13=8192) dir. O halde GDT ve LDT tablolarının neden en fazla 8192 eleman alabildiğini anladınız ;)</p>
<p>Segmentasyon aşamasında kullanılan selektör, tanımlayıcı gibi yapıları ayrıntılı bir şekilde inceledik. Şimdi de Sayfalama aşamasında kullanılan Sayfa dizini girdisi ve sayfa tablosu girdisi kavramlarını inceleyelim.</p>
<p><em><strong>Sayfa Dizini ve Sayfa Tablosu Girdileri </strong></em></p>
<p>Sayfalama mekanizmasını anlatırken çizdiğim grafiklerden sayfa tablosu ve sayfa dizini girdilerinin 32 bit olduğunu çıkarabilirsiniz.</p>
<p>Sayfa tablosu ve Sayfa dizini 1024 girdi alabilir ve her girdinin boyu 32 bit yani 4 bayttır. O halde bir sayfa tablosu ya da sayfa dizini toplamda 4 kb yani bir sayfa ya da  çerçeve boyundadır.</p>
<p>Sayfa tablosundaki her girdinin 4 kb boyundaki sayfaları gösterdiğini biliyoruz,  her sayfa tablosuda 1024 girdiye sahip olduğuna göre 4*1024 =4MB yani bir sayfa tablosu toplamda 4 mb bellek adresliyordu.  Sayfa dizini de 1024 girdiye sahipti ve her girdisi bir sayfa tablosunu gösteriyordu. O halde 1024*4 mb= 4 GB yani toplamda 4 Gb lik belleğin adreslenebileceğini buluyoruz.</p>
<p>Şimdi grafik üzerinde sayfa tablosu ve sayfa dizini girdilerini bit bit inceleyelim.</p>
<p><img class="aligncenter size-full wp-image-78" title="sayfadizin" src="http://kutalmis.files.wordpress.com/2009/10/sayfadizin.jpg?w=495" alt="sayfadizin"   /><img class="aligncenter size-full wp-image-79" title="sayfatablo" src="http://kutalmis.files.wordpress.com/2009/10/sayfatablo.jpg?w=495" alt="sayfatablo"   />Gördüğünüz gibi Sayfa dizini ve sayfa tablosu girdileri neredeyse aynı.  Sayfa adresinin ve sayfa tablosu adresinin 20 bit olması dikkatinizi çekmiş olabilir.</p>
<p>Bunun sebebi şudur. Burada tutulan adres 4kb nin katları şeklinde olan bir sayıdır. Yani burada sayfanın ya da sayfa tablosunun tam adresi değil kaçıncı 4 kb de olduğu yazar. Sayfa tablosu ve sayfa dizini bellekte 4 kb nin katı olan bir adrese yerleştirilir ve her sayfa tablosunun ve dizininin toplam boyu 4 kb dir. Sebebini yukarda anlatmıştım (1024 * 4 bayt= 4 kb)</p>
<p>Ayrıca sistem olarak yazdığım 3 bit, sistem programcısına bırakılmıştır, işletim sistemi yazanlar genelde sayfanın hangi sıklıkta kullanıldığını test etmek için istatistik amacıyla kullanırlar.</p>
<p>Şimdi en sağdan başlayarak bit bit açıklayalım.</p>
<p>P biti : Bu bit o sayfanın ya da sayfa tablosunun bellekte olup olmadığını bildirir. Eğer bit 1 ise sayfa yada sayfa tablosu bellektedir, 0 ise değildir.</p>
<p>Segment tanımlayıcılarındaki P bitini anlatırken bunun ne amaçla kullanıldığından bahsetmiştim.</p>
<p>R/W biti : Sayfanın ya da sayfa tablosunun okunup yazılabilirliğini belirler.</p>
<p>U/S biti : Sayfaya yada sayfa tablosuna uygulama programcılarını erişimini belirler.</p>
<p>Şimdi bu iki bitin kombinasyonları sonucu sayfa yada sayfa tablosuna erişimleri tabloda inceleyelim.</p>
<p><img class="aligncenter size-full wp-image-80" title="RW_US" src="http://kutalmis.files.wordpress.com/2009/10/rw_us.jpg?w=495" alt="RW_US"   /></p>
<p>PCD biti : İşlemcinin L1,L2 cahcelerinin sayfalar için kullanılıp kullanılmayacağını belirler. PCD 0 ise işlemci cacheleri kullanılır.</p>
<p>PWT biti : cache mekanizması ile ilgilidir. PWT 0 ise içsel tampondan okuma ve yazma yapılabilir.</p>
<p>A biti: O sayfaya ya da sayfa tablosuna her erişimde bu bit set edilir. İstatistik ile ilgilidir.</p>
<p>D biti : O sayfaya her yazma işleminde bu bit set edilir. Yine istatistik için kullanılır.</p>
<p>Sayfa dizini tablosunda D biti yerinde 0 vardır. Bu bit rezerve edilmiştir.</p>
<p>PS biti: Bu bit sayfa boyutu ile ilgilidir. Eğer bu bit 0 ise 4 kb sayfa boyu, 1 ise 4 mb sayfa boyu kullanılır. Henüz 4 mb sayfa boyu kullanan işletim sistem yok sanırım. Sayfa tablosu girdisinde bu bitin yerinde 0 vardır ve rezerve edilmiştir.</p>
<p>G biti : O sayfanın global olmasını sağlar, Sayfa dizin tablosu için anlamsızdır.</p>
<p>Sonunda bitti. Saat 19:30 da yazmaya başladım ve saat tam 03:00 yaklaşık 7,5 saat olmuş, resimler çok uğraştırdı ama bitti sonunda :)</p>
<p>Bu yazıda bellek erişiminin adımlarını ve bellek erişiminde kullanılan yapıları inceledik. Bir sonraki yazıda Bu aşamalarda yapılan koruma kontrolünü ve koruma mekanizmasının ayrıntılarını işleyeceğim.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/71/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=71&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2009/10/22/korumali-modda-hafiza-yonetimi-segmentasyon-ve-sayfalama/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/segmentasyon2.jpg" medium="image">
			<media:title type="html">Segmentasyon2</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/sayfalama.jpg" medium="image">
			<media:title type="html">sayfalama</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/tanimlayici1.jpg" medium="image">
			<media:title type="html">tanimlayici</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/tip.jpg" medium="image">
			<media:title type="html">tip</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/sayfadizin.jpg" medium="image">
			<media:title type="html">sayfadizin</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/sayfatablo.jpg" medium="image">
			<media:title type="html">sayfatablo</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/rw_us.jpg" medium="image">
			<media:title type="html">RW_US</media:title>
		</media:content>
	</item>
		<item>
		<title>İntel 386 Ailesi ve Korumalı Mod Yazılım Mimarisi</title>
		<link>http://kutalmis.wordpress.com/2009/10/21/intel-386-ailesi-ve-korumali-mod-yazilim-mimarisi/</link>
		<comments>http://kutalmis.wordpress.com/2009/10/21/intel-386-ailesi-ve-korumali-mod-yazilim-mimarisi/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 01:46:29 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[Sistem Programlama]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[Korumalı mod nedir]]></category>
		<category><![CDATA[Programlama]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=59</guid>
		<description><![CDATA[Koruma kavramının ne olduğunu ve neden gerektiğini  &#8220;İşletim Sistemi Nedir&#8221; başlıklı yazımda kabaca anlatmıştım. Bu yazıda ise intel işlemcilerinin korumalı mod mimarisini ve korumalı modla gelen yenilikleri inceleyeceğiz. 32 bit intel işlemcileri aynı zamanda birer 16 bitlik işlemci görevi görür . İntel,  geçmişe uyumluluğu korumak amacıyla işlemciyi çeşitli çalışma modlarına ayırmıştır.  Her 32 bit intel [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=59&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Koruma kavramının ne olduğunu ve neden gerektiğini  <a href="http://kutalmis.wordpress.com/2009/10/19/isletim-sistemi-nedir/">&#8220;İşletim Sistemi Nedir&#8221;</a> başlıklı yazımda kabaca anlatmıştım.</p>
<p>Bu yazıda ise intel işlemcilerinin korumalı mod mimarisini ve korumalı modla gelen yenilikleri inceleyeceğiz.</p>
<p>32 bit intel işlemcileri aynı zamanda birer 16 bitlik işlemci görevi görür . İntel,  geçmişe uyumluluğu korumak amacıyla işlemciyi çeşitli çalışma modlarına ayırmıştır.  Her 32 bit intel işlemcisi  çalışmaya gerçek modda, bir 8086 gibi başlar.</p>
<p>Korumalı moda geçmek programcının görevidir.</p>
<p><strong>Gerçek Mod</strong></p>
<p>Gerçek modda işlemci tipik bir 8086 gibi çalışır, 20 adres bacağı kullanır , 1 mb lik bellek adresleyebilir ve 16 bitlik yazmaçları kullanır.</p>
<p>Bellek erişimi 16 bitlik bir segment yazmacı ve 16 bitlik bir offset değeri ile sağlanır.</p>
<p>Bellek erişimi için toplamda 16+16= 32 bit kullanıldığı halde ram ile cpu arasında toplam 20 adres bacağı olduğu için ancak 2^20=1 mb lik bir adres kullanılabilir.</p>
<p>Segment yazmacı belleğin başından itibaren paragraf sayısını tutar. Bir paragraf 16 bayttır.  Offset ise bu taban adresinden itibaren 64 kb lik bir alanı gösterebilen 16 bitlik bir değerdir.</p>
<p>Yani gerçek modda belleğe erişebilmek için sagment yazmacındaki değeri 16 ile çarpılır ve  offset değeri buna eklenir. Böylece fiziksel adres elde edilir.</p>
<p>Örneğin segment yazmacındaki değer 100 ise bu, taban adres belleğin 100. paragrafı yani, 1600. baytıdır demektir.</p>
<p>Bellek  adresinin 16 ile çarpılması, hex(16 lık ) sistemde 0&#215;10 ile çarpılması demektir. Yani sonuna bir sıfır eklenmesi..</p>
<p>O halde bellek adresini hexadecimal sistemde yazarsak, segment yazmacındaki değerin sonuna bir sıfır ekleyip offset değeri ile toplayınca gerçek fiziksel adresi elde ederiz.</p>
<p><strong>Korumalı Mod</strong></p>
<p>Korumalı mod, işlemcinin en gelişmiş modudur, işlemci bu modda 32 bitlik adresler ve yazmaçları kullanır,  4 GB fiziksel belleği adresleyebilir.</p>
<p>Korumalı modda bellek erişimi GDT, LDT  tabloları  aracılığıyla birkaç aşamada gerçekleşir.  Ayrıca sayfalama mekanizması aktifse, sayfa dizini ve sayfa tabloları da bellek erişiminde birer basamak olmaktadır.</p>
<p>Ayrıca bu modlar dışında virtual86 modu bulunmaktadır. Bu mod ise gerçek mod programlarının korumalı mod altında çalışabilmesi için düşünülmüştür.</p>
<p><strong><span id="more-59"></span>I 386 Ailesi Genel Mimari</strong></p>
<p><em><strong>Yazmaçlar :</strong> </em>32 bit işlemcilerde 8086 dan kalan yazmaçlar genişletilerek 32 bit yapılmıştır.  Ancak genel amaçlı yazmaçların yine 16 bit ve 8 bitlik parçaları kullanılabilir.</p>
<p>Örneğin Eax  yazmacı 32 bitliktir, ancak 16 bitlik Ax parçası bağımsız olarak kullanılabilir. Yine 8 bitlik Ah ve Al parçaları bağımsız olarak kullanılabilir.</p>
<p>Eax&#8217; in diğer 16 bitlik parçası ise bağımsız olarak kullanılamaz.</p>
<p>Segment yazmacları 16 bit olarak bırakılmıştır, ayrıca FS ve GS olmak üzere iki yeni segment yazmacı eklenmiştir.</p>
<p>Bunların haricinde korumalı moda özgü birçok yeni yazmaç eklenmiştir. Bunlar,</p>
<p>Koruma Yazmaçları: GDTR, LDTR, IDTR,TR yazmaçlarıdır.</p>
<p>Kontrol Yazmaçları: CR0,CR1,CR2,CR3,CR4 yazmaçlarıdır. (CR4 pentium işlemcileri ile eklenmiştir)</p>
<p>Debug Yazmaçları : DR0,DR1,DR2,DR3,DR4,DR5,DR6,DR7  olmak üzere 8 tanedir.</p>
<p>Test Yazmaçları : TR0,TR1,TR2,TR3,TR4 olmak üzere 5 tanedir. (TR2,TR3 ve TR4 486 işlemcileri ile eklenmiştir)</p>
<p>Şimdi bu yazmaçların ne işe yaradığını biraz daha ayrıntılı bir şekilde işleyelim.</p>
<p><strong>GDTR, LDTR, IDTR,TR Yazmaçları</strong></p>
<p>Bu yazmaçlar işletim sistemi için hayati önem taşıyan tablolara işaret eder.</p>
<p><strong>GDTR :</strong> Global Descriptor Table Register, adından da anlaşılacağı üzere global tanımlayıcı tablosuna(GDT)  işaret eder. Yani bu yazmaç GDT&#8217;nin adresini tutmaktadır.</p>
<p>Global tanımlayıcı tablosu bellekteki segmentlerin bilgilerini tutan tanımlayıcılardan (Descriptor) oluşur. Her tanımlayıcı bellekteki bir segmentin taban adresi , limiti (uzunluğu) , erişim hakları gibi kritik bilgileri tutmaktadır. Sistemde bir tane GDT vardır.</p>
<p><strong>LDTR </strong>: Local Descriptor Table Register, bu yazmaç aslında Global Tanımlayıcı Tablodaki (GDT) bir tanımlayıcıyı gösterir. Bu tanımlayıcı ise yerel tanımlayıcı tablosu(LDT) nun adresini taşır. Yani LDTR, GDTR gibi doğrudan tabloya işaret etmez, o sadece GDT içindeki bir tanımlayıcıya işaret eder. LDT nin asıl adresi bu tanımlayıcıdadır.</p>
<p>LDT sistemde hiç olmayabilir ya da tüm süreçler birtane LDT yi paylaşabilir.</p>
<p>GDT ve LDT tabloları en fazla 8192 adet tanımlayıcı içerebilir. Bunun sebebi daha sonra anlatılacaktır.</p>
<p><strong>IDTR</strong> : Interrupt Descriptor Table Register,  Bu yazmaç IDT tablosuna işaret eder, IDT (kesme tanımlayıcı tablosu) tablosunun temel  görevi sistemde oluşan  kesmeleri yönetecek olan fonksiyonların bellek adresini tutmaktır.</p>
<p>IDT tablosu içerisindeki her bir tanımlayıcıya gate denilmektedir,  Bir kesme oluştuğu zaman gerçek moddaki gibi kesme vektöründen kesme yönetici fonksiyonunun adresi alınmaz. Buna karşılık , IDTR yazmacı aracılığıyla IDT tablosuna erişilerek ilgili kesme yönetici fonksiyonunun bellek adresi elde edilir ve fonksiyon çağırılır.</p>
<p>Şunu da belirtelim, IDT deki gateler kesme fonksiyonunun offsetini ve bir de GDT tablosu indexi tutarlar. Adres önce GDT den taban adres alınıp offset ile toplanarak bulunur.</p>
<p>IDT tablosu en fazla 256 girdi içerir. Toplam kesme sayısının 256 olduğunu hatırlayın.</p>
<p><strong>TR : </strong>Task Register, Bu yazmaç o an çalışan sürecin TSS denilen yapısına işaret eder.  TSS yapısı süreç ile ilgili tüm bilgileri tutar.</p>
<p>Aslında TR yazmacındaki 16 bitlik seçici yardımıyla GDT den TSS bilgilerini tutan bir tanımlayıcı seçilir ve TSS ye o şekilde erişilir.</p>
<p>Bu bölümde sadece bu yazmaçları tanıttığım için tam olarak anlamadığınız yerleri kafanıza takmayın. Bellek erişimi bölümünde bu yazmaçların kaç bit olduğu, hangi bitlerin ne bilgiler tuttuğu gibi konuları ayrıntılı biçimde işleyeceğiz.</p>
<p>Bu arada Register,Yazmaç,Kaydedici aynı kavramlardır. Bazen birbiri yerine kullanabilirim, kavram karmaşası oluşmasın.</p>
<p>Evet şimdi de kontrol yazmaçlarını inceleyelim.</p>
<p><strong>CR0 : </strong>Control Register 0 ,Bu kaydedici bence işlemcinin en önemli kaydedicisidir :). Çünkü yazının başından beri bahsettiğimiz, korumalı mod, sayfalama mekanizması gibi kavramlar sadece bu yazmacın bir bitine bağlıdır.</p>
<p>CR0 yazmacının PG biti (31. bit) 1 yapılırsa sayfalama aktif hale geçer. Aynı şekilde PE biti ( ilk bit) 1 yapılarak gerçek moddan korumalı moda geçilir. Tabiki korumalı moda geçmeden önce bazı hazırlıkların yapılmış olması gereklidir.(GTD IDT gibi tabloların doldurulması A20 adres bacağının aktiflenmesi vs.)</p>
<p>Bu arada PG-Paging , PE ise Protected Enable  demektir.  CR0 ın diğer bitleri de çok önemlidir ancak bunları ayrıntısıyla açıklamayı sonraya bırakıyorum.</p>
<p><strong>CR1 : </strong>Control Register 1, bu yazmaç hiç bir işe yazamaz, intel rezerve etmiştir. Ancak siz isterseniz kernel modda genel amaçlı yazmaç olarak kullanabilirsiniz  :)</p>
<p><strong>CR2 : </strong>Control Register 2, bu yazmaç sayfalama hatası oluştuğunda hata oluşan sayfanın adresini tutar. Sayfalama aktif değilse bir işe yaramaz.</p>
<p><strong>CR3 : </strong>Control Register 3, bu yazmaç Sayfa Dizin Tablosunun &#8220;fiziksel&#8221; adresini tutar. Ayrıca bazı bitleri cache mekanizması ile ilgilidir.</p>
<p>Bu yazmaç sayfa dizin tablosunun adresini 4 kb nin katı olarak tutmaktadır. Yani 20 bit ile sayfa dizin tablosunun kaçıncı çerçevede (frame) olduğunu tutar. Örneğin buradaki değer 50 ise 50*4kb=200kb yani tablo 200kb fiziksel adresindedir.</p>
<p>Bellek erişimi bölümünde sayfa dizin tablosunun ne olduğunu çok daha iyi anlayacaksınız.</p>
<p><strong>CR4 : </strong>Control Register 4,  pentiumlarla birlikte eklenen ve modele has bazı özellikler sunan bir yazmaçtır. Bizi ilgilendirmez :)</p>
<p>Debug kaydedicilerinden bahsedelim. Bu kaydediciler debug işlemi için düşünülmüşlerdir. DR4 ve DR5 ise rezerve edilmiştir Bu yazmaçlar bizim de pek işimize yaramaz ( debugger yazmayacaksak).</p>
<p>Test yazmaçları ise işlemcinin cache işlemlerini yönetmek için kullanılır. Biz pek kullanmayacağız.</p>
<p>Sonraki yazılarda, segmantasyon, sayfalama yollarıyla bellek erişimi, segment-sayfa düzeyinde koruma , Ayrıcalık düzeyleri gibi konuları işleyeceğim.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=59&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2009/10/21/intel-386-ailesi-ve-korumali-mod-yazilim-mimarisi/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>
	</item>
		<item>
		<title>Dosya Sistemi Nedir? Fat Dosya Sistemi.</title>
		<link>http://kutalmis.wordpress.com/2009/10/21/dosya-sistemi-nedir-fat-dosya-sistemi/</link>
		<comments>http://kutalmis.wordpress.com/2009/10/21/dosya-sistemi-nedir-fat-dosya-sistemi/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 22:30:39 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[Sistem Programlama]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[Korumalı mod nedir]]></category>
		<category><![CDATA[Programlama]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=40</guid>
		<description><![CDATA[Dosya sistemi işletim sistemlerinin olmazsa olmazıdır. Zaten dosya sistemi olmayan birşeye işletim sistemi demek de pek mantıklı değil. Bellek yönetimi, koruma mekanizması gibi önemli konulara geçmeden önce, daha kolay anlaşılır bir konu olan dosya sistemini aradan çıkarayım : ) Öncelikle harddisklerin yapısı hakkında biraz bilgi verelim. Disklerin okunması ve yazılması, okuma/yazma kafası sayesinde olur.  Bu [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=40&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dosya sistemi işletim sistemlerinin olmazsa olmazıdır. Zaten dosya sistemi olmayan birşeye işletim sistemi demek de pek mantıklı değil.</p>
<p>Bellek yönetimi, koruma mekanizması gibi önemli konulara geçmeden önce, daha kolay anlaşılır bir konu olan dosya sistemini aradan çıkarayım : )</p>
<p>Öncelikle harddisklerin yapısı hakkında biraz bilgi verelim.</p>
<p>Disklerin okunması ve yazılması, okuma/yazma kafası sayesinde olur.  Bu kafa  ileri geri hareket ederek dönen diskin her sektörüne  erişebilirler.</p>
<p><img class="alignleft size-full wp-image-41" title="kafalar" src="http://kutalmis.files.wordpress.com/2009/10/kafalar.jpg?w=495" alt="kafalar"   /></p>
<p>Çizimim biraz kötü ama kusura bakmayın: ) &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</p>
<p>Disk, erişim kolaylığı açısından mantıksal bölümlere ayrılmıştır.</p>
<p>Bir diske yazılabilecek veya  okunabilecek en küçük veri kümesi bir sektördür.  1 baytlık bir veri yazılacak olsa bile diske en az bir sektör yazılır.</p>
<p>Disk, eş merkezli dairelere bölünmüştür ve her bir daireye  iz (track) denir.  İzler sektörlerden oluşur. Her izde eşit sayıda sektör bulunur.</p>
<p><img class="alignleft size-full wp-image-42" title="sektor" src="http://kutalmis.files.wordpress.com/2009/10/sektor.jpg?w=495" alt="sektor"   /></p>
<p>Görüldüğü gibi en iç izde de en dış izde de aynı sayıda sektör bulunmakta. Farklı izler farklı çizgisel hızda döndükleri için bu gereklidir.</p>
<p>Ayrıca alt ata bulunan diskler deki aynı izler bir silindir oluşturur. Örneğin birinci diskteki 10. iz ve ikinci diskteki 10. iz toplamda bir silindir oluşturur.</p>
<p>Harddisk mantığını kavradıktan sonra Dosya sistemine neden ihtiyaç duyarız bundan bahsedelim.</p>
<p>Kullanıcılar diske mantıksal dosyalar üzerinden erişirler. Mesela bir klasör oluşturur, adına MP3 der ve müziklerinizi içine yerleştirsiniz. Başka bir klasör&#8217;e programlar der ve içine programları yerleştirirsiniz.</p>
<p>Bu iki klasör mantıksal olarak birbirinden farklı olmasına karşın,  işlemci açısından aralarında hiçbir fark yoktur. İşlemci harddiski bir sektör deryası olarak görür sadece.  Yani onun için dosya, mp3, program yoktur. xxxx numaralı sektör vardır.</p>
<p>Oysa kullanıcının hangi dosyasının kaçıncı sektörde olduğunu, devamının hangi sektörlerde bulunduğunu aklında tutamaz.</p>
<p>O halde bunları tutacak bir sistem programı yazılırsa biz sadece dosyanın ismiyle o dosyaya erişebiliriz.  İşte bu sistem programı dosya sistemidir.</p>
<p><span id="more-40"></span></p>
<p><img title="Devamı..." src="../wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" />Öyleyse dosya sistemi, dosyanın hangi sektörden başladığını, boyutunu, bir sektörden büyükse devamının hangi sektörlerde olduğunu, adını ve diğer bilgilerini tutan temel işletim sistemi yapısıdır.</p>
<p>Dosya sistemlerinin dosyaları tutma şekilleri farklılık gösterir. Ancak basitliği ve kullanışlılığı açısında FAT dosya sistemini burada anlatmak istiyorum.</p>
<p><strong>Fat Dosya Sistemi</strong></p>
<p>Fat dosya sistemi, fat tablosundaki her elemanın bit sayısına göre, fat 12, fat 16, fat 32  olarak üçe ayrılır.</p>
<p>Biz fat 12 sistemini inceleyeceğiz ancak hepsi aynı mantık.</p>
<p>Fat dosya sisteminin temel mantığı dosyaların  hangi bölümlerinin hangi sektörlerde olduğunun bir tabloda (Fat tablosu) tutulmasına dayanır.</p>
<p>Fat 12 dosya sisteminde bazı sektörler dosya sistemi tarafından özel amaçlarla kullanılır.</p>
<p>Boot sektör: Disk yapısı, dosya sistemi ile ilgili bilgiler boot sektörde saklanır.</p>
<p>1-9 arası sektörler       :  Burada Fat tablosu bulunur.</p>
<p>10-18 arası sektörler :  Burada yedek Fat tablosu bulunur.</p>
<p>19-32 arası sektörler : Burada da kök dizin bulunur..</p>
<p>Kalan tüm sektörler veri sektörleridir, özel anlamları yoktur.</p>
<p>Şimdi biraz daha ayrıntılı açıklayalım.</p>
<p><strong>Boot sektör</strong></p>
<p>Bu sektör diskin fiziksel bilgilerini, dosya sistemi hakkında temel bilgileri tutar. Ayrıca işletim sisteminin yüklenmesi bu sektör aracılığı ile olur. Dolayısıyla Diskteki en önemli sektördür.</p>
<p>Boot sektördeki önemli bilgiler ve yerleri şöyledir.</p>
<p><img class="alignleft size-full wp-image-43" title="boot" src="http://kutalmis.files.wordpress.com/2009/10/boot.jpg?w=495" alt="boot"   /></p>
<p>Görüldüğü gibi boot sektör bir jmp komutu ile başlamaktadır. Bu komut ile bilgi amaçlı olan baytlar atlanarak işletim sistemini yükleyen koda geçilir.</p>
<p><strong>Kök Dizin</strong></p>
<p>Kök dizin, dosya adı, uzantısı, ilk sektör  gibi bilgileri tutan ana dizindir.  Bir dosya ismi alındığında başvurulan ilk yer kökdizindir.</p>
<p>Dosya ismi kök dizin girdileri arasında aranır ve bulunduktan sonra bu dosyanın ilk sektör numarası bulunur. Daha sonra Fat tablosuna başvurulur.</p>
<p>Dosya sisteminde dosyalar şu formda tutulur.</p>
<p>Dosya Adı               : 8 bayt</p>
<p>Dosya Uzantısı     : 3 bayt</p>
<p>Dosya özellikleri :  1 bayt</p>
<p>Ayrılmış baytlar : 10 bayt</p>
<p>Saat                          : 2 bayt</p>
<p>Tarih                        : 2 bayt</p>
<p>İlk  sektör              : 2 bayt</p>
<p>Dosya boyutu      : 4 bayt</p>
<p>Ayrıca dosya adının ilk karakteri de önemlidir,  ilk karakter 0 ise kök dizindeki o giriş kullanılmamaktadır ,  eğer 0&#215;5 ise dosyanın ilk harfinin 0xE5 olduğu anlaşılır, eğer ilk karekter 0xE5 ise o dosya silinmiştir.</p>
<p><strong>Fat tabloları</strong></p>
<p>Dosyalara ait sektörlerin bağlı liste yapısıyla tutulduğu tablolardır. İlk tablo asıl kullanılan tablodur, 2. tablo ise yedektir ve kullanılmaz.</p>
<p>Bir dosya ismi ile dosyaya erişmeye çalıştığımızda öncelikle kök dizin girdileri arasında dosya ismi bulunur.  Daha sonra o dosyanın ilk sektör bulunur ve Fat tablosu ile sonraki sektörlere ulaşılır.</p>
<p>Her bir fat girdisi 12 bit uzunluğundadır. Bu fat girdilerinde bazı değerler özel anlam taşır. İlk iki fat elemanı (0,1) kullanılmaz.</p>
<p>Eğer fat elemanı içindeki değer 0 ise o sektör kullanılmıyordur, 0xFF0-0xFF6 ise ayrılmış sektördür,</p>
<p>0xFF7 ise bozuk olarak işaretlenmiş sektördür,</p>
<p>0xFF8-0xFFF ise o dosyadaki son sektördür.</p>
<p>Şimdi Fat tablosunun yapısını ayrıntılı olarak inceleyelim.  Fat tablosunun her elemanı dosya sistemindeki bir sektörü simgeler.  Yani her fat indexi o numaralı sektörü simgeler. Ancak içinde tuttuğu 12 bitlik değer ise birsonraki sektörün yerini gösterir.</p>
<p>Örneğin kök dizinden aldığımız sektör 100 olsun.  Bu durumda dosyanın 100 numaralı sektörden başladığı bellidir, dosyanın diğer sektörlerine erişmek için fat tablosundan 100 numaralı fat elemanı bulunur ve bu elemanın içerdiği değere bakılır. Örneğin bu değer 58 ise, dosyanın ilk parçası 100. ikinci parçası 58.  sektörde demektir.</p>
<p>Daha sonra 58 numaralı fat elemanına bakılır, bu değerde örneğin 0xFF8 değerini taşıyorsa o dosyanın sonuna gelinmiş demektir.  Demekki dosyamız 1 kb boyutundaymış.</p>
<p>Örneğin, asd.txt isimli dosyayı arıyoruz, öncelikle kök dizindeki girdiler taranarak bu isimli dosya bulunur. Daha sonra yine kök dizinden bu dosyanın ilk sektörü bulunur. Örneğin 60 olsun.  Daha sonra 60. fat elemanından sonraki sektör numarası alınır örneğin 86 olsun. Daha sonra 86 fat elemanından bir sonraki sektör numarası alınır örneğin 87. Son olarak 87. fat elemanından 0xFF8 değeri alınır ve artık dosya sonu oldugu anlaşılır.</p>
<p>Bu durumda da dosyamız, asd.txt dir ve 60,86,87 sektörlerde bulunur. Bu sektröler belleğe yerleştirilerek istenilen işlem yapılabilir.</p>
<p>Bu arada şunu da belirteyim. Her fat girdisi 12 bit(1,5 bayt) olduğu için örneğin 10. fat elemanı 15. bayttadır. Bu yüzden fat elemanına erişilirken bu dönüşümün yapılması gereklidir.</p>
<p>Fat elemanı indexi = ilk sektör * 3 /2</p>
<p>Dönüşümü yapılarak doğru indek bulunur.</p>
<p>Aslında fat 12 sisteminde bulunan bu indexlere eklemeler yapılır, her fat elemanının içerdiği değeri bulmak için bazı dönüşümler yapılır, bulunan sektör sayısına 31 eklenir vs. Bu tür ufak tefek matematik hesabı yapmak gerekir ancak fat dosya sisteminin temel mantığı böyledir.  Bu bahsettiğim düzeltmeleri filan burada anlatmamın bir mantığı yok.  Daha sonra kod yazarken bu işlemleri mecburen yapacağımız için ayrıntısıyla bahsedeceğim.</p>
<p>Yine de burada anlattığım sektör bulma olayının (sayısal anlamda) tam doğru olmadığını bilin. Aradaki matematiksel hesapları önemsemeyin : ).</p>
<p>Artık harrdiskte bölünme (fragmentation) ve cluster  kavramlarından bahsetme zamanı geldi sanırım.</p>
<p><strong>Diskte parçalanma (fragmentation) ve Cluster kavramı.</strong></p>
<p>Örneğin 120 kb boyutunda bir dosyamız olsun. Bu dosyayı ardarda diske yazdığımızı düşünelim.  Peşinden birçok dosya daha eklediğimizi düşünelim.</p>
<p>Daha sonra 120kb lik dosyayı silmemiz gerekti ve sildik. Doğal olarak harddiskimizde 120kb lik bir boşluk oluştu. Sonra elimizdeki 130kb lik dosyayı yeniden diske yazmak istediğimizde 120kb lik boşluğa sığmayacağı için yeni bir bölgeye yazılması gerekecek. Yani 120 kb lik boşluğu ondan daha büyük dosyalar için kullanamayacağız.</p>
<p>İşte bu şekilde küçük boşluklar biriktikçe diskimizin %50 si dolu olduğu halde diskimizin %80-90 lık bölümünü kullanamayız. Bu soruna parçalanma (fragmentation) denilmektedir.</p>
<p>Bu sorunun çözümü cluster yöntemi ile çözülür. Bu yöntemde harddisk 4-8 veya daha fazla sektörden oluşan ve cluster denilen atomik parçalara ayrılır.</p>
<p>Yani diske yazılabilecek en küçük veri artık bir sektör değil bir cluster dir. Genelde bir cluster boyu 8 sektör yani 4 kb dir.</p>
<p>Harddisk 4 kb lik bölümlere ayrıldığı için 1 baytlık bir veri bile yazacak olsak bir cluster yazmış oluruz.</p>
<p>Bu durumda büyük bir dosya harddiske yazılmadan önce clusterlere ayrılır ve her bir clusteri harddiskteki boş clusterlere yerleştirilir. Daha sonra dosya sistemine bu clusterlerin yerleri girilir.</p>
<p>Deminki parçalanma sorununa dönelim, cluster yöntemini kullandığımızda veri 120kb lik tek parça değil 30 tane cluster olarak uygun boşluklara yazılır. Daha sonra bu veri silindiğinde tekrar yazılacak olan 130 kb lik dosyanın ilk 30 clusteri silinen dosyadan kalan boşluğa yerleştirilir ve sadece kalan 3 cluster yeni bir bölgeye yazılır. Böylece parçalanma sorunu ortadan kalkar ve harddisk son derece verimli kullanılmış olur.</p>
<p>Peki bir cluster boyu kaç sektör olmalıdır. Cluster boyutu çok küçük olursa dosya birçok küçük parçaya ayrılacağından dosyaya erişmeye çalıştığımızda harddisk kafası fazla hareket eder ve dosyaya erişim yavaş olur.</p>
<p>Cluster boyu çok büyük olduğunda ise  dosya sonunda kalan boşluklar çok fazla olur ve harddisk verimsiz kullanılmış olur.</p>
<p>Örneğin bir cluster boyu 60 sektör yani 30 kb olsun. Harddiske yazacağımız veri ise 31 kb olsun. Bu durumda 30 kb ilk clustere 1 kb ise ikinci clustere yazılır. Yani 1 kb lik bir veri için 30 kb lik alan işgal edilmiş olur. Dosya sayısı arttıkça bu alanlar hatırı sayılır değerlere ulaşmaya başlar. Ayrıca 512 baytlık bir metin dosyası için de 60 katı yer ayrılması iyi bir çözüm değildir.</p>
<p>İşte bunun için en uygun değer 4 kb yani 8 sektördür.</p>
<p>Windows Xp sisteminde de bir cluster 4 kb dir. Bunun bellek yönetimi açısından avantajları da vardır.  Çünkü bellek sayfaları da 4 kb dir ve bir program disk üzerinde 30 cluster ise bellek üzerinde de 30 sayfa olmaktadır.</p>
<p>Ayrıca XP de cluster boyunu test etmek için şu işlemi yapabilrisiniz.</p>
<p>Masaüstünde yeni bir metin dosyası oluşturun ve içine bir kaç harf yazın. Dosyayı kaydediğ özelliklerine baktığınızda gerçek boy x(kaç harf yazdıysan) bayt diskteki boyut 4096 bayt yazar.</p>
<p>.txt dosyasının içine 4095 bayt yazarsanız diskteki boyut 4 kb, iki harf daha ekleyip 4097 bayt yazarsanız diskteki boyut 8 kb olacaktır. Yani ikinci clustere geçilecektir.</p>
<p>Dosya sistemi hakkında bilmemiz gerekenler şimdilik bu kadar, sonraki yazılarda artık bellek yönetimi ve korumalı mod mimarisine geçeceğiz.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=40&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2009/10/21/dosya-sistemi-nedir-fat-dosya-sistemi/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/kafalar.jpg" medium="image">
			<media:title type="html">kafalar</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/sektor.jpg" medium="image">
			<media:title type="html">sektor</media:title>
		</media:content>

		<media:content url="http://kutalmis.files.wordpress.com/2009/10/boot.jpg" medium="image">
			<media:title type="html">boot</media:title>
		</media:content>
	</item>
		<item>
		<title>C ile Soket Programlama</title>
		<link>http://kutalmis.wordpress.com/2009/10/19/c-ile-soket-programlama/</link>
		<comments>http://kutalmis.wordpress.com/2009/10/19/c-ile-soket-programlama/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 16:10:28 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[C Programlama Dili]]></category>
		<category><![CDATA[Soket Programlama]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[Korumalı mod nedir]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Sistem Programlama]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=35</guid>
		<description><![CDATA[Aylar önce tahribat.com döküman arşivi için soket programlama ile ilgili bir döküman hazırlamıştım. Aslında amaç konuyla ilgili kapsamlı Türkçe döküman bulunmasıydı, ancak döküman  yayınlanmadı. Sanırım sayfa sayısı çok olduğu içindi, ben de blogu açmışken Soket Programlamayı baştan sona irdeleyen ve ayrıntılarıyla anlatan bu dökümanı sizlerle paylaşmak istedim. Buradan indirin. Umarım faydalı olur..<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=35&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Aylar önce tahribat.com döküman arşivi için soket programlama ile ilgili bir döküman hazırlamıştım. Aslında amaç konuyla ilgili kapsamlı Türkçe döküman bulunmasıydı, ancak döküman  yayınlanmadı.</p>
<p>Sanırım sayfa sayısı çok olduğu içindi, ben de blogu açmışken Soket Programlamayı baştan sona irdeleyen ve ayrıntılarıyla anlatan bu dökümanı sizlerle paylaşmak istedim.</p>
<p><a href="http://www.sendspace.com/file/e5flqy">Buradan indirin</a>. Umarım faydalı olur..</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=35&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2009/10/19/c-ile-soket-programlama/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>
	</item>
		<item>
		<title>İşletim Sistemi Nedir?</title>
		<link>http://kutalmis.wordpress.com/2009/10/19/isletim-sistemi-nedir/</link>
		<comments>http://kutalmis.wordpress.com/2009/10/19/isletim-sistemi-nedir/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 14:53:42 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[Sistem Programlama]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[Korumalı mod nedir]]></category>
		<category><![CDATA[Programlama]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=14</guid>
		<description><![CDATA[İşletim sisteminin ana görevi donanım kaynaklarını yönetmek ve kullanıcı ile donanım arasında arayüz görevi görmektir. İşletim sistemi, kullanıcıyı alt seviyeli işlemlerden soyutlar ve kullanıcının hata yapmasını önlemek için,  tüm alt seviyeli işlemleri kendisi halleder. Örneğin kullanıcının doğrudan disk donanımına erişmesine izin vermez , onun  dosya sistemi ve  mantıksal dosyalarla diske erişimini sağlar. Aynı şekilde çevre [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=14&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>İşletim sisteminin ana görevi donanım kaynaklarını yönetmek ve kullanıcı ile donanım arasında arayüz görevi görmektir.</p>
<p>İşletim sistemi, kullanıcıyı alt seviyeli işlemlerden soyutlar ve kullanıcının hata yapmasını önlemek için,  tüm alt seviyeli işlemleri kendisi halleder.</p>
<p>Örneğin kullanıcının doğrudan disk donanımına erişmesine izin vermez , onun  dosya sistemi ve  mantıksal dosyalarla diske erişimini sağlar.</p>
<p>Aynı şekilde çevre aygıtlara erişim,  portlar&#8217;a erişim de işletim sisteminin görevidir.</p>
<p>İşletim sisteminin en temel görevlerinden biriside işlemci ve belleği süreçler(process) arasında paylaştırmaktır.</p>
<p>Ayrıca işletim sistemi bu süreçlerin servis sağlayıcısıdır ve onlara birçok sistem servisi sunar (api,sistem çağrıları).</p>
<p>Yani işletim sisteminin temel görevleri şunlardır.</p>
<p>* Bellek yönetimi</p>
<p>* Süreç yönetimi</p>
<p>* Dosya sistemi</p>
<p>* G/Ç aygıt yönetimi<span id="more-14"></span></p>
<p>İşletim sistemleri çeşitli bölümlerden oluşur. Genelde işletim sistemini hafızaya yüklemek için bir önyükleyici bulunur. Önyükleyici işletim sistemi dosyalarını yükledikten sonra kernel&#8217;e atlar.</p>
<p>Kernel(çekirdek), işletim sisteminin kalbidir ve donanımla ilgili herşey kernelin görevidir. Ayrıca sistem servislerini sunan kerneldir. Aslında kullanıcı asla kerneli kullanmaz. Genellikle arada bir kabuk vardır.</p>
<p>Shell(kabuk), işletim sisteminin servislerini kullanıcıya sunan bir arayüzdür. Bir komut satırından ibarettir ve kullanıcıdan komut alır , kernel aracılığı ile işler.</p>
<p>GUI (grafik sistemi), buna çeşitli isimler verilebilir. Pencere sistemi de denilebilir.  Grafik sistemi windows&#8217;daki gibi doğrudan kernele bağlı olabildiği gibi, Linux daki gibi sonradan yüklenebilir.</p>
<p>Grafik sisteminde kullanıcının fare donanımı ile verdiği komutlar shell aracılığı ile yada doğrudan kernele iletilir.</p>
<p>Örneğin bir programa çift tıklayarak çalıştırdığımızda aslında o programın adını shell&#8217;e yazmış oluyoruz, temelde bir fark yoktur.</p>
<p>İlk işletim sistemleri aynı anda tek işi yapabilen, yani ancak tek bir süreci çalıştırabilen sistemlerdi.</p>
<p>MsDos da böyle bir sistemdir. Oysa modern işletim sistemleri aynı anda birçok süreç çalıştırabilir.</p>
<p>Aslında işlemcinin aynı anda iki süreci çalıştırması mümkün değildir (çift çekirdekliler hariç : ).  İşlemci çok kısa sürelerle tüm süreçleri biraz çalıştırır.</p>
<p>Örneğin 100 ms de bir, süreçten sürece atlar ve biz tüm süreçlerin aynı anda çalıştığı hissine kapılırız.</p>
<p>Sistemde ne kadar süreç varsa, bir sürece sıra gelmesi o kadar geç olur. Dolayısıyla sistemin yavaşladığı hissine kapılırız.</p>
<p>Ayrıca modern işletim sistemlerinde koruma mekanizması vardır. Koruma mekanizması, bir sürecin bir başka sürecin bellek bölgesine erişimini engeller.</p>
<p>Aslında koruma mekanizması doğrudan işlemci tarafından sunulan bir mekanizmadır. İşletim sistemi, işlemciyle birlikte bunu kullanır.</p>
<p>Koruma mekanizması tek işlemli işletim sistemleri için anlamsızdır. Yani zaten hafızada tek bir süreç bulunduğu için, bu sürecin başka süreçlerin hafıza bölgelerine erişmesi mümkün değildir.</p>
<p>Oysa modern işletim sistemlerinde koruma mekanizması olmazsa olmazdır. Örnek verecek olursak..</p>
<p>****************<br />
int a,b,tp;<br />
a=50;  b=100;<br />
tp=a+b;<br />
&#8211;&gt;yetkisiz erişim başka bir program tp değişkeninin değerini 85 yaptı&#8230;<br />
printf (&#8220;%d&#8221;,tp);<br />
****************</p>
<p>Görüldüğü gibi bizimle ilgisi olmayan bir süreç, bizim sürecimizin bellek bölgesine girmiş ve tp değişkenimizin değerini değiştirmiştir. Biz program çalışırken ekranda 150 değerini görmeyi beklerken 85 değerini görüyoruz.</p>
<p>Tabi bu çok basit bir örnek, pekala bir banka bilgisayarında transfer sırasında 150 bin tl gönderilmesi beklenirken 85 bin tl de gönderilmiş olabilirdi : ).</p>
<p>İşte koruma mekanizması bu tür erişimlere kesinlikle izin vermez ve eğer bir süreç kendi bellek bölgesi dışına çıkmaya çalışırsa işlemcinin uyarısıyla işletim sistemi tarafından sonlandırılır.</p>
<p>Tabi koruma mekanizmasının da seviyeleri vardır.  Intel işlemcilernden dört adet yetki seviyesi vardır.</p>
<p>0 en yetkili seviyedir ve 3. seviye en az yetkili seviyedir. İşletim sistemleri 0. yetki seviyesinde çalışır, oysa kullanıcı programları 3. yetki seviyesinde çalışır.</p>
<p>0. yetki seviyesine kernel mod, 3. yetki seviyesine user mod denilmektedir.</p>
<p>Kernel modda çalışan bir süreç tüm belleğe erişebilir. Ancak user modda çalışan bir süreç kendi bellek bölgesi dışına çıkamaz.</p>
<p>Tabi koruma mekanizmasının bir çok ayağı vardır, örneğin sayfa düzeyinde koruma, segment düzeyinde koruma, yazma koruması vs.</p>
<p>Bunları ilerde ayrıntısıyla anlatmayı düşünüyorum. Şimdilik bu kadar yeterli sanırım.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=14&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2009/10/19/isletim-sistemi-nedir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>
	</item>
		<item>
		<title>Sistem Programcılığı Nedir?</title>
		<link>http://kutalmis.wordpress.com/2009/10/19/sistem-programciligi-nedir/</link>
		<comments>http://kutalmis.wordpress.com/2009/10/19/sistem-programciligi-nedir/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 03:40:36 +0000</pubDate>
		<dc:creator>kutalmis</dc:creator>
				<category><![CDATA[Sistem Programlama]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[Korumalı mod nedir]]></category>
		<category><![CDATA[Programlama]]></category>

		<guid isPermaLink="false">http://kutalmis.wordpress.com/?p=9</guid>
		<description><![CDATA[İlk yazımda sistem programlama nedir, sistem programcıları ne iş yapar, bu işte para varmıdır gibi genel konulardan bahsedeceğim. Sistem programcısı en basit haliyle işletim sistemi, aygıt sürücü gibi sistem programlarını yazan kişidir. Tabiki sadece bunlardan ibaret değildir. Sistem programcılığı, programcılığın en zor ancak en saygın alanını oluşturur.  Sistem programcısı her zaman makinaya yakın durur. Donanımla [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=9&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>İlk yazımda sistem programlama nedir, sistem programcıları ne iş yapar, bu işte para varmıdır gibi genel konulardan bahsedeceğim.</p>
<p>Sistem programcısı en basit haliyle işletim sistemi, aygıt sürücü gibi sistem programlarını yazan kişidir. Tabiki sadece bunlardan ibaret değildir.</p>
<p>Sistem programcılığı, programcılığın en zor ancak en saygın alanını oluşturur.  Sistem programcısı her zaman makinaya yakın durur. Donanımla doğrudan iletişim halindedir. En temel sistem kaynaklarını yönetir.</p>
<p>Günümüzde işletim sistemleri ve sürücüler yaklaşık  %80 oranında C dili ile yazılırlar. Geriye kalan kısmı ise makina dili ile yazılır.</p>
<p>C, yapısı ve yaradılış amacı gereği çok güçlü ve esnek bir dildir. C nin yaradılış amacı makina diline alternatif olmasdır ve tamamen sistem programlama amacıyla tasarlanmıştır.</p>
<p>Sadece unix işletim sistemini yeniden yazmak için, gereksinimlerden dolayı yaratılmış,  yaratıcısı olan Dennis Ritchie &#8216;nin bile ummadığı bir başarı yakalamıştır.<span id="more-9"></span></p>
<p>Bir çok dile yaratıldığında büyük gelecekler vadedilmesine rağmen bunlar unutulmuştur ve rafa kaldırılmıştır. Oysa C dili tamamen kişisel ihtiyaçtan yaratıldığı halde müthiş bir başarı yakalamıştır.</p>
<p>Bunun sebeplerinden bahsedeyim. C dili uzman bir sistem programcısı tarafından yazıldığı için,  sistem programcısının tüm ihtiyaçlarınaı karşılar.</p>
<p>Diğer programlama dilleri kullanıcıya kolaylık sağlamak için birçok gereksiz özellikle doldurulurken asıl amacından sapmıştır, burada ince nokta şudur. Kişisel ihtiyaçtan doğan dil, gerçekten işlevini fazlasıyla yerine getirirken ticaret için yaratılmış diller yok olup gitmiştir.</p>
<p>Burada yazacağım yazılar, C ve assembly dilini en azında orta derecede bilen kişiler içindir. Çünkü sistem programlama gibi detayların çok olduğu ve anlaşılması zor bir konuyu dilden bağımsız olarak anlatmak mümkün değildir.</p>
<p>Bu bloğun açılma sebebi de C dilini öğretmek değildir ne yazıkki : ) ama belli olmaz belki o işe de soyunurum.</p>
<p>Son olarak şunu söyleyim, ne yazıkki ülkemizde sistem programlama ile ilgili bir çalışma yoktur, dolayısıyla sistem programlama konusunda pek para olduğunu söyleyemeyeceğim. Tabi bir sistem programcısı uygulama programcılarını da cebinden çıkaracağı için kolay kolay aç kalmaz : )</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kutalmis.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kutalmis.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kutalmis.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kutalmis.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kutalmis.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kutalmis.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kutalmis.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kutalmis.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kutalmis.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kutalmis.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kutalmis.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kutalmis.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kutalmis.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kutalmis.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kutalmis.wordpress.com&amp;blog=10003432&amp;post=9&amp;subd=kutalmis&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kutalmis.wordpress.com/2009/10/19/sistem-programciligi-nedir/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3b8db667550c705ab87ad62c17ccb76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kutalmis</media:title>
		</media:content>
	</item>
	</channel>
</rss>
