Swarm Intelligence: Parçacık Sürü Optimizasyonunun Yapay Zekâdaki Yeri

Doğada merkezi bir yönetici olmadan sergilenen kolektif davranışlar, şaşırtıcı derecede başarılı sonuçlar üretir. Kuşlar yiyecek ararken birbirlerinin hareketlerinden yararlanır, balıklar tehlikeden birlikte kaçar ve karıncalar en kısa yolu kimse onlara harita vermeden bulur. Parçacık Sürü Optimizasyonu (Particle Swarm Optimization veya PSO), bu sosyal davranışı matematiksel bir optimizasyon yöntemine dönüştürür.

Devamı...

Ring 0'dan Ring 3'e: Kullanıcı Modu ve Çekirdek Modu Arasındaki Duvar

Bir müzik uygulamasının yanlışlıkla diskin tamamını silmesini veya sıradan bir oyunun klavye sürücüsünü yeniden programlamasını istemeyiz. İşletim sistemleri bu felaketleri yalnızca yazılım kurallarıyla değil, işlemcinin uyguladığı ayrıcalık seviyeleriyle engeller. x86 mimarisinde bunlar Ring 0 ile Ring 3 arasında numaralandırılan güvenlik halkalarıdır: Sayı küçüldükçe yetki büyür, sorumluluk ağırlaşır.

Devamı...

PREEMPT_RT ile Linux Gecikmesini Mikrosaniyelere İndirmek

Bir robot koluna “şimdi dur” dediğinizde komutun çekirdekte kahve molasına çıkmasını istemezsiniz. Standart Linux yüksek işlem hacmi ve adil kaynak paylaşımı için tasarlanırken endüstriyel kontrol sistemleri belirli bir işin öngörülebilir sürede tamamlanmasını ister. PREEMPT_RT, Linux çekirdeğinin uzun süre kesilemeyen bölgelerini azaltarak gecikmeyi yalnızca düşük değil, daha önemlisi tahmin edilebilir hâle getirir.

Devamı...

POSIX Sinyallerinin Anatomisi: Süreçler Birbirine Nasıl Seslenir?

Bir terminalde çalışan programa Ctrl+C bastığınızda ekranda sihir gerçekleşmez; terminal sürücüsü, çekirdek ve hedef süreç arasında dikkatle düzenlenmiş bir mesajlaşma zinciri çalışır. POSIX sinyalleri, süreçlere “dur”, “devam et”, “çocuğun sona erdi” veya “hemen toparlan” gibi kısa bildirimler gönderen, veri taşımaktan çok olay duyurmaya odaklı mekanizmalardır.

Devamı...

OOM Killer'ın Karar Mekanizması: Linux Kurbanını Nasıl Seçer?

Bir Linux sunucusunda RAM ve kullanılabilir takas alanı tükendiğinde sistem tatsız bir seçimle karşılaşır: Ya tüm makine kilitlenecek ya da bazı süreçler feda edilecektir. Kernel’ın OOM (Out of Memory) Killer bileşeni ikinci yolu seçer. Ancak süreçleri rastgele avlamaz; bellek tüketimi, yönetici tercihleri ve sürecin sistem açısından önemi gibi etkenlerden bir “kötülük” puanı üretir.

oom-killerin-karar-51

Devamı...

Mutex vs Spinlock: Beklemek mi, Boşuna Dönmek mi Daha Maliyetli?

Çok çekirdekli bir sistemde iki iş parçacığı aynı veriye uzandığında küçük bir trafik kavşağı oluşur. Mutex kırmızı ışıkta motoru kapatıp beklemeye, spinlock ise ışık yeşile dönene kadar gaza basmadan motoru çalıştırmaya benzer. Hangisinin daha hızlı olduğu, kilidin ne kadar süre tutulduğuna ve işletim sisteminin bekletme maliyetine bağlıdır.

Devamı...

