CPU는 세그먼트/페이지 액세스 위반을 어떻게 인식/강제합니까?

CPU는 세그먼트/페이지 액세스 위반을 어떻게 인식/강제합니까?

x86IA-32

내가 아는 한, 사용자 공간 프로그램에서 메모리에 액세스하는 데는 운영 체제가 포함되지 않습니다. 그렇지 않으면 매우 느려질 것입니다.

따라서 페이징이 활성화되거나 비활성화되면 CPU는 현재 실행 중인 코드가 해당 세그먼트/페이지에 액세스할 수 있다는 것을 어떻게든 알아야 합니다.

페이징이 꺼졌다고 가정합니다. 따라서 CPU가 참조할 수 있는 유일한 것은(액세스 권한을 결정하기 위해) GDT의 세그먼트 설명자입니다. 그러나 세그먼트 설명자에는 어떤 프로세스가 어떤 세그먼트를 사용할 수 있는지에 대한 정보가 포함되어 있습니까?

페이지 매김이 켜져 있습니다. 페이지 테이블 항목에 이 특정 페이지에 액세스할 수 있는 사람에 대한 정보가 포함되어 있습니까?

비트 2(U/S) 사용자/감독자, 0인 경우 이 항목에서 참조하는 4KB 페이지에 대한 사용자 모드 액세스가 허용되지 않습니다.

여기에는 권한 수준이 포함되어 있지만 현재 코드에 해당 특정 페이지에 액세스할 수 있는 권한이 있는지 여부를 결정하는 것만으로는 충분하지 않습니다.

CPU+MMU는 모든 메모리 읽기/쓰기에서 운영 체제를 개입시키지 않고 메모리 액세스를 어떻게 보호합니까?

일부 악성 프로세스가 세그먼트 선택기에 자체 값을 로드하면 어떻게 되나요?

MMU에는 OS가 프로세스 생성/컨텍스트 전환 시 채우는 일부 데이터 구조가 있습니까?

답변1

그러나 세그먼트 설명자에는 어떤 프로세스가 어떤 세그먼트를 사용할 수 있는지에 대한 정보가 포함되어 있습니까?

예,세그먼트 설명자의 DPL 비트필요한 권한 수준을 결정합니다.

페이지 테이블 항목에 해당 특정 페이지에 액세스할 수 있는 사람에 대한 정보가 포함되어 있습니까?

예, 미국적인 부분을 언급하셨습니다.

그러나 현재 코드가 이 특정 페이지에 액세스할 수 있는지 여부를 결정하는 것만으로는 충분하지 않습니다.

x86에서 현재 권한 수준은 레지스터의 하위 비트에 의해 결정됩니다 CS.프로세스의 현재 권한 수준 가져오기(링).

CPU+MMU는 모든 메모리 읽기/쓰기에서 운영 체제를 개입시키지 않고 메모리 액세스를 어떻게 보호합니까?

운영 체제는 보호해야 할 항목을 MMU에 알려주기 위해 적절한 데이터 구조를 채웁니다. 코드가 "금지된" 작업을 수행하려고 시도하는 경우에만(실제로는 금지되지 않을 수 있음)예를 들어존재하지 않는 메모리에 접근을 시도하지만 접근이 허용되는 경우).

일부 악성 프로세스가 세그먼트 선택기에 자체 값을 로드하면 어떻게 되나요?

프로세스는 권한 수준을 초과하는 값을 가진 세그먼트 선택기를 로드할 수 없습니다.

MMU에는 OS가 프로세스 생성/컨텍스트 전환 시 채우는 일부 데이터 구조가 있습니까?

예, 이미 GDT, 페이지 테이블 등 일부를 언급하셨습니다.

관련 정보