Arabellek

Sunucu anakartlarında bellek modülleriyle denetleyici arasına konan Intel 6402 arabellek yongası.

Arabellek, veriyi üreten ile tüketen arasında, verinin geçici olarak biriktirildiği bellek bölgesidir. İki tarafın hızı ya da çalışma düzeni birbirini tutmadığında araya girer: üretici veriyi arabelleğe bırakıp işine devam eder, tüketici de hazır olduğunda oradan alır.

Arabellek ile önbellek birbirine benzese de amaçları ayrıdır. Önbellek, yeniden istenmesi olası veriyi elde tutarak erişimi hızlandırır; arabellekteki veri ise er ya da geç karşı tarafa aktarılır ve aktarıldıktan sonra orada tutulmaz.

Arabellek birçok donanım ve yazılımda kullanılır:

Neden kullanılır

Arabelleğin ilk işi hız uyuşmazlığını gidermektir. Bir programın saniyede ürettiği veri ile diskin ya da ağın kabul edebileceği veri aynı hızda değildir; arada bir bölge olmazsa hızlı taraf her seferinde yavaş tarafı beklemek zorunda kalır.

Arabellek yalnız yazarken değil okurken de işe yarar: dosyayı baştan sona sırayla okuyacağını bildiren bir program, işletim sisteminin veriyi istenmeden önce okuyup hazır tutmasını sağlayabilir.

İkinci işi, küçük işlemleri toplu aktarıma dönüştürmektir. Her küçük yazma isteğini ayrı ayrı iletmek yerine arabellek dolana kadar biriktirmek, işletim sistemine yapılan çağrıların sayısını düşürür ve giriş çıkış işlemlerini verimli kılar.

Akış arabellekleme

Programlama dillerinin akış kitaplıklarında arabelleklemenin üç kipi tanımlıdır. Tam arabelleklemede veri, arabellek dolana ya da akış kapanana kadar tutulur; satır arabelleklemede satır sonu geldiğinde aktarılır; arabelleksiz kipte ise veri beklemeden gönderilir. Ekrana yazan programlarda genellikle satır arabellekleme, dosyaya yazanlarda tam arabellekleme kullanılır; hata akışları ise iletinin kaybolmaması için çoğu zaman arabelleksizdir.

Dairesel arabellek

Sabit boyutlu bir alanı sürekli yeniden kullanan biçime dairesel arabellek denir. Alanda iki dizin tutulur: üreticinin yeni öğe eklediği baş ile tüketicinin sıradaki öğeyi aldığı kuyruk. İkisi eşitse arabellek boş, baş kuyruğun bir gerisindeyse doludur.

Arabellek dolduğunda üretici yer açılmasını, boşaldığında tüketici veri gelmesini bekler; iki tarafın birbirini beklerken tutarsız değer okumaması için dizinlerin görünürlük sırası bellek engelleriyle güvenceye alınır.

Bu yapı, veriyi sırayla işleyen üretici tüketici düzeneklerinde yaygındır; aygıt sürücüleri ile ses ve ağ katmanları bunun tipik örnekleridir. Arabellek boyutunun ikinin kuvveti seçilmesi yeğlenir, çünkü dizinlerin sınır içinde tutulması için bölme yerine bit düzeyinde VE işlemi yeterli olur.

Çoklu arabellekleme

Görüntü üretiminde tek bir arabellek kullanılırsa, ekran taranırken aynı bölge üzerine yeni çerçeve yazıldığında görüntü ikiye bölünmüş gibi görünür. Çift arabelleklemede iki bölge tutulur: biri ekrana gösterilirken öteki çizilir, çizim bitince ikisi yer değiştirir. Üç arabellek kullanıldığında çizen taraf yer değiştirmeyi beklemeden bir sonraki çerçeveye başlayabilir.

Donanımda

Arabellek yalnız yazılımda değil donanımda da bulunur. İşlemcilerde belleğe yapılan yazmalar, işlemciyi bekletmemek için önce bir yazma ara belleğine konur ve oradan belleğe indirilir. Disk sürücüleri, ağ arayüzleri ve yazıcılar da kendi üzerlerinde arabellek taşır; sunucu anakartlarında bellek modülleriyle denetleyici arasına konan arabellek yongaları da aynı işi görür.


