Ana içeriğe geç
Programlama

Okuma ve yazma işlemleri sanılandan daha asimetrik çalışıyor

Öne çıkanlar

  • Okuma operasyonları diskten veri alma sırasındaki tüm hataları çağıran koda anında iletiyor.
  • Yazma çağrıları veriyi önce arabelleğe yazdığı için gerçek aktarım ve hatalar erteleniyor.
  • Verinin kalıcı belleğe işlendiğini garantilemek için fsync çağrısı ve dizin kontrolü gerekiyor.

İşletim sistemlerindeki giriş-çıkış operasyonları mantıksal olarak simetrik görünse de hata yakalama ve arabellek yönetimi tarafında ciddi davranışsal asimetriler barındırıyor. Standart C kütüphanesindeki fread ve fwrite gibi işlevler veya doğrudan POSIX sistem çağrıları olan read ve write, disk ile bellek arasındaki veri akışını yönetirken farklı arabellek katmanlarından geçiyor. Bu katmanlar kullanıcı alanı ve çekirdek alanı geçiş maliyetlerini düşürmek için zorunlu olsa da iki yönlü işlem akışında önemli güvenlik ve tutarlılık açıklarına yol açabiliyor.

Okuma tarafında bir sorun oluştuğunda işletim sistemi ve kütüphaneler çağrı tamamlanmadan önce hatayı hemen tespit ediyor. Veri fiziksel diskten arabellek önbelleğine ve ardından kullanıcı alanına aktarılırken dosya sonu veya aygıt hatası gibi her türlü aksaklık fread dönüş koduna yansıyor. Yazma operasyonlarında ise kullanıcı alanındaki bir arabelleğe yazılan 100 baytlık veri için kütüphane anında başarı kodu dönüyor. Asıl sistem çağrısı ve diske aktarım arabellek dolana kadar veya fflush gibi yöntemlerle boşaltılana kadar erteleniyor.

Yazma sürecinin geciktirilmesi olası yazma hatalarının raporlanmasını da erteliyor. Geliştiricilerin genellikle göz ardı ettiği fclose veya close çağrıları dönüş kodunda hata verene kadar verinin diske ulaşıp ulaşmadığı anlaşılamıyor. Başarılı bir write çağrısı bile verinin sadece işletim sistemi çekirdeğindeki arabellek önbelleğine kaydedildiğini garanti ediyor; fiziksel depolamaya aktarım için ek olarak fsync çağrısının yapılması ve dizin meta verilerinin de ayrıca senkronize edilmesi gerekiyor.

Kaynak

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