2013-01-06 2 views
0

전체 가상화에서 게스트 OS의 CPL은 무엇입니까? 게스트 OS의 CPL은 1 (링 1) 전체 가상화에서 동일합니까?Xen 바이너리 재 작성 방법

와 나는 86 특권 명령 중 일부는 쉽게 따라서 "바이너리 재 작성"방법이 필요하며, 처리되지 않는 것을 들었다 ...

이 "진 재 작성이"어떻게 않는 방법

?? 가상화에서 CPU가 에뮬레이트되지 않는다는 것을 알고 있습니다. 어떻게 하이퍼 바이저는 CPU가 실행하기 전에 바이너리 명령어 코드를 변경할 수 있습니까 ?? 그들은 메모리에있는 다음 명령을 예측하고 CPU가 도착하기 전에 메모리 내용을 업데이트합니까? 이게 사실이라면 게스트 OS의 명령어가 실행되기 전에 매번 CPU를 인터셉트 할 필요가 있다고 생각합니다 (이진 재 작성을 수행하는 것입니다) 이 실행됩니다. 나는 이것이 어리 석다 고 생각한다.

특정 설명을 이해할 수있을 것이다. 미리 감사드립니다 !! !!

답변

2

전체 가상화로 하드웨어 지원 가상화를 의미하는 경우 게스트의 CPL은 베어 메탈에서 실행중인 경우와 동일합니다.

Xen은 바이너리를 다시 쓰지 않습니다.

이것은 VM웨어 (내가 아는 한)입니다. (VMWare 소스 코드는 본 적이 없다.)이 방법은 기본적으로 다르게 실행해야하는 코드의 런타임 패치를 수행하는 것으로 구성되며, 일반적으로 기존 op 코드를 다른 것으로 바꾸는 것 하이퍼 바이저에 대한 트랩, 또는 "옳은 일을하는"대체 코드 세트가 필요합니다. VMWare에서 이것이 어떻게 작동하는지 이해한다면, 하이퍼 바이저가 블록을 한 단계 씩 실행함으로써 코드를 "배우고"바이너리 패치를 적용하거나 섹션을 "깨끗한"것으로 표시합니다 (변경이 필요 없음). 다음에이 코드가 실행되면 이미 패치되었거나 명확하므로 "최고 속도"로 실행될 수 있습니다.

반 가상화 (링 압축)를 사용하는 Xen에서 OS의 코드는 가상화 된 환경을 인식하도록 수정되었으며 특정 상황을 이해하기 위해 "신뢰할 수있는"것입니다. 그러나 하이퍼 바이저는 페이지 테이블에 대한 쓰기 작업을 계속 수행합니다 (그렇지 않으면 페이지 테이블을 수정하여 다른 게스트의 메모리에 매핑하는 악성 커널 모듈을 작성할 수 있습니다).

HVM 방법은 CERTAIN 명령어를 인터셉트하지만 나머지 코드는 AMD의 SVM 및 Intel 프로세서의 VMX와 같은 최신 프로세서의 하드웨어 지원으로 정상적인 최대 속도로 실행됩니다. ARM은 최신 프로세서 모델에서 유사한 기술을 보유하고 있지만, 그 이름이 무엇인지는 잘 모르겠습니다.

+0

당신을 감사 매우 도움이 ... 내가 뭔가를 놓친 적이 있다면, 당신의 질문의 꽤 모든 대답했는지 확실하지 않습니다, 또는, 물어 주시기만큼 명확하지 않다! – daehee