대메뉴 바로가기 본문 바로가기

데이터 기술 자료

데이터 기술 자료 상세보기
제목 윈도우 임베디드 컴팩 특징, 개발/사용 시나리오 소개
등록일 조회수 6061
첨부파일  

MS 윈도우 임베디드와 IoT

윈도우 임베디드 컴팩 특징, 개발/사용 시나리오 소개



수년 전 “임베디드(Embedded)를 순수 우리나라 말로 어떻게 표현하느냐”는 질문을 받은 적이 있다. 십수 년을 관련 분야에 종사하고 있지만, 질문에 대한 정확한 답변을 찾지 못해 당황했던 기억이 있다. 이 질문에 대해 대부분 ‘내장형’이라고 답할 것이다. 하지만 정확한 우리말 표현은 ‘붙박이’가 맞다. 이번 시간에는 붙박이 시스템을 위한 운영체제인 ‘윈도우 임베디드 컴팩’에 대해 알아본다.



‘윈도우 임베디드 컴팩’은 이름에서 알 수 있듯이 MS의 소형 붙박이 시스템을 위한 운영체제다. 한때 국내에서는 PDA(Personal Digital Assistant), PMP(Portable Multimedia Plyer), IPSTB(IP Set Top Box)등 다양한 제품의 운영체제(이하 OS)로 사용됐으며, 현재도 AVN(Audio Video Navigation), PND(Portable Navigation Device), HHT(Hand Held Terminal) 등의 핵심 플랫폼으로 사용되고 있다.

‘사물인터넷(Internet of Things, 이하 IoT)’이 화두로 떠오르기 전, 마이크로소프트를 비롯한 주요 ICT 관련 업체와 기관들은 인텔리전트 시스템을 언급하면서 센서 디바이스를 포함한 다양한 단말 제품의 ‘연결성’을 강조한 바 있다. 붙박이 장치는 더 이상 단순 제어와 UI 제공자 역할이 아닌, 지능화 시스템을 위해 ‘빅데이터(Big Data)’를 생성하고 이를 기반으로 새로운 서비스와 비즈니스를 만드는 IoT의 핵심 요소로 떠오르고 있다.

윈도우 임베디드 컴팩은 IoT 환경의 단말 장치(센서 디바이스)를 위한 플랫폼으로서 오래 전부터 붙박이형 디바이스의 핵심 요구사항인 Hard-Real Time을 꾸준히 지원해 왔다. 또 네트워크 연결성에 보다 최적화된 Windows 32bit API(Application Program Interface)를 통해 친숙한 개발 환경을 제공하고 응용프로그램 개발과 운영이 가능한 특징이 있다.



<그림 1>은 윈도우 임베디드 컴팩에 대한 구조를 표현한 것이다. 대부분의 구성 요소들은 윈도우 OS로부터 얻은 경험을 임베디드 환경에 맞게 최적화해 설계됐다. OS의 핵심 요소인 커널(Kernel)을 중심으로 주요 서비스 라이브러리(Library)인 파일시스템, 장치관리자(Device driver manager), 그래픽 UI, 네트워크 기능을 커널과 같은 메모리 공간에 배치해 통합 커널(Unified Kernel) 환경으로 구현하고, 각 기능에 대해 안정성과 우선 순위를 높인 것이 윈도우 임베디드 컴팩의 특징이다.

이러한 구조는 커널의 부하를 줄이는 동시에 응용프로그램이나 미들웨어로부터 요구되는 호출(Call)에 대한 빠른 응답을 가능하게 한다. 이를 통해 실시간 대응력을 높인 것이다. 선점형 멀티태스킹 커널을 기반으로 실시간 운영 능력을 높이고, 3만2000개의 프로세스 동시 실행은 물론 256단계의 우선순위도 부여할 수 있다. 또 무한 스레드(Thread)운영이 가능하다. 2011년에 출시된 윈도우 임베디드 컴팩 버전7부터는 최대 8개의 CPU코어를 활용한 SMP (Symmetric Multiprocessing Support)를 지원한다. 이후 버전인 윈도우 임베디드 컴팩 2013에서는 SMP와 더불어 최신 ARM 컴파일러, C++11, 병렬처리연산(Parallelism) 기능이 추가됐다.

