Skąd system operacyjny (najlepiej Linux) wie, że masz dostęp do lokalizacji pamięci, do której nie masz dostępu?
To pytanie zostało zainspirowane tymi przeklętymi wskazówkami! Widzę to tak: wszystko w komputerach dotyczy kompromisu między szybkością, bezpieczeństwem, integralnością i takimi rzeczami.
Wiem dobrze o mapach pamięci w Linuksie, ale wydaje mi się to trochę niedorzeczne, że jądro sprawdza, czy lokalizacja, do której próbujesz uzyskać dostęp, znajduje się w prawidłowym zakresie za każdym razem, gdy uzyskujesz dostęp. Wygląda na to, że marnowałby tak dużo czasu, który można by poświęcić na robienie czegoś bardziej produktywnego (ale być może mniej bezpiecznego bez kontroli!). A może pamięta wszystkie ostatnie dostępy i sprawdza je przy każdym tyknięciu zegara sprzętowego? (Ale to brzmi niebezpiecznie i po raz kolejny wolno).
Byłem zaskoczony, że na to pytanie nigdzie nie ma odpowiedzi. Zawsze się nad tym zastanawiałem. To sprawia, że myślę, że istnieje sekcja sprzętu, która zrobi to w imieniu systemu operacyjnego, z przyjemnym, wygodnym poziomem abstrakcji. Ale nadal wymagałoby to załadowania map pamięci kolejnych procesów na każdym przełączniku kontekstu, co znów brzmi wolno.
Tak, tak czy inaczej, zaczynam trochę: w jaki sposób system operacyjny wykrywa naruszenie pamięci?
Dzięki