Co dzieje się z zawartością pamięci podręcznej przełącznika kontekstu?


50

Co w procesorze wielordzeniowym, co dzieje się z zawartością pamięci podręcznej rdzenia (powiedzmy L1), gdy w tej pamięci podręcznej występuje zmiana kontekstu?

Czy zachowanie zależy od architektury, czy jest to ogólne zachowanie stosowane przez wszystkich producentów układów?

Odpowiedzi:


42

Zależy to zarówno od procesora (nie tylko serii procesorów, może się różnić w zależności od modelu) i systemów operacyjnych, ale istnieją ogólne zasady. To, czy procesor jest wielordzeniowy, nie ma bezpośredniego wpływu na ten aspekt; ten sam proces może być wykonywany na wielu rdzeniach jednocześnie (jeśli jest wielowątkowy), a pamięć może być współdzielona między procesami, więc synchronizacja pamięci podręcznej jest nieunikniona bez względu na to, co dzieje się na przełączniku kontekstu.

Gdy procesor wyszukuje lokalizację pamięci w pamięci podręcznej, jeśli istnieje jednostka MMU , może użyć adresu fizycznego lub wirtualnego tej lokalizacji (czasami nawet kombinacji obu, ale tutaj tak naprawdę nie ma to znaczenia).

W przypadku adresów fizycznych nie ma znaczenia, który proces uzyskuje dostęp do adresu, zawartość można udostępniać. Dlatego nie ma potrzeby unieważniania zawartości pamięci podręcznej podczas przełączania kontekstu. Jeśli dwa procesy odwzorowują tę samą stronę fizyczną z różnymi atrybutami, jest to obsługiwane przez MMU (działając jako MPU (jednostka ochrony pamięci)). Minusem fizycznie adresowanej pamięci podręcznej jest to, że MMU musi znajdować się między procesorem a pamięcią podręczną, więc wyszukiwanie pamięci podręcznej jest wolne. Pamięci podręczne L1 prawie nigdy nie są fizycznie adresowane; buforami wyższego poziomu mogą być.

Ten sam adres wirtualny może oznaczać różne lokalizacje pamięci w różnych procesach. Dlatego przy wirtualnie zaadresowanej pamięci podręcznej procesor i system operacyjny muszą ze sobą współpracować, aby proces znalazł właściwą pamięć. Istnieje kilka popularnych technik. Kod przełączania kontekstu dostarczony przez system operacyjny może unieważnić całą pamięć podręczną; jest to poprawne, ale bardzo kosztowne. Niektóre architektury procesorów mają miejsce w linii pamięci podręcznej na ASID (identyfikator przestrzeni adresowej) sprzętową wersję identyfikatora procesu, również używaną przez MMU. To skutecznie oddziela wpisy pamięci podręcznej od różnych procesów i oznacza, że ​​dwa procesy odwzorowujące tę samą stronę będą miały niespójne widoki tej samej strony fizycznej (zwykle istnieje specjalna wartość ASID wskazująca udostępnioną stronę, ale należy je usunąć, jeśli nie są mapowane na ten sam adres we wszystkich procesach, w których są mapowane). Jeśli system operacyjny dba o to, aby różne procesy wykorzystywały nie nakładające się przestrzenie adresowe (co nie pozwala na wykorzystanie pamięci wirtualnej, ale czasem można to zrobić), wiersze pamięci podręcznej pozostają ważne.

Większość procesorów posiadających MMU ma również TLB . TLB to pamięć podręczna mapowań z adresów wirtualnych na adresy fizyczne. TLB jest sprawdzany przed wyszukiwaniem w fizycznie zaadresowanych pamięciach podręcznych, aby w miarę możliwości szybko ustalić adres fizyczny; procesor może rozpocząć wyszukiwanie pamięci podręcznej przed zakończeniem wyszukiwania TLB, ponieważ często kandydujące linie pamięci podręcznej można zidentyfikować na podstawie środkowych bitów adresu, między bitami określającymi przesunięcie w linii bufora a bitami określającymi stronę. Praktycznie zaadresowane pamięci podręczne omijają TLB, jeśli występuje trafienie w pamięć podręczną, chociaż procesor może zainicjować wyszukiwanie TLB, gdy przeszukuje pamięć podręczną, w przypadku braku.