윈도우 임베디드 컴팩과 일반 윈도우 OS의 물리적 차이점은 단일 바이너리 기반 OS라는 점이다. <그림 2>를 보면 OS를 구성하는 주요 컴포넌트와 디바이스 드라이버, 미들웨어 그리고 사용자 응용프로그램들이 하나의 바이너리에 모두 포함됐음을 볼 수 있다. 새로운 커널임을 강조하기 위해 ‘NK.bin(New Kernel)’이라는 파일명으로 OS 바이너리가 생성된다. 물론 파일시스템을 통해 디스크에 저장돼 있는 소프트웨어 모듈을 로드하고 실행할 수 있다.



윈도우 임베디드 컴팩의 구성이나 디바이스 드라이버 개발, 응용프로그램 개발 및 디버깅은 비주얼 스튜디오(Visual Studio)를 기반으로 제작된 ‘플랫폼 빌더(Platform Builder)’를 통해 할 수 있다. 플랫폼 빌더를 이용해 MS가 제공하는 OS의 주요 컴포넌트를 추가·제거함으로써 OS 구성 요소들을 설정할 수 있으며, 디바이스 드라이버 등 하드웨어 플랫폼에 대한 주요 소프트웨어 소스 코드를 작성할 수 있다. 빌드와 디버깅 역시 플랫폼 빌더를 통해 가능하다.

완성된 OS 바이너리는 타겟 디바이스에 미리 설치된 부트로더(Boot Loader)와 플랫폼 빌더의 연동을 통해 타겟 디바이스의 Flash disk 미디어 또는 DRAM(디버깅 용도)에 다운로드된다. <그림 4>는 일반적인 윈도우 임베디드 컴팩의 전체 개발 환경을 보여 준다. 플랫폼 빌더로 OS 디자인에 따른 SDK(Software Development Kit)를 생성하고, 이를 비주얼 스튜디오가 설치된 개발환경에 적용하면 C/C++, C#, VB.NET, XAML 등의 언어로 윈도우 임베디드 컴팩용 응용프로그램을 개발할 수 있다.





플랫폼 빌더에는 윈도우 임베디드 컴팩 OS를 생성하기 위한 수많은 소스 코드와 설정 파일, 그리고 주요 하드웨어 플랫폼에 대한 소프트웨어 패키지인 BSP(Board Support Package)를 포함하고 있다. OS에 대한 기본적인 디자인(설정)이 완료되고 빌드가 진행되면 설정 파일을 참조해 소스 코드를 컴파일, 링크함으로써 OS를 구성하는 컴포넌트들을 생성한다. 이렇게 생성된 컴포넌트들을 지정된 특정 위치로 복사되고 최종 OS 바이너리가 생성된다. <그림 5>는 OS를 생성하기 위한 빌드 과정이다.

플랫폼 빌더에는 약 300만 라인에 해당하는 소스 코드가 제공되는데, 여기에는 윈도우 임베디드 컴팩의 실제 커널과 주요 컴포넌트에 대한 소스 코드들, 그리고 OS가 지원하는 디바이스 드라이버, 응용프로그램 개발을 위한 참조용 샘플 소스 코드 등이 포함돼 있다. 중요한 것은 OS의 빌드 시간을 줄이기 위해 미리 컴파일된 라이브러리를 사용하는 것이고, 각 4단계 빌드 과정에 대한 별도 메뉴를 제공함으로써 새로운 OS를 빨리 생성할 수 있도록 한 것이다.

물론 필요한 경우 모든 소스 코드를 컴파일해 주요 컴포넌트를 다시 생성하고 OS를 빌드할 수도 있다. 일반적으로 BSP에 포함된 디바이스 드라이버와 OAL(OEM Adaptation Layer) 등의 소스 코드는 하드웨어 플랫폼에 맞게 수시로 포팅 작업이 이뤄지기 때문에 항상 컴파일된다.



