Fiziksel ve sanal önbellek arasındaki fark nedir?


10

Sanal önbelleğin gerçekte ne olduğunu anlama konusunda sorun yaşıyorum. Sanal belleği anlıyorum.

CPU, anlayabildiğim kadarıyla belleğe erişmek isterse, MMU'ya sayfa tablolarını kullanarak fiziksel bellek adresini belirleyen bir sanal adres gönderir.

Şimdi, bunun yanı sıra, CPU, küme no'dan oluşan farklı bir adres (sanal adresin yalnızca sonu) gönderir. önbellekte kalıyorsa işe yarayan bir önbellek etiketi ve ofset.

Sanal önbellek bundan ne kadar farklı?

görüntü tanımını buraya girin


2
Neredeyse adreslenmiş (neredeyse indekslenmiş / neredeyse etiketlenmiş) bir önbellek mi demek istiyorsunuz?
Paul A. Clayton

Temel olarak, sanal önbellek adresi ile fiziksel önbellek adresi arasındaki fark nedir? .. (Ben izlenim fiziksel bir önbellek adresi (formda setno (indeks), ()) numaralı hat etiketi ve ofset altındaydı.
OneTwo

Benim Bkz TLB üzerinde 2017 anket kağıdı ben tartışmak ve rakamlarla önbellek adresleme seçeneklerden dört tip (Pipt, VIPT, VIVT, Pivt) karşılaştırın. Bu sorunuza cevap verecektir. VIVT önbelleğine genellikle sanal önbellek denir.
user984260

Yanıtlar:


19

Sanal veya fiziksel adres bitlerinin indeksleme ve / veya etiketleme için kullanılmasına bağlı olarak bir önbellek adreslemenin dört yolu vardır.

Önbelleğin endekslenmesi en zaman zaman kritik olduğu için (kümedeki tüm yollar paralel olarak ve etiket karşılaştırmasına göre seçilen uygun şekilde okunabildiği için), önbellekler tipik olarak sanal adres ile dizine alınır ve dizinlemenin adresten önce başlamasını sağlar çeviri tamamlandı. Bununla birlikte, indeksleme için sadece sayfa ofseti içindeki bitler kullanılıyorsa (örneğin, her biri sayfa boyutundan büyük değil ve indeksleme 1 için yol büyüklüğünün basit modülüyle ), o zaman bu indeksleme aslında fiziksel adresi kullanıyordur. Daha büyük bir önbelleğin fiziksel adres tarafından endekslenmesine izin vermek için, L1 ilişkilendirmesinin öncelikle arttırılması nadir değildir.

Fiziksel adrese dayalı indeksleme, sayfa boyutundan daha büyük yollarla mümkün olsa da (örneğin, çeviri gecikmesini gizlemek için bilinen fiziksel adres bitleriyle endeksleme gecikmesini kullanarak bu bitleri sağlayan daha hızlı veya daha hızlı bit çevirme mekanizması öngörerek), yaygın olarak yapılmaz.

Etiketleme için sanal adreslerin kullanılması, çeviri yapılmadan önce önbellek isabetinin belirlenmesini sağlar. Erişim kabul edilmeden önce izinlerin hala kontrol edilmesi gerekir, ancak yükler için, veriler yürütme birimlerine iletilebilir ve başlatılan veriler kullanılarak hesaplanabilir ve depolar için veriler, durumun geciktirilmiş taahhüdünü sağlamak için bir ara belleğe gönderilebilir. Bir izin istisnası boru hattını temizler, bu nedenle tasarım karmaşıklığı eklemez.

(Pentium 4 veri önbelleği tarafından kullanılan vhints, bu gecikme avantajını, spekülatif olarak yolu seçmek için erken olan sanal adres bitlerinin bir alt kümesini kullanarak sağladı.)

(İsteğe bağlı harici MMU'ların olduğu günlerde, sanal adres etiketleri, çeviriyi neredeyse önbellek tasarımının dışına itmek için özellikle çekici olabilir.)

Her ne kadar dizine eklenmiş ve etiketlenmiş önbelleklerin önemli gecikme avantajları olsa da, aynı sanal adresin farklı fiziksel adreslere (homonyms) veya aynı fiziksel adres haritalarının farklı sanal adreslere (eş anlamlı) eşlendiği takma ad potansiyelini de ortaya koymaktadır. Dizin oluşturma ve fiziksel adreslerle etiketleme, takma işlemlerini engeller.

Homoym problemi, adres alanı tanımlayıcıları (ASID'ler) kullanılarak nispeten kolayca çözülür. (Adres alanlarını değiştirirken önbelleği temizlemek aynı zamanda homonileri de garanti etmeyecektir, ancak bu oldukça pahalıdır. Bir ASID farklı bir adres alanı için tekrar kullanıldığında en azından kısmi yıkama gerekli olacaktır, ancak 8 bitlik bir ASID çoğu adrede bulunan yıkamaları önleyebilir boşluk değişir.) Genellikle ASID'ler işletim sistemi tarafından yönetilir, ancak bazı sistemler sayfa tablosu taban adresine göre ASID'nin yeniden kullanımı için donanım kontrolü sağlar.

Eş anlamlı problemini çözmek daha zordur. Bir önbellek özünde, takma adın önbellekte olup olmadığını belirlemek için olası diğer takma adların fiziksel adresleri kontrol edilmelidir. Endekslemede diğer adlandırmadan kaçınılması halinde - fiziksel adrese göre indeksleyerek veya takma adın endekste aynı bitlere sahip olduğunu garanti eden işletim sistemi (sayfa boyama) - önlenirse, yalnızca bir kümenin problanması gerekir. Algılanan eşanlamlıların, en son kullanılan sanal adres tarafından belirtilen sete yeniden yerleştirilmesiyle gelecekte takma adlardan kaçınılır (aynı fiziksel adresin farklı bir eşlemesi gerçekleşene kadar).

Dizin takma olmadan doğrudan eşlenmiş, neredeyse etiketlenmiş bir önbellekte, başka bir basitleştirme mümkündür. Potansiyel eş anlamlılık istekle çakışacağından ve tahliye edileceğinden, herhangi bir kirli satırın geri yazılması, önbellek kaçırılmadan önce yapılabilir (böylece eş anlamlı bir bellekte veya fiziksel olarak adreslenmiş daha yüksek düzeyde bir önbellek olur) veya fiziksel olarak adreslenir Yazma tamponu, bellekten alınan önbellek satırı (veya daha yüksek seviye önbellek) kurulmadan önce denetlenebilir. Değiştirilmemiş bir diğer ismin kontrol edilmesine gerek yoktur, çünkü bellek içerikleri önbellekteki içeriklerle aynı olacaktır, sadece gereksiz miss işlemi gerçekleştirilir. Bu, tüm önbellek için ek fiziksel etiketlere olan ihtiyacı önler ve çevirinin nispeten yavaş olmasına izin verir.

Dizinde takma ad takma işleminden kaçınılması garanti edilmezse, fiziksel olarak etiketlenmiş bir önbellek bile takma ad içeren diğer kümeleri kontrol etmelidir. (Fiziksel olmayan bir indeks biti için, tek bir alternatif sette önbellek ikinci bir sondalama kabul edilebilir. Bu, sözde birleşim ile benzerlik gösterir.)

Neredeyse etiketlenmiş bir önbellek için, fazladan bir fiziksel adres etiketi seti sağlanabilir. Bu etiketlere yalnızca özlüyorsanız erişilir ve G / Ç ve çok işlemcili önbellek tutarlılığı için kullanılabilir. (Hem özlüyor hem de tutarlılık istekleri nispeten nadir olduğundan, bu paylaşım genellikle sorunlu değildir.)

Sanal indeksleme ile fiziksel etiketleme kullanan AMD Athlon, tutarlılık probları ve takma ad tespiti için ayrı bir etiket seti sağladı. Endeksleme için yalnızca üç sanal adres bitinin kullanılması nedeniyle, bir özledimdeki olası takma adlar için yedi alternatif kümenin araştırılması gerekiyordu. Bu L2 önbellekten gelen bir yanıt beklenirken yapılabildiğinden, bu gecikme sağlamaz ve L2 önbelleğinin münhasırlığı göz önüne alındığında daha sık olan tutarlılık istekleri için fazladan etiket grubu da kullanılabilir.

Neredeyse endekslenmiş büyük bir L1 önbellek için, birçok ek setin problanmasına alternatif, fiziksel ve sanal bir çeviri önbelleği sağlamak olacaktır. Bir cevapsızlıkta (veya tutarlılık probu) fiziksel adres önbellekte kullanılabilecek sanal adrese çevrilir. Her önbellek satırı için bir çeviri önbelleği girişi sağlamak pratik olamayacağından, bir çeviri yapıldığında önbellek satırlarını geçersiz kılmak için bir araç gerekli olacaktır.

Takma adlamanın (en azından yazılabilir adreslerin), örneğin tipik bir tek adres alanı işletim sisteminde oluşmaması garanti edilirse, o zaman neredeyse adreslenmiş bir önbelleğin tek dezavantajı, bu tür sistemlerdeki sanal adreslerin gerçekte olduğu yönündeki ek etikettir. fiziksel adreslerden daha büyük. Tek bir adres alanı için tasarlanan donanım işletim sistemi, bir çeviri lookaside tamponu yerine izin arayan bir arabellek kullanabilir ve çeviriyi en son seviye önbellekleme özlemine kadar erteleyebilir.


1 Eğriltilmiş birleşim, aynı boyut yollarının modulo indekslemesi için gerekenden daha fazla bit bazında farklı hashli farklı önbellek yollarını indeksler. Bu çatışma özlüyor azaltmak için yararlıdır. Bu, aynı boyutta ve ilişkilendirmede modulo indeksli bir önbellekte bulunmayacak olan örtüşme problemlerini ortaya çıkarabilir.


"Daha büyük bir önbelleğin fiziksel adres tarafından endekslenmesine izin vermek için L1 birliğinin ortaklığının arttırılması nadir değildir." Orada sanal mı demek istedin? Olduğu gibi, set seçimi bitlerinin sayısını tamamen bir sayfa içinde kalacak kadar düşük tutmak (ve bu nedenle çeviriye ihtiyaç duymamakta), böylece önbellek fiziksel olarak endekslenerek fiziksel olarak etiketlenmiş halde tutulabilir. Yoksa bu sayfaların altındaki "fiziksel adresler" denilen bitleri mi çağırıyordun?
Peter Cordes

1
@PeterCordes Fiziksel adresin bir sayfa bölümündeki ofseti çağırıyordum (sanal bitler için === fiziksel). Eğer biri gecikmeyi vurgulıyorsa, kişi böyle neredeyse endekslenmiş diyebilir; eğer biri takma problemlerinin eksikliğini vurguluyorsa, kişi buna fiziksel olarak endekslenmiş olma eğiliminde olabilir.
Paul A. Clayton

Teşekkürler. Sizi stackoverflow.com/questions/33974193/… adresindeki başka bir konuya etiketlediğimde size haber verildi mi? L2 / L3 önbelleklerinin tipik olarak fiziksel olarak endekslenmiş olup olmadığına dair uzman bir cevap beklemekteydim, bu yüzden büyük birliktelik gerektirmeden büyük olabilirler. (Evet, sanırım, çünkü TLB'den sonra L1'in kaçırana kadar kontrol edilmediler, bu nedenle fizik adres mevcut.) Bu tartışmada da ortaya çıkan birkaç şaşırtıcı şey var.
Peter Cordes
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.