2014-09-24 24 views
6

Mam pytanie dotyczące relacji między jądrem Linux i MMU. Mam teraz punkt, w którym jądro Linux zarządza tabelą stron między adresami pamięci wirtualnej i adresami pamięci fizycznej. W tym samym czasie istnieje MMU w architekturze x86, która zarządza tabelą stron między adresami pamięci wirtualnej i adresami pamięci fizycznej. Jeśli MMU prezentuje się w pobliżu procesora, czy jądro musi nadal zajmować się tabelą stron?Zarządzanie tabelami stron Linux i MMU

To pytanie może być głupie, ale inne pytanie brzmi: czy MMU zajmuje się pamięcią, kto zarządza wysoką pamięcią i małą ilością pamięci? Wierzę, że jądro otrzyma rozmiar pamięci wirtualnej z MMU (4 GB na 32bit), wtedy jądro rozróżni przestrzeń użytkownika i przestrzeń jądra w wirtualnym adresie. Czy mam rację? lub całkowicie błędne?

Bardzo dziękuję z góry!

+0

Linux może działać na sprzęcie bez MMU, więc jądro musi wiedzieć, jak zrobić tłumaczenie, ale na x86, wierzę, po prostu użyj do tego MMU. –

+0

I sekundę do komentarza Gennadi. W architekturze x86 MMU zajmuje się tłumaczeniem adresów wirtualnych na adresy fizyczne, ale jądro będzie nadal śledzić, które strony należą do jądra i jakie strony należą do procesów użytkownika. Wierzę, że [this] (http://www.tldp.org/LDP/tlk/mm/memory.html) może pomóc w określeniu, jak działają pewne rzeczy. –

Odpowiedz

5

Obowiązki zarządzania stronami OS i MMU to dwie strony tego samego mechanizmu, które funkcjonują na granicy architektury i mikroarchitektury.

Pierwsza strona określa "kontrakt" między sprzętem a oprogramowaniem, które go obsługuje (w tym przypadku - OS) - jeśli chcesz używać pamięci wirtualnej, musisz zbudować i utrzymać tabelę stron zgodnie z opisem w tę umowę. Z drugiej strony strona MMU jest jednostką sprzętową odpowiedzialną za wykonanie zadań HW tłumaczenia adresu. Może to, ale nie musi, obejmować optymalizacje sprzętowe, są one zazwyczaj ukryte i mogą być wdrażane na różne sposoby, tak aby działały pod maską, o ile utrzymają stronę sprzętową umowy.

Teoretycznie MMU może zdecydować o wydaniu zestawu dostępu do pamięci dla każdego tłumaczenia (spacer strony) w celu osiągnięcia wymaganego zachowania. Jednakże, ponieważ jest to element krytyczny pod względem wydajności, większość MMU optymalizuje to poprzez buforowanie wyników poprzednich spacerów strony wewnątrz TLB, tak jak cache przechowuje wyniki poprzednich dostępów (faktycznie, w niektórych implementacjach, same pamięci podręczne mogą również przechowywać niektóre z nich dostęp do tabeli stron, ponieważ zwykle znajduje się w pamięci podręcznej). MMU może zarządzać wieloma TLB-ami (większość implementacji rozdziela te na strony danych i kodowe, a niektóre mają TLB drugiego poziomu) i dostarcza z nich tłumaczenie bez zauważenia tego, z wyjątkiem krótszego czasu dostępu.

Należy również zauważyć, że sprzęt musi chronić przed wieloma narożnymi przypadkami, które mogą zaszkodzić spójności takiego "buforowania" TLB poprzednich tłumaczeń, na przykład aliasingu strony lub remapów podczas użytkowania. Na niektórych maszynach, najgorsze przypadki wymagają nawet masowego przepływu zwanego strzelaniem TLB.

+1

Wydaje się, że bardziej odpowiednie jest zajęcie się częścią pytania o rozdzielenie jądra i przestrzeni użytkownika. (Myślę, że * Linux używa (globalnych) negatywnych adresów dla przestrzeni jądra, a dla x86 wymaga to jednej strony u góry hierarchicznej tabeli stron (na przestrzeń adresową), której górna (ujemna) połowa mapuje podtabity jądra. obsługuje oddzielną globalną tabelę stron, która jest prawdopodobnie używana przez jądro systemu Linux. Tablica hash programu Power nie jest używana przez system Linux dla głównej tabeli, a nowszy system buforowania wpisów katalogu jest zgodny z głównym formatem tabel systemu Linux. –