생성된 컴포넌트들이 ‘Flat Release Directory’라는 특정 위치에 복사되면, BIB(Binary Image Builder) 파일, REG(Registry) 파일, DB(Database) 파일, DAT(File system) 파일에 정의된 설정들을 참조해 OS 바이러리인 NK.bin을 생??돼 있으며, 각기 OS 바이너리에 특정 컴포넌트 포함 여부, Registry와 DB포함 여부 등을 결정하는 데 사용된다.

BIB 파일은 생성된 컴포넌트 또는 특정 파일을 OS 바이너리에 포함시키기 위한 설정을 담고 있다. <그림 6>은 환경변수 값(True or False)에 의해 Flat Release Directory에 놓인 특정 컴포넌트를 OS 바이너리에 포함시킨다는 내용이 담긴 BIB 파일이다. BIB 파일은 텍스트 파일이며, 그 내용은 OS를 빌드하는 개발자가 언제든 쉽게 수정할 수 있고 다양한 목적의 OS 바이러리를 생성할 수 있다.



REG 파일은 OS에 포함된 디바이스 드라이버 또는 주요 컴포넌트들의 로드(Load) 순서와 미들웨어 또는 응용프로그램들이 참조하는 다양한 설정을 포함하고 있다. REG 파일의 형태와 사용 목적은 일반 윈도우 OS와 유사하며, BIB 파일과 마찬가지로 OS개발자가 다양한 설정을 수정하거나 새로운 설정을 포함시킬 수 있다.

DB 파일은 윈도우 임베디드 컴팩만의 DB를 OS에 포함하기 위해 사용된다. 더불어 DB 파일은 OS에 포함된 특정 컴포넌트를 활성화하기 위한 이벤트(event) 정보들도 포함하고 있다. DAT 파일은 윈도우 임베디드 컴팩의 파일시스템 상에 특정 디렉토리(폴더)를 생성하고 파일 경로 등을 지정하는 목적으로 사용된다. 이 또한 OS개발자에 의해 수정이 가능하다. <그림 7>은 DAT 파일의 일부 내용이다. ‘Windows’라는 폴더 안에 ‘Desktop’폴더를 생성하고, 이 폴더에 link 파일을 넣는 내용이 담겨 있다.



여기서 우리는 윈도우 임베디드 컴팩 파일시스템의 특징을 확인해 볼 필요가 있다. 윈도우 임베디드 컴팩은 일반 윈도우 OS와 다르게 DRAM을 ‘루트 디렉토리(Root Directory)’로 파일시스템 환경을 구축한다. 그 때문에 HDD(Hard Disk Drive)나 NAND 디스크와 같은 비휘발성 메모리 디스크는 마치 USB 디스크와 같은 외부 파일 저장소로 인식한다.



루트 디렉토리가 DRAM에 구현되기 때문에 윈도우 임베디드 컴팩만의 RAM 파일시스템이 이 영역의 파일들을 관리한다. 나머지 디스크 장치에 대해서는 FAT(File Allocation Table) 기반 파일시스템이 파일들을 관리한다. 실제로 DRAM은 2개의 영역으로 나뉘어 사용된다. <그림 8>은 윈도우 임베디드 컴팩의 메모리 정보를 보여주는 설정 화면으로, 두 영역인 ‘Object Store’와 ‘Program or System Memory’를 확인할 수 있다.

Object Store는 OS가 사용하는 주 저장공간이다. 일반 윈도우 OS들이 HDD를 Object Store로 사용하는데, 윈도우 임베디드 컴팩은 DRAM을 Object Store로 사용한다. 그 때문에 DRAM이 루트 디렉토리로 표현되며, 파일(RAM Filesystem)을 비롯한 Registry와 Database가 이 영역에 저장된다. Program과 System 메모리 영역은 응용프로그램들을 위한 메모리 할당 공간과 디스크에 놓인 응용프로그램을 로드하기 위한 ‘Paging Pool’ 영역으로 사용된다.