Meta-Learning: Öğrenmeyi Öğrenen Modellerin Kısa Tarihi

Geleneksel makine öğrenmesinde her yeni problem için veri toplar, modeli eğitir ve sabırla sonuç bekleriz. Meta-learning ise bu rutine küçük bir itiraz getirir: Model yalnızca görevleri çözmesin, yeni bir görevi nasıl hızlı öğreneceğini de keşfetsin. Böylece binlerce örnek yerine birkaç örnekle uyum sağlayabilen, deyim yerindeyse eğitim salonunda nasıl antrenman yapacağını öğrenen sistemler ortaya çıkar.

meta-learning-ogrenmeyi-67

Devamı...

Meltdown ve Spectre: İşlemcinin Geleceği Tahmin Ederken Sırları Ele Vermesi

Modern işlemciler yalnızca hızlı koşmaz; önlerindeki yolu tahmin ederek henüz gerekli olup olmadığı bilinmeyen komutları da çalıştırır. Meltdown ve Spectre, performans uğruna geliştirilen bu davranışın mimari olarak görünmeyen fakat ölçülebilen izler bırakabildiğini gösterdi. Sonuçta saldırgan, doğrudan okuyamadığı parolaları, anahtarları ve başka süreçlere ait verileri önbellek zamanlamalarını dinleyerek çıkarabilir.

Devamı...

Linux Netfilter Kancaları: Iptables Arka Planda Nasıl Çalışır?

Bir Linux makinesi yalnızca paketleri alan bir posta kutusu değildir; gerektiğinde yönlendirici, güvenlik duvarı ve NAT geçidi olabilir. Bu yeteneklerin merkezinde, ağ paketleri çekirdek içinde ilerlerken belirli kontrol noktalarında onları yakalayan Netfilter kancaları bulunur. iptables ise bu altyapıyı yapılandırmak için kullanılan kullanıcı alanı aracıdır. Başka bir deyişle iptables trafik polisi, Netfilter ise yolların ve kontrol noktalarının kendisidir.

Devamı...

Linux initramfs'in Sırrı: Kök Dosya Sisteminden Önceki Minik Dünya

linux-initramfsin-sirri-12

Bilgisayarın güç düğmesine bastığınızda Linux doğrudan / dizinine koşmaz. Çekirdek belleğe yüklense bile gerçek kök dosya sistemine ulaşmak için disk denetleyicisi, dosya sistemi, RAID, LVM veya şifreleme sürücülerine ihtiyaç duyabilir. İşte initramfs, bu tavuk-yumurta problemini çözen, RAM üzerinde kurulmuş geçici ve küçük bir kullanıcı alanıdır.

Devamı...

Linux Çekirdeğinde Cgroups v2: Kaynak İzolasyonunun Modern Mimarisi

Bir konteynere “en fazla 512 MB bellek kullan” veya “işlemcinin yalnızca yarısını tüket” dediğimizde bu kuralları Docker’ın sihirli değneği değil, Linux çekirdeğinin control groups mekanizması uygular. Cgroups v2, ilk sürümün yıllar içinde karmaşıklaşan yapısını tek bir hiyerarşide birleştirerek kaynak yönetimini daha tutarlı, güvenli ve öngörülebilir hâle getirir.

Devamı...

İşletim Sistemlerinde Buddy Bellek Yönetimi: RAM Nasıl Parsellenir?

isletim-sistemlerinde-buddy-91

Bir işletim sistemi çekirdeği için boş RAM, gelişigüzel dağıtılabilecek dev bir tarla değildir. Sürücüler, süreçler ve çekirdek veri yapıları sürekli farklı büyüklüklerde fiziksel bellek ister. Buddy bellek yönetimi, bu talepleri hızlı karşılamak için belleği ikinin kuvvetleri büyüklüğündeki bloklara ayırır; gerektiğinde blokları ikiye böler, serbest bırakıldıklarında ise yeniden birleştirir.

Devamı...

