5. 이벤트 채널 소개

기술/가상화기술 2017. 1. 7. 17:52 Posted by 아는 개발자

이벤트 채널에 대해 설명하기 전에 인터럽트에 대해서 간단히 소개를 하자. 인터럽트는 CPU에 즉각적인 처리가 필요한 작업을 알리는데 사용되는 프로세스이다. 사용 방법은 네트워크, 블럭 드라이버 같은 하드웨어에 처리가 필요한 작업이 들어온 경우 인터럽트 핸들러에 알리고, 요청을 받은 인터럽트 핸들러는 이들의 요구 사항을 디바이스 정보와 함께 CPU에 전달한다. CPU는 현재 실행중인 프로세스를 잠시 중단 시키고 요청을 처리한다. 인터럽트가 있기 때문에 나는 블로그 포스트를 쓰면서도 친구의 카톡메시지를 동시에 받을 수 있다.


이벤트 채널의 역할은 인터럽트와 거의 동일하다. 단지 쓰이는 곳이 다를 뿐이다. 앞서 포스트에서 DomainU들은 Domain0와 Frontend-Backend Driver 관계를 가진다고 했다. 이 둘 간에 통신 채널이 존재하고 Grant table로 데이터를 전송하고 Ring으로 두 드라이버 사이에 요청/응답을 전달 한다고 했다. 그럼 요청/응답이 왔다고 알리는 건 어떻게 할까? 그냥 Domain들이 Polling방식으로 매번 Ring을 검사하기엔 오버로드가 클 것이다. 이때 필요한 것이 이벤트 채널이다.


(도메인 간에 이벤트 채널로 연결되어있다)


이벤트 채널 구성은 인터럽트와 비슷하다. 기존 OS에서 각 장치별로 IRQ가 있었듯이, 이벤트 채널은 각 장치마다 port번호가 존재하고 이를 Domain은 포트 번호에 맞춰 지정된 Backend/Frontend에 알림을 준다. Interrupt Handler들을 각 Domain들마다 가지고 있다고 생각하면 편하다.

728x90

'기술 > 가상화기술' 카테고리의 다른 글

QEMU와 KVM - 1  (0) 2017.11.01
6. XenStore, Xenbus  (0) 2017.01.22
5. 이벤트 채널 소개  (0) 2017.01.07
가상화기술의 대표적인 보안 문제  (0) 2016.12.10
4. Domain 장치 드라이버 개발  (0) 2016.11.27
3. Domain간 통신 방법  (0) 2016.11.06