Czy zarządzanie pamięcią w jądrze Linuksa odbywa się za pomocą stronicowania lub segmentacji, czy obu?
Czy zarządzanie pamięcią w jądrze Linuksa odbywa się za pomocą stronicowania lub segmentacji, czy obu?
Odpowiedzi:
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)
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.