본문 바로가기

학부_대학원/대학원_학과공부정리

가상화 -xen(2)

SMALL

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 가상화







LIST

'학부_대학원 > 대학원_학과공부정리' 카테고리의 다른 글

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