-
3. Domain간 통신 방법개발/가상화 2016. 11. 6. 12:49
Guest OS들은 동작하면서 Block, Network Device처럼 다양한 장치에 접근할 일이 생긴다. Domain0는 Real Hardware driver를 갖고 있기 때문에 직접 접근 할 수 있지만, DomainU는 Control Domain의 역할을 하는 Domain0를 거쳐서 접근해야 한다. DomainU는 Domain 0에게 전송을 요청할 뿐만 아니라 Domain0에게 전송할 데이터들을 전달해야하는데 이때 Domain간에 통신 메커니즘이 필요하다.
가상머신에서 잠깐 물러나 일반 OS를 생각해보자. 두 개의 프로세스가 메시지를 전달 하는 방법은 여러 가지가 존재한다. 간단히 file에다가 값을 입력하는 방식도 있고 socket, pipe 공유메모리까지 사용 환경과 목적에 맞춰서 적용이 가능하다.
(Wikipedia에 작성된 주요 IPC 메커니즘)
Xen은 프로세스간 통신 방법 중 공유 메모리(Shared Memory) 방식을 Domain간 통신 방법으로 적용 했다. 서로 통신하려는 두 Domain들을 Process 형태로 보고 Xen은 이를 관리하는 OS의 역할이다. 두 Domain중 하나가 Xen에게 공유메모리 영역 할당을 요청하면 Xen은 두 Domain이 공유 할 수 있는 메모리 영역을 할당한다.
공유 할 수 있는 영역을 할당 받은 Domain들은 이곳에 전달할 데이터 값을 쓰고 전달 받은 데이터 값을 읽어야 하는 Domain은 해당 영역의 값을 읽는 방식이다. Xen은 공유 메모리 영역을 페이지 단위로 할당했다.
Xen은 Grant Table이라는 자료구조로 Domain간 메모리 공유를 지원한다. Grant Table은 현재 Domain이 어떤 Domain과 매핑을 하고 있는지, 상태는 어떠한지를 정보를 저장해둔 자료구조이다. 메모리 영역을 할당 받으면 각 Domain들은 grant table의 entry 값을 업데이트해 어떤 방식으로 메모리 매핑이 이뤄져 있는지 정보를 저장한다.
특정 영역에 메모리 정보를 입력하고 grant table이 관리를 하는 것은 알겠다. 그런데 메모리 정보를 입력하기도 전에 다른 Domain이 해당 정보를 읽으려고 하면 문제가 될 것이다. Xen은 경우를 관리 하기 위해 Ring 이라는 비동기식 통신 채널을 만들었다.
Domain들은 Domain0와 연결된 분리장치 드라이버(backend/frontend)에서 각각 ring으로 연결되어 있고 이 ring을 통해 요청/응답처럼 간단한 메시지 값들을 전달한다. 원형으로 된 구조이며 해당 entry에 요청 값을 입력하면 반대편 Domain driver에서 요청 값을 읽고 응답 값을 배열 뒤편에 입력해주는 방식으로 구성된다. Domain들은 여기서 받은 요청 값을 읽고 grant table에 값을 입력/확인 한다.
'개발 > 가상화' 카테고리의 다른 글
가상화기술의 대표적인 보안 문제 (0) 2016.12.10 4. Domain 장치 드라이버 개발 (0) 2016.11.27 2. Xen 기본 구조/Hypercall (0) 2016.11.05 1. Xen Project 소개 (0) 2016.11.05 가상화기술 Type1 (0) 2016.09.11