Odpowiedź na twoje pytanie jest - to zależy. Jest to ściśle decyzja o wyborze procesora, która równoważy kompromis pomiędzy wydajnością i złożonością.
Weźmy na przykład najnowsze procesory Intel Core - są one fizycznie oznaczone i właściwie zindeksowane (co najmniej zgodnie z http://www.realworldtech.com/sandy-bridge/7/). Oznacza to, że pamięci podręczne mogą uzupełniać tylko wyszukiwania w czystej fizycznej przestrzeni adresowej w celu ustalenia, czy linia istnieje, czy nie. Ponieważ jednak L1 to 32k, 8-drożny asocjacyjny, oznacza to, że używa on 64 zestawów, więc potrzebujesz tylko bitów adresowych od 6 do 11, aby znaleźć poprawny zestaw. Tak się składa, że adresy wirtualne i fizyczne są takie same w tym zakresie, więc można wyszukiwać DTLB równolegle z odczytem zestawu pamięci podręcznej - znanego triku (patrz - http://en.wikipedia.org/wiki/CPU_cache).
Teoretycznie można zbudować wirtualny indeks cache z wirtualnym znacznikiem, który usunie wymóg przejścia przez translację adresów (wyszukiwanie TLB, a także przechodzenie stron w przypadku pomyłek TLB). Jednak spowodowałoby to wiele problemów, szczególnie w przypadku aliasów pamięci - przypadek, w którym dwa wirtualne adresy są odwzorowane na ten sam fizyczny.
Załóżmy, że core1 ma adres wirtualny Pamięć podręczna w tak w pełni wirtualnej pamięci podręcznej (odwzorowuje ją na adres fizyczny C, ale tego jeszcze nie zrobiliśmy). core2 zapisuje do wirtualnego addera B, który odwzorowuje na ten sam fizyczny add C - to znaczy, że potrzebujemy jakiegoś mechanizmu (zazwyczaj "snoop", terminu wymyślonego przez Jima Goodmana), który idzie i unieważnia tę linię w core1, zarządzając scalaniem danych i zarządzaniem koherencją Jeśli potrzebne. Jednak core1 nie może odpowiedzieć na to snoop, ponieważ nie wie o adresie wirtualnym B i nie przechowuje fizycznego adresu C w wirtualnej pamięci podręcznej. Widzimy więc, że mamy problem, chociaż dotyczy to głównie ścisłych systemów x86, inne architektury mogą być bardziej luźne i pozwalają na łatwiejsze zarządzanie takimi pamięciami podręcznymi.
Jeśli chodzi o pozostałe pytania - nie ma rzeczywistego połączenia z PAT, o czym mogę pomyśleć, pamięć podręczna jest już zaprojektowana i nie można jej zmienić dla różnych typów pamięci. Ta sama odpowiedź na drugie pytanie - HW jest w większości pod rozróżnieniem między trybem użytkownika/jądra (z wyjątkiem mechanizmów, które zapewnia sprawdzanie zabezpieczeń, głównie różne pierścienie).
Nie można adresować do pamięci podręcznej. Możesz adresować tylko pamięć. Pamięć podręczna jest obsługiwana przez procesor prywatnie. –
@Kerrek SB Tak, wiem, ale czy cache CPU używa TLB i wszystkich narzutów wirtualnego adresowania czy nie? – Alex