Seqlock - Seqlock

Bir seqlock (kısaltması sıra kilidi) özeldir kilitleme kullanılan mekanizma Linux iki paralel arasında paylaşılan değişkenlerin hızlı yazılmasını desteklemek için işletim sistemi rutinler. Anlamlar 2.5.59 sürümünden itibaren stabilize edildi ve 2.6.x kararlı çekirdek serisinde mevcut. Sekloklar Stephen Hemminger tarafından geliştirildi ve Andrea Arcangeli'nin daha önceki çalışmasına dayanarak başlangıçta frlocks olarak adlandırıldı. İlk uygulama, gerçek bir kilit kullanmanın mümkün olmadığı kullanıcı alanıyla senkronizasyonun gerekli olduğu x86-64 zaman kodundaydı.

Bu bir okuyucu-yazar sorununu önleyen tutarlı mekanizma yazar açlığı. Bir sıra kilidi, bir kilide ek olarak sıra numarası kaydetmek için depolamadan oluşur. Kilit, iki yazar arasındaki senkronizasyonu desteklemek içindir ve sayaç, okuyuculardaki tutarlılığı göstermek içindir. Paylaşılan verilerin güncellenmesine ek olarak, yazıcı sıra numarasını hem kilidi aldıktan sonra hem de kilidi açmadan önce artırır. Okuyucular, paylaşılan verileri okumadan önce ve sonra sıra numarasını okur. Her iki durumda da sıra numarası tuhafsa, bir yazar kilidi veri okunurken almış ve değişmiş olabilir. Sıra numaraları farklıysa, bir yazıcı okunurken verileri değiştirmiştir. Her iki durumda da okuyucular, önce ve sonra aynı çift sıra numarasını okuyana kadar (bir döngü kullanarak) tekrar denerler.

Okuyucu asla engellemez, ancak bir yazma sürüyorsa yeniden denemek zorunda kalabilir; Bu, verilerin değiştirilmediği durumlarda okuyucuları hızlandırır, çünkü geleneksel bir okuma-yazma kilidinde olduğu gibi kilidi almak zorunda kalmazlar. Ayrıca, yazarlar okuyucuları beklemezler, oysa geleneksel okuma-yazma kilitleriyle yaparlar, bu da okuyucunun sayısının olduğu bir durumda potansiyel kaynak açlığına yol açar (çünkü yazarın okuyucu olmaması için beklemesi gerekir). Bu iki faktör nedeniyle, seqlock'lar gelenekselden daha verimlidir okuma-yazma kilitleri birçok okuyucunun ve az sayıda yazarın olduğu durum için. Bunun dezavantajı, çok fazla yazma aktivitesi varsa veya okuyucu çok yavaşsa, canlı kilit (ve okuyucular açlıktan ölebilir).

Teknik, işaretçiler içeren veriler için çalışmaz, çünkü herhangi bir yazar, okuyucunun halihazırda izlediği bir işaretçiyi geçersiz kılabilir. Bu durumda oku-kopyala-güncelle senkronizasyon tercih edilir.

Bu ilk olarak sistem zaman sayacı güncellemesine uygulandı. Her zaman kesme, günün saatini günceller; işletim sisteminin dahili kullanımı ve uygulamaları için zamanın birçok okuyucusu olabilir, ancak yazma işlemleri nispeten seyrektir ve her seferinde yalnızca bir tane görülür. Örneğin BSD zaman sayıcı kodu benzer bir teknik kullanıyor görünmektedir.

Bir zaman sayacı için seqlock kullanmanın ince bir sorunu, bir hata ayıklayıcı ile adım adım ilerlemenin imkansız olmasıdır. Yeniden deneme mantığı her zaman tetiklenecektir çünkü hata ayıklayıcı okuma yarışının her zaman gerçekleşmesini sağlayacak kadar yavaştır.

Ayrıca bakınız

Referanslar