Linux가 메모리 액세스 오류를 포착하는 방법에 대한 질문이 있습니다. 내가 아는 한, 사용자 공간 프로그램은 메모리에 액세스하려고 할 때마다 OS에 요청할 필요가 없습니다. 이제 프로세스가 주소 공간에 없는 메모리 위치에 액세스하려고 하면 CPU는 중지하고 이 이벤트를 OS에 전달합니다.
그래서 내 질문은: CPU는 이 이벤트를 OS에 어떻게 알립니까? 미리 정의된 코드 실행이 시작되나요? 그렇다면 해당 코드가 메모리 어디에 있는지, 해당 코드 섹션의 이름이 무엇인지, 무엇을 하는지 등을 알려주십시오.
답변1
당신의 추측은 100% 맞는 것 같습니다.
라는 하드웨어가 있습니다.메모리 관리 장치(MMU)(CPU의 일부). 어떤 페이지가 무엇을 수행하는지(실행 가능, 읽기 가능, 쓰기 가능) 설명하는 페이지 테이블이 제공됩니다. 프로세스가 허용되지 않은 작업을 시도하면 MMU가 CPU를 중단시킵니다. 그런 다음 CPU는 특정 주소에서 코드 실행을 시작합니다. 이 주소는 다음에 정의되어 있습니다.인터럽트 벡터 테이블. 각 인터럽트 유형에 대한 시작 주소 테이블(일부 CPU는 주소 대신 이 테이블에 명령을 저장하지만 동일한 작업을 수행함)