Ağ arabellekleri

Paket anahtarlamalı ağlarda arabellek zorunludur: aynı anda gelen paketlerin bir bölümü, çıkış hattı boşalana kadar bir yerde beklemek zorundadır. Gelen paket akışı çıkış hızını aşarsa arabellek dolar ve paketler atılmaya başlar; taşıma katmanı bu kaybı tıkanıklık imi sayarak hızını düşürür.

Arabelleğin ne kadar dolu kalacağını yöneten düzeneklere etkin kuyruk yönetimi denir. IETF'in tanımladığı CoDel algoritması, kuyruğun uzunluğu yerine paketlerin kuyrukta geçirdiği süreyi ölçer; bu süre 5 milisaniyelik hedefin üzerinde 100 milisaniyeden uzun süre kalırsa paket atmaya başlar.

Zaman kayması arabelleği

Ses ve görüntü akışlarında paketler ağdan düzensiz aralıklarla gelir; kimi erken, kimi geç ulaşır. Alıcı, gelen paketleri doğrudan çalmak yerine küçük bir arabellekte biriktirip zaman damgalarına göre sıraya dizer ve sabit hızda tüketir. Bu arabellek büyütüldükçe düzensizliğe dayanıklılık artar ama konuşma gecikmesi de büyür; seçilen boy bu iki istek arasındaki dengeyi belirler.

Boyut seçimi

Arabellek boyu iki yönden de sınırlıdır. Küçük arabellek sık sık dolup boşalır, taraflar birbirini bekler ve iş çıkarma düşer. Büyük arabellek ise veriyi daha uzun süre bekletir: gecikme büyür, kullanılan bellek artar ve sorunun kaynağı geç fark edilir. Bu yüzden boy, tarafların hız farkı ile kabul edilebilir gecikmeye göre seçilir; gecikmenin önemli olduğu uygulamalarda arabellek bilinçli olarak küçük tutulur.

Tarihçe

Arabellek düşüncesi, ilk sayısal bilgisayarlarda hesaplama hızı ile çıkış aygıtlarının hızı arasındaki uçurumdan doğdu. Sonuçları doğrudan bir elektrikli daktiloya yazdırmak, makineyi çıktının hızına bağlıyor ve geri kalan hesabı bekletiyordu.

Ulusal Standartlar Bürosu'nun SEAC bilgisayarında bu sorun, çıkış birimi olarak manyetik kayıt aygıtları kullanılarak çözüldü. Bu aygıtlar bilgiyi makineden bir elektrikli daktilonun çalışabileceğinden yüz kata kadar daha hızlı alabiliyor, kaydedilen veri sonradan ana bilgisayar meşgul edilmeden yazıcıya aktarılıyordu. Bugünkü yazıcı arabellekleri de aynı ilkeyle çalışır.

İşletim sisteminde

Bir program dosyaya yazdığında veri çoğu zaman diske hemen inmez. İşletim sistemi yazmaları kendi arabelleklerinde toplar ve uygun gördüğü anda diske indirir; böylece art arda gelen küçük yazmalar tek bir aktarıma dönüşür ve program diskin hızına bağlı kalmaz.

Bunun bedeli, verinin bir süre yalnız bellekte durmasıdır: bu aralıkta elektrik kesilirse ya da sistem çökerse arabellekte bekleyen veri yiter. Verinin kalıcı olması gereken yerlerde program, açık dosyayla ilgili bütün verinin depolama aygıtına aktarılmasını isteyen fsync çağrısını kullanır ve aktarma bitene kadar bekler. Veri tabanları ile günlük tutan dosya sistemleri, tutarlılığı bu çağrıya dayandırır.

Sorunlar

Arabellek kullanımı iki tanınmış soruna kaynaklık eder. Birincisi arabellek taşmasıdır: bir veri, hedef arabelleğin boyu denetlenmeden kopyalandığında komşu bellek alanları ezilir. Bu kusur çoğu zaman programın çökmesine yol açar, kötü niyetli kullanıldığında ise saldırganın seçtiği kodun çalıştırılmasına izin verebilir.

