Xen은 게스트 운영 체제에 의해 설치된 예외 처리기를 어떻게 확인합니까?

Xen은 게스트 운영 체제에 의해 설치된 예외 처리기를 어떻게 확인합니까?

논문의 일부를 이해하지 못함Xen과 가상화 기술. 가상화 예외 처리(섹션 2.1.2) 주제에 대해 문서에서는 각 게스트 운영 체제가 예외가 발생할 때 실행하려는 핸들러에 테이블 매핑 예외를 등록한 후 다음을 수행할 수 있다고 명시합니다.

Xen에 제공되는 예외 처리기의 유효성을 검사하여 보안이 보장됩니다. 확인해야 할 유일한 것은 핸들러의 코드 세그먼트가 링 0에서 실행되도록 지정되지 않았다는 것입니다. 어떤 게스트 운영 체제도 이러한 세그먼트를 생성할 수 없으므로 지정된 세그먼트 선택기를 Xen이 보유하는 소수의 정적 값과 비교하는 것으로 충분합니다.

제가 이해하는 바는 다음과 같습니다. Xen은 권한 있는 명령이 포함된 처리기 코드에 대해 걱정할 필요가 없습니다. 왜냐하면 그런 경우 처리기가 링 0 외부에서 실행되고 있기 때문에 명령 실행이 실패하기 때문입니다. 운영 체제는 그러한 섹션을 생성할 수 있습니다). 그러나 게스트 운영 체제는 실제로 Xen 및 해당 권한 있는 코드용으로 예약된 처리기로 메모리 세그먼트를 등록하려고 시도할 수 있습니다. 이 경우 예외를 처리하기 위해 이 섹션으로 이동하면 예외를 처리하는 동안 코드가 링 0에서 실행됩니다. 따라서 Xen은 게스트 운영 체제가 Xen에 속한 세그먼트를 예외 처리기로 등록하지 않도록 해야 합니다. 이 부분에 대한 나의 이해가 맞는 걸까요, 틀린 걸까요?

다음 단락은 다음과 같습니다.

그 외에도 다른 처리기 문제는 예외 전파 중에 수정됩니다. 예를 들어, 처리기의 코드 세그먼트가 존재하지 않거나 처리기가 메모리에 페이징되지 않은 경우 Xen이 처리기로 반환되는 iret 명령을 실행할 때 적절한 오류가 생성됩니다. Xen은 오류 프로그램 카운터를 확인하여 이러한 이중 오류 값을 감지합니다. 주소가 비정상적인 가상화 코드에 있으면 문제가 있는 게스트 운영 체제가 종료됩니다.

나는 이것을 다음과 같이 해석합니다: 적절한 게스트 OS 핸들러로 제어권을 전송하려고 시도하여 실패를 처리하는 동안 해당 핸들러가 존재하지 않거나 메모리가 부족하여 두 번째 실패가 발생하는 경우 두 번째 실패를 처리하십시오. Xen 코드는 실행 중인 것을 확인합니다. 코드가 두 번째 오류를 트리거하고 또 다른 "상위" 오류를 처리하는 동안 오류가 발생했음을 인식합니다. 정말 혼란스러운 것은 "주소가 예외 가상화 코드에 있으면 해당 게스트 운영 체제가 종료됩니다"라는 마지막 문장입니다. 핸들러 코드가 존재하지 않아 두 번째 오류가 발생한 경우에 대비해 이 정보를 얻었습니다. 그런데 핸들러가 메모리에서 벗어날 때 게스트 OS가 종료되는 이유는 무엇입니까? 핸들러가 디스크에서 메모리로 이동하기를 원합니다.

컨텍스트가 필요한 경우 기본 아키텍처는 x86입니다.

관련 정보