4월 2~4일에 마이크로소프트는 미국 샌프란시스코에서 개발자를 위한 이벤트인 빌드 2014를 개최했습니다. 이 행사는 마이크로소프트의 폭넓은 솔루션, 클라우드부터 임베디드용 윈도우까지를 다루고 있는데 Xbox One과 게임 개발에 대한 세션도 몇가지 있었다네요.

 

1.jpg

 

Frank Savage(Partner Development Lead, Microsoft). 오리진 시스템에서 스트라이크 커맨더나 윙 커맨더 3를 개발한 경력이 있는 분입니다.

 

여기선 그러한 게임 관련 세션 중에서 Understanding the Xbox One game platform built on Windows를 소개합니다. Xbox One의 OS 구성에 대해서 다룬 내용입니다.

 

 

Xbox One에서는 3개의 OS가 동시에 움직인다

 

Xbox One과 PS 4 등의 신세대 게임기는 게임을 실행하는 '게임 OS' 외에도 고도의 기능을 갖춘 다른 OS가 동시에 실행되며, 다양한 서비스를 백그라운드에서 처리하는 것이 일반적입니다.

 

이번 세션에선 Xbox One에서 어떤 OS가 동작하며 그것이 어떤 관계가 있는지를 설명했습니다.

 

Xbox One은 가상 머신"(Virtual Machine)을 사용해 다수의 OS를 동시에 실행합니다. 가상 머신은 소프트웨어가 만들어낸 존재이기 때문에 실제 작동하는 컴퓨터와 전혀 다른 하드웨어처럼 가상 머신을 쓰거나, 1대의 컴퓨터를 가지고 여러대의 컴퓨터가 있는 것처럼 쓸 수 있습니다.

 

또 가상 머신에서 실행중인 OS에 문제가 생겼다고 해도 가상 머신 소프트웨어에서 그걸 정지시키거나 리셋해서 재부팅하는 것도 자유롭습니다. 그래서 가상 머신은 서버 분야에서 적극적으로 이용하는 기술이기도 합니다.

 

1대의 컴퓨터에 다수의 가상 머신이 작동할 경우, 각각의 가상 머신에서 실행하는 OS나 애플리케이션(게임 포함)은 다른 가상 머신을 신경쓰지 않고, 마치 그 컴퓨터를 혼자서 독점한 것처럼 동작할 수 있습니다. Xbox One은 가상 머신이 갖고 있는 이 특성을 이용해 게임과 게임 외의 소프트웨어를 같이 실행합니다.

 

구체적으로 설명하면 이렇습니다. Xbox One에는 하드웨어에 직접 액세스 할 수 있고 모든 것의 기반이 되는 OS, Host OS 외에도 2개의 가상 머신인 Shared partition과 Exclusive partition이 실행되는 구조입니다.

 

Shared partition은 대시보드를 비롯해서 게임 이외의 사용자 인터페이스와 애플리케이션을 관리하는 OS, SharedOS를 실행합니다. 그리고 Exclusive partition은 게임용 OS인 ExclusiveOS를 구동합니다. 즉 Xbox One라는 시스템은 총 3개의 OS가 동작하는 꽤 복잡한 구조인 것입니다. 윈도우를 직접 실행하는 대부분의 PC와 비교해서 더 선진적인 기계라 할 수도 있습니다.

 

2.jpg

 

Xbox One의 OS 구조를 나타낸 그림입니다. 가장 아래에 있는 것이 모든 것의 기초인 Host OS, 그 위에 Shared partition과 Exclusive partition이라는 2개의 가상 머신이 있고 저마다 따로 OS를 구동하게 됩니다.

 

그럼 이번엔 각각의 OS가 갖고 있는 역할을 보시죠.


우선 Host OS는 Xbox One의 하드웨어 리소스 모두를 관리하고, 가상 머신 소프트웨어 Hyper-V를 실행하는 역할을 합니다. 참고로 일반적인 가상 머신 소프트웨어에선 Host OS를 하이퍼바이저라고 부릅니다.

 

