Bir içerik anahtarındaki önbellek içeriğine ne olur?


50

Çok çekirdekli bir işlemcide, bir önbellek üzerinde bir içerik anahtarı oluştuğunda bir çekirdeğin önbelleğinin içeriğine (L1) ne olur?

Davranış mimariye mi bağlı, yoksa tüm çip üreticileri tarafından takip edilen genel bir davranış mı?

Yanıtlar:


42

Bu hem işlemciye (sadece işlemci serisine değil, modelden modele değişebilir) hem de işletim sistemine bağlı, ancak genel prensipler var. Bir işlemcinin çok çekirdekli olup olmadığı, bu yönü doğrudan etkilemez; Aynı işlem aynı anda birden fazla çekirdek üzerinde de yürütülüyor olabilir (çoklu okunuyorsa) ve bellek işlemler arasında paylaşılabilir; bu nedenle, içerik anahtarında ne olduğuna bakılmaksızın önbellek senkronizasyonu kaçınılmazdır.

Bir işlemci önbellekte bir bellek konumuna baktığında, bir MMU varsa , o yerin fiziksel veya sanal adresini kullanabilir (bazen ikisinin bir kombinasyonu bile olabilir, ancak bu burada gerçekten alakalı değildir).

Fiziksel adreslerle, hangi sürecin adrese eriştiği önemli değil, içerik paylaşılabilir. Dolayısıyla, bir içerik geçişi sırasında önbellek içeriğini geçersiz kılmanıza gerek yoktur. İki işlem aynı fiziksel sayfayı farklı özelliklerle eşleştirirse, bu MMU tarafından gerçekleştirilir (bir MPU (bellek koruma birimi) olarak işlev görür ). Fiziksel olarak adreslenmiş bir önbelleğin dezavantajı, MMU’nun işlemci ile önbellek arasına oturması gerektiği ve önbellek aramasının yavaş olması gerektiğidir. L1 önbellekleri neredeyse hiç fiziksel olarak adreslenmez; üst düzey önbellek olabilir.

Aynı sanal adres, farklı işlemlerde farklı bellek konumlarını gösterebilir. Bu nedenle, neredeyse adreslenmiş bir önbellekle, bir işlemin doğru belleği bulabilmesi için işlemci ve işletim sistemi işbirliği yapmalıdır. Birkaç yaygın teknik var. İşletim sistemi tarafından sağlanan içerik değiştirme kodu tüm önbelleği geçersiz kılabilir; bu doğru ama çok pahalı. Bazı CPU mimarileri, MMU tarafından da kullanılan bir işlem kimliğinin donanım sürümü olan ASID (adres alanı tanımlayıcısı) için önbelleklerinde yer tutar. Bu, önbellek girişlerini farklı işlemlerden etkili bir şekilde ayırır ve aynı sayfayı eşleyen iki işlemin aynı fiziksel sayfanın tutarsız görünümlerine sahip olacağı anlamına gelir (genellikle paylaşılan bir sayfayı gösteren özel bir ASID değeri vardır, ancak haritalanan tüm işlemlerde aynı adrese eşlenmemişlerse bunların temizlenmesi gerekir). İşletim sistemi farklı işlemlerin örtüşmeyen adres alanları kullanmasına özen gösterirse (bu, sanal belleği kullanma amacını ortadan kaldırır, ancak bazen yapılabilir), önbellek satırları geçerli kalır.

MMU'ya sahip çoğu işlemcide ayrıca bir TLB bulunur . TLB, sanal adreslerden fiziksel adreslere bir eşleştirme önbelleğidir. Fiziksel adresi mümkün olduğunca çabuk belirlemek için fiziksel olarak adreslenen önbelleklere bakılmadan önce TLB'ye danışılır; İşlemci, TLB araması tamamlanmadan önce önbellek aramasını başlatabilir, çünkü çoğu zaman aday önbellek çizgileri, adresin orta bitlerinden, önbellek satırındaki ofseti belirleyen bitler ile sayfayı belirleyen bitler arasında tespit edilebilir. Neredeyse adreslenmiş önbellek, önbellek çarpması durumunda TLB'yi atlar, ancak işlemci bir eksiklik durumunda önbellek sorgularken TLB aramasını başlatabilir.