İkincisi arabellek şişmesidir. Ağ düğümlerine gereğinden büyük arabellekler konduğunda paketler atılmak yerine sıraya girer; taşımanın tıkanıklık denetimi kayıp göremediği için hızını düşürmez ve gecikme büyür. Jim Gettys ile Kathleen Nichols'ın 2011'de adlandırdığı bu sorun, ağdaki gecikmenin sıkça yanlışlıkla tıkanıklığa bağlanmasına neden olmuştur.

Arabellek boşalması

Taşmanın tersi, arabelleğin zamanında dolmamasıdır. Veriyi tüketen taraf sıradaki veriyi istediğinde arabellek boşsa iş kesintiye uğrar; ses ve görüntü akışlarında bu kesinti duyulur ya da görülür. Linux'un ses altyapısı bu durumu, taşma ile boşalmayı tek çatı altında toplayan XRUN durumu ile bildirir ve akışı durdurur.

Eski optik disk yazıcılarında sorun daha ağırdı: yazma işlemi kesintisiz bir veri akışı gerektirdiğinden arabellek boşaldığında yazma bozuluyor ve disk kullanılamaz duruma geliyordu. Sonraki sürücüler yazmayı durdurup kaldığı yerden sürdürebilen düzeneklerle bu kusuru giderdi.

Örnekler

Arabellek, kullanıcının doğrudan fark etmediği yerlerde de bulunur. Kişisel bilgisayarların temel giriş çıkış sisteminde klavyeden gelen tuş vuruşları 32 baytlık bir klavye arabelleğinde tutulur; program tuşları okuyana kadar vuruşlar burada bekler, arabellek dolduğunda yeni vuruşlar yok sayılır.

Akış hizmetlerinde oynatıcı, izlenen bölümün ilerisini indirip arabellekte tutar; bant genişliği düştüğünde oynatma bu birikimden sürer ve ancak arabellek boşalırsa durur. Aynı düzenek, art arda çalan parçalar arasında boşluk oluşmasını da önler.

Terim

Türkçede buffer karşılığı olarak arabellek kullanılır. Sözcüğün İngilizcede belleksiz bir ikinci anlamı daha vardır: değer tutmayan, işareti güçlendirip geçiren devre. Bu ikinci anlam için Türkçede sürücü denir ve kapı olarak Sürücü kapı adıyla anılır; bu madde birinci anlamı, veri tutan bellek bölgesini konu alır.

Ayrıca bakınız

  1. 1 2 3 4 "setvbuf" (İngilizce). The Open Group Base Specifications. 19 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  2. ↑ "posix_fadvise" (İngilizce). The Open Group Base Specifications. 20 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  3. 1 2 3 "Circular Buffers" (İngilizce). Linux çekirdeği belgeleri. 19 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  4. ↑ Ergin, Oğuz (2026). Bilgisayar Mimarisi. ISBN 978-625-00-6081-0.
  5. 1 2 3 Gettys, Jim; Nichols, Kathleen (29 Kasım 2011). "Bufferbloat: Dark Buffers in the Internet". ACM Queue (İngilizce). 9 (11). 6 Mayıs 2026 tarihinde kaynağından arşivlendi19 Eylül 2026.
  6. ↑ "RFC 8289: Controlled Delay Active Queue Management" (İngilizce). IETF. Ocak 2018. 20 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  7. ↑ "RFC 3550: RTP: A Transport Protocol for Real-Time Applications" (İngilizce). IETF. Temmuz 2003. 18 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  8. 1 2 Kirsch, Russell A. "SEAC Maintenance Manual: The Outscriber" (İngilizce). National Bureau of Standards. 19 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  9. ↑ "fsync" (İngilizce). The Open Group Base Specifications. 24 Haziran 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  10. ↑ "CWE-120: Buffer Copy without Checking Size of Input" (İngilizce). MITRE. 17 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  11. ↑ "Writing an ALSA Driver" (İngilizce). Linux çekirdeği belgeleri. 19 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Eylül 2026.
  12. ↑ Ergin, Oğuz (2026). Mikroişlemciler.