CAP Teoremi: Dağıtık Sistemlerde Neden Her Şeyi Aynı Anda Elde Edemiyoruz?

cap-teoremi-dagitik-56

Bir uygulamayı tek sunucudan çıkarıp dünyanın farklı bölgelerindeki sunuculara dağıttığınızda işler hızlanabilir, sistem daha dayanıklı olabilir ve kullanıcılar uygulamaya daha kolay ulaşabilir. Ancak ağ bağlantıları koptuğunda önemli bir seçim kapıyı çalar: Sistem doğru cevabı mı beklemeli, yoksa elindeki bilgiyle hemen cevap mı vermeli? CAP teoremi, dağıtık sistemlerin bu tatsız fakat kaçınılmaz ikilemini açıklar.

Devamı...

ARP Protokolü: IP Adresinden Ethernet Adresine Yolculuk

Bilgisayarınız aynı yerel ağdaki bir sunucuya paket göndermek istediğinde hedefin IP adresini biliyor olabilir; fakat Ethernet çerçevesini teslim edebilmek için bir de fiziksel, yani MAC adresine ihtiyaç duyar. İşte ARP (Address Resolution Protocol), “Bu IP adresi kimde ve MAC adresi nedir?” sorusunu ağdaki cihazlara sorarak iki adresleme dünyası arasında köprü kurar.

arp-protokolu-ip-40

Devamı...

Anycast: Aynı IP Adresi Dünyanın Farklı Noktalarında Nasıl Bulunur?

Bir IP adresini genellikle tek bir sunucunun internet üzerindeki ev adresi gibi düşünürüz. Oysa Anycast dünyasında aynı IP adresi İstanbul, Frankfurt, Singapur ve New York’taki sunucularda eş zamanlı olarak bulunabilir. Kullanıcı bu adresle bağlantı kurduğunda paketler sihirle çoğalmaz; internetin yönlendirme sistemi, kullanıcıyı ağ açısından en uygun noktaya götürür.

Devamı...

ACID Gerçekte Ne Anlama Geliyor? Veritabanları Neden Bu Kadar Katı?

acid-gercekte-ne-90

Bir banka hesabından diğerine para gönderdiğinizi düşünün. Para sizin hesabınızdan çıktı ama karşı tarafa ulaşmadıysa sistemin hızlı çalışması pek teselli olmaz. Veritabanlarının katılığı tam burada anlam kazanır: ACID, işlemlerin yalnızca çalışmasını değil, hata, elektrik kesintisi ve eşzamanlı kullanıcı baskısı altında bile doğru kalmasını sağlayan ilkeler bütünüdür.

Devamı...

Virtual Memory ve Page Fault: RAM Yetmeyince Ne Olur?

virtual-memory-ve-80

Bir programın onlarca gigabayt bellek kullanıyormuş gibi davranabilmesi, bilgisayarınızda gerçekten o kadar RAM bulunduğu anlamına gelmez. İşletim sistemi, virtual memory (sanal bellek) adı verilen bir illüzyon kurar: Her süreç kendisine ait, düzenli ve geniş bir adres alanı görür. RAM yetersiz kaldığında ise disk, sayfa tabloları ve page fault mekanizması sahneye çıkar.

Devamı...

Unicode’un Karanlık Tarafı: “Bir Karakter” Gerçekten Kaç Byte?

unicodeun-karanlik-tarafi-64

Ekranda tek parça görünen bir harfin bellekte de tek parça olduğunu düşünmek son derece doğal. Ne var ki bilgisayarlar için “karakter” şaşırtıcı derecede belirsiz bir kavramdır. Bir harf; kod noktası, kod birimi, byte veya kullanıcı tarafından algılanan sembol anlamına gelebilir. Emoji ailesini saymaya kalktığınızda işler tam bir Unicode korku filmine dönüşür.

Devamı...

TLB: Sanal Belleğin Hızlı Tercümanı Neden Vazgeçilmez?