Bir bağlam geçişinde TLB'nin kendisi yönetilmelidir. TLB girişleri bir ASID içeriyorsa, yerinde kalabilir; işletim sistemi, yalnızca ASID değerleri değiştiyse TLB girişlerini temizlemesi gerekir (örn. bir işlemden çıkıldığı için). TLB girişleri global ise, farklı bir içeriğe geçerken geçersiz olmaları gerekir.


2
Çok bilgilendirici. Bunun gerçek mimarilerde nasıl yapıldığına dair bazı örnekler ekleyebilirseniz daha iyi olurdu.
JohnTortugo

2
@JohnTortugo Yazdıklarım, ARMv7'de yapabileceklerinize (örneğin akıllı telefonunuzun CPU'su) (MMU işleme kodunu yazdığım tek mimari) oldukça yakındır. X86 gibi diğer platformların da oldukça benzer olmasını bekliyorum ama onlar hakkında yazamadım. Gerçek bir platform hakkında somut bilgiler arıyorsanız, Computer Science doğru site değil, Yığın Taşması veya Elektrik Mühendisliği veya Gömülü (önerilen) hakkında soru sorabilirsiniz .
Gilles 'SO- kötülük yapmayı kes'

10

Önbellek tipik olarak bir içerik anahtarına habersizdir. Yalnızca erişilen bellek adresleri sırası, hangi önbellek satırlarının değiştirileceğini belirler.

Değişim politikası genellikle üreticiye ve belirli mikro mimariye bağlı bir sezgiseldir. Sorun, sezgiselçinin geleceği tahmin edememesi, hangi adrese ve dolayısıyla önbellek hattına erişileceği.

Sezgisel, LRU kadar basit olabilir (en son kullanılan yöntem). Ancak modern işlemciler ile sezgisel tarama daha karmaşıktır.

Bir göz atın Intel® 64 ve IA-32 Mimarileri Yazılım Geliştirici Kılavuzu Cilt 3 Bölüm 11 hafıza önbellek ve önbellek kontrol mekanizmalarını açıklar. AMD, bunu AMD64 Mimari Programcı El Kitabı Cilt 2: Sistem Programlama'nın 7. Bölümünde yapmıştır . ARM tabanlı işlemciler için, PDF'lerin yalnızca kayıtlı müşterilere açık olduğu görülmektedir.


İlk paragraf için referans verebilir misiniz? Veya bağlantılı belgeler bu konuyu mu ifade ediyor?
Raphael

Davranış, büyük ölçüde, önbelleğin fiziksel olarak mı yoksa neredeyse gerçekten mi ele alındığına bağlıdır. Değiştirme politikası burada ilgili değil. ARM için, halka açık olan işlemci teknik el kitaplarında, örneğin , Cortex-A9'daki L1 (en son nesil cep telefonlarında ne elde edeceğiniz), kamuya açık olmayan mimarlık referans el kitabı olmadan anlaşılması zor olsa da bilgiler bulunmaktadır .
Gilles 'SO- kötü olmaktan'

1
@Raphael “Genellikle” yazdım çünkü karşılaştığım işlemcilerde, önbellekteki başlıklar, işlemler, bağlamlar vb. Hakkında herhangi bir bilgiye sahip değil. Sadece hafıza erişimine tepki veriyor. Veri önbelleği temizlenirse ve komut önbelleği bir içerik anahtarında geçersizse, o zaman önbelleği değil bu işlemi tetikleyen işletim sistemidir. Farklı bir işletim sistemi kurarsanız, bu davranış değişebilir.
uli

@Gilles Bir kereliğine kısa bir cevap vermeye çalıştım ve sanal bellek hakkında yazmamaya karar verdim, çünkü bu hemen işletim sisteminden oluşuyor. Ve dikkate alınması gereken zaman çizelgesi var. Önbellek içeriği geçersiz olabilir ancak hiç değiştirilemediğinden, bağlam değişikliği ile bir sonraki hafıza erişimi arasındaki süre için “hiçbir şey değişmez” cevabı olabilir.
uli
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.