1. 임베디드 시스템의 개요
․임베디드 시스템(embedded system)이란 미리 정해진 특정한 기능들을 수행하기 위하여 컴퓨터의 하드웨어와 소프트웨어가 서로 조합된 제어 시스템으로 마이크로프로세서 기반 디지털 시스템을 의미합니다.
1) 임베디드 시스템 개요
일반적으로 보다 큰 시스템의 일부이거나 독립된 시스템으로서 특별한 업무를 수행하거나 사용자가 임의로 정한 업무를 수행하기 위한 하드웨어와 소프트웨어를 포함하는 특정한 응용 시스템으로서 하드웨어와 소프트웨어의 구성 변경이 매우 어려운 시스템을 임베디드 시스템이라고 합니다.
(1) 임베디드 시스템의 개념
․임베디드 시스템(embedded system)이란 미리 정해진 특정한 기능들을 수행하기 위하여 컴퓨터의 하드웨어와 소프트웨어가 서로 조합된 전자 제어 시스템으로 마이크로프로세서 기반 디지털 시스템을 의미한다.
․임베디드 시스템은 범용 컴퓨팅 시스템과 달리 자신을 포함하고 있는 기기에 부과된 특정 목적의 컴퓨팅 작업만을 수행한다. 일반적으로 임베디드 시스템은 특정 목적을 위하여 동작하는 컴퓨팅 시스템이라고 정의할 수 있다. 따라서 범용 컴퓨터를 제외하고 컴퓨팅 시스템이 내장된 모든 시스템이 임베디드 시스템이다.
․즉 우리 생활에 쓰이는 각종 전자기기, 가전제품, 제어 장치는 단순히 회로로만 구성된 것이 아니라 마이크로프로세서가 내장되어 있고, 그 마이크로프로세스를 구동하여 특정한 기능을 수행하도록 프로그램이 입력되어 있는 내장시스템을 가진다는 것이다.
(2) 임베디드 시스템의 대표적인 예
․전기, 전자, 컴퓨터, 정보통신 기술들이 눈부시게 발전하면서 셀 수 없이 많은 응용 Application이 내부적으로 임베디드 시스템 기술을 적용하여 우리 생활과 아주 밀접하게 관련되어 도움을 주고 있다.
(3) 임베디드 시스템의 역사
․이러한 임베디드 시스템은 1950년대 통신장비를 제어하기 위하여 컴퓨팅 시스템이 내장되면서 등장하였다.
․이후 1990년대 초반까지는 군사용 기기와 산업용 기기들을 제어하기 위한 목적으로 많이 사용되어 왔다.
․1990년대 후반부터 3C로 대변되는 컴퓨팅(Computing), 통신(Communication), 가전기기(Consumer Electronics) 기술들의 융합이 이루어지면서 임베디드 시스템의 영역이 크게 확대되었다. 이를 통해 임베디드 시스템은 첨단 산업으로 재등장하였으며 기존의 가전 기기와의 차별성을 강조하여 정보 가전 또는 기존의 PC와의 차별성을 강조하 'post PC'라는 새로운 이름으로 불리게 되었다.
1) 임베디드 시스템의 예
(1) 정보가전
․정보가전의 사전적 의미: 사전적 의미의 정보가전은 "정보를 수집하거나 영상을 기록해서 인간의 정신 활동 지원에 일익을 담당하는 가정전용기기" 를 의미한다.
․가전제품이 정보통신기술과의 접목을 통해 정보가전으로 변화되면서 가전제품에도 임베디드 시스템용 운영체제와 칩들이 본격적으로 도입되고 있고 최근 출시되는 전자제품 중에는 마이크로프로세서를 넣지 않았거나 프로그램을 탐재하지 않은 제품은 거의 없다. 물론 간단한 장치들은 그런 프로그램이 없어도 직접 회로를 설계하여 해결할 수 있지만, 조금만 덩치가 크거나 지능적인 제품들은 거의 임베디드 시스템을 도입하고 있다.
․디지털 정보가전의 특징은 컴퓨터 없이도 인터넷을 이용할 수 있고, 홈 네트워킹을 기반으로 모든 가전제품이 연결되어 정보를 주고받을 수 있다는 점과 이동전화 단말기 등으로 원격 제어할 수 있는 홈 시큐리티 기능을 구현할 수 있다.
(2) 사무기기
․사무기기는 사무자동화를 위한 컴퓨터, 통신장비, 워드프로세서, 팩시밀리, 전화, 복시기등 각종 기기들을 말한다.
․이러한 여러 가지 기기들 중 임베디드 시스템이 포함되어 있는 장비로 대표적인 것이 다기능 레이저 프린터와 디지털 복사기를 들 수 있다. 이들 장비는 전용 프로세서와 메모리, 경우에 따라서는 하드디스크를 포함하고 있으며 이러한 하드웨어와 응용프로그램들상에서 인터페이스를 해주는 자체 운영체제도 포함하고 있는 것이 일반적이다.
(3) 제어
․공장자동화(Factory Automation)
-공장자동화는 미리 작성된 소프트웨어를 통해 사림의 개입 없이도 제품의 설계, 제조, 조립, 검사 등의 생산 공정을 거쳐 창고로부터 제품이 출하되는 일체의 생산과정을 자동적으로 관리하는 시스템이다.
-중앙 제어 시스템에 의해 제어된다.
-공장자동화는 사무자동화, 가정자동화와 더불어 3A로 불리우는데 그중에서 가장 급속도로 발전하여 자동화산업의 선도적 역할과 제조공정 분야의 중추 적인 기능을 수행하고 있다.
-이와 같은 공장자동화의 최종 목표는 무인화이기 때문에 생산 라인에서 사용되는 기계 장치가 점차 자동화되어 감에 따라 인간의 노동력도 기계장치로 대체되고 있다. 공장자동화에서 임베디드 시스템의 발전 모습을 쉽게 찾아볼 수 있는데, 공장자동화의 발전이 임베디드 시스템의 발전과 역사를 함께 한다고 보아도 무관 하다.
․가정자동화(Home Automation)
-가정자동화란 주택을 단순한 주거 개념으로 보지 않고 컴퓨터와 통신 및 반도체 기술을 응용하여 일상 생활을 자동화시킨 가정을 의미한다.
-컴퓨터 통신망을 이용하여 생활정보, 문화정보, 홈뱅킹, 홈쇼핑, 학습정보, 진료 등 많은 정보를 얻음으로써 사용자들이 시간과 공간의 제약에서 자유로워지는 것에 그 목적이 있다.
2. 임베디드 운영체제
․초창기 운영체제 시스템들은 주로 간단하고 단순한 순차적인 작업에 관련되었기 때문에 굳이 운영체제를 필요로 하지 않았지만, 네트워크나 멀티미디어가 시스템에 기본으로 자리 잡으면서 임베디드 시스템이 해야 할 일이 많아지고 복잡해지게 되었습니다. 따라서 임베디드 시스템에서도 운영체제의 개념을 필요로 하게 되었습니다.
1) 임베디드 운영체제의 개요
(1) 임베디드 운영체제의 도입 배경
․일반적으로 운영체제는 Windows NT, Windows 95/98/2000, DOS, UNIX, Macintosh OS, OS/2 등과 같이 일반적인 응용 소프트웨어를 운영하기 위하여 설계된 GPOS(General Purpose OS)와 특정 시스템에 특정의 목적을 위해 설계된 임베디드 운영체제로 구분될 수 있다.
․초창기 임베디드 시스템들은 주로 간단하고 단순한 순차적인 작업에 관련되었기 때문에 굳이 운영체제(OS : Operating System)를 사용할 필요가 없었으나 최근의 임베디드 시스템에서는 시스템 자체가 상당히 커지게 되고, 네트워크나 멀티미디어가 시스템에 기본으로 자리 잡으면서 임베디드 시스템이 해야 할 일들도 많아지고 복잡해졌기 때문에 순차적인 프로그램을 작성하기가 매우 어렵게 되었다.
․따라서 임베디드 시스템에서도 운영체제의 개념이 필요하게 되었고 임베디드 시스템의 특성상 실시간(real time)이라는 요소를 만족해야 하였으므로 실시간 운영체제(RTOS : Real Time Operating System)가 임베디드 시스템에 도입되게 되었다.
(2) RTOS(Real Time Operating System)
․RTOS(Real Time OS)는 정해진 시간 내에 필요한 결과를 출력하는 실시간 시스템을 말한다. 이는 주어진 작업을 빨리 처리하는 개념이 아니고 정해진 시간을 넘겨서는 안된다는 개념이다.
․이러한 RTOS는 실시간적 요소를 충적시키기 위해서 모듈화, 섬전형 멀티태스킹, 스케줄링, 통합 개발 환경 지원 등을 고려해야 한다.
․한편, 실시간 시스템은 다시 Hard Real-Time System과 Soft Real-Time System으로 나눌 수 있다.
Hard Real-Time System | Soft Real-Time System |
*정해진 시간내에 작업한 결과가 절대적으로 출력되어져야 하는 시스템 *예> 전투기의 비행 제어 시스템이라든지 핵발전소의 제어 시스템, 인공위성의 제어 시스템 등 작업의 결과가 미리 정해진 시간내에 도출되지 않으면 막대한 손실을 발생할 수 있는 치명적인 결과가 나오게 되는 경우 |
*정해진 시간내에 작업한 결과가 절대적으로 출력되어져야 하는 시스템 *예> 전투기의 비행 제어 시스템이라든지 핵발전소의 제어 시스템, 인공위성의 제어 시스템 등 작업의 결과가 미리 정해진 시간내에 도출되지 않으면 막대한 손실을 발생할 수 있는 치명적인 결과가 나오게 되는 경우 |
※ RTOS의 사례
앞서 살펴 본것과 같은 RTOS는 그 종류만 해도 수를 헤아리기 힘들다. RTOS는 실시간 처리에 대한 강력한 지원과 통합 개발 및 디버깅 환경을 지원한다. 대표적으로 화성 착륙선인 패스파인더(PathFinder)와 혼다에서 만든 로봇인 아시모(ASIMO)의 운영체제로 쓰인 윈드리버(WindRiver) 시스템의 VxWorks, ISI에서 개발해서 지금은 윈드리버에 통합된 pSOS, Mentor Graphics의 VRTX 등이 있으며 교육용으로 만들어진 uC/OS-II가 있다.
이들 RTOS는 선점형 멀티태스킹을 지원하며 각 태스크들은 우선순위를 가지고 있어 높은 우선순위를 가지는 태스크들이 먼저 실행되는 구조를 가지고 있다. 또한 통합개발환경과 디버깅 툴을 개발하여 개발자들에게 용이한 개발환경을 지원하고 있다.
임베디드 운영체제는 크게 상용과 무료로 구분되는데 상용의 경우 라이선스 비가 만만치 않다는 점이다.
2) 임베디드 운영체제의 종류
임베디드 운영체제의 종류는 크게 상용 임베디드 운영체제와 비영리 임베디드 운영체제로 나누어 살펴볼 수 있습니다.
(1) 상용 임베디드 운영체제
pSOS
*ISI에서 1980년대에 개발한 pSOSystem은 우리나라의 여러 업체가 채택해서 사용하고 있는 RTOS로 삼성전자가 pSOS+ 개발에 참여해 라이선스를 갖고 있어 잘 알려져 있다. 삼성전자의 휴대폰에 사용되어 왔으며, 각종 통신장비와 네트워크 장비에서 사용되고 있다. pSOSystem은 커널을 중심으로 해서 여러 개의 소프트웨어 컴포넌트들로 구성되어 있다. 이들 소프트웨어 컴포넌트들은 각각의 독립적인 모듈로 되어 있으며 통합개발환경 툴로 pRISM+을 제공하고 있다.
*pSOSystem은 멀티태스킹 RTOS로 각 태스크들은 우선순위를 가지고 있어 우선순위가 높은 태스크들의 작업 수행이 먼저 이루어진다. 따라서 선점형 스케쥴링 방식을 따른다고 볼 수 있다. 만일 각 태스크들이 같은 우선순위를 가진다면 스케쥴링 방식은 라운드로빈(Round-robin) 방식으로 바뀌게 된다. 태스크의 수는 총 256개이다. 그리고 태스크 관리, 세마포어(semaphore), 메시지 큐, 시간 관리 및 타이머, 이벤트 및 비동기 시그널, 에러 처리, 동적인 메모리 저장관리, 다른 태스크들로부터의 코드나 데이터 보호 등의 서비스를 지원한다. 여러 개의 다른 실행 모드를 가지고 있는 CPU를 위해서 사용자 모드와 슈퍼바이저 모드를 제공하고 있다.
*pSOSystem은 실시간 멀티태스킹 커널을 중심으로 여러 개의 소프트웨어 컴포넌트와 라이브러리를 두고 있다. 이런 컴포넌트와 라이브러리는 선택적으로 사용될 수 있다. 하부 구조에는 디바이스 드라이버와 칩과 각종 디바이스의 정보를 담고 있는 BSP(Board Support Package)가 있다. BSP를 따로 구별하는 이유는 만일 하드웨어가 변경될 경우 시스템 프로그램에 큰 변경없이 BSP만 수정하여 쉽게 처리할 수 있기 때문이다. 따라서 전체적으로 정리해 보면 BSP와 디바이스 드라이버의 바탕 위에 커널과 기타 필요한 컴포넌트들을 링크하고, 다시 그 위에 사용할 각종 태스크와 응용 프로그램을 제작하여 사용하는 것이다. pRISM+는 pSOSystem 개발자가 좀더 용이한 개발을 위해 소스 코드 분석을 위한 툴과 컴파일러, 링커, 디버깅할 수 있는 툴을 제공하는 통합개발환경이다.
VxWORKs
*윈드리버의 RTOS인 VxWorks는 pSOSystem과 유사한 점이 많다. pSOSystem이 통합개발환경으로 pRISM+를 제공한다면 VxWorks는 토네이도를 제공한다. VxWorks의 커널인 마이크로커널은 선점형 멀티태스킹이며 총 태스크의 단계는 256, 스케쥴링 방식도 높은 우선순위를 가지는 태스크가 먼저 실행하는 방식을 지원한다. 만일 같은 우선순위를 가진다면 라운드로빈 방식의 스케쥴링을 이용하는 것도 pSOSystem과 유사하다.
*또 하나 pSOSystem이 여러 개의 컴포넌트로 되어 있다고 하면 VxWorks는 200개 가량이 모듈을 지원하는 형식으로 되어 있어 개발자는 이들 필요한 모듈만 사용해서 시스템에 맞는 운영체제를 구성할 수 있다.
*VxWorks는 현대의 RTOS들이 지원하는 거의 모든 서비스를 지원하고 있다. 태스크간의 통신을 위해 세마포어와 메시지 큐, 공유 메모리, 소켓, 시그널 등을 제공하고, 표준 TCP/IP 네트워킹과 ROM이나 로컬 디스크, 네트워크로 부팅이 가능하게 되어 있다. VxWorks의 구조는 크게 하드웨어에 의존하는 BSP, 디바이스 드라이브 영역과 하드웨어에 의존하지 않는 커널과 그에 따른 모듈, 그리고 애플리케이션 프로그램으로 나뉜다. 이것은 pSOSystem과 매우 유사한 부분이다. VxWorks의 토네이도는 교차 개발환경을 지원하는 통합개발환경이다.
VRTX
*VRTX는 멘토 그래픽스(Mentor Graphics Co.)사에서 만든 실시간 운영체제(RTOS)로 극히 제약된 리소스를 가진 간단한 시스템을 위한 VRTXoc(on-chip)와 메모리 보호가 필요한 복잡한 시스템을 위한 VRTXsa(scalable architecture) 두 종류의 커널을 가진다. 커널상의 시스템 서비스가 모듈화되어 있어 커널 크기를 필요에 맞게 줄일 수 있으며, 옵션으로 POSIX/ANSI 호환 라이브러리를 제공해 프로그램의 호환성을 높일 수 있고, MS-DOS 호환 파일 시스템을 제공한다.
*기본적으로 TCP/IP 스택을 제공하며 유닉스와 소켓 인터페이스를 가진다. SNMP와 TMN/CMIP 툴킷이 옵션으로 제공된다. 네트워킹, I/O, 파일 시스템은 스트림(stream) 기반으로 통합되어 있다. MMU를 제공하는 프로세스에 대해 MMU를 지원함으로 시스템 안정성의 향상을 기대할 수 있다. 그리고 멀티태스킹 디버킹을 지원하는 XRAY 디버거(debugger)가 제공된다. XRAY는 다수의 쓰레드를 동시에 추적해 실행 상태를 디스플레이 할 수 있고 서로 다른 종류의 프로세스들에서 돌아가는 쓰레드들도 동시에 디버깅이 가능하다. 또한, 여러 쓰레드간의 디버깅 명령을 동기화 할 수 있어 통신이나 메시지 패싱과 같은 복잡한 문제에 대해 대응할 수 있고 결과적으로 멀티프로세스 시스템도 지원이 가능하다.
Window CE
*Window CE는 마이크로소프트사에서 개발한 임베디드 시스템용 운영체제이다. 성능이 상당히 우수하며, 특히 GUI환경과 많은 어플리케이션을 가지고 있어서 현재 널리 사용되고 있다. 멀티태스킹 오퍼레이팅 시스템인 Windows CE는 32개에 달하는 동시 프로세스를 지원하고 각각의 프로세스는 어플리케이션의 단일 개체이다. 또한 멀티 스레딩 지원은 각각의 프로세스가 다중 실행 스레드를 생성할 수 있다.
*스레드(thread)는 다른 부분들과 병행하여 실행되는 프로세스의 한 부분이며 스레드(thread)들은 독립적으로 실행한다. 그러나 각각의 스레드는 특별한 프로세스에 속하고 같은 메모리 공간을 공유한다. 스레드들의 총 수는 단지 사용 가능한 물리적인 메모리에 의해 제한되어진다.
*Windows CE는 최소의 프로세서 자원에서 스레드 동기화를 실현한다. 그리고, 많은 오퍼레이팅 시스템과는 다르게 Windows CE는 스레드와 관련된 작업, 즉 스케줄링, 동기화, 자원관리 등을 다루는 것은 커널을 이용한다. 따라서, 어플리케이션은 다른 스레드 함수들로 프로세스나 스레드의 수행과 완료를 위한 폴(poll)이 필요하지 않다. Windows CE는 선점형이기 때문에 우선 순위가 더 높은 프로세스나 스레드가 선점적인 실행을 해야 한다. 그것은 스레드 스케줄링을 위해 여섯 개 등급인 스레드 우선 순위를 기초로 한 시분할 알고리즘을 사용한다.
*Windows CE는 선택한 수의 네트워크 스택을 제공한다. 네트워크 통신들은 적외선 통신, 이더넷, 무선 통신을 포함한 여러 가지 하드웨어를 지원한다. 비록 네트워크 스택이 윈속 인터페이스를 통해 유일하게 접근할 수 있어도 Windows CE는 또한 내부적으로 윈속에 사용하고 위속 연결을 설정하고 관리하는 섬세한 부분을 다루는 여러 가지 상위 레벨의 API들을 제공한다. WinInet API는 FTP와 HTTP 1.0을 포함한 인터넷 브로우징 프로토콜들을 지원한다.
또한 Secure Sockets Layer(SSL) 2.0, Secure Sockets Layer(SSL) 3.0 그리고 Private Communication Technology(PCT) 1.0을 포함한 세 가지 보안 프로토콜의 접근을 제공한다. WinInet API는 Common Internet File System(CIFS) 리디렉터를 통한 원격 파일 시스템의 접근을 제공한다. 적외선 통신을 위해 Windows CE는 산업 표준 IrDA 프로토콜들을 사용하는 소켓 기반의 적외선 통신이 가능한 윈속에서 확정된 IrSock을 지원한다. Windows CE는 윈속으로써 네트워크 스택과 같은 레벨인 RAS 크라이언트를 제공한다.
Window CE
*인터넷을 위해 개발된 TCP/IP 프로토콜 그룹은 가장 복잡하고 넓게 알려진 네트워크 프로토콜이다. 그것은 광범위한 시스템에 의해 지원되어지고 Windows CE 네트워크 스택의 핵심을 형성한다. 많은 윈도우 기반 이동 장치들은 무선 통신을 사용할 수 있다. 그러나, 전통적인 TCP/IP 스택은 유선 네트워크에서 효과적인 함수에 의해서 만들어지기 때문에 무선 기술에서는 불충분하게 동작 할 수 있다. 그러나, Windows CE TCP/IP 스택은 무선 네트워킹을 위해 설정되어지게 디자인 되었다.
※ 기타 상용 임베디드 운영체제
그밖에 QNX 소프트웨어 시스템에서 만든 운영체제로서 마이크로커널과 그 상위에서 시스템 서비스를 하는 여러 프로세스들로 이루어진 클라이언트/서버 구조를 갖고 있는 QNX, Accelerated Technology회사에서 개발한 실시간 운영 체제로서 네트워킹 디바이스 같이 복잡한 어플리케이션에 걸 맞는 커널인 Nucleus PLUS, 마이크로웨어의 실시간 운영체제로서 모듈 단위로 나누어져 있으며 각 모듈들은 헤더, 코드와 데이터, CRC 체크섬으로 이루어져 있어 모듈의 안정성과 높은 보안성을 제공하는 OS-9 등이 있다.
(2) 비영리 임베디드 운영체제
․교육용의 목적으로 개발되어 소스가 무료이거나 특정 이유로 비영리 목적에는 무료이고 영리 목적일 경우에도 거의 대가없이 소스 코드를 사용할 수 있는 운영체제들은 다음과 같다.
Xinu
*Xinu는 Purdue 대학의 Douglas E. Comer가 교육용 목적으로 개발한 운영체제이다. 실제로 지금도 수많은 교육기관에서 이를 운영체제 학습을 위해 사용되고 있다. 최근 버전에서는 TCP/IP 스택도 구현되어 많은 교육 기관에서 데이터 통신이나 컴퓨터 네트워크 과정에서 활용하고 있다.
*Xinu는 병렬 프로세싱, 메시지 패싱, 세마포어(semaphore), 메모리 관리, 통일된 디바이스 I/O와 같은 세련된 운영체제적 특징을 가지고 있으면서 TCP/IP 스택도 가지고 있다. 또한, 교육용으로 제작된 것이라서 잘 정리된 레퍼런스 문서가 존재하며, Intel, Motorola, Sparc 등의 여러 CPU에 포팅되어 있다. 아주 간단하며 크기가 작으며, 무료이기 때문에 이를 네트워크 디바이스용 운영체제로 사용해 장비를 제작하는 회사들도 있다.
uC/OS와 uC/OS-II
*Jean J. Labrosse가 만든 POSIX(Portable Operating System Interface) 표준 호환의 실시간 운영체제이며 uC/OS-Ⅱ는 그 다음 버전이다. 비영리 목적이라면 소스 코드를 홈페이지에서 무료로 다운 받을 수 있고 라이센스 비용도 거의 무료에 가깝다. 상당히 저렴한 가격의 실시간 운영체제이기 때문에 많은 계측장비, 산업용 장비의 운영체제로 쓰이고 있다.
*uC/OS와 uC/OS-Ⅱ는 4천 라인 정도의 C코드와 약간의 아키텍춰에 의존적인 어셈블리 코드로 이루어져 있어 여러 CPU로의 포팅이 쉬우며 실제로 Intel, Motorola, ARM, Sparc, Hitachi SH 등의 32비트 CPU와 자이로그(Zilog)사의 Z80과 같은 8비트 CPU, 그리고 TI의 여러 DSP칩에도 포팅되어 있다. C프리프로세스 매크로로 필요없는 기능을 제거할 수 있는 스케일러빌러티를 제공하며 완전한 섬점형(preemptive)실시간 멀티태스킹을 할 수 있는 구조를 지니고 있다. 또한 여러 메일 박스, 큐, 세마포어와 같은 시스템 서비스를 제공한다. 하지만 TCP/IP 스택을 가지고 있지 않기 때문에 네트워크 디바이스용의 운영체제로 사용하기 위해서는 uC/OS, uC/OS-Ⅱ용 스택을 판매하는 회사의 제품을 구매해야 한다는 단점이 있다.
eDOS
*eCOS는 지금 레드햇에 합병된 시그너스사에서 만든 오픈소스 실시간 운영체제로서 로얄티가 없고 제조사에서 잘 정리된 지원체제를 가지고 있다는 장점이 있다.
*리눅스가 탑재되지 못할 만큼 극히 제한된 임베디드 디바이스를 위해 제작되었으며 모토로라의 Power PC, Sparc, ARM, Mips 계열의 CPU로 포팅되어 있으며 커널 자체를 쉽게 특정 목적에 맞게 구상할 수 있는 GUI툴이 제공된다.
*어플리케이션 제작을 위한 자체 C 라이브러리와 리눅스 호환을 위한 EL/IX라는 리눅스 호환 API를 가지고 있어 EL/IX를 이용해 리눅스에서 프로그래밍한 어플리케이션을 수정없이 eCOS에서 돌릴 수 있다.? 이외에 ITRON 호환 실시간 라이브러리를 제공하며 TCP/IP 스택(stack)을 제공한다.? 하지만 지금까지 TCP/IP 스택 자체가 베타(beta) 버전이기 때문에 네트워크 디바이스용 운영체제로서 안정성에 대한 검정이 이루어지지 않았다. 그리고 운영체제 자체는 오픈 소스지만 개발 툴과 지원체제를 이용하기 위해서는 상용운영체제 만큼의 부담이 든다.
3. 리눅스 개요
․리눅스(Linux)는 네델란드의 한 대학생인 리눅스 토발즈(Linus Torvalds)가 교수가 만든 유닉스 기반 마이크로 커널 구조를 가진 인텔 기반 운영체제를 수정하여 인터넷에 공개하여 전 세계 해커들에 의해 지속적으로 수정 보완되면서 발전한 운영체제입니다.
1) 리눅스의 도입
(1) 리눅스의 도입 배경
․초기의 리눅스는 네델란드 브리제 대학의 앤드류 타넨바움 교수에 의해 개발된 유닉스 기반의 마이크로 커널 구조를 가지는 인텔(Intel) 프로세스에서 동작한 운영체제인 미닉스(Minix)를 이 대학 학생인 리누스 토발즈(Linus Torvalds)가 수정하여 인터넷에 공개한데서부터 출발한다.
․그 이후 리눅스는 전 세계의 해커들에 의해서 지속적으로 수정 보완되면서 급속히 발전하여 왔다.
․또한 리처드 스톨만(Richard Stallman)에 의해 창시된 자유 소프트웨어 재단(FSF: Free Software Foundation)과 노선을 함께하여 GNU GPL(General Public License)하에 커널 소스를 공개하여 오늘에 이르고 있다.
․이러한 소스 코드 공개에 기초한 자유 소프트웨어 정신에 입각하여 리눅스는 해커들에 의해 급속한 진전을 이루었으며, 비로소 1994년 5월에 커널 버전 1.0.0이 발표되었고 1996년 6월에는 커널 버전 2.0.0이 발표되게 된다.
․2001년 1월에는 커널 버전 2.4.0이 발표되었다. 이제 리눅스는 저렴한 중소형 컴퓨터 뿐만 아니라 서버급 컴퓨터에 널리 사용되고 있는 실정이다.
2) 리눅스의 장단점
(1) 리눅스의 장점
●리눅스는 유닉스와 완벽하게 호환가능하다.
리눅스의 보급이 다른 OS보다 빨랐던 이유 중의 하나는 유닉스의 호환이라는 이점 때문이다. 유닉스는 워크스테이션용 운영체제로 대학이나 기업, 연구기관에서 주로 사용되어 왔지만 뛰어난 성능인만큼 가격면에서 개인이 이용하기엔 무리가 있었다. 하지만 점차 하드웨어의 발달로 인해 PC와 워크스테이션의 성능차이가 거의 없어지고 유닉스와 완벽하게 호환된다는 리눅스의 장점은 리눅스의 인기를 얻게 된 비결이 되었다.
●리눅스는 공개운영체제이다.
리눅스는 발표 당시 소스공개, 완전 무료, 유닉스와 호환이라는 장점으로 많은 개발자와 개발업체에 지원을 받을 수 있었고, 이러한 특징으로 말미암아 지속적인 발전을 거듭하게 되었고 오늘날 많은 사용자들을 확보할 수 있게 되었다.
●리눅스는 PC용 OS보다 안정적이다.
기존의 안정적인 유닉스 운영체제를 기반으로 개발되었기 때문에 PC용 운영체제보다 안정적이다.
●리눅스는 무료이다.
리눅스의 소스는 완전히 공개되어 있고 여러 곳의 밀러링 사이트를 통해 무료로 제공되어 리눅스 웹서버 시스템을 구축하고자 하는 사용자들은 비용 부담 없이 구축할 수 있고 다양한 GNU 프로그램을 사용할 수 있다.
●리눅스는 하드웨어의 기능을 효과적으로 사용한다.
리눅스는 다른 운영체제보다 비교적 적은 양의 메모리로도 이용할 수 있다. 기본적으로 리눅스는 2메가 램만 있으면 시스템을 운영할 수가 있고, 4메가 램만 있다면 여유롭게 X Window와 Emacs등을 실행 할 수 있다. 또한 스왑이라는 하드디스크의 일정부분을 램처럼 사용하는 기법을 도입하고 있어 램이 부족한 경우 스왑 영역을 늘려 램의 부족을 메울 수 있다.
●리눅스는 강력한 네트워크지원과 멀티 태스킹을 지원한다.
유닉스의 특징인 다중사용자 지원과 멀티 태스킹을 기반으로 설계 되었기 때문에 네트워크 기능 지원이 풍부하다.
●다양한 응용프로그램을 제공한다.
일반적으로 알려진것과 달리 상용 프로그램을 못지 않은 무료 프로그램이 많이 있다.
●리눅스는 인터넷의 모든 기능을 지원한다.
리눅스는 웹 브라우저, 메일(pine, elm) 뉴스(tin, nn)등 외에도 웹서버 (Apache, CERN), 메일서버 (Sendmail, qmail), 뉴스서버 (INND, C-News), DNS(Domain Name System) 서버, IRC 서버 등 거의 모든 인터넷서버의 기능을 갖추고 있고, 방화벽(Firewall)으로도 사용할 수 있다. 또한 인터넷용 시리얼 프로토콜인 PPP, SLIP, CSLIP 등도 지원된다.
(2) 리눅스의 단점
●리눅스는 문제발생시 보상 받을 수 없다.
무료로 제공되는 운영체제이기에 사용 시 발생한 사고에 대해서는 어떠한 보상도 받을 수가 없다. 하지만 리눅스의 급부상으로 현재 많은 리눅스 관련업체들이 서비스를 제공하고 있다.
●리눅스는 보안문제
리눅스 프로그램자체에 대한 정보의 완전공개이기 때문에 보안에 취약할 것이라고 생각하지만 이것은 반대로 이야기하면 신속한 보완이 가능하다는 뜻을 내포하고 있다.
● 리눅스 시스템에 대해서는 다양한 정의가 있을 수 있습니다.
- 워크스테이션이나 개인용 컴퓨터에서 주로 사용되는 유닉스와 유사한 오퍼레이팅시스템.
3) 임베디드 리눅스
(1) 임베디드 리눅스 개요
․임베디드 리눅스는 저성능의 프로세서와 소용량의 메모리를 가진 임베디드 시스템용으로 개발된 리눅스이다. 즉 특정 어플리케이션에 맞도록 리눅스 커널을 최적화한 것이다.
․임베디드 리눅스 운영체제는 라이센스비가 무료이며, 커널 소스 또한 공개되며 현재 전 세계의 수많은 개발자들에 의해 지속적으로 업데이트 되고 있다.
(3) 임베디드 리눅스의 필수 조건
․임베디드 리눅스가 가져야 하는 필수 조건은 다음과 같다.
임베디드 리눅스의 필수 조건 | 임베디드 장치가 소용량의 메모리 밖에 장착할 수 없다는 제약 사항을 감안하여 리눅스 자체의 크기와 기능을 최소화, 경량화하고, 목표로 하는 시스템에 맞게 쉽게 재구성이 가능하도록 해야 한다. |
저성능의 프로세서를 사용하는 제약을 극복하기 위해 임베디드 리눅스의 성능이 최적화되어야 한다. |
(3) 임베디드 리눅스의 장점
․수많은 사용자들로부터 지난 수년간 직접 사용되면서 검증된 코드들로 효율적이고 안정적이며 성숙된 내용을 가진다.
․오픈 소스이기 때문에 소스 코드 자체가 공개되어 있고 이의 적용에 따른 로열티 자체가 없기 때문에 부담 없이 쉽게 자체 개발 아키텍처에 적용할 수 있다.
․리눅스 커널 자체가 태생적으로 모듈 형식의 코드로 이루어져 있어 쉽게 최소, 최적화 가능하다.
․네트워킹 어플리케이션에 필수적인 TCP/IP, PPP, X.25, HDLC, FDDI 등의 네트워크 코드를 가지며 그 종류에 있어서도 다양하고 무료로 사용할 수 있어 개발에 용이하다.
․네트워킹 디바이스에서 현존하는 거의 대부분의 프로세스에 포팅되어 있으며, 대부분의 컨트롤러를 위한 디바이스 드라이버가 제공되기 때문에 그 적용 영역 또한 방대하다.
․사용자 뿐만 아니라 개발자 그룹의 크기도 오픈 소스이면서도 개발을 위한 자체 툴과 라이브러리를 가지고 있는 현대적인 운영체제라는 특성에 맞물려 전 세계적으로 거대한 수의 개발자들이 존재한다. 따라서 어플리케이션은 물론 자체 문서도 거의 모든 영역에 대해 상용 운영체제 못지않게 잘 이루어져 있다.
․이미 PC상에 리눅스 어플리케이션과 커널의 개발에 익숙한 사람들에게 있어 임베디드 리눅스는 자신에게 익숙한 환경을 제공하기 때문에 쉽게 임베디드 어플리케이션을 개발할 수 있게 해준다. 또한, 개발 툴은 어떤 운영체제나 아키텍처 상에도 포팅이 되어 있음으로 한번 개발 툴에 익숙해지면 개발 환경에 제약이 없어진다는 장점이 있다.
․실시간(real time)을 지원하여 지금까지 상용 OS에 열세였던 Real Time성을 크게 확보하고 보다 다양한 분야에 적용을 할 수 있다.
(4) 임베디드 리눅스의 단점
․임베디드 리눅스(embedded linux)위에서 실행될 수 있는 어플리케이션(application)이 상당히 부족한 실정이다. 따라서 임베디드 리눅스를 OS로 채택하고 이를 확산시키는데 걸림돌이 되고 있는 실정이다.
․임베디드 리눅스(embedded linux)를 이용하여 장비개발시 개발환경에 접근하는 데 상당히 어렵다. 커널을 비롯하여 마이크로 프로세스(microprocess), 네트워크, 각종 툴(tool)등을 다루어야 하는 내용이 방대함으로 단시일내에 전문적인 개발자 양성에 문제가 있다.
4. 리눅스 커널
․리눅스 커널은 프로세스 관리, 메모리 관리, 프로세스간 통신, 파일시스템, 네트워크 등의 운영체제의 기본 기능과 함께 방대한 양의 디바이스 드라이버로 이루어져 있습니다.
1) 운영체제와 커널
(1) 커널
․운영체제란 컴퓨터 하드웨어와 사용자와의 인터페이스를 제공해주는 프로그램을 말한다.
․운영체제의 가장 핵심적인 기능은 컴퓨터에 들어있는 여러 자원들을 관리하는 것이며 이러한 운영체제의 가장 핵심적인 부분을 커널이라고 부른다.
(2) 쉘
․운영체제는 커널 위에 사용자와의 인터페이스를 제공하는 쉘(shell)이 더해져서 만들어진다.
(3) 리눅스 커널
․리눅스 커널은 프로세스 관리, 메모리 관리, 프로세스간 통신, 파일시스템, 네트워크 등의 운영체제의 기본 기능과 함께 방대한 양의 디바이스 드라이버로 이루어져 있다.
2) 리눅스 커널의 역사와 개발과정
․리눅스 커널을 리눅스 혼자서 개발한 것은 아니다. 리눅스는 소프트웨어를 모든 사람이 자유롭게 복사하고 사용할 수 있으며, 마음대로 소스를 수정하여 재배포할 수 있는 GPL(GNU Public License)의 라이선스를 따랐다.
․소스가 공개되어 있었기 때문에 관심있는 사람들은 잘못된 코드를 찾아서 수정하거나, 부족한 기능들을 직접 구현할 수 있다.
․자신이 갖고 있는 하드웨어를 리눅스가 지원하지 않으면 이를 만들어서 추가하고, 이렇게 고쳐진 코드는 리눅스 커널의 관리자인 리눅스에게 보내진다. 그는 여러곳에서 사람들이 보내온 코드를 취합하여 커널을 수정한 후 배포한다.
이런 식으로 커널의 버그들이 수정되고 기능이 추가되면서 리눅스 커널은 빠르고 발전하였다.
․리눅스는 인터넷을 매개로 한 리눅스 공동체를 통해서 발전해왔다.
․리눅스 커널의 개발은 오픈 소스로 진행되며, 리눅스는 여전히 커널 개발에 참여하고 있지만 그의 주된 역할은 전체적인 커널 개발을 조화시키는 것이다. 지금은 리눅스와 함께 앨런 콕스(Alan Cox)가 이런 역할을 함께 하고 있다. 커널의 몇몇 기능은 꾸준히 이를 담당하는 사람들이 있으며, 많은 커널 해커들이 커널 개발에 참여하고 있다.
3) 리눅스 커널의 주요특징
․리눅스 커널은 기존 유닉스 시스템이 지닌 특징들 외에도 최신 운영체제가 지원하는 많은 특징들을 가지고 있다. 리눅스 커널의 주된 특징은 아래와 같다.
● 멀티태스킹(multi tasking), 멀티유저(multi-user) 시스템
시분할(time sharing)으로 동시에 여러개의 프로세스를 실행할 수 있으며, 하나의 시스템을 여러명의 사용자가 동시에 사용할 수 있다.
● 멀티프로세서(multi processor) 시스템
하나의 시스템에 두개 이상의 CPU가 들어 있는 대칭형 멀티프로세싱(Symmetric Multi Processing; SMP)을 지원한다.
● 멀티플랫폼(multi-platform)
리눅스 커널의 대부분은 고수준 언어인 C 언어로 작성되어 있어 여러 하드웨어 플랫폼으로 이식할 수 있다. 리눅스는 인텔 IA-32를 비롯하여 알파(alpha), 스팍(sparc), 파워피씨(PowerPC), 암(ARM), 밉스(MIPS) 등의 여러 플랫폼에서 동작한다.
● POSIX 표준을 따른다.
유닉스 시스템의 표준 인터페이스를 정의한 POSIX 표준과 호환된다.
● 페이징(paging)
메모리를 페이지 단위로 관리한다. 페이지 단위로 메모리를 할당하고, 스왑(swap)을 하며, 필요한만큼만 메모리를 사용하도록 하여 메모리를 효율적으로 관리한다.
● 유닉스 시스템 VIPC 지원
세마포어(semaphore), 메시지 큐(message queue), 공유 메모리(shared memory) 같은 시스템 V의 프로세스간 통신 메커니즘을 지원한다.
● 다양한 파일시스템 지원
리눅스에서 기본으로 사용하는 ext2를 비롯하여, 마이크로 소프트 윈도우즈에서 사용하는 FAT, VFAT, NTFS, CD-ROM에서 사용하는 ISO 9660, 조일렛(Joilet) 등 다양한 파일시스템을 지원한다.
● 다양한 실행파일 형식 지원
기본적으로 리눅스 환경에서 작성된 a.out이나 ELF 형식의 파일을 지원하며, 다른 운영체제에서 동작하는 실행파일도 지원할 수 있다.
● 네트워킹
리눅스의 강점 중의 하나는 강력한 네트워킹이다. TCP/IP를 비롯하여 IPX/SPX, 애플토크(Appletalk), SLIP(Serial Line IP), PPP 등의 여러 네트워킹 프로토콜을 지원하며, 각종 네트워킹 서비스들을 제공한다. BSD 소켓을 통하여 응용프로그램이 네트워킹 기능을 활용할 수 있다.
● 공유 라이브러리(shared library)
여러개의 프로그램이 똑같이 사용하는 코드를 프로그램마다 따로 가지지 않고 이를 공유하는 공유 라이브러리를 지원한다.
● 모듈(module)
기존의 유닉스 시스템은 새로운 하드웨어를 지원하거나 기능을 추가하려면 커널 전체를 교체하거나 새로 컴파일을 해야 한다. 리눅스 커널은 새로운 하드웨어를 위한 디바이스 드라이버나 새로운 기능을 담은 코드를 모듈의 형태로 제공하여, 커널을 교체하지 않고 모듈을 로드함으로써 커널에 새로운 기능을 추가할 수 있다.
● 광범위한 주변장치 지원
리눅스 커널은 네트워크 카드, 사운드 카드, CD-ROM, SCSI, USB, PCMCIA, IrDA 등 다양한 종류의 수많은 하드웨어를 지원한다.
4) 리눅스 커널의 전체구성
․리눅스 커널은 크게 프로세스 관리, 메모리 관리, 프로세스간 통신, 파일시스템, 네트워크, 디바이스 드라이버로 나눌 수 있다.
● 메모리 관리
시스템의 중요한 자원중의 하나인 메모리를 관리한다. 가상 메모리를 통하여 실제 존재하는 메모리보다 많은 메모리를 사용할 수 있게 해주며, 페이징(paging)을 비롯한 여러가지 기법을 이용하여 메모리를 효율적으로 사용할 수 있게 한다. 프로세스들 사이에 메모리를 보호하여 안정된 시스템을 구축한다.
● 프로세스 관리
프로세스의 생성과 종료를 담당하며, 실행할 수 있는 여러개의 프로세스가 존재할 때 스케줄링(scheduling)을 통해서 공정하게 CPU를 할당한다.
● 프로세스간 통신(IPC)
프로세스간에 데이터를 전달하고 서로의 작업을 조절할 수 있게 한다. 시그널(signal)이나 파이프(pipe)같은 전통적인 통신 방법부터 세마포어같은 최근에 등장한 방법도 지원한다.
● 파일 시스템
디스크를 비롯한 여러가지 블럭 장치상에 파일시스템을 구축하고 이를 사용할 수 있게 한다. 가상 파일시스템을 통하여 EXT2, FAT, FAT32, ISO9660같은 다르게 구현되는 여러 종류의 파일시스템을 일관된 인터페이스로 사용할 수 있게 한다.
● 네트워크
이더넷이나 PPP같은 네트워크 장치를 이용하여 가장 대표적인 네트워크 프로토콜인 TCP/IP를 비롯하여 여러 가지 통신 프로토콜을 통해 데이터를 주고 받는다. BSD 소켓 인터페이스를 통해 다른 프로토콜을 일관된 인터페이스로 사용할 수 있게 한다.
● 디바이스 드라이버
하드웨어 장치를 직접적으로 제어하며, 소프트웨어적으로 장치를 만들 수도 있다. 리눅스에서는 장치를 문자 장치, 블록 장치, 네트워크 장치로 분류하며, 파일시스템을 통하여 접근할 수 있다.
4) 커널 소스의 구조
커널 소스는 여러 디렉토리에 나누어져 들어가 있다. 소스들은 각각의 기능에 따라 체계적으로 분류되어 있으며, 아키텍쳐마다 다른 부분과 아키텍쳐 독립적인 부분으로 나뉜다. 각 디렉토리에 어떠한 일을 하는 소스가 들어 있는지 간단히 정리하면 아래와 같다.
(1) 문서
이 디렉토리는 커널 소스는 아니지만 커널 소스와 함께 배포되는 문서들을 가지고 있다. 커널의 모든 부분을 다루지는 않지만, 꽤 유용한 내용을 많이 다루고 있다. CHANGES 파일은 이전 버전에서 달라진 부분들을 세세하게 다룬다. 커널에 대해 궁금한 것이 있을 때 여기서 문서를 찾아보는 것이 도움이 될 때가 많다.
(2) 헤더파일
리눅스 커널의 공통 헤더파일을 가진다.
아키텍처 의존적인 헤더파일이 들어간다. 이 디렉토리는 컴파일하려고 하는 아키텍처에 해당하는 디렉토리와 심볼릭 링크(symbolic link)로 연결된다. IA-32에서는 include/asm-i386/ 디렉토리와 연결된다.
(3) 아키텍처 독립 소스
커널 부팅에 관련된 소스가 들어있다
프로세스 관리, 타이머, 인터럽트, 시그널, 모듈 관리 등 커널의 핵심적인 부분에 관련된 소스가 들어있다.
메모리 관리와 관련된 소스가 들어있다.
프로세스간 통신(IPC)과 관련된 소스가 들어있다.
파일 시스템과 관련된 소스가 들어있다. 각 파일 시스템별로 서브 디렉토리로 나뉜다.
네트워크와 관련된 소스가 들어있다. 각 프로토콜별로 서브 디렉토리로 나뉜다.
디바이스 드라이버 소스가 들어있다. 리눅스 커널 소스 전체로 보면 커널의 대부분이라고 할 수 있을 만큼 방대하다. 드라이버 종류별로 여러가지 서브 디렉토리로 나뉜다.
커널은 표준 C 라이브러리를 사용하지 않는다. 여기서는 문자열 처리같은 몇가지 필수적인 라이브러리 함수를 구현하는 소스가 들어있다.
IA-32에서의 부팅과 관련된 소스가 들어있다.
공통 소스의kernel/에 해당한다.
공통 소스의 mm/에 해당한다.
위 두가지로 분류하기 어려운 소스가 들어있다.
실수연산을 처리하는 보조프로세서(coprocessor)가 없는 시스템을 위한 실수 연산 에뮬레이션 소스가 들어있다.
'정보과학 > 운영체제특론' 카테고리의 다른 글
프로세서 관리 커널 2 (0) | 2023.12.16 |
---|---|
프로세서 관리 커널 1 (0) | 2023.12.13 |
운영체제 보안 (1) | 2023.12.11 |
병렬처리 (0) | 2023.12.09 |
네트워크와 분산처리 (1) | 2023.12.09 |