Samą TLB należy zarządzać podczas przełączania kontekstu. Jeśli wpisy TLB zawierają ASID, mogą pozostać na miejscu; system operacyjny musi wyczyścić wpisy TLB tylko wtedy, gdy ich identyfikator ASID zmienił znaczenie (np. ponieważ proces się zakończył). Jeśli wpisy TLB są globalne, należy je unieważnić podczas przełączania do innego kontekstu.


2
Bardzo informujące. Gdybyś mógł dodać kilka przykładów tego, jak odbywa się to w prawdziwych architekturach, byłoby jeszcze lepiej.
JohnTortugo

2
@JohnTortugo To, co napisałem, dość ściśle odpowiada temu, co możesz zrobić na ARMv7 (np. CPU twojego smartfona) (jedyna architektura, w której kiedykolwiek napisałem kod obsługi MMU). Oczekuję, że inne platformy, takie jak x86, będą dość podobne, ale nie mogłem o nich pisać. Jeśli szukasz konkretnych informacji o prawdziwej platformie, informatyka nie jest właściwą witryną, możesz zapytać na Stack Overflow lub Electrical Engineering lub Embeddedd (proponowane) .
Gilles „SO- przestań być zły”

10

Pamięć podręczna jest zazwyczaj nieświadoma przełącznika kontekstu. Tylko sekwencja adresów, do których uzyskano dostęp, określa, które linie pamięci podręcznej są zastępowane.

Polityka wymiany jest zwykle heurystyczna zależna od producenta i konkretnej mikroarchitektury. Problem polega na tym, że heurystyka nie jest w stanie przewidzieć przyszłości, który adres, a zatem linia pamięci podręcznej, będą dostępne w następnej kolejności.

Heurystyka może być prosta jak LRU (ostatnio używana). Ale w przypadku nowoczesnych procesorów heurystyka jest bardziej skomplikowana.

Spójrz na Intel® 64 i IA-32 Architectures Software Developer's Manual Tom 3 Rozdział 11 wyjaśnia pamięć podręczną i mechanizmy kontroli pamięci podręcznej. AMD ma to w rozdziale 7 podręcznika programisty architektury AMD64, tom 2: Programowanie systemu . W przypadku procesorów opartych na ARM wydaje się, że pliki PDF są dostępne tylko dla zarejestrowanych klientów.


Czy możesz podać odniesienie do pierwszego akapitu? Czy powiązane dokumenty odnoszą się do tego problemu?
Raphael

Zachowanie zależy w dużej mierze od tego, czy pamięć podręczna jest adresowana fizycznie czy wirtualnie. Zasady wymiany nie są tu istotne. W przypadku ARM w instrukcjach technicznych procesora znajdują się informacje publiczne, np. L1 na Cortex-A9 (to, co dostajesz w telefonach komórkowych najnowszej generacji), choć zrozumienie tego może być trudne bez niepublicznej instrukcji obsługi architektury .
Gilles 'SO - przestań być zły'

1
@Raphael napisałem „zwykle”, ponieważ dzięki procesorom, które napotkałem, sama pamięć podręczna nie ma żadnej wiedzy na temat wątków, procesów, kontekstów itp. Po prostu reaguje na dostęp do pamięci. Jeśli pamięć podręczna danych zostanie opróżniona, a pamięć podręczna instrukcji unieważniona na przełączniku kontekstu, to system operacyjny wyzwala tę akcję, a nie pamięć podręczna. Jeśli zainstalujesz inny system operacyjny, to zachowanie może się zmienić.
uli

@Gilles Raz spróbowałem udzielić krótkiej odpowiedzi i postanowiłem nie pisać o pamięci wirtualnej, ponieważ natychmiast dotyczy to systemu operacyjnego. I należy również wziąć pod uwagę ramy czasowe. „Nic się nie zmienia” może być odpowiedzią na czas między przełączeniem kontekstu a następnym dostępem do pamięci, ponieważ zawartość pamięci podręcznej może zostać unieważniona, ale w ogóle nie zmieniona.
uli
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.