Hyper-V는 마이크로소프트가 개발한 윈도우 서버용 가상 머신 소프트웨어이며 지금 윈도우 8에도 공급하고 있습니다. 자세한 내용을 설명하진 않았지만 XBox One의 호스트 OS는 서버용 프로그램을 그대로 쓰는 것이 아니라 Xbox One 전용으로 개조한 Hyper-V를 쓰는 것 같습니다. 하이퍼-브이가 아니라 호스트 OS라고 부르는 것도 이런 차이가 있어서일듯.

 

SharedOS는 윈도우 8을 Xbox One 용으로 개조한 OS입니다. PC용 윈도우 8.x는 지금까지 윈도우에서 계승한 데스크탑 환경을 제공하는 소프트웨어와, 윈도우 스토어 앱을 위한 환경을 제공하는 소프트웨어가 실행됩니다. 이들 사용자 인터페이스의 기반을 제공하는 소프트웨어를 쉘(Shell)이라 부르는데, Shared OS에선 Xbox shell이라 부르는 전용 쉘을 사용하며, 이 Xbox shell에서 대쉬보드나 Shared apps 전용 앱을 실행하는 식입니다.

 

또 Shared OS는 게임 이외의 소프트웨어를 실행하는 것 외에 보다 중요한 역할도 수행하고 있습니다. 그것은 바로 게임이 필요로 하는 시스템 서비스를 제공하는 것입니다.

 

서버용 Hyper-V는 Shared partition을 트 파티션이나 프라이머리 파티션이라 부르지만, 여기서 동작하는 윈도우는 하드웨어를 제어하는 디바이스 드라이버를 구동해야 합니다. 그래서 다른 파티션에서 실행되는 OS가 하드웨어에 액세스할 경우, 그 액세스 리퀘스트는 Host OS를 경유해서 패스 파티션의 윈도우로 보내 처리하는 식입니다. 

 

Xbox One도 이와 거의 같은 구조를 사용합니다. Exclusive OS 쪽에서 실행하는 게임이 하드웨어에 액세스를 시도하면, 그 처리는 Exclusive OS에서 Host OS를 경유해서 Shared OS의 디바이스 드라이버에 보낸 후, 실제 GPU나 네트워크 컨트롤러를 움직이는 식입니다.


화면의 렌더링이나 네트워크 연결 같은 처리도 Xbox One에서는 게임 OS가 아니라 Shared OS에서 담당하고 있습니다. 이건 놀랄 만한 소식이지요.

 

실제로 게임을 구동하는 건 Exclusive partition에서 실행하는 Exclusive OS인데, 이 OS의 정체는 사실 경량화한 윈도우 8이라고 합니다. 여기에 대해서 잠깐 설명하지요. 


마이크로소프트는 윈도우 7을 개발할 때 OS의 핵심 부분인 커널을 대폭 정리하고, 필수 부분으로만 구성된 MinWin이라는 경량 커널을 만들었습니다. MinWin은 최소한의 커널에 파일 시스템이나 네트워크 처리 기능 등을 넣었지만 그래픽과 사운드 기능, UI 같은 요소는 포함하지 않습니다. 그 덕분에 메모리 사용량과 스토리지 사용량을 삭감할 수 있었다고 하네요. 그리고 이 구조는 윈도우 8에서도 그대로 쓰고 있습니다.

 

이러한 배경을 두고 추측하면 Xbox One의 Exclusive OS는 MinWin을 기반으로 개발된 Xbox One전용 게임 OS일 것입니다. 윈도우 8 기반이라고는 하지만 그 중에서도 핵심만 골라 쓰는 Exclusive OS인 것이지요.

 

