개발
-
5. 이벤트 채널 소개개발/가상화 2017. 1. 7. 17:52
이벤트 채널에 대해 설명하기 전에 인터럽트에 대해서 간단히 소개를 하자. 인터럽트는 CPU에 즉각적인 처리가 필요한 작업을 알리는데 사용되는 프로세스이다. 사용 방법은 네트워크, 블럭 드라이버 같은 하드웨어에 처리가 필요한 작업이 들어온 경우 인터럽트 핸들러에 알리고, 요청을 받은 인터럽트 핸들러는 이들의 요구 사항을 디바이스 정보와 함께 CPU에 전달한다. CPU는 현재 실행중인 프로세스를 잠시 중단 시키고 요청을 처리한다. 인터럽트가 있기 때문에 나는 블로그 포스트를 쓰면서도 친구의 카톡메시지를 동시에 받을 수 있다. 이벤트 채널의 역할은 인터럽트와 거의 동일하다. 단지 쓰이는 곳이 다를 뿐이다. 앞서 포스트에서 DomainU들은 Domain0와 Frontend-Backend Driver 관계를 가진..
-
이런 오픈 소스도 있다!개발/오픈소스 2017. 1. 7. 00:39
어떤 오픈소스에 참여 해볼까 조사하던 중에 신박한 주제를 가지고 있는 프로젝트들을 발견 했다. 이번 포스팅에서는 조사 과정에서 발견한 신박한 오픈소스 프로젝트들에 대해서 정리를 해보려고 한다. 1. Open MRS Google Code in에선 이 프로젝트대한 부연 설명으로 "Write code, save lives!" 딱 한 줄을 내놨다. 코드를 작성하고 생명을 구하자는 말인데 코딩을 하는 거랑 환자를 치료하는 거랑 전혀 무관 할 것 같지만 실제로 이 프로젝트는 의료지식이 전혀 없는 프로그래머들이 자신이 만든 소프트웨어로 HIV/AIDS같은 불치병을 치료하는 프로젝트를 진행한다. 여기서 만든 소프트웨어는 개발도상국에서 환자들의 정보를 별도의 전문적인 지식 없이 저장 및 재사용이 가능한 데이터베이스 환경..
-
디바이스트리(Device Tree)개발/컴퓨터사이언스 2017. 1. 4. 19:07
운영체제(Operating System)가 하드웨어와 소프트웨어 사이의 중간자 역할을 하고 사용자의 애플리케이션이 하드웨어를 조작하기 쉬운 환경을 제공 한다는 것은 컴퓨터 전공자라면 운영체제 수업시간에 귀가 빠지도록 배웠을 것이다. 운영체제는 오드로이드, 아두이노, 주노보드처럼 다양한 보드 위에 있는 RAM, CPU, EMMC등 하드웨어들을 초기화 및 조작하는 역할을 한다. 지금 이 글을 쓰기 위해 타자를 치는 동안 운영체제는 타자 입력 인터럽트를 처리하고 소프트웨어에 전달하는 일을 계속 하고 있다. 어떤 메인 보드를 사용하더라도 운영체제의 기본 뼈대는 동일해야 한다. 하지만 메인 보드들마다 상세 하드웨어 스펙은 천지 차이다. 예를 들면 RAM의 크기나 USB의 물리 주소의 위치처럼 당연한 것 부터 이 ..
-
오픈소스 시작하기개발/오픈소스 2017. 1. 1. 11:48
사오정이란 말이 난무하지만 정작 사십오세까지 직장을 다니기도 버거운 고용불안 시대에 한 회사에만 나의 운명을 맡길 수 없어 입사 2년차인 2017년 올해 부터는 회사 안에서 뿐만 아니라 밖에서도 링크드인에 남길만한 이력을 채우는 것을 새해 목표로 삼았다. 하지만 머릿 속에선 '뭘 해야 하지?' 라는 질문이 먼저 들었다. 안드로이드이나 윈도우 응용 애플리케이션을 개발하는 개인 프로젝트를 해볼까 했지만 이런건 모든걸 혼자 해야한다. 아이디어도 혼자 생각해야하고 기획도 혼자 해야하고 디자인도 혼자 해야하고 개발도 혼자 (그것도 잘)해야한다. 개인 프로젝트이기에 개발과정에서 나오는 이슈들을 같이 고민하는 사람들이 없다(스택 오버플로우에 물어보면 좀 모를까). 산적한 문제들을 해결하다 보면 순수한 마음으로 시작했..
-
가상화기술의 대표적인 보안 문제개발/가상화 2016. 12. 10. 12:54
가상화 기술은 각 OS들 간의 isolation을 지원해 다른 VM들에 비해 보안이 우수하다고 하지만 가상화 기술 또한 보안 문제에서 자유롭지 못하다. 기존 OS가 갖고 있는 보안 문제를 회피 할 수 있으면서도 또 다른 양상의 보안 문제가 발생 할 수 있는데 이번 포스트에서는 가상화 기술의 대표적인 보안 문제점들을 정리 해보고자 한다. 1. Virtual Machine들 간의 공격. 가상화 기술의 가장 큰 장점은 VM들끼리 독립된 관계를 유지(isolation)되어 서로 영향을 주지 않는다는 것인데 만약 이 처리를 잘 해두지 않는다면 VM들간에 혹은 VM이랑 VMM 간에 공격이 발생 할 수 있다. 공격 양상은 VMM이 갖고 있는 데이터를 바꿔버리거나 혹은 읽어오는것 등등이 있다. 2. VM escape ..
-
4. Domain 장치 드라이버 개발개발/가상화 2016. 11. 27. 21:36
Domain의 장치 드라이버 개발 설명에 앞서 왜 장치 드라이버 개발이 필요한지 먼저 알아보자. 일반적으로 OS는 각각의 드라이버(네트워크, 블록 등등)를 통해 실제 하드웨어 장치를 제어하는 시스템을 가지고 있다. 하지만 가상화 환경에서는 하드웨어는 하나인 상태에서 여러개의 OS가 떠있다. Xen 플랫폼 내에 구동중인 여러 Domain들이 각자 하드웨어 Device들을 각자의 방식으로 제어하려 한다면 어떻게 될까? 물건은 하나인데 주인이 여러명이 생기는 엉뚱한 상황이 벌어질 것이다. 각 Domain들의 하드웨어 통제권을 정리하기 위해 Xen은 Domain0에게 하드웨어를 제어하는 독점적인 권한을 주고 나머지 DomainU 들은 Domain0의 통해서 하드웨어에 접근 할 수 있도록 규칙을 세웠다. 간단히 ..
-
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 공유메모리까지 사용 환경과 목적에 맞춰서 적용이 가능하..
-
2. Xen 기본 구조/Hypercall개발/가상화 2016. 11. 5. 20:52
Xen 기본 구조를 설명하기에 앞서 Hypervisor의 기본 형태중 Type 1에 대해서 간단히 설명을 한다. Type1은 가상머신을 관리하는 Hypervisor가 OS처럼 직접 하드웨어를 통제하고 VM(Guest OS)들은 Hypervisor 위에서 동작하는 형태이다. 스케줄러, MMU, Page table처럼 OS의 기본적인 기능들을 Hypervisor가 갖고 있고 위 기능들을 잘 이용해서 여러 개의 Guest OS들을 관리한다(작은 OS인 느낌이다). 기본적인 개념은 Type1 Hypervisor들이 모두 같으나 Guest OS를 관리하는 메커니즘은 Hypervisor마다 차이가 있다. Xen은 Guest OS들을 도메인이라 부르고 Domain이 생성된 순서에 따라 Domain + 생성순서로 이름..