Jak 64-bitowa wirtualna przestrzeń adresowa procesu jest podzielona w systemie Linux?

12

Poniższy obraz pokazuje, w jaki sposób 32-bitowa wirtualna przestrzeń adresowa jest dzielona:

wprowadź opis zdjęcia tutaj

Ale jak dzieli się wirtualną przestrzeń adresową 64-bitowego procesu?

Krzysztof
źródło

Odpowiedzi:

10

64-bitowa mapa pamięci wirtualnej x86 dzieli przestrzeń adresową na dwie części: dolna sekcja (z górnym bitem ustawionym na 0) to przestrzeń użytkownika, górna sekcja (z górnym bitem ustawionym na 1) to przestrzeń jądra. (Zauważ, że x86-64 definiuje adresy „kanoniczne” „dolna połowa” i „wyższa połowa”, a liczba bitów jest skutecznie ograniczona do 48 lub 56; szczegółowe informacje można znaleźć w Wikipedii ).

Pełna mapa jest szczegółowo udokumentowana w jądrze ; obecnie to wygląda

========================================================================================
    Start addr    | Offset  |     End addr     |  Size   | VM area description
========================================================================================
                  |         |                  |         |
 0000000000000000 |    0    | 00007fffffffffff |  128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 ffff800000000000 | -128 TB | ffffffffffffffff |  128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________

z 48-bitowymi adresami wirtualnymi. (Wariant 56-bitowy ma tę samą strukturę, z 64 PB użytecznej przestrzeni adresowej po obu stronach otworu 16K PB).

W przeciwieństwie do przypadku 32-bitowego „64-bitowa” mapa pamięci jest bezpośrednim odzwierciedleniem ograniczeń sprzętowych.

Stephen Kitt
źródło
Aby wyjaśnić: to ograniczenie jest narzucane przez sprzęt. Obecnie nie ma 64-bitowej implementacji procesora, która nie pozostawia dużej dziury bezużytecznych adresów w środku wirtualnej przestrzeni adresowej. Ilość pamięci fizycznej, którą procesory są w stanie rozwiązać, jest również znacznie mniejsza niż 2 do potęgi 64.
Johan Myréen
Dzięki @Johan, próbowałem to podkreślić.
Stephen Kitt