여기까지 보면 Xbox One은 게임기와 어울리지 않는 복잡한 OS 구조를 채용한 것처럼 보입니다. 이런 구조는 순수한 성능만 놓고 봤을 때 오버 헤드를 만들어 내는 요인이기도 합니다. 그럼에도 불구하고 마이크로소프트가 게임의 실행 환경을 분리한 이유는 몇 가지 있습니다.

 

우선 게임의 프로그램이나 데이터를 수정하지 못하도록 보호하기 위해 외부에서 액세스할 수 없는 환경을 만든 것일 수 있습니다. Shared OS와 Exclusive OS는 다른 가상 머신에서 동작하기에 만약 Shared OS에서 악성 프로그램이 실행됐다고 해도 Exclusive OS의 게임은 안전하게 유지할 수 있습니다.


반대로 게임의 실행에 문제가 생겨도 Shared OS에 영향을 주지 않고 Exclusive OS를 안정하게 정지시킬 수도 있습니다. 가상 머신을 분리해서 서로 안전한 상태를 유지할 수 있는 것입니다.

 

또 다른 이유로 추측되는 것은 게임에서 하드웨어의 실행이나 응답 속도를 예측할 수 있는 환경을 만든다는 것입니다.

 

예를 들어 윈도우에서 PC 게임과 게임 외에 다른 애플리케이션을 동시에 실행시키는 경우를 생각해 봅시다. 윈도우에선 게임 플레이 중에도 다른 애플리케이션이나 서비스가 동작하는 것이 일반적입니다. 이들 게임 이외의 애플리케이션에 CPU나 GPU, 네트워크 기능 등의 하드웨어 리소스를 뺐기면 게임의 속도가 느려지거나 최악의 경우엔 멈출 수도 있습니다. 


범용 컴퓨터인 PC에선 속도가 느려져도 그런갑다 하고 넘어갈 수 있으나, 게임기엔 Xbox One에서 게임이 느려지는 건 허용할 수 없는 일입니다. 하지만 Xbox One은 게임 이외의 부분도 강화되었으나 단일 OS에서 게임과 게임 외에 다른 부분을 공존시키는 건 어려울 수도 있을 것입니다.

 

그래서 Shared OS와 Exclusive OS를 다른 가상 머신으로 분리하고, Host OS가 하드웨어 리소스 할당을 확실히 실시해, Shared OS에 미치는 영향을 막는 것이라 볼 수 있습니다.

 

마이크로소프트가 Xbox One에서 가상 머신 구성을 사용하는 이유는 어쩌면 앞으로의 Xbox에서 하드웨어가 바뀌더라도 게임의 호환성을 쉽게 유지하려는 이유가 있을지도 모릅니다.


앞에서도 말했지만 가상 머신은 실제로 실행되는 하드웨어와 다른 것처럼 작동할 수 있습니다. 그래서 앞으로 나올 Xbox에서 CPU나 GPU, 칩셋이나 네트워크 기능 등이 달라진다 하더라도 가상 머신을 통해 그 차이를 줄일 수 있습니다.


즉, 앞으로의 Xbox에서 Xbox One용 게임을 구동할 때는, Xbox One처럼 작동하는 가상 머신을 만들면 되는 것입니다. 또 차세대 Xbox 전용 게임을 실행할 경우엔 거기에 알맞는 가상 머신을 만들면 됩니다. Xbox One의 OS 구조라면 이런 일이 얼마든지 가능합니다.

 

물론 게임을 쾌적하게 실행할 수 있는 성능을 실현해야 하니까, 가상 머신이 있다고 해서 전혀 다른 CPU 아키텍처로 갈아타는 건 어렵습니다. 하지만 같은 아키텍처를 유지하면서 기능이나 성능이 뛰어난 것을 도입하는 데엔 큰 문제가 없습니다. 따라서 여기에 필요한 기술적인 토대를 Xbox One에 미리 준비했다고 봐도 크게 이상하진 않을 것입니다.

 

 

