Ana içeriğe geç
Programlama

Linux çekirdeğinde bit dizisi mimarisi ve tekil bit işlemleri

Öne çıkanlar

  • Linux çekirdek kodunda set_bit, clear_bit ve test_bit operasyonları 28 bin 340 defa kullanılıyor.
  • x86_64 üzerinde bit dizileri unsigned long blokları halinde 64 bitlik sözcükler biçiminde saklanıyor.
  • Çok işlemcili sistemlerde veri kaybını engellemek için atomik operasyonlarda lock öneki tercih ediliyor.

Linux çekirdeği, çok sayıda nesne veya durumu asgari bellek kullanımıyla takip etmek için bit dizisi (bitmap) veri yapısını yoğun olarak kullanıyor. Kaynak kod tabanında yalnızca temel bit manipülasyon işlemlerine ait 28 binden fazla çağrı yer alıyor. Çekirdek, bu veri yapısı için özel bir tür tanımlamak yerine unsigned long türündeki dizilerden faydalanıyor. x86_64 mimarisinde 64 bitlik bloklar halinde ayrılan bu diziler, DECLARE_BITMAP makrosu aracılığıyla tanımlanıyor ve kesinti vektörleri gibi sabit boyutlu kaynakların kaydını tutuyor.

Bit dizisi üzerindeki tekil bit operasyonları, derleme zamanında bilinen sabit değerler ile çalışma zamanı değişkenleri arasında performans optimizasyonu sağlayacak şekilde dallanıyor. Derleyici sabitleri söz konusu olduğunda adresleme ve maskeleme işlemleri derleme aşamasında çözülüyor; çalışma zamanı değişkenlerinde ise x86 mimarisinin bts ve btr gibi doğrudan bit yönlendirme komutları devreye giriyor. Bu komutlar, donanım seviyesinde sözcük hesaplaması yaparak kodun işlemci kaynaklarını verimli tüketmesini sağlıyor.

Eşzamanlı erişim gerektiren çok işlemcili senaryolarda çekirdek, atomik garantiler sağlamak için lock önekini devreye alıyor. set_bit gibi atomik işlevler veri yarışmalarını önlerken, performansın kritik olduğu ve kilitleme koruması bulunan durumlarda alt çizgi ile başlayan atomik olmayan türevler tercih ediliyor. Bit durumunun sorgulanmasında ise bt komutu kullanılarak ilgili bitin değeri doğrudan işlemci bayrak kütüğüne aktarılıyor.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.