Hypervisor를 이해하기 위해서는 기본적으로 OS에 대한 지식이 필요로 하다.
앞서 CPU 가상화를 이용해서 Emulation 방식이 아닌 Direct Execution방식이 가능하다고 하였다.
해당 직접 실행방식으로 hpyervisor를 채택하면 안전상에 문제가 생길 수 있다.
그 전에 특권 모드와 비특권 모드에 관해서 알아볼 필요가 있다.
특권모드 and 비특권모드
우리가 흔히 말하는 ring0 - ring3를 생각하면 된다. user단(ring0)에서 kernel단(ring3)의 코드나 데이터를 함부로 침해 할 수 없다.
그래서 syscall이라는 시스템 콜의 중계자가 필요해진다. syscall을 이용해서 user application이 hardware의 동작을 요구 할 수 있게 된다.
만약에 위와 같은 시스템이 존재 하지 않는다고 하면, user단에서 작동하는 간단한 악성코드가 하드웨어를 제어가 가능한 보안상에 큰 문제가 발생
유저 프로그램이 C:\의 secret.txt를 읽고 싶으면, os의 읽기와 관련된 시스템 콜을 이용해서 HDD에 접근해서 secret.txt의 내용을 읽어 오게 된다.
Trap
Trap에 관련된 내용은 예전에 정리 해놓은게 있다.
+ 비특권 모드에서 특권모드의 Instruction을 실행해도 Trap 발생
[http://richong.tistory.com/119 ]
과거 하이퍼바이저
trap 발생 --> 하이퍼바이저가 --> 에뮬
but 경계선의 명령어와 overhead가 너무 컸다.
그래서 나온 대안이 바이너리 변환과 하이퍼 콜
바이너리 변환
운영체제의 코드 이미지를 하이퍼바이저가 스캔해 위와 같이 문제의 소지가 있는 명령어를 찾아내고 검출
해당 명령어를 적절히 수정하여 잘 동작할 수 있는 코드를 만들어 실행 하이퍼바이저가 번역하는 과정을 거친 후 CPU에서 직접 실행
하이퍼콜[반가상화 기술의 부분 집함]
직접 운영체제의 소스를 수정하여 문제의 소지가 있는 명령어를 제거
하이퍼바이저로 호출할 수 있는 하이퍼 콜로 바꾸고, 해당 명령어가 실행되면
하이퍼바이저에게 제어권을 넘기고 처리 후, 다시 게스트 os에게 제어권을 넘김
여기서 Q1 : 과연 운영체제를 수정하지 못하는 경우는?
하드웨어 지원
최근에는 벤더사들이 가상화 기능을 CPU에 추가
인텔은 VT-x, AMD는 SVM 명칭
트랩과 에뮬레이트 방식으로 하이퍼바이저를 구현할 수 있도록 하드웨어적인 기능을 추가
NON ROOT MODE의 GUEST OS가 POPF 실행 --> TRAP 발생 --> 하이퍼 바이저로 제어권을 넘김[하드웨어 도움]
Paravirt Operation
리눅스 커널을 예로든다. 각 벤더사 마다 xen, vmware와 같은 친구들이
각자 입맛에 맞게 hypercall을 제공했다고 하자.
그러면 같은 기능을 하는 함수인데 이름과 코드 구조가 다를 것이다. --> 관리의 필요성
하지만 이미 개발해놓은 것을 버릴 순 없으니....
리눅스 측에서, 리눅스 커널에서 Hypervisor 관련 Interface[접지점]를 만들어놓고 여기에 맞추도록 함
위와 같은 Hypervisor Interface 용어가 맞는지는 모르겠지만.. 을 Paravirt OperationPv-ops라고 한다.
하이퍼콜 --> Xen에서 사용하는
해당 책은 xen으로 배우는 가상화..라는것을 잊으면 안된다 ^^
guest os의 process와 kernel이 있다고 생각.
process가 read 함수 호출 -> k_read()함수[syscall] 호출--> 하이퍼바이저[hypercall인지 판단] --> guest os kernel 너가 처리해!!
guest os의 kernel가 k_read()함수[syscall] 호출 --> 하이퍼바이저[hypercall인지 판단] --> hypercall로 변경
hypercall == hypervisor에서 동작하도록 하는 함수
mov eax, hypercall_index
call vmcall or syscall or int 0x82
4장 하드웨어 지원--> 좀 cpu 하드웨어 지원받아서 어떻게 Q1을 해결할지!!!
여기서 Q에 관한 내용이 자세하게 나온다.
windows os를 수정 못하니까... Full Virtualization을 하자!!
Full Virtualization[전가상화]는 어떻게 하는가
전가상화는 HVM[Hardware Virtual Machine]기술을 통해서만 가능하다 --> 여기서 만!!! 꼭 필요하다!
즉 전가상화를 위해서는 HVM이 필수적이고 해당 HVM을 이루기 위해서는 하드웨어적 즉 CPU에서의 도움이 필요하다.
그러니까 CPU가 HVM을 지원안하면 말짱 도로묵! 만약 안되면.. BIOS에서 확인!
해당 기술은 Intel에서 VT-x라고도 불리면 VMX[Virtual Machine Extensions]라 명칭
인텔에서는 VMX-operation이라는 개념을 통해서 VT-x를 구현!!
VMX-operation은 2가지 종류가 있다. operation이라면 먼가 동작과 관련된 내용일것 같다. execute
VMX-root operation : cpu, 하드웨어의 모든 제어권을 가짐 hypervisor 에서 동작하는상태
VMX-non-root operation : 특정 명령어, 하드웨어 제어권한이 [일부!!!] 제한된 상태, Guest os가 동작
위와 같이 두개의 operation이 존재한다.
그러면 위의 두개의 operation[모드]를 왔다 갔다 하면서 실제 동작이 이루어 질것이다.
이러한 왔다 갔다 하는 것을 VMX transition이라고 한다 전환!!!
VM Entry : root->non-root 즉 가상머신으로 들어가는 명령어 그러니까 Entry
VM Exit :non-root -> root로, 즉 가상머신에서 hypervisor로 그러니까 Exit
[참고] Xen으로 배우는 가상화 기술의 이해 - CPU 가상화
'학부_대학원 > 대학원_학과공부정리' 카테고리의 다른 글
GeekOS - pro0 (0) | 2017.03.03 |
---|---|
GeekOS - pre knowledge (0) | 2017.03.03 |
가상화- xen (1) | 2017.03.02 |
[Lecture] LaTeX - 2 (0) | 2017.03.01 |
[Lecture] LaTeX - 1 (0) | 2017.02.27 |