FUSE ile Python Kullanarak Kendi Sanal Dosya Sisteminizi Yazın

Dosya sistemi yazmak denildiğinde akla çekirdek kodu, korkutucu C işaretçileri ve bilgisayarı yeniden başlatma ritüelleri gelebilir. FUSE sayesinde bunların çoğuna gerek kalmadan Python veya Go ile dosya işlemlerine kendi kurallarımızı uygulayabiliriz. Örneğin içeriğini çalışma anında üreten, buluttaki verileri dosya gibi gösteren ya da tüm yazılanları otomatik şifreleyen bir sistem geliştirebiliriz.

Devamı...

Epoll vs Kqueue: C10K Çağında Olay Dinleme Sanatı

Bir web sunucusunun aynı anda on binlerce bağlantıya cevap vermesi, yalnızca hızlı bir işlemciye sahip olmakla çözülmez. Asıl mesele, çoğu zaman hiçbir şey yapmadan veri bekleyen bağlantıları düşük maliyetle yönetebilmektir. Linux dünyasındaki epoll ve BSD/macOS tarafındaki kqueue, işletim sistemine “Hazır olanı bana haber ver, diğerleriyle beni uğraştırma” diyerek yüksek eşzamanlılığın kapısını açar.

epoll-vs-kqueue-15

Devamı...

eBPF ile Çekirdeği Yeniden Derlemeden Ağ Paketlerini Manipüle Etmek

Linux ağ yığınında paketleri yakalamak, filtrelemek veya yönlendirmek eskiden çekirdek modülü geliştirmeyi ve bazen çekirdeği yeniden derlemeyi gerektiriyordu. eBPF sayesinde artık doğrulanmış küçük programları çekirdek içinde güvenli biçimde çalıştırabiliyoruz. Böylece DDoS filtrelerinden gecikme ölçümüne kadar pek çok işi, kaynak koduna neşter vurmadan gerçekleştirmek mümkün.

Devamı...

Context Switch Optimizasyonları: Thread Değiştirmenin Görünmez Maliyeti

context-switch-optimizasyonlari-19

Bir işlemci çekirdeği bir thread’i durdurup diğerini çalıştırdığında ekranda hiçbir şey kıpırdamaz; ancak donanım ve işletim sistemi küçük bir bavul toplama töreni gerçekleştirir. Yazmaçlar saklanır, yeni yürütme bağlamı yüklenir, adres çevirileri gözden geçirilir ve önbellek düzeni sarsılabilir. Context switch, yararlı iş üretmeyen fakat çoklu görev için kaçınılmaz olan bu sürecin adıdır.

Devamı...

Çekirdek Modülü Geliştirmeye Giriş: Kendi Linux Cihaz Sürücünü Yaz

Linux çekirdeği devasa bir monolitik yapı olsa da her özelliği kalıcı olarak çekirdeğe gömmek zorunda değildir. Yüklenebilir Çekirdek Modülleri (Loadable Kernel Modules veya LKM), çalışan sistemi yeniden başlatmadan sürücü, dosya sistemi ya da ağ özelliği eklememizi sağlar. Bu yazıda küçük bir karakter cihazı geliştirerek modül mimarisini güvenli biçimde keşfedeceğiz.

Devamı...

APIC Sahne Arkası: Çok Çekirdekli Sistemlerde Kesme Dağıtımı

Fare düğmesine bastığınızda işlemcilerin hep bir ağızdan “Ben bakarım!” diye bağırdığını düşünebilirsiniz. Gerçekte donanım, işletim sistemi ve Gelişmiş Programlanabilir Kesme Denetleyicisi (APIC) birlikte çalışarak sinyalin hangi çekirdeğe gönderileceğini belirler. Bu mekanizma yalnızca kullanıcı girişlerini değil; ağ paketlerini, disk işlemlerini ve zamanlayıcı olaylarını da düzenleyen görünmez bir trafik polisidir.

Devamı...