5종류의 작동 상태가 있는 Xbox One

 

이 강연에선 Xbox One의 동작 상태에 관한 설명도 있었습니다. Xbox One에는 5가지 동작 상태가 있다고 하네요.

 

3.jpg

 

Exclusive OS, 즉 게임이 전 화면에서 동작하는 Normal, 게임 중 Xbox 버튼을 누른 Constrained, 게임이 중단된 Suspend, 그리고 Shared OS만 동작하는 상태, 시스템 전체가 대기 모드인 Low power입니다.

 

4.jpg

 

참고로 Shared OS는 대기 모드를 제외한 모든 경우에서 항상 동작하고 있습니다. 디바이스 드라이버가 Shared OS에서 실행되는 Hyper-V의 구조를 생각하면 이건 당연한 것이라 볼 수 있겠습니다.

 

이 5가지 동작 상태 중에도 게임이 중단된 상태와 일시 정지된 상태는 추가 설명할 것이 있습니다. Xbox One에선 게임을 플레이하던 도중 게임 패드의 Xbox 버튼을 누르면 대시보드로 화면이 바뀌며 게임은 작은 창 모드로 동작하게 되는데 이것이 Constrained입니다.

 

게임이 풀스크린에서 작동하는 노말 모드의 경우 Exclusive OS는 8개의 CPU 코어 중, 6개(코어 0~코어 5)를 사용할 수 있습니다. 그런데 제한 상태에서는 게임 쪽에서 이용할 수 있는 리소스가 제한되면서 4개(코어 0~코어 3)의 CPU 코어만 쓸 수 있습니다. 원래 코어 4와 5에서 수행하던 처리는 코어 2와 3에 할당됩니다. 

 

5.jpg

 
또 GPU는 리소스의 50%만 사용하며 게임 패드는 Shared OS의 조작에 쓰이기에 게임을 조작할 수도 없습니다. 다만 이런 상태에서도 네트워크의 이용을 제한하진 않는데 그건 온라인 때문입니다. 사용자가 대시보드로 표시를 바꾸면 게임은 조작할 수 없지만 게임 자체는 동작하며 서버와 다른 플레이어와 통신을 계속 유지합니다. 온라인 플레이가 유지되니 바로 게임으로 돌아갈 수 있습니다.

 

6.jpg

 

Shared OS에서 실행하는 애플리케이션 CPU, GPU, 메모리 등의 리소스를 사용할 수 있는 비율에 3단계의 제한이 있습니다. 그 기준은 Shared OS가 화면을 얼마나 차지하고 있느냐에 따라 결정됩니다. 예를 들어 화면 전체에 Shared OS가 표시될 경우엔 2개의 CPU 코어를 사용할 수 있습니다. 반면 윈도우 8의 스냅 기능처럼 화면 좌우에 작게 표시된 상태에선 1/4개만 쓰게 되며, 백그라운드에선 15분마다 2초씩 쓰도록 제한됩니다.

 

Constrained 상태에선 그래도 게임이 실행되긴 하지만 Suspend에선 게임 자체를 종료하게 됩니다. 게임에서 쓰던 메모리는 삭제하기 때문에 게임 쪽에선 게임의 진행 상황을 따로 저장해 둘 필요가 있습니다.

 

7.jpg

 

게임 플레이 상태는 Connected Storage라 불리는 16MB 용량의 전용 영역에 저장됩니다. 무엇을 저장할지는 개발자가 임의로 결정하지만, 게임을 끝내고 Shared OS로 원활한 전환을 실현하기 위해 저장은 1초 안에 끝내길 요구하고 있습니다.

 

