Zasada zarządzania pamięcią stosowana w systemie Linux

9

Czy zarządzanie pamięcią w jądrze Linuksa odbywa się za pomocą stronicowania lub segmentacji, czy obu?

Gilles „SO- przestań być zły”
źródło

Odpowiedzi:

7

Linux używa obu. Wykorzystuje segmentację do mapowania całej dostępnej przestrzeni adresowej, jednocześnie zapewniając różne prawa dostępu: zasadniczo jądro i widok przestrzeni użytkownika. Możesz podać kod źródłowy Linuksa dla KERNEL_DS (segment danych jądra) dla niektórych przykładów.

Stronicowanie jest następnie używane do implementacji pamięci wirtualnej (Grep dla „struct gdt_page” w jądrze, jako punkt początkowy)

Frederik Deweerdt
źródło
6

Zarządzanie pamięcią w systemie Linux działa wyłącznie przez stronicowanie.

Linux obsługuje zarówno „małe” (zwykle 4kB), jak i „duże” (2M) strony. Ten pierwszy „po prostu działa” bez twojej wiedzy i nie robi nic specjalnego, a te drugie wymagają specjalnego traktowania (muszą być zarezerwowane w czasie uruchamiania i mapowane za pomocą specjalnego urządzenia).

Jedynym kontekstem, w którym „segment” pojawia się pod Linuksem, jest syscall brk (), który służy do zwiększenia segmentu danych procesu (zwykle nie jest to potrzebne, malloc robi to bez ciebie). Ale tak czy inaczej, pamięć przychodzi na stronach i jest zarządzana na stronach i nie ma to nic wspólnego z segmentacją x86.

Damon
źródło
Segmentacja X86 była przestarzała, gdy pojawił się i386. Linux nigdy nie używał segmentacji do zarządzania pamięcią. Niektóre pochodne, takie jak ELKS i (prawdopodobnie) uClinux mogą.
LawrenceC