OT S / SOFTWARE 임베디드 시스템에 최적화된 Windows Embedded Compact 2013 MDS테크놀로지 / ES사업부 SE팀 김재형 부장 / jaei@mdstec.com 또 다른 산업혁명이 도래한 시점에 아직도 자신을 떳떳이 드러내지 못하고 있는 Windows Embedded Compact를 오랫동안 지켜보면서, 필자는 여기서 그와 관련된 이야기를 풀어 보려고 한다. 자판을 두드리는 이 순간, 그 간 장엄했던 모습이 주마등처럼 스쳐간다. 그림 1. Windows Embedded Compact OS의 history 40 Embedded World OS_soft_MDS 8월.indd 40 14. 7. 25. 오후 12:48
Windows Embedded Compact 2013 [그림 1]은 Windows CE 로 알려진 Microsoft의 Windows Embedded Compact OS의 history를 보여주고 있다. [표 1] 은 각 Windows CE 버전들의 주요 특징들을 담고 있다. 로그램 개발에도 그대로 사용된다. 그림 2. Windows Embedded 2013 개발 환경 (Visual Studio 2012 + Platform Builder 2013) 표 1. Windows CE 버전의 주요 특징 2013년 6월 Microsoft는 무성한 소문에도 불구하고 Windows WEC2013 OS프로젝트를 생성하고, Catalog item을 선별하여 Embedded Compact 라인업에 새로운 버전을 추가하였고, OS를 디자인하고 빌드하는 과정만 보면 이전 버전과 크게 달 올해 2014년에는 이 제품을 보완한 업데이트 패키지를 출시 라진 것이 없다. 하였다. 기존에 사용하던 표현법이 아닌, 출시한 연도를 제품 표 2. Windows Embedded Compact 2013의 새로운 기능 명에 반영하여 Windows Embedded Compact 2013 이라는 새로운 명칭을 부여하였다. 이는 Microsoft가 Windows Store 또는 모던UI 라는 새로운 사용자 환경과 런타임을 녹인 Windows 8 과의 뚜렷한 차이 점을 알리기 위한 목적으로, 1996년 처음 출시 당시부터 계 속 순수 임베디드 디바이스만을 위한 OS라는 명분을 이어가 기 위함이다. 더불어 임베디드 디바이스 목적에 더욱 충실하 고, 스마트하고 커넥티드 된 환경에서 새로운 디바이스와 생 태계를 파생하기 위한 새로운 임무를 부여 받았기 때문이다. 이전 Windows Embedded Compact 7의 개발환경이 Visual Studio 2008에 추가 설치되어 OS와 응용프로그램 개발환경 이 구성되었다면, Windows Embedded Compact 2013(이후 WEC2013)는 Visual Studio 2012(이후 VS2012) 또는 VS2013 [표 2]는 WEC2013의 새로워진 모습들을 간단히 담아 본 것 에 Platform Builder 2013 이 추가 설치 되어 개발환경이 꾸 이다. 며진다. VS2012의 편리한 코드 편집 환경과 디버깅 환경 그 최신 ARM core를 지원하기 위해 ARMv7 Thumb 2 컴파일러 리고 코드 분석 및 진단 환경들이 WEC2013의 OS 및 응용프 를 지원한다. 이로써 코드의 사이즈와 실행 성능이 대폭 향상 www.embeddedworld.co.kr 41 OS_soft_MDS 8월.indd 41 14. 7. 25. 오후 12:48
O S / SOFTWARE 되었다. 하지만 이전 버전에서 컴파일 된 코드의 바이너리가 적 절히 지원되지 않는 문제가 있어, 반드시 이전 버전의 소스 코 드들을 WEC2013개발 환경에서 다시 컴파일 해야 한다. 각종 버그를 수정하고 최신 컴파일러로 생성된 MFC, ATL, STL등이 제공되며, 향상된 C++ version 11 (C++11)과 Multicore환경의 SMP를 비롯하여 병렬처리연산 기능이 제공된다. Microsoft는 Desktop Windows OS의 Visual C++ 11 런타임 (CRT)을 WEC2013에 포팅하는 작업을 진행해왔으며, 이 런타 임은 새로운 Standard Library(STL) header, auto key-word, lambda 그리고 range-based for-loop와 같은, 개선된 C++ 11 표준 기능들을 포함한다. 이로써 개발자들은 안전하고 빠 른 코드의 작성이 용이해졌으며 Multicore 임베디드 환경에서 atomics, compare 그리고 exchange와 같은 C++ 11 표준에 포 함된 동시성 런타임 기능을 사용할 수 있게 됐다. 그림 3. Lambda 표현식 코드와 VS2012의 인텔리센스 드 디바이스를 위해서 동시성 런타임(Concurrency Run-time) 을 통한 병렬처리 프로그램을 지원하도록 WEC2013의 주요 라이브러리들을 업데이트 하였다. 하지만 VS2012에서 소개된 GPGPU (General Purpose computing on Graphics Processing Units)를 활용한 병렬처리 연산 기능인 C++ AMP는 DirectX version 11과의 종속적인 문제로 인하여 WEC2013에 포팅되지 않았다. 최신 프로세서와 컴파일러의 사용으로 WEC2013에는 두 개의 C/C++ 라이브러리가 제공된다. Msvcrt.dll 는 OS와 응용프로그램을 위한 CRT를 포함하고 있으 며, Bootcrt.lib 는 Boot Loader와 커널의 초기 부트과정에서 사 용되는 코드를 위한 일부 CRT 함수들을 포함하고 있다. 국내에서 주로 사용하는 MFC 와 ATL 라이브러리의 경우도 이 전 버전과 다르게 최신 컴파일러 환경에서 빌드 되었으며, C/ C++런타임 라이브러리가 Desktop Windows에서 포팅된 것처럼 많은 부분 Desktop Windows OS와의 호환성을 가지게 되었다. 그림 4. Scalar 연산 vs Vector 연산 더불어 Visual C++ 11의 런타임은 이전 버전과 비교할 때 메모 리의 사용량이 상당히 줄어들었다. 이처럼 개선된 런타임이 녹 아 든 WEC2013은 적은 메모리를 사용해야 하는 임베디드 디 바이스에 더욱 최적화 되었다. 또 다른 주요 내용은 Auto-vectorizer를 최적화 하여 WEC2013 에 포팅한 것이다. Auto-vectorizer는 작성된 코드의 loop를 자 동으로 분석하고, 가능한 연산처리에 대해서 SIMD(Single Instruction Multiple Data) 스트리밍을 제공하여 결과적으로 코드 의 실행 속도를 높이는 것이다. 이 기능은 새로운 Multicore 프 로세서 환경에서 개발자가 작성한 반복적인 연산 코드의 실행 성능을 높이기 위한 목적으로 최적화 및 포팅되었다. Multicore와 이기종 core 아키텍처 환경으로 변화중인 임베디 Managed 코드 응용프로그램 이라는 용어가 아직도 생소한 임 베디드 개발자가 있을 것이다. 대부분 C/C++와 같은 Native 코 드 응용프로그램을 개발하였기 때문이다. CPU(SoC)가 다변하 고, 각종 주변 I/O와 connectivity가 늘어나면서 OS플랫폼을 비 롯해 응용프로그램의 안정성이 중요한 요소가 되었다. Managed 코드는 응용프로그램이 사용하는 주요 리소스(Memory, Display, Connection 등)에 대한 할당과 해제를 런타임에서 수 행하기 때문에 소프트웨어의 개발 생산성과 안정성을 높이는 42 Embedded World OS_soft_MDS 8월.indd 42 14. 7. 25. 오후 12:48
Windows Embedded Compact 2013 중요한 목적을 가졌다. 더불어 하드웨어와 플랫폼에 독립적이 기 때문에 새로운 디바이스로의 응용프로그램 포팅이 상당히 용이하다. 임베디드 디바이스에서 Managed코드 기반 소프트 웨어 개발이 큰 의미가 없을 것 같지만, 스마트폰을 비롯해 이 미 많은 디바이스들이 Managed코드 기반의 소프트웨어를 운 영하고 있다. Microsoft는 2002년에.NET Framework 이라고 부르는 Managed코드 런타임을 Windows CE환경에 포팅하였고.NET Compact Framework (이후.NET CF)이라는 명칭으로 Windows CE.NET 4.0에 처음으로 포함시켰다. 새로운 버전의 OS가 출시되면서.NET CF에도 많은 개선과 업데이트가 이 루어 졌으며, WEC2013에는.NET CF version 3.9 가 지원된 다..NET CF 3.9는 이전 WEC7에서 지원한.NET CF 3.5를 기 반으로 주요 버그들을 수정하고 새로운 기능들이 추가되었다. Generational Garbage Collection 방식의 garbage collection 이 적용되었다. 이 방식은 이전 버전의 Mark-Sweep 방식에 비하여 전반적인 처리속도가 빠르다. Multicore환경을 최대한 사용하도록 하였다. 런타임의 주요 object(assembly)들을 각 응용프로그램의 AppDoMain에서 공유할 수 있도록 하여, 메 모리의 사용량을 줄이고 응용프로그램의 시작 시간(Launch Time)을 빠르게 개선하였다. 더불어, Windows Communication Foundation(WCF)이 추가되어, 서버와 클라이언트 디바이스에 서 실행되는 각 응용프로그램들 간의 상호운용을 가능하게 하 는 Service-Oriented Application(SOA)구현을 위한 응용프로그 램 모델과 클래스 라이브러리를 제공한다. 조만간 맞이하게 될 새로운 산업혁명은, 모든 디바이스들이 인 터넷에 연결되는 IoT(Internet of Things) 세상이 아닐까 생각된 다. Microsoft는 수 년 전부터 WEC2013을 IoT 환경과 인텔리전 트 시스템에서 센서 디바이스를 위한 운영체제로 그 역할과 목 표를 정하여 많은 부분 새롭게 개발하였다. 그 중 하나가 네트 워크 성능을 높이기 위한 것이었다. 우선, IoT의 센서 디바이스를 위해서 표준 IPv6의 대부분의 프로토콜을 지원하며, 완전한 IPv6 DHCP를 지원한다. 또한 Microsoft의 수많은 내부 검증을 통해, WEC2013은 Ready for IPv6 로고를 획득하였다. 네트워크의 성능을 높이고 새로운 스택을 수용하기 위해서 WEC2013은 Desktop Windows OS 와 같은 NDIS(Network Driver Interface Specification) version 6.0을 지원한다. 네트워크의 성능을 높이기 위한 방법으로, Miniport 드라이버 의 데이터 전송 및 수신 버퍼에 대해서 un-cached 메모리 대 신 cached 메모리를 사용했으며, 전송 프로토콜 스택들도 드 라이버와 동일한 메모리 공간을 사용하도록 하였다. Cached 메모리를 사용한 결과, 높은 네트워크 출력이 나타나는 것을 확인하였으며, 이를 위해 NDIS 6.0의 NdisMAllocateShared- Memory() API가 개선되었고 CachedSharedMem이라는 새로 운 레지스트리 설정이 추가 되었다. Microsoft는 AMD사의 임베디드 CPU인 G-Series 플랫폼 (Single Core @ 1.6GHz, 1GB DRAM, Realtek RTL8111E)에 WEC2013, WEC7 그리고 Windows 7을 올려 네트워크 성능을 비교 테스트하고 다음과 같은 결과물을 공개하였다. <그림 5> 와 <그림 6>는 각 OS에 대한 TCP전송과 수신에 대한 속도를 비교한 그래프이다. <그림 7> 과 <그림 8>은 각 OS에 대한 UDP전송과 수신에 대한 속도를 비교한 그래프이다. 그래프 결과와 같이 WEC2013은 TCP 전송/수신에 대해서 Windows 7 OS에 버금가는 성능을 보여주었다. UDP 프로토 콜에 대한 수신 패킷 손실을 최소화 하기 위한 개선은 오히려 Windows 7보다 월등히 나은 결과를 보여 주었다. 그림 5. TCP 전송 프로토콜의 속도 비교 그래프 www.embeddedworld.co.kr 43 OS_soft_MDS 8월.indd 43 14. 7. 25. 오후 12:48
O S / SOFTWARE 이외에도 TCP 전송에 대한 응답 지연시간(Latency)을 줄이 고 최대 출력을 유지하기 위해서 TCP Latency알고리즘을 개 선하였다. <그림 9>는 TCP Latency에 대한 비교 결과를 보여 주고 있다. 지금까지 WEC2013에서 크게 개선된 부분에 대해서 간략히 정리해 보았다. 아직 자세한 자료는 없지만, 대용량 FAT File System을 메모리 제약이 있는 Windows CE 시스템에서 운 영하기 위해서 그 동안 감내해야만 했던 여러 가지 손실들을 WEC2013에서는 대대적으로 개선하여 많은 성능 향상을 이 루었다. 마지막으로 Windows Embedded Compact 2013의 개발 환경 과 더 이상 지원하지 않는 기능에 대해서 정리해 본다. 앞에서 언급한 것처럼, VS2012 또는 VS2013을 기본 개발환경 으로 하는 WEC2013은 OS를 디자인하고 빌드하는 과정과 이 때 사용하는 메뉴들은 이전 버전과 동일하다. WEC2013 OS의 구성요소들과 소스 코드 그리고 라이브러리 및 설정 파일들은 \WINCE800 폴더에 설치된다. WEC2013은 ARM v7과 x86 core만을 지원하기 때문에 현재 \WINCE800\Platform 폴더에 설치된 기본 BSP(Board Support Package)가 몇 개 없다. 하지만 Silicon Vendor를 통해서 다른 SoC에 대한 BSP를 제공 받을 수 있으며, Microsoft가 새 로운 BSP를 꾸준히 출시할 예정이다. 그림 6. TCP 수신 프로토콜의 속도 비교 그래프 그림 8. UDP 수신 프로토콜의 속도 비교 그래프 그림 7. UDP 전송 프로토콜의 속도 비교 그래프 그림 9. TCP Latency 비교 그래프 44 Embedded World OS_soft_MDS 8월.indd 44 14. 7. 25. 오후 12:48
Windows Embedded Compact 2013 그림 10. Windows Embedded Compact 2013의 Platform 폴더 WEC2013 OS의 구성요소들과 각종 설정파일 및 소스 코드가 설치된 \WINCE800\Public 폴더를 보면 이전 버전과 다른 점을 발견할 수 있을 것이다. 이전 버전인 WEC7까지만 하더라도 \WINCE700\Public 폴 더에는 이보다 더 많은 서브폴더들이 있었다. 예를 들면, Data Sync, RDP, Wceappsfe 그리고 Wceshellfe 등이 있었 다. Public폴더에 이들 서브폴더들이 사라진 이유는, WEC2013 이 순수 경량화 임베디드 시스템을 위해서 주요 기능들을 최 적화 하고, 이전 버전에서 주로 사용되지 않았던 기능들을 제 거하였기 때문이다. 더불어, 앞에서 확인한 것처럼 Windows PC(Windows 7)의 주 요 런타임 라이브러리들을 WEC2013으로 포팅 하였기 때문에 이로 인한 OS 이미지의 크기가 커지는 것을 줄이기 위한 목적 도 반영되었다. <그림 12>는 WEC2013의 MFC라이브러리 파일 과 WEC7의 MFC라이브러리 파일을 담아보았다. MFC의 버전 과 크기를 확인 할 수 있을 것이다. 그림 12. WEC2013과 WEC7의 MFC 라이브러리 그림 11. Windows Embedded Compact 2013의 Public 폴더 Internet Explorer Browser와 Multimedia Player도 제거되었다. 하지만, 인터넷 브라우징을 위한 HTML렌더링과 파서 등 주요 기능들이 여전히 지원되며, OEM은 이들 기능을 기반으로 하 는 3rd party 인터넷 브라우저를 사용할 수 있다. Multimedia도 주요 codec와 filter들 그리고 DirectX기반 graph엔진등이 여전 히 지원되며, OEM은 sample player의 코드를 수정하거나 역시 3rd party멀티미디어 플레이어를 사용할 수 있다. www.embeddedworld.co.kr 45 OS_soft_MDS 8월.indd 45 14. 7. 25. 오후 12:48
O S / SOFTWARE 이렇듯, 수백 개의 작은 컴포넌트들로 세분화 되었던 과 거 Windows Embedded Compact의 컴포넌트화 전략이, WEC2013부터는 새로운 핵심 기능을 대폭 수용하고 일부 확대 된 모듈로 OS를 구성하는 전략으로 변경되었다. 이로써 OS구 성에 따른 OS의 안정성 및 응용프로그램과의 종속성 문제를 쉽게 해결할 수 있게 되었다. WEC2013의 핵심 변경사항 중 또 하나는 과거 Windows CE 때부터 제공되던 Explorer Shell 을 더 이상 지원하지 않는 것 그림 13. Windows Embedded Compact 2013의 Mini Shell 이다. WEC2013이 제공하는 기본 shell은 사실상 Windows CE 2.0때부터 제공되던 Mini Shell 을 보완한 것으로 Eye Candy 로 부르던 Windows 98스타일의 shell과 같은 기능을 제공 하지 않고, 배경화면 출력, Alt+Esc 조합 키로 Task manager 를 실행하는 등 표준 shell 응용프로그램으로서의 기능만 제공 한다. 물론 CMD.exe와 같은 command line interface shell은 계속 지원된다. 마치며 지금까지 보아왔듯이, WEC2013은 개선된 기능만으로도 임베 디드 개발자들의 기대를 저버리지 않았다고 생각된다. 하지만 더 이상 지원되지 않는, 또는 제거된 일부 기능에 대해서는 많 은 우려를 나타낼 것이라 생각된다. 그러나, Windows Embedded Compact 2013이 순수 임베디드 OS라는 것을 제대로 이 해한다면, 현재 시대를 이끌고 있는 스마트폰 플랫폼과의 비 교와 파급적으로 변경된 모습에 의한 오해와 불만은 없어지지 않을까 생각된다. 다음에 기회가 된다면 기존 Windows Embedded Compact 7 의 BSP를 Windows Embedded Compact 2013으로 마이그레 이션 하는 내용을 담아 볼까 한다. 그림 13. Windows Embedded Compact 2013의 XML기반(Silverlight for Embedded) Shell 46 Embedded World OS_soft_MDS 8월.indd 46 14. 7. 25. 오후 12:48