Cumhuriyet Bayramı
Türk ulusunun Cumhuriye bayramı kutlu olsun. Bu kutlu günde büyük Atatürk’ü özlemle anıyor ve şükranlarımızı sunuyoruz.
Nice Cumhuriyet bayramlarına…

Koruma Mekanizması ve Erişim kontrolleri
Intel 386 Ailesi ve Korumalı Mod Yazılım Mimarisi başlıklı yazımda korumalı mod’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 Mekanizması
Koruma mekanizması, çeşitli koruma bitleri sayesinde bellek erişimine izin verilip verilmesine mantığına dayanır. Bir çok aşaması vardır.
Koruma mekanizmasını, segment düzeyinde koruma ve sayfa düzeyinde koruma olarak inceleyebiliriz.
Segment düzeyinde koruma
Segment düzeyinde korumanın aşamaları şunlardır.
- Ayrıcalık seviyesi kontrolü
- Limit kontrolü
- Tip kontrolü
Şimdi bunları ayrıntılı olarak inceleyelim. Yazının devamını oku »
Korumalı Mod’da Hafıza Yönetimi, Segmentasyon ve Sayfalama
Ö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 vermek istiyorum. Burada öğrendiklerimiz sadece teorik bilgi olarak kalmayacak. Bu bilgileri doğrudan kullanarak C ve Asm ile bir hobby OS yazacağız.
Bu korumalı mod’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.
Bu yüzden burada anlatacaklarımı anlamaya çalışın ve sadece teorik olmayacağı konusunda bana güvenin. Sanırım artık başlayabiliriz.
Korumalı Mod Hafıza Yönetimi
Korumalı mod’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.
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.
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.
Segmentasyon mekanizması daima aktiftir , ancak sayfalama mekanizmasını aktiflemek programcının görevidir.
GDT Nedir: 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..
Örneğin 10. tanımlayıcı bellekte 0×785400A5 adresinden başlayan ve 0×504F 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.
Segmentasyon Mekanizması : 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.
Korumalı mod’da kullanılan bellek adresleri iki bölümden oluşur. Bu 16 bitlik bir selektör ve 32 bitlik bir offset değeridir.
Ö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.
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.
Segmentasyon mekanizması ile adresin nasıl elde edildiğini aşağıdaki çizimle inceleyelim. Yazının devamını oku »
İntel 386 Ailesi ve Korumalı Mod Yazılım Mimarisi
Koruma kavramının ne olduğunu ve neden gerektiğini “İşletim Sistemi Nedir” 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 işlemcisi çalışmaya gerçek modda, bir 8086 gibi başlar.
Korumalı moda geçmek programcının görevidir.
Gerçek Mod
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.
Bellek erişimi 16 bitlik bir segment yazmacı ve 16 bitlik bir offset değeri ile sağlanır.
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.
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.
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.
Örneğin segment yazmacındaki değer 100 ise bu, taban adres belleğin 100. paragrafı yani, 1600. baytıdır demektir.
Bellek adresinin 16 ile çarpılması, hex(16 lık ) sistemde 0×10 ile çarpılması demektir. Yani sonuna bir sıfır eklenmesi..
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.
Korumalı Mod
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.
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.
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.
Dosya Sistemi Nedir? Fat Dosya Sistemi.
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 kafa ileri geri hareket ederek dönen diskin her sektörüne erişebilirler.

Çizimim biraz kötü ama kusura bakmayın: ) …………………………………………….
Disk, erişim kolaylığı açısından mantıksal bölümlere ayrılmıştır.
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.
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.

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.
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.
Harddisk mantığını kavradıktan sonra Dosya sistemine neden ihtiyaç duyarız bundan bahsedelim.
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’e programlar der ve içine programları yerleştirirsiniz.
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.
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.
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.
C ile Soket Programlama
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..
İşletim Sistemi Nedir?
İş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 aygıtlara erişim, portlar’a erişim de işletim sisteminin görevidir.
İşletim sisteminin en temel görevlerinden biriside işlemci ve belleği süreçler(process) arasında paylaştırmaktır.
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ı).
Yani işletim sisteminin temel görevleri şunlardır.
* Bellek yönetimi
* Süreç yönetimi
* Dosya sistemi
* G/Ç aygıt yönetimi Yazının devamını oku »
Sistem Programcılığı Nedir?
İ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 doğrudan iletişim halindedir. En temel sistem kaynaklarını yönetir.
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.
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.
Sadece unix işletim sistemini yeniden yazmak için, gereksinimlerden dolayı yaratılmış, yaratıcısı olan Dennis Ritchie ‘nin bile ummadığı bir başarı yakalamıştır. Yazının devamını oku »
Sonunda Açtım
Uzun süredir bir site yada blog açmayı düşünüyordum. Genel olarak C ve sistem programlamadan bahsedeceğim. Tabi bilişim konusunda da birşeyler karalarım. Umarım faydalı olur. Hayırlı olsun..