(다음 답변은 "현대적인"데스크탑, 서버 또는 고급 임베디드 플랫폼 (예 : 스마트 폰 및 더 작은 시스템)을 가정합니다. x86 시스템의 경우 최신 수단은 386 이상입니다. 다음 답변은 거의 모든 유닉스와 같은 "현대"OS 또는 95 이후 Windows.)
이것은 OS에서 발생하지 않으며 프로세서, 특히 MMU ( 메모리 관리 장치 )에서 발생 합니다. MMU는 가상 주소 지정을 지원하므로 포인터를 구성하는 비트는 메모리에서 비트의 물리적 위치를 직접 나타내지 않습니다.
일반적인 MMU에서 포인터가 역 참조되면 MMU는 비트를 두 그룹으로 분류합니다. 상위 비트는 페이지 번호를 구성하고 하위 비트는 페이지 내부의 주소를 구성합니다. 대부분의 데스크톱 및 서버 시스템은 4kB 페이지를 사용합니다. MMU는 TLB 라는 테이블에서 가상 페이지 번호를 찾습니다 ( "프로세스 메모리 맵"이라고합니다). TLB는이 가상 페이지에 해당하는 실제 페이지 수를 나타냅니다. 그런 다음 MMU는 메모리의 실제 페이지에서 데이터를 가져옵니다.
TLB에이 특정 가상 페이지 번호에 대한 항목이 없으면 MMU는 프로세서에 잘못된 액세스가 발생했음을 알립니다. 이를 일반적으로 예외라고합니다.
지금까지 OS에 대해서는 언급하지 않았습니다. 이 모든 작업이 OS와 독립적이기 때문입니다. OS는 두 가지 방식으로 구성하기 때문에 작동합니다.
OS는 작업 전환을 담당합니다. 그렇게하면 예상 한대로 현재 TLB를 저장하고 다음 예약 된 작업을 위해 저장된 TLB로 바꿉니다. 이러한 방식으로 각 프로세스에는 TLB가 있으므로 0x123456
프로세스 X의 주소는 프로세스 Y의 동일한 주소와 동일한 RAM의 실제 위치를 가리 키지 않거나 단순히 유효하지 않을 수 있습니다. 프로세스가 주소 공간 외부에서 포인터를 역 참조하려고하면 다른 프로세스 공간에 도달 하지 않고 아무데도 도달 하지 않습니다 .
OS는 예외가 발생할 때 발생하는 사항을 결정합니다. 유효하지 않은 메모리 액세스를 수행하는 프로세스 (세그먼트 결함, 일반 보호 결함 등)를 종료 할 수 있습니다. 이는 스와핑이 구현되는 방식이기도합니다. 예외 핸들러는 스왑 공간에서 일부 데이터를 페치하고 이에 따라 TLB를 업데이트 한 후 다시 액세스를 수행하기로 결정할 수 있습니다.
프로세스가 자체 TLB를 변경할 수 없으므로 MMU는 보안을 제공합니다. OS 커널 만 TLB를 변경할 수 있습니다. TLB 변경 권한의 작동 방식은이 답변의 범위를 벗어납니다.