AArch64 mimarisinde kilit komutlarının çalışması önbellek yapılandırmasına dayanıyor
Öne çıkanlar
- QEMU üzerinde sorunsuz çalışan ldaxr komutu, Raspberry Pi 5 üzerinde Data Abort istisnası üretti.
- Cortex-A76 işlemcisi, önbellek etkinleştirilmediğinde veya Write-Back ayarlanmadığında kilit komutlarını reddetti.
- QEMU kaynak kodunda SCTLR yazmacındaki veri önbelleği denetiminin modellenmediği ortaya çıktı.
AArch64 mimarisi için sıfırdan geliştirilen floss işletim sistemi çekirdeğinde kilit mekanizmaları test edilirken QEMU simülatörü ile fiziksel donanım arasında önemli bir davranış farkı ortaya çıktı. Geliştirici, çoklu çekirdek desteği sırasında konsol çıktılarını düzenlemek amacıyla ldaxr ve stxr komutlarını temel alan bir spin lock kurguladı. QEMU üzerindeki testlerde sorunsuz çalışan bu mekanizma, Raspberry Pi 5 donanımında yürütüldüğünde ldaxr komutu seviyesinde Data Abort istisnası üretti.
Sorunun kaynağı incelendiğinde Cortex-A76 işlemcisinin donanımsal çalışma mantığı ve önbellek gereksinimleri tespit edildi. Arm mimarisinde dışlayıcı bellek erişimlerinin başarıyla yürütülebilmesi, ilgili adres alanının önbelleklenebilir olmasına ve Write-Back özniteliğine bağlı kalıyor. Sistem Kontrol Yazmacı (SCTLR) içindeki veri önbelleğini denetleyen C bitinin sıfır olması nedeniyle tüm bellek erişimleri önbellek dışı kabul edildi ve işlemci paylaşılan bellek alanındaki atomik erişimleri doğrudan engelledi.
Araştırma, QEMU kaynak kodlarında veri önbelleği modellemesinin yer almadığını ve bu yüzden fiziksel çipteki kısıtlamaların emülatörde fark edilmediğini gösterdi. Raspberry Pi 5 üzerindeki Cortex-A76 çekirdeğinde global izleme birimi önbellek tutarlılık mantığıyla paylaşıldığı için SCTLR yazmacında C bitinin etkinleştirilmesi ve bellek tablolarının Write-Back olarak işaretlenmesiyle kilit mekanizması fiziksel donanımda çalışır duruma getirildi.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.