DAT 파일은 윈도우 임베디드 컴팩의 Object Store, 즉 DRAM에 저장된다. 이는 소프트웨어 운영을 위한 특정 디렉토리들과 데이터 파일을 생성하고 옮겨 놓기 위해 사용되는 설정 파일이다. 지금까지 윈도우 임베디드 컴팩의 기본적인 OS 바이너리 생성 과정과 주요 설정 파일 및 특징을 확인해 봤다. 이제 이러한 과정으로 생성된 OS를 타겟 디바이스로 다운로드하면 어떠한 과정으로 부팅(Booting)되는 지 확인해 보자.



<그림 9>은 NAND Flash를 사용하는 디바이스의 일반적인 OS 부팅 과정이다. NAND Flash는 특성상 XIP(eXecute In Place)를 지원하지 않는 저장 미디어다. 그렇기 때문에 NAND Flash에 저장된 소프트웨어 코드를 실행하기 위해서는 코드를 SRAM/DRAM과 같은 XIP 메모리에 옮기는 컨트롤러(Controller)가 필요하다. 최근 대부분의 SoC(System on Chip)들은 NAND 부트를 지원하기 위한 다양한 컨트롤러와 내부에 작은 크기의 부트용 SRAM을 가지고 있다.

IPL(Initial Program Loader)이라는 아주 적은 실행 코드가 NAND Flash의 하위 영역에 담겨 있으면, SoC 내부의 NAND 컨트롤러가 이 코드를 내부의 SRAM으로 옮겨 놓는다. 이후 SoC의 CPU가 이 코드를 실행해 NAND Flash의 다른 영역에 위치한 부트로더(Boot Loader) 코드를 DRAM으로 옮기고, CPU가 부트로더를 실행하면 본격적인 OS 부팅 순서를 밟게 된다. 이와 같은 OS 부팅 방법은 매우 다양하기 때문에 주어진 하드웨어 조건과 목적에 따라 다양하게 개발된다. CPU가 OS 바이너리 코드를 실행해 OS가 운영되는 과정은 <그림 10>과 같다.



커널이 파일시스템 관리자를 로드 실행하는 순서는 변경할 수 없지만, REG파일의 수정으로 DRE를 변경해 장치관리자, GWES 및 UI Shell 등의 로드 순서를 변경할 수 있다. 또한 새로운 소프트웨어 모듈을 추가해 다양한 디바이스 목적에 맞게 OS를 수정할 수 있다. 일반적으로 PND, IPC와 같은 윈도우 임베디드 컴팩 기반 디바이스들은 이러한 로드 순서를 변경해 주 응용프로그램이 바로 실행되도록 한다.

임베디드 디바이스 중에는 디스플레이와 입력장치가 없는 ‘Headless’ 디바이스들이 많이 사용된다. 가령 게이트웨어(Gateway), 프린터, 프로젝터, 열화상카메라, Real-Time 제어 모듈 등의 제품에 윈도우 임베디드 컴팩가 OS로 사용된다. Headless 디바이스를 위해 가상 디스플레이 드라이버와 키보드 마우스 드라이버를 제공하며, BIB와 REG 파일을 수정해 Headless 디바이스용 OS를 빌드할 수 있다.

Hard-Real Time을 지원하는 OS 플랫폼으로는 이미 다양한 활용 사례가 있다. 국내의 경우 윈도우 임베디드 컴팩이 사용되는 주요 시장은 대부분 PND, 산업용 PDA와 같은 소비자 제품이다. 해외의 경우 다양한 사례가 있다. 약 20년 전 국내에 처음 소개된 윈도우 임베디드 컴팩(윈도우 CE)은 겉모습이 일반 윈도우 OS와 비슷하지만, 내면에는 다양한 임베디드 디바이스를 위한 기술을 가지고 있다. 시대의 흐름을 선도하기 위해 무리한 기능을 수용한 적도 있으나, 이로 인해 새로운 디바이스를 창출하고 또 다른 가능성을 제시하기도 한 것이 바로 윈도우 임베디드 컴팩이다.



출처 : 마이크로소프트웨어 5월호

제공 : 데이터전문가 지식포털 DBguide.net