Çok çekirdekli işlemciler için Linux'ta kilitsiz IPC


9

Çok çekirdekli işlemcilerle Linux'ta C, kilitsiz IPC ile bir uygulama yazmanın bir yolunu bulmaya çalışıyorum.

Diyelim ki FIFO'ya veya paylaşılan belleğe yazan süreç 1 ve süreç 2'ye sahibim. Daha sonra işlem 3 ve işlem 4 bu paylaşılan hafızadan veya FIFO'dan okunacaktır.

Bu kilitsiz bir algoritma ile mümkün mü?

Rehberiniz çok takdir ediliyor.


Kilitsiz iletişim ile ilgili bazı endikasyonlar veya bazı harici belgelere referans verebilir misiniz? Bu terimle tam olarak ne kastedilmektedir?
Giorgio


Doğru anlarsam, problem eşzamanlı yazma (1, 2) ve eşzamanlı okumalardır (3, 4). Yazarlar ve okuyucular arasındaki senkronizasyon zaten bağlantılı sayfada açıklanan algoritma tarafından kapsanmaktadır.
Giorgio

Yanıtlar:


2

Ben halka tamponlar kullanarak referans gördüm ve kilit ihtiyacını ortadan kaldırmak veya azaltmak için konum işaretçileri kontrollü erişim. Bekleme ihtiyacını ortadan kaldırmaz ve sadece bir halka arabelleğinin bir yazar ve bir okuyucuya sahip olması gerekir. Sizin durumunuzda en az iki tampon gerekir.

Anladığım gibi mekanizma:

  • yazar açık bir yuva olana kadar bekler (son + 1! = geçerli)
  • yazar giriş halka arabelleğe yazar.
  • yazar son giriş işaretçisini günceller.

  • okuyucu, halka arabelleğinde kullanılabilir bir giriş olana kadar bekler (son! = akım).

  • okuyucu girişi işler.
  • okuyucu geçerli işaretçiyi artırır.

Kullanılan bekleme süresine bağlı olarak, bu, boş bir kuyruktaki yeni öğeler için gecikme ekleyebilir veya bekleme döngüsünde çok fazla CPU döngüsü oluşturabilir. İşaretçiyi güncelleme sırası ve yazma erişiminin sıkı bir şekilde ayrılması bunun çalışması için kritik öneme sahiptir. Yazarın, okuyucuya erişmesi için işaretçiyi artırmadan önce yalnızca halka arabelleği girdisini yazmasına izin verilir.


Bunu wikipedia'da da buldum, ilginç görünüyor, concurrencykit.org
poly

1

Evet mümkün. Projemizde kilitsiz kuyruğun algoritmalarından birini kullanıyoruz. Ancak bu algoritmalar gerçekten açık değildir. Onları derinlemesine anlamak istiyorsanız, bunun için birkaç ay geçirmeye hazır olmalısınız.


0

İşlemler arası iletişim kilitlenemez. Sadece birbirleri arası. Bildiğim kadarıyla.


Ben "kilit ücretsiz" kullanıcının değil, mekanizmanın bir niteliği olduğunu düşünüyorum. Karışıma paylaşılan bellek gibi şeyler eklediğinizde, iş parçacıkları ve işlemler arasındaki fark oldukça zayıflar.
tylerl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.