Bir program bellekteki bir değişkene eriştiğinde işlemci çoğunlukla fiziksel adresi doğrudan kullanmaz. Önce sanal adresin fiziksel bellekte nereye karşılık geldiğini bulması gerekir. Bu çeviri her erişimde baştan yapılsaydı, ışık hızında çalışan işlemcimiz adres defterini karıştıran dalgın bir postacıya dönüşürdü. Translation Lookaside Buffer, yani TLB, yakın zamanda kullanılan adres çevirilerini saklayarak bu sorunu çözen küçük fakat kritik bir önbellektir.

Devamı...

Superscalar Mimari: İşlemci Bir Çevrimde Birden Fazla Komutu Nasıl Çalıştırır?

Klasik bir işlemciyi her çevrimde tek iş yapan bir aşçı gibi düşünebiliriz. Superscalar işlemci ise aynı mutfakta birden fazla çalışma tezgâhı kullanır: biri toplama yaparken diğeri bellekten malzeme getirir, bir başkası koşulu kontrol eder. Böylece uygun komutlar, tek bir saat çevrimi içinde farklı yürütme birimlerinde eş zamanlı olarak ilerleyebilir.

superscalar-mimari-islemci-95

Devamı...

SIMD ve Vektör Komutları: Tek Komutla 4, 8, 16 İşlem

simd-ve-vektor-64

Bir işlemciye aynı toplama komutunu binlerce sayı için tekrarlatmak, kasadaki görevliye ürünleri tek tek uzatmaya benzer. SIMD ise ürünleri banda dizip birkaçını birlikte işleme fikridir. Görüntü işleme, oyun motorları, bilimsel hesaplama ve yapay zekâ gibi alanlarda doğru kullanıldığında ciddi hız kazandırır; ancak “tek komut” ifadesi, bütün işin sihirli biçimde tek saat çevriminde biteceği anlamına gelmez.

Devamı...

Semaphore ve Mutex: Ortak Kaynakları Paylaşmanın İki Farklı Yolu

Birden fazla thread aynı veriye, dosyaya veya bağlantıya aynı anda ulaşmak istediğinde küçük bir trafik kaosu doğar. Bu kaosu yönetmek için kullanılan en temel araçlardan ikisi mutex ve semaphore’dur. İkisi de erişimi sınırlar; ancak mutex tek anahtarlı bir oda kapısı gibi davranırken semaphore belirli sayıda araç kabul eden bir otoparka benzer.

semaphore-ve-mutex-16

Devamı...

Process Scheduler Algoritmaları: CPU Zamanını Kim Hak Ediyor?

Bilgisayarınızda müzik çalarken kod derleyebiliyor, tarayıcıda sekmeler arasında dolaşabiliyor ve arka planda dosya indirebiliyorsanız bunu CPU’nun gizli trafik polisi olan process scheduler’a borçlusunuz. İşlemci aynı anda sınırlı sayıda işi yürütebildiği için scheduler, hazır durumdaki process’lerden hangisinin ne zaman ve ne kadar süre çalışacağını belirler. Kısacası soru şudur: CPU zamanını kim hak ediyor?

process-scheduler-algoritmalari-88

Devamı...

Pipelining: CPU Aynı Anda Nasıl Birden Fazla Komut İşler?

Bir CPU’nun aynı anda birden fazla komut çalıştırdığını duyduğumuzda, işlemcinin düzinelerce eli olan bir robot gibi davrandığını düşünebiliriz. Gerçekteyse pipelining, tek bir işi parçalara ayırıp farklı komutların farklı parçalarını eş zamanlı yürütme tekniğidir. Bir otomobil fabrikasında bir araç boyanırken diğerinin motorunun takılması gibi, işlemci de bir komutu çözerken sıradaki komutu bellekten getirebilir.

Devamı...

Out-of-Order Execution: İşlemci Program Sırasını Neden Bazen Umursamaz?

Bir programdaki komutlar belirli bir sırayla yazılır; fakat modern işlemciler bu sıraya harfiyen uymak zorunda değildir. Sonuç değişmediği sürece hazır olan komutları erkenden çalıştırabilirler. Out-of-order execution, yani sıra dışı yürütme, işlemcinin boş boş beklemek yerine komutlar arasında küçük bir lojistik operasyon yürütmesidir.

out-of-order-19

Devamı...

NUMA Mimarisi: RAM Her Çekirdeğe Gerçekten Aynı Uzaklıkta mı?

Modern bir sunucuda bütün RAM modülleri aynı anakarta takılı olsa da işlemci çekirdekleri açısından eşit uzaklıkta değildir. NUMA, yani Non-Uniform Memory Access, tam olarak bu gerçeği ifade eder: Bir çekirdeğin bazı bellek bölgelerine erişimi hızlı ve ucuzken diğerlerine erişimi daha yavaş olabilir. Kısacası RAM ortak görünür, fakat ona giden yolların uzunluğu aynı değildir.

Devamı...

MMU ve Sanal Adresleme: CPU Gerçek Belleği Nasıl Buluyor?

Bir program bellekteki 0x7FFF1234 adresine eriştiğinde CPU doğrudan RAM’in o noktasına koşmaz. Çünkü programın gördüğü adres, çoğunlukla fiziksel bir konum değil, işletim sistemi tarafından oluşturulmuş sanal bir adrestir. CPU içindeki Bellek Yönetim Birimi (MMU) bu adresi tercüme ederek gerçek RAM konumunu bulur. Kısacası MMU, belleğin simultane tercümanıdır; üstelik yanlış çeviri yaparsa program değil, bütün sistem homurdanabilir.

Devamı...

Memory-Mapped Files: Dosyalar Nasıl Bellekteymiş Gibi Davranır?

Büyük bir dosyanın içeriğine erişmek için genellikle read() çağrıları, tamponlar ve döngüler düşünürüz. Memory-mapped file yaklaşımıysa dosyanın belirli bir bölümünü sürecin sanal adres alanına bağlar. Böylece program, dosyayı gerçekten RAM’e bütünüyle yüklemeden ona sıradan bir bellek dizisiymiş gibi erişebilir. İşin arkasındaki sihir değil; sanal bellek, sayfa tabloları ve işletim sisteminin sayfa önbelleğidir.

Devamı...

LRU, LFU ve CLOCK: İşletim Sistemi Hangi Sayfayı Bellekten Atıyor?

Bir program çalışırken ihtiyaç duyduğu bütün sayfalar fiziksel belleğe sığmayabilir. İşletim sistemi bu durumda disk ile RAM arasında küçük bir sandalye kapmaca oyunu oynar: Yeni sayfa gelecek, fakat boş çerçeve yoksa içerideki sayfalardan biri çıkarılmalıdır. Peki kurban kim olacak? LRU, LFU ve CLOCK algoritmaları aynı soruya farklı ipuçlarıyla cevap verir.

Devamı...

Interrupt Sistemleri: Donanım İşletim Sisteminin Dikkatini Nasıl Çeker?

interrupt-sistemleri-donanim-62

Bilgisayarınızın işlemcisi milyonlarca komutu yürütürken klavyede bir tuşa bastığınızı nasıl fark eder? İşlemcinin sürekli “Klavye hazır mı, ağdan veri geldi mi?” diye sorması mümkün olsa da oldukça verimsizdir. Interrupt, yani kesme sistemi, donanımın işlemciye nazikçe değil, adeta omzuna dokunarak “Önemli bir olay oldu!” demesini sağlar.

Devamı...

DMA: İşlemcinin Üzerinden Veri Taşıma Yükünü Alan Kahraman

Bir diskten belleğe megabaytlarca veri aktarırken işlemcinin her baytı tek tek taşıdığını düşünün. Bu, kargo şirketinin yöneticisinin kamyonu bırakıp bütün kutuları kendisinin taşımasına benzerdi. Direct Memory Access (DMA), veri aktarımını özel bir denetleyiciye devrederek işlemciyi asıl işi olan komut yürütme için serbest bırakır. Ancak işlemci tamamen devre dışı kalmaz; aktarımı başlatır, sonucunu takip eder ve gerektiğinde hatalarla ilgilenir.

dma-islemcinin-uzerinden-35

Devamı...