마이크로소프트는 Connected Storage의 내용이 클라우드에 저장된다고 강조하지만 직접 클라우드에 저장하는 건 아닙니다(1초만에 16MB의 데이터를 클라우드로 전송해 저장할 순 없습니다).  메모리나 하드디스크 등에 일시적으로 저장한 후 Shared OS가 클라우드로 보내는 것으로 보입니다. 클라우드에 저장하면 다른 Xbox One으로 보내는 것도 이론적으론 가능한데, 지금의 Xbox One이 거기까지 지원하는지는 알려진 바가 없습니다. 

 

시스템 전체가 대기 모드로 들어갔을 경우는 2가지로 나눌 수 있습니다. 하나는 통신을 수행하지 않는 완전한 대기 상태며 이 때 소비 전력이 가장 적습니다. 다른 하나는 대부분의 디바이스는 대기 모드지만 통신은 가능한 상태로, OS나 애플리케이션의 자동 업데이트에 사용할 수 있습니다.

 


유니버셜 윈도우 앱, Xbox One와 윈도우에서 같은 애플리케이션을 실행

 

위에서 본대로 Xbox One에서 동작하는 3가지 OS 중 2개는 거의 윈도우 8.x 기반이라고 말해도 될 것입니다. 기반으로 삼은 OS가 거의 같고 CPU도 PC와 같은 x86 계열이니까 PC와 Xbox One에선 같은 애플리케이션을 실행할 수 있지 않을까, 이렇게 생각하시는 분들도 있을 것입니다.


빌드 2014에선 바로 그걸 해결해 줄 기술인 Universal Windows App이 발표됐습니다.

 

8.jpg

 

유니버셜 윈도우 앱은 PC용 윈도우 8.x(태블릿용 윈도우 RT 포함)과 Xbox One, 그리고 윈도우 폰 8.1까지 모든 윈도우 플랫폼에서 작동하는 것을 목표로 한 애플리케이션입니다.

 

간단히 말해서 유니버셜 윈도우 앱으로 만들었다면 윈도우 8.x용 윈도우 스토어 앱을 Xbox One에서도 실행할 수 있다는 이야기가 됩니다. 현재 윈도우 스토어 앱은 PC와 윈도우 RT 태블릿에서만 작동하지만, 유니버설 윈도우 앱을 통해 Xbox One까지 3가지 플랫폼에서 작동할 수 있게 되는 것이지요.

 

윈도우 스토어 앱의 상황은 그리 좋지 않은 편이라, 그런 앱이 Xbox One에서 작동한다는 점에 큰 의미를 둘 수 없다고 생각하실 분이 있을 수도 있을 것입니다. 하지만 게임이란 관점에서 보면 다릅니다. 윈도우 스토어 앱이 Xbox One에서도 작동한다면 개발자가 캐주얼 게임을 지금보다 만들기가 쉬워집니다.

 

게임 개발자들이 윈도우 스토어 앱으로 게임을 만들면 그것이 그대로 Xbox One나 윈도우 폰 8.x에서 동작하는 것이니까요. 물론 터치 패널로 조작하는 스마트폰이나 PC와 게임 패드로 조작하는 Xbox One의 차이를 고려하지 않을 순 없겠지만, 작동하는 플랫폼이 늘어난다면 게임을 만드려는 개발자도 늘어날 것입니다.

 

윈도우 스토어 앱은 당분간은 아무리 잘 해도 주도적인 위치를 잡긴 어려울 것입니다. 윈도우 폰의 보급율이 아직까진 그리 높지 않기 때문이지요. 그러나 유니버셜 윈도우 앱이 나오면서 윈도우와 Xbox One, 윈도우 폰 8.x의 관계가 바뀔 가능성은 있습니다.

 

같은 윈도우에서 용도별로 따라 독립한 플랫폼인 Xbox One과 윈도우 폰 8.x가 유니버셜 윈도우 앱의 등장에 따라 같은 윈도우를 바탕으로 만든 용도별 플랫폼이라는 식으로 평가가 달라질 수도 있습니다. 이러한 변화는 게이머들에게 있어서도 결코 나쁜 것은 아닐 겁니다. 

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.