"Blog gönderisi seçimi" ARMv8'e özel işlem (1) özel işlemin tanıtımı

AMRv8 mimarisindeki A64 için, özel işlemleri desteklemek üzere aşağıdaki özel talimatlar sağlanmıştır.

Öyleyse neden kol özel talimatı ekliyor? Bu, esas olarak çok çekirdekli durumda kilit rekabeti sorununu çözmek içindir.

Yazılım düzeyinde, paylaşılan kaynaklara erişim için bir kilit ayarlanır. Yalnızca kilidi alabilen programlar paylaşılan kaynaklara erişebilir ve kilidi almayan programlar paylaşılan kaynaklara erişemez.

Kilidi alan program, erişim tamamlandıktan sonra kilidi açmalıdır, böylece diğer programlar kilit için rekabet edebilir ve paylaşılan kaynaklara erişebilir.

Sözde kod aşağıdaki gibidir:

// Kilidi alın get_lock: ldr w1, cmp w1, # 1 b.ne get_lock mov w1, # 1 str w1, // Paylaşılan kaynaklara erişmeye başlayın ... // Paylaşılan kaynaklara erişimi sonlandırın kilit açma: mov w1, # 0 str w1 ,

Okuma kilidi sıfır değilse, bu, mevcut kilidin diğer programlar tarafından kullanıldığı anlamına gelir, bu nedenle, kilidi alamazsanız, diğerlerinin kilidi açmasını beklemeniz gerekir. Kilidin değeri 0 ise, kilidin diğer programlar tarafından işgal edilmediği anlamına gelir, ardından kilidi 1 olarak ayarlayın ve ardından paylaşılan kaynağa erişin. Erişim tamamlandıktan sonra kilidi 0 olarak ayarlayın ve kilidi açın.

Kilidi alan program, tek çekirdekli olduğunda nispeten iyi çalışabilir, çünkü aynı zamanda sadece bir program çalıştırılabilir ve rekabet yoktur.

İşletim sistemini kullandıktan sonra, işletim sistemi uygulamaları planladığından, bu programın da olası sorunları olabilir. Kilit durumunu okuduktan sonra A uygulamasının değerinin 0 olduğunu varsayarsak, bu, mevcut kilidin diğer programlar tarafından kullanılmadığı anlamına gelir.Kilidi kilitlemek istediğinde, işletim sistemi programları ve B uygulaması çalıştırılır. Program B ayrıca kilit durumunu okur ve değerin 0 olduğunu bulur, bu da geçerli kilidin diğer programlar tarafından kullanılmadığını gösterir ve ardından paylaşılan kaynaklara erişmek için kilidi kilitler. Bu sırada, işletim sistemi yeniden programlama gerçekleştirir, A uygulaması çalıştırır, kilidi kilitler ve ardından paylaşılan kaynağa erişir. Bu sırada, paylaşılan kaynaklara aynı anda erişen iki uygulama ortaya çıktı ve kilidin rolü engellendi.

Yürütme süreci aşağıdaki tabloda gösterilmektedir:

Prosedür A

Mevcut uygulama

Prosedür B

ldr w1,

Kazanılmış kilit durumu 0

Prosedür A

Prosedür B

ldr w1,

Kazanılmış kilit durumu 0

Prosedür B

str w1,

Kilitli, kilit durumu 1

Prosedür B

Paylaşılan kaynaklara erişim

b.ne get_lock

Kilit durumu 1, ancak A bilmiyor

Prosedür A

str w1,

Kilitli

Prosedür A

Paylaşılan kaynaklara erişim

Prosedür A

Bu sorunu çözmek için, kilit elde edildiğinde kesinti korumalı olabilir.Şu anda, işletim sistemi programlanamaz, bu da yukarıdaki sorunları önler. Sözde kod aşağıdaki gibidir:

get_lock: // kesmeyi kapat bl mask_int ldr w1, cmp w1, # 1 b.ne get_lock mov w1, # 1 str w1, // Kesmeyi aç bl open_int // Paylaşılan kaynaklara eriş ... unlock: mov w1, # 0 str w1,

Bu şekilde, yukarıda bahsedilen sorunlardan kaçınılabilir, ancak kilit elde edildiği sürece, kesinti kapatılır ve kesintiye sistemin gerçek zamanlı yanıtını etkileyen kesinti açılır.

Tek bir çekirdek olması durumunda, kesmeyi kapatarak işletim sisteminin programlamasını da durdurabilirsiniz. Ancak çok çekirdekli olması durumunda, her bir CPU paralel olarak çalıştırılır, bu nedenle şu anda yukarıda açıklanan, eşzamanlı olarak kilit durumunu alan iki program olacaktır ve şu anda kesintileri yasaklayarak hiçbir etkisi yoktur.

Çoklu çekirdek durumunda kilit çekişmesi sorununu çözmek için, kol özel bir işlem başlattı ve ilgili talimatları ekledi.

Münhasır işlemin özü, kilidi korumak için bir durum makinesi kullanmaktır Durum makinesinin iki durumu vardır, açık durum ve özel durum. Kilidi başarılı bir şekilde kilitlemek için, durum özel durumdan açık duruma geçirilmelidir ve diğer tüm durumlar başarısız olur.

Özel işlemleri desteklemek için, LDXR ve STXR talimatları A64'e eklenmiştir.

A32 ve T32 altında LDREX ve STREX talimatları da destek için eklenir.

LDXR talimatı, durumu açık durumdan özel duruma geçirir ve STXR komutu, durumu özel durumdan açık duruma geçirir Bu, mağaza özel işleminin başarılı olduğu anlamına gelir.

STXR talimatı ile sıradan STR talimatı arasındaki fark, talimatın, mağaza özelinin başarılı olup olmadığını gösteren bir dönüş değerine sahip olmasıdır. Başarılıysa, ws 0, başarısız, ws 1'dir.

Özel bir işlem talimatı olduğunda, önceki kilit edinme programı aşağıdaki gibi olur:

// Kilit alın get_lock: ldxr w1, cmp w1, # 1 b.ne get_lock // mov w1, # 1 stxr w2, w1, cbnz w2, get_lock'u kilitlemeyi deneyin // Kaynaklara erişin ... unlock: mov w1, # 0 str w1,

Stxr talimatı ile, kilidin durumunu değiştirmeyi deneyin.Değişiklik başarılı olursa, w20 olur. Bu durumda, kilidi almış olduğunuz ve ardından paylaşılan kaynağa erişebileceğiniz anlamına gelir. Değişiklik başarısız olursa, w21'dir ve bu, diğer programların şu anda kilidi aldığını ve paylaşılan kaynağa erişemediğini ve kilidi almaya geri döndüğünü gösterir.

İyi bir başlangıcı kutlayan Bull, 2 ürünle Alman 2019 iF Tasarım Ödülü'nü kazandı
önceki
Çin markalı otomobillerin geliştirilmesi SUV'lara mı dayanıyor?
Sonraki
"Academic Paper" FPGA tabanlı 3B Görüntü Sensörü Tasarımı ve Uygulaması
Alibaba Bilgi Grafiği ilk kez ortaya çıktı: Bir akıl yürütme motoru oluşturmak için makine öğrenimini kullanın, böylece binlerce kara kalpli işletmenin kaçacak hiçbir yeri kalmaz
Değişim ve değişim, nihayet pazara girecek! Gerçekten 7 koltuklu SUV pazarına hakim olacak bir şey var mı?
Tüm Su Yan ortaya çıktı! "Gölgem Koşuyor" Zhang Jingchu, 17 yıldır sıcak anne sevgisini yorumluyor
Apollo'nun iş modeli ortaya çıkmaya başlıyor: JAC'ın araç satın almasıyla Baidu en büyük yerel HD harita filosunu kuruyor
Küçük boyut ve büyük enerji, bu küçük otonom SUV'lerin maliyeti yalnızca 80.000
"Girlfriends 2" 2 Mart'ta "The Ironest Girlfriends Group" yabancı bir ülkede yeniden bir araya geliyor ve sorun yaratıyor
Baojun satışları 60.000'in altında olan küçük bir SUV piyasaya sürdü. Bu bir ritim dalgası getirebilir mi?
"Endişesiz Bakkal" ın orijinal uyarlaması övgüyle karşılandı: yürekleri ısıtan filmi açmanın doğru yolu
Foxconn Zhuhai, yarı iletkenlere 60 milyar yatırım yapıyor! 12 inçlik bir gofret fabrikası kurun! TSMC'ye meydan okuyun!
Oyun bakkalı: Uzakta olduğunuzda kediler ve köpekler ne yapar?
ABB zirveye yükseltmek için yarışıyor! Zenginlerin ceplerini daha fazla boşaltabilecek en lüks SUV?
To Top