RISC 프로세서의 특징을 말하기에 앞서 먼저 프로세서의 대표적인 두 가지 아키텍처인 CISC RISC 의 철학에 대해 간단히 이야기해보겠습니다. 결론부터 말하면 CISC RISC 의 철학은 정 반대라고 할 수 있습니다. CISC 프로세서가 하나의 명령어로 최대한 많은 작업을 할 수 있도록 구현된 반면에 RISC 는 명령어 하나당 하나의 연산만을 수행하도록 구현되어 있습니다. 그래서 같은 작업을 하는 데에 있어서 RISC 프로세서는 CISC 2배 정도의 명령어가 필요한데 바로 이 점이 두 가지 아키텍처의 가장 큰 차이점이며 이로 인해서 명령어의 길이나 Clock 스피드, 메모리 액세스 방식, 어드레싱, 레지스터 등의 차이점이 발생한다고 볼 수 있습니다.

그럼 이제부터는 RISC 프로세서에 대해 더 자세하게 분석해 보겠습니다. RISC Reduced Instruction Set Computer 의 약자로서 말 그대로 간단한 명령어의 집합으로 이루어진 컴퓨터입니다. 명령어가 간단해지다 보니 명령어들의 동작 또한 간단해져서 자연스레 프로그램을 작성하는데 많은 명령어를 사용하게 되고 프로그램 길이도 길어지며 저장 공간 또한 늘어나게 됩니다. 이러한 RISC 철학이 나타나게 된 배경은 CISC 프로세서로부터 시작합니다. CISC 프로세서는 프로그램을 위한 모든 명령어를 지원하지만 그 중에서 실제로 사용되는 명령어는 10% 이하정도 뿐이었습니다. 그래서 많은 사람들이 쓸데없는 명령어들이 너무 많아! 필요한 명령어들만 모아 놓은 프로세서가 있었으면 좋겠다!’ 하고 생각했다고 합니다. 바로 이러한 생각에 착안하여 개발된 것이 RISC 프로세서이며, HP 에서 1986 년에 RISC 프로세서를 소개했습니다. 초기에는 RISC 프로세서가 CISC 프로세서에서 명령어의 수만 줄어든 개념으로 인식되기도 했지만 CISC 프로세서의 명령어들이 처리하던 것들을 RISC 프로세서의 명령어들로도 처리할 수 있게 되면서 RISC 가 주목받고 발전하게 되었습니다. 그리고 이후에 특정 작업에서 강력한 성능이 요구되는 워크스테이션급의 컴퓨터에서 RISC 칩을 주로 사용하게 된 것입니다.

조금 더 구체적으로 RISC 프로세서가 어떻게 CISC 프로세서보다 빠르게 동작할 수 있는지를 알아보겠습니다. 앞서 말했듯이 RISC 프로세서의 명령어들은 CISC 프로세서의 명령어에 비해 훨씬 간단하며 이는 곧 클럭 주기가 짧아짐을 의미합니다. 복잡한 명령어들이 간단한 명령어들로 나누어지면 더 많은 명령어를 수행해야하기 때문에 비슷할거라고 생각할 수도 있으나 캐시에서 아주 빠른 속도로 명령어들이 수행되기 때문에 RAM 의 사용이 증가하게될 뿐입니다. 분기의 명령을 수행하는 데 하나 이상의 클럭 주기가 필요할 경우가 있습니다. 분기 명령을 수행하기 위해서는 메모리에 접근해야 하는데 이 때문에 지연이 발생하게 됩니다. RISC 프로세서는 분기 명령어 다음에 있는 명령어를 지연시킨 명령어 다음으로 실행시켜서 이런 문제를 해결합니다. 이 때문에  단위 시간동안 낮은 사이클 수를 가지게 되며 메모리 레지스터에 많은 트랜지스터가 존재하게 되는 것입니다.

이번에는 CISC 프로세서에 비해 RISC 프로세서가 가지는 큰 장점 중의 하나인 Pipeline 에 대해 그림으로 설명하겠습니다. 첫 번째 그림은 파이프라인이 적용되지 않은 그림입니다. 두 개의 작업이 CPU 에 입력된 순서대로 이루어집니다. 이렇게 되면 Job1 Job2 가 완료되는 시간이 많이 차이나게 됩니다.



두 번째 그림은 파이프라인을 적용한 그림입니다. 파이프라인의 적용 유무와 관계없이 작업이 완료되는 시간은 똑같습니다. 하지만 이 것의 특징은 Job1 이 끝나고 1cycle 시간 후에 바로 Job2 가 끝났다는 점입니다. 수많은 작업을 처리해야 하는 큰 프로그램의 경우 바로바로 작업이 완료되게 되어 효율성이 커지게 되는 것입니다.



이런 과정은 자동차 생산라인이나 세탁소에 많이 비유합니다. 자동차가 생산되기 시작되는 시간은 다소 걸리지만 한 번 생산이 되기 시작하면 짧은 주기로 계속해서 생산이 됩니다. 또한 세탁소로 비유하자면 CISC 세탁소는 하나의 기계로 세탁과 탈수를 모두 하기 때문에 시간이 오래 걸리지만 RISC 세탁소를 세탁과 탈수 기계가 따로따로 있어서 세탁시간이 줄어들게 되는 것입니다.

한 가지 유의할 점은 입력되는 데이터의 크기가 일정해야 파이프라인의 효과가 극대화된다는 점입니다. CISC 프로세서의 명령어들은 길이가 다양하고 복잡하여 이러한 파이프라인을 적용할 수 없는 것입니다. RISC 프로세서의 명령어들은 단순하고 길이가 일정해서 파이프라인을 적용하는 데 있어 최적이라고 볼 수 있습니다.

RISC 프로세서가 무조건 CISC 프로세서에 비해 좋다는 것은 아닙니다. 유저가 CPU 를 선택할 때에 자신이 원하는 용도에 맞춰서 CPU 를 선택하는 것이 제일 중요할 것입니다.

 

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. BlogIcon 유환성 2009.10.21 13:40  댓글주소  수정/삭제  댓글쓰기

    퍼갈게요

  2. ShowTime 2010.04.21 09:59  댓글주소  수정/삭제  댓글쓰기

    너무 좋은 자료네요
    스크랩 해갈게요~ 감사합니다 ^^

  3. kimjusick 2010.04.30 21:08  댓글주소  수정/삭제  댓글쓰기

    제 홈피에좀 퍼갈게요 ㅋ 좋은자료 감사드립니다~

  4. BlogIcon MBT Shoes 2012.09.03 17:44  댓글주소  수정/삭제  댓글쓰기

    The latter temporary prescription: drink several gulps of saliva, swallowing faster, if you like sport you should choose the NFL jerseys so that water can reach the colon as soon as possible to stimulate peristalsis and promote defecation Christian Louboutin Boots . http://www.christianlouboutinedens.info/

  5. BlogIcon David Ahn 2013.06.18 20:59  댓글주소  수정/삭제  댓글쓰기

    좋은자료 정말 감사합니다 ㅎㅎ

  6. BlogIcon Freeable 2014.07.05 15:50 신고  댓글주소  수정/삭제  댓글쓰기

    좋은글 잘읽엇습니다.퍼갈게요~

맨날 까먹음

mysql> grant all
     -> on YOURID.*
     -> to YOURID@localhost
     -> identified by 'YOURPASS' with grant option;
mysql> create database YOURID;
mysql> flush privileges;

출처 : semtle.tistory.com
Posted by 행복한 프로그래머 궁금쟁이박
TAG MySQL

댓글을 달아 주세요

CPU스케줄링

■ CPU 스케줄링의 개념:

프로세스들의 수행 순서를 정해 주는 것.

- 준비 상태에 있는 프로세스 중에서 어느 프로세스에게 CPU를 할당할 것인지 결정.


■ CPU 스케줄링의 필요성:

여러 프로세스가 한 job을 수행하는데 CPU가 줄 곧 필요하지 않다. 계산을 할 때는 CPU가 필요하지만, I/O를 할 때는 필요 없다. 이때 CPU를 다른 프로세스가 이용하면 전체적인 시스템의 효율은 올라간다.


프로세스 A  

                처리         I/O         처리        I/O



프로세스 B  

                             처리        I/O         처리         I/O


이렇게 CPU를 여러 프로세스가 번갈아 가면서 사용하면 효율적이다.


■ 스케줄링의 분류:

‧ 단기 스케줄링(short-term scheduling) : 준비 상태 프로세스중에서 한 프로세스를 선택하여 CPU 할당.

‧ 중기 스케줄링(medium-term scheduling) : 메모리에 프로세스가 너무 많은 경우, 메모리에 있는 프로세스를 선정하여 디스크로 보낸다. 나중에 다시 올 수 있다(swapping).

‧ 장기 스케줄링(long-term scheduling) : 생성(상태)에 있는 프로그램들 중에서 필요한 프로세스를 생성하여 준비에 넣는다.


■ 스케줄링 기준(용어):

‧ CPU 사용률 : 실제 CPU 사용 시간 / 전체 시간

‧ 처리율(throughput) : 단위 시간당 완료되는 작업 수

‧ 반환시간(turnaround time) : 시스템에 들어가서 마치고 나온 시간 간격

          메모리에 들어가기 위해 기다리는 시간, 준비 큐에서 기다리는 시간,

          프로세서에서 실행되는 시간,  입출력 시간을 합친 것 (I/O에 영향 多)

‧ 대기시간(waiting time) : 준비 큐에서 기다린 시간

‧ 응답시간(response time) : 제출 --> 첫 번째 응답까지의 시간.
1) 정의


- 작업을 처리하기 위해 프로세스들에게 중앙처리 장치나 각종 처리기들 을 할당하기 위한
정책을 계획하는 것

2) 방법별 분류

① 선점(preemptive) 스케쥴링
- 한 프로세스가 CPU를 차지하고 있을 때 우선순위가 높은 다른 프로세스가 현재 프로세
스를 중지시키고 자신이 CPU를 차지할 수 있는 경우
- 높은 우선순위를 가진 프로세스들이 빠른 처리를 요구하는 시스템에서 유용
- 빠른 응답시간을 요구하는 시분할 시스템에 유용
- 높은 우선순위 프로세스들이 들어오는 경우 오버헤드를 초래

② 비선점(nonpreemptive) 스케쥴링
- 한 프로세스가 CPU를 할당받으면 다른 프로세스는 CPU를 점유못함
- 짧은 작업을 수행하는 프로세스가 긴 작업이 종료될 때까지 기다려야 함
- 모든 프로세스들에게 공정하고 응답시간의 예측이 가능

3) CPU 스케쥴링 알고리즘별 분류

① 우선순위(priority) 스케줄링
- nonpreemptive
- 프로세스에게 우선순위를 부여하여 우선순위가 높은 순서대로 처리

ㄱ) 정적(static) 우선순위 방법
- 주변 환경 변화에 적응하지 못하여 실행중 우선순위를 바꾸지 않음, 구현이 쉽고
오버헤드가 적다
ㄴ) 동적(dynamic) 우선순위 방법
- 상황 변화에 적응하여 우선순위를 변경, 구현이 복잡, 오버헤드 많다,
시스템의 응답속도를 증가시켜 효율적

② 기한부(deadline) 스케줄링 - nonpreemptive
- 작업을 명시된 시간이나 기한내에 완료되도록 계획
- 작업시간이나 상황등 정보를 미리 예측하기가 어렵다

③ FIFO 스케줄링 - nonpreemptive
- 프로세스들은 대기 큐에 도착한 순서대로 CPU를 할당 받는다
- 일괄처리 시스템에서 주로 사용, 작업 완료 시간을 예측하기 용이
- 짧은 작업이 긴 작업을 기다리게 됨
- 중요하지 않은 작업이 중요한 작업을 기다리게하여 불합리

④ 라운드로빈(round robin) 스케줄링
- preemptive
- FCFS에 의해서 프로세스들이 보내지며
- 각 프로세스는 같은 크기의 CPU 시간을 할당 받는다
- 시분할 방식에 효과적, 할당시간의 크기가 매우 중요
- 할당시간이 크면 FCFS와 같게되고, 작으면 문맥교환이 자주 일어난다

⑤ SJF(shortest job first) 스케줄링 - nonpreemptive
- 준비큐내의 작업중 수행시간이 가장 짧다고 판단되는 것을 먼저 수행
- FCFS보다 평균 대기 시간을 감소, 큰 작업은 시간 예측이 어렵다
- 짧은 작업에 유리

⑥ SRT(short remaining time) 스케줄링
- preemptive
- 가장 짧은 시간이 소요된다고 판단되는 프로세스를 먼저 수행
- 남은 처리 시간이 더 짧다고 판단는 프로세스가 준비큐에 생기면 언제라도 실행중인
프로세스가 선점됨
- 긴 작업은 SJF보다 대기 시간이 길다

⑦ HRN(highest response ratio next) 스케줄링
- nonpreemptive
- 긴 작업과 짧은 작업간의 지나친 불평등을 어느 정도 보완한 기법
- 짧은 작업이나 대기시간이 긴 작업은 우선순위가 높아진다

⑧ 다단계 큐(multilevel queue) 스케줄링
- preemptive
- 작업들을 여러 종류의 그룹으로 나누어 여러개의 큐를 이용하는 기법

⑨ 다단계 피드백 큐(multilevel feedback queue) 스케줄링
- preemptive
- 입출력 위주와 CPU 위주인 프로세스의 특성에 따라 서로 다른 CPU의 타임 슬라이스를
부여
- 짧은 작업에 유리, 입출력 위주의 작업에 우선권을 줌
- 하위단계 큐일수록 할당시간은 커진다

내용출처 : http://info.plusmail.co.kr/study_6.htm
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

임베디드 시스템에서의 OS

임베디드 시스템이라는 것은 일반적인 시스템과는 달리 특정한 작업만을 하도록 설계되며 초기의 임베디드 시스템은 비교적 단순해서 운영체제가 필요 없이 사람이 순차적인 프로그램을 작성해서 실행되도록 하였고, 중간에 인터럽트가 발생되는 경우에만 그 순차적인 프로그램에서 잠시 벗어나는 정도였다. 이전의 임베디드 시스템들은 주로 간단하고 단순한 순차적인 작업에 관련되었기 때문에 굳이 OS를 사용한다는 것은 낭비가 되었었고 그럴 필요조차 없었다. 하지만 최근의 임베디드 시스템 분야에서는 그 시스템 자체가 커지게 되고, 네트워크나 멀티미디어가 시스템에 기본으로 자리잡으면서 임베디드 시스템이 해야 할 일들도 많아지고 복잡해 졌기 때문에 순차적인 프로그램 작성이 매우 어렵게 되었다.

따라서 임베디드 시스템에서도 운영체제의 개념이 필요하게 되었고 임베디드 시스템의 특정상 실시간이라는 요소를 만족해야 했으므로 실시간 운영체제가 임베디드 시스템에 도입되었던 것이다. 지금도 실시간 OS를 채택하여 개발된 제품들이 점점 늘어나고 있다. 이제는 많은 임베디드 시스템에서 그 목적에 맞게 실시간 운영체제와 함께 적절하게 사용되어 지고 있는 실정이다.

참고적으로 실시간 시스템(Real-Time System)과 실시간 운영체제(Real-Time OS)에 대해서 간략하게 언급하겠다.



실시간 시스템

실시간 시스템을 다룬 책이나 논문, 기타 관련자료를 살펴보면 그 정의는 대부분이 일치한다. 그 주된 내용은 실시간 시스템은 정해진 시간 내에 시스템이 결과를 출력하는 시스템을 말하고 있다. 이 말은 주어진 작업을 빨리 처리하는 것이 아니고 정해진 시간을 넘겨서는 안된다는 것이다.

임베디드 시스템이 실시간적인 요소가 있기 때문에 임베디드 시스템 자체를 실시간 시스템이라고 생각해도 큰 무리는 없을 듯하다. 그러나, 좀더 정확히 이야기하자면 실시간 시스템이 임베디드 시스템에 포함된다고 보는 편이 낳을 것이다. 실시간 시스템도 Hard Real-Time System과 Soft Real-Time System으로 두 가지로 나뉜다.

전자의 경우는 정해진 시간 내에 작업의 결과가 절대적으로 출력되어야 하는 시스템이다. 간단한 예를 들면 전투기의 비행 제어 시스템이라든지 핵발전소의 제어 시스템, 인공위성의 제어 시스템 등등 작업의 결과가 정해진 시간 내에 나오지 않게 되면 막대한 손실을 발생할 수 있는 치명적인 결과가 나오게 되는 경우이다.

후자의 경우는 정해진 시간 내에 작업의 결과가 출력되지 않더라도 Hard Real-Time System처럼 치명적인 결과는 나오는 그런 시스템이 아닌 경우이다. 다시 이야기하면 Soft Real-Time System은 정해진 범위를 넘는 시간 지연이 발생하더라도 그것이 시스템 에러가 되지 않는다.



RTOS

RTOS는 임베디드 시스템이 가지는 특성 중 실시간적인 요소를 충족하기 위해서 나온 운영체제라고 할 수 있다. 즉 RTOS는 임베디드 시스템의 근간이 되는 운영체계인 셈이다.

실시간 운영체계라고 하면 일반적으로 말하는 운영체계(windows 계열, UNIX, LINUX)와는 무언가 막연하게 조금은 다를 것이라고 생각이 될지도 모르겠다. 하지만 임베디드 운영체제라고 해서 특별하게 다른 것은 없다. 일반 OS들이 수행하는 태스크 스케줄링, 태스크간의 통신, 메모리 관리, I/O, 인터럽터 등 이러한 요소들을 RTOS도 같이 지원한다. 일반 OS와 차이점을 두자면 시간제약에 차이, 신뢰성, 범용성과 특수성 정도이다. 예를 들어 윈도우 환경 하에서 어떤 프로그램을 실행하였는데 어느 때는 빨리 실행되고, 어느 때는 늦게 실행된다고 해서 큰 문제될 것은 없다. 혹, 수행하는 프로그램이 잘못 수행되어 시스템이 다운되는 경우가 발생할 수도 있다. 그러나, RTOS 환경 하에서 실행되는 작업들은 정해진 시간이 큰 문제가 될 수 있다. 더군다나 그 시스템이 응답이 없거나 흔히 이야기하는 다운된다든가 하면 그 피해는 막심할 것이다.

따라서, 임베디드 시스템이 가지는 정해진 시간 내에 수행하는 능력, 신뢰성은 일반 OS보다 가혹하게 지켜져야 하는 규약과도 같은 것이다.

또한, 일반 OS(예를 들어 UNIX, Windows)들은 PC환경에서 여러 가지 작업들을 수행할 수 있으나, RTOS는 작업환경이 Embedded System으로 제한을 받고 있으며, 그 시스템 또한 보통 한가지 목적으로 개발되어 있다. 그러기에 RTOS 역시 그 한가지 목적을 위해 최적화되어 있다고 보면 된다.

부연적으로 이야기를 하면 임베디드 OS와 RTOS와는 어느 정도 구별이 필요하다. 임베디드 시스템이 실시간적인 요소를 가지는 것은 사실이지만 모든 임베디드 OS가 RTOS인 것은 아니다. 가장 적당한 예로 PDA에 들어가는 OS가 적절할 것이다. 다시 이야기하면 임베디드 OS 내에 RTOS가 포함된다고 보는 편이 좋을 것이다.
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

임베디드 시스템에 쓰이는 운영체제 - 2 [INFO]Embedded

저 자 : 송인준



임베디드 시스템의 반대말은 범용 시스템?
임베디드 시스템을 어떤 특화된 목적을 위한 시스템으로 생각해 본다면 그 반대의 개념으로는 범용 시스템을 들 수 있습니다. 그렇다면 그 차이는 무엇일까요? 어떠한 개념을 확립하는데 있어서 그 반대되는 개념과의 차이를 명확히 구분짓는 것이 중요합니다.

시스템과 그 위에서 돌아가는 응용 프로그램의 관계를 설명하면서 두 개념을 풀이하면 범용 시스템은 응용 프로그램 자체가 시스템에게 맞추어 가는 것이고, 그에 반해 임베디드 시스템은 시스템이 응용 프로그램에게 맞추어 가는 것입니다. 이렇게 시스템이 응용 프로그램에게 맞추어가는 것을 Application Specific System이라고 합니다. 즉, 여러 가지 목적을 위한 범용 시스템은 하나의 시스템이 있고 그 위에서 수행될 응용 프로그램이 있고, 임베디드 시스템은 하나의 특화된 목적을 가진 응용 프로그램이 있고 그에 적합하게 시스템은 모습을 갖추는 것이 둘의 차이점이라 할 수 있습니다.

임베디드 시스템의 실시간 시스템적 특성
여러분에게 질문하겠습니다. 과연 임베디드 시스템은 운영체제일까요? 임베디드 운영체제(Embedded OS)는 무엇일까요?

임베디드 시스템은 단지 시스템일 뿐이지 운영체제는 아닙니다. 임베디드 운영체제는 임베디드 시스템을 구동하는 운영체제입니다. 그렇다면 임베디드 운영체제에는 무엇이 있을까요? 특정 시스템에 어떠한 운영체제가 쓰일지를 결정짓는 것은 그 시스템의 활용 의도입니다. 이 시스템이 과연 어느 목적으로 쓰일 것인지가 중요한 것이지요. 임베디드 시스템에도 여러 가지 목적이 있으므로 어떠한 운영체제를 사용할지는 각 시스템에 따라 다릅니다. 하지만 한 가지 공통점이 있는데, 대부분의 임베디드 시스템에서는 실시간 운영체제(Real-Time Operating System)를 주로 쓴다는 점입니다. 왜 실시간 운영체제가 임베디드 시스템에 주로 쓰이게 되는 것일까요.

예를 들어, 휴대폰을 가정해 보죠. 우리가 열심히 휴대폰으로 재밌는 고스톱 게임을 하고 있을 때, 중요한 전화가 왔다면 어떻게 해야할까요. 만약 범용 시스템에서 쓰이는 일반적인 운영체제였다면 전화가 오는 태스크는 프로세스 스케쥴링되어질 것입니다. 그렇다면 타임 퀀텀에 따라 언젠가는 전화가 오는 태스크가 CPU를 잡고 실행하게 될 것입니다. 하지만 이렇게 되면 중요한 전화를 놓치는 일이 빈번히 발생할 테죠. 하지만 실시간 운영체제의 스케쥴링은 타임 퀀텀을 나누는 것이 아니라, 우선순위 기반의 스케쥴링이기 때문에 우선순위가 높은 전화를 위한 프로세스가 CPU를 잡고 실행될 것입니다. 이렇게 대부분의 임베디드 시스템은 외부 반응에 즉각적인 응답을 해야 하는 게 대부분이기 때문에 주로 실시간 운영체제를 사용하는 것입니다. 이렇게 임베디드 시스템에는 실시간적 특성이 있습니다. 그러므로 대개의 임베디드 시스템에서는 실시간 운영체제를 사용합니다. 그렇다면 임베디드 시스템에 주로 사용되는 실시간 운영체제의 기본적인 개념들을 살펴보도록 합시다.

실시간 운영체제의 개념
실시간 운영체제를 정확히 정의하자면, 시간의 제한을 갖고 그 시간 제한 안에 정확한 결과를 내기 위한 시스템을 구동시키고 시스템을 위해 여러 가지 실시간 작업에 대한 스케쥴링 등의 일을 처리해주는 운영체제를 말합니다. 결국 실시간 시스템이 범용 시스템에 비해 충족해야 할 조건은 시간의 제한을 지켜야 한다는 점과 그 데드라인 안에 정확한 결과를 내주어야 한다는 점입니다. 만약 핵 발전소 같은 곳에서 임계온도를 넘어가면 위험한 상황일 때, 이에 대한 처리를 긴급히 또한 정확히 해주어야 겠지요.

잘 알려진 범용 운영체제인 리눅스를 이용하여 실시간 운영체제를 설명해 보겠습니다. 먼저 리눅스는 실시간 운영체제가 아닙니다. 리눅스는 시분할 시스템으로 설계되어 공정성에 기반한 스케쥴링 알고리즘을 사용합니다. 그러나 실시간 운영체제에서는 프로그램마다 우선순위가 고정되어 있으며, 그 우선순위를 기반으로 상대적으로 높은 우선순위의 작업이 실행될 준비가 되었다면 스케쥴러가 현재 수행중인 작업을 중단하고 높은 우선순위의 작업으로 전환될 수 있어야 합니다. 더욱이 리눅스 커널은 사용자 프로세스에 의해서 재진입이 가능하지도 않으며 다른 프로세스가 커널 모드에서 실행되고 있는 것을 끊고 실행되지도 않습니다. 커널의 자원을 이용하고 있는 프로세스가 있다면 그 프로세스가 대기상태로 가거나 종료하지 않는 이상 다른 프로세스들이 실행될 수 없습니다. 즉, 일정한 응답시간을 가져야 할 실시간 작업이 리눅스 커널 하에서 실행된다면, 최악의 경우 커널 내부의 코드를 실행하다가 응답시간을 넘길 수도 있다는 이야기입니다. 이러한 것은 엄격하게 말해 실시간적인 요구사항을 제대로 반영하지 못한다는 것입니다.

이러한 실시간 시스템은 두 가지 종류가 있습니다. 소프트 실시간 시스템(soft realtime system)과 하드 실시간 시스템(hard realtime system)이 있습니다. 전자는 데드라인을 어느 정도 넘겨도 무방한 시스템으로 동영상을 재생하는 시스템의 경우에 사람이 움직임을 인지하기 좋은 프레임인 초당 24 프레임을 지원해야 하지만 어느 정도 시간을 넘겨도 잠시 기분 나쁘고 마는 정도가 되겠죠. 하지만 후자의 경우는 앞서 예를 들었던 핵 발전 제어 시스템과 같이 긴급히 중단 명령을 내렸을 때 1/100초라도 오차가 생기면 안 되는 그러한 시간에 매우 엄격한 시스템을 말합니다. 다음의 <그림 1>은 이 두 가지 시스템과 데드라인의 관계를 보여주고 있습니다.


지금까지 임베디드 시스템의 제한적인 자원과 특화된 목적을 갖고, 실시간적인 특성을 갖는다는 특성을 살펴보았습니다. 그렇다면 이러한 각 특성을 충족시켜주는 운영체제의 디자인 이슈에는 어떠한 것들이 있는지 살펴보도록 하겠습니다.

운영체제의 디자인 이슈
앞에서도 잠깐 언급했던 부분이지만 임베디드 시스템에서 제한된 자원인 배터리, 즉 전력의 사용은 크게 고려하지 않을 수 없는 부분입니다. 같은 배터리를 가지고 어떻게 관리하느냐에 따라서 시스템의 작동 시간에 차이가 생기기 때문입니다. 또한 전력에 의한 발열량도 생각할 수 있는 문제입니다. 전력관리를 위한 지원에는 여러 가지가 있습니다. 먼저 회로적인 수준에서 지원하는 방법과 시스템 수준에서 지원하는 방법이 있습니다. 회로 수준에서 지원하는 방법에는 동적 전압 스케일링(dynamic voltage scaling)과 클럭 게이팅(clock gating) 등이 있으며, 시스템 수준에서 지원하는 방법은 하드웨어, 소프트웨어, 그리고 운영체제를 통해 이루어집니다. 그럼 회로 수준에서는 동적 전압 스케일링 방법, 그리고 시스템 수준에서 운영체제에 의한 방법을 살펴보도록 하겠습니다.

동적 전압 스케일링
동적 전압 스케일링에서는 장치가 활성화된 상태에서 에너지 소비 레벨과 성능 간에 조정을 하는 것입니다. 대부분의 시스템들은 끊임없이 최고 성능을 내도록 고안되어 있습니다. 그러나 이러한 설계는 전력관리에 민감한 임베디드 시스템에서는 에너지의 낭비를 일으키게 됩니다. 동적 전압 스케일링의 핵심은 사용자에게 에너지를 절약하면서 성능을 만족시키도록 하는 것입니다. 다음 두 수식은 에너지와 전압 그리고 프로세서의 클럭 주파수 간의 관계를 보여주는 것입니다.

여기서 Eop는 연산에 필요한 에너지이며 fmax는 프로세서의 최대 클럭 주파수가 되며 V는 연산에 사용되는 전압입니다. 이 수식에서 알 수 있듯이 전압은 에너지와 주파수에 영향을 줍니다. 즉, 어떠한 작업을 수행하는데 소비되는 에너지를 줄이려면 전압을 줄이는 방법을 생각할 수 있으며, 전압을 줄이면 CPU의 클럭 주파수도 감소하게 됩니다.

임베디드 시스템에 사용되는 트랜스메타 크루소나 인텔 StrongARM, XScale과 같은 프로세서들이나 IBM PowerPC 405LP 등의 프로세서들은 동적인 전압과 프로세서 코어의 주파수 스케일링이 가능하여 이러한 에너지 효율적인 전력관리를 지원하고 있습니다.

운영체제에 의한 동적인 전력 관리
동적인 전력 관리(dynamic power management)라는 것은 한마디로 말하면 시스템 컴포넌트들의 전력 상태를 변화시킴으로써 성능 제약조건인 에너지 소비를 낮추는 것입니다. 여기에서 상태 변화는 완전하게 에너지를 사용하는 활성화(active) 상태와 저전력 상태 간에 일어나게 됩니다. 예를 들어 eCos라는 임베디드 시스템에 사용되는 운영체제에는 다음과 같은 상태들이 있습니다.

① active 상태 : 시스템은 완전히 작동가능하며 전력 소비는 높은 수준이 될 것입니다.

② idle 상태 : 짧은 시간 간격 동안 조금 혹은 거의 활동이 없게 됩니다. 짧은 시간 간격이 어떻게 구성되는지를 결정하는 것은 정책 모듈에 달려있습니다만, 보통 1/10초 혹은 몇 초가 될 것입니다. idle 모드에 진입했을 때 가능한 동작은 전압을 조정하여 시스템 클럭 속도를 낮추는 것입니다. 그에 따라서 CPU에 의해 소모되는 전력이 줄어들 것입니다.

③ sleep : 시스템은 대략 수십 초 정도의 큰 시간 간격동안 운휴상태가 됩니다. 스크린 백라이트(screen backlight)와 같은 많은 양의 전력을 소모하는 모든 하드웨어들의 작동을 중단시키는 것이 바람직할 것입니다.

④ off : 시스템은 전력이 중단됩니다. 전력 소비는 최소화가 되어야 할 것입니다. 시스템을 되돌리기 위해서는 몇 가지 특별한 동작이 요구되는데, 그것은 특정 버튼을 누르는 것 등이 될 것입니다.

이렇게 주어지는 상태들을 바꾸도록 명령을 주거나 시스템에서 전력 소비에 관련된 정보들을 수집하는 구성요소로서 전력 관리자(power manager)가 존재합니다. 전력 관리자는 시스템을 관찰하며 실행 시간에 반응하게 되는데, 전력 관리자가 내리는 결정들은 전력 관리 정책에 근거하게 됩니다. 전력 관리 정책은 시스템을 관찰하는 방법과 명령을 내리는 방법들을 제어하는 법률과도 같은 것입니다. 여기서 운영체제가 개입하는 이유는 운영체제는 시스템 상에 이루어지는 작업(task)이 수행 중인지 아니면 대기 상태인지를 알 수 있기 때문에 동적 전력 관리를 위한 정책 결정을 내릴 수 있기 때문입니다. 이러한 동적 전력 관리 기술은 크게 2가지로 나눠볼 수 있습니다. 첫 번째는 예측적인 방법이고 두 번째는 통계적인 제어 방법입니다.

예측적인 방법이란 말 그대로 idle 상태를 예측하여 미리 idle 상태로 바꾸어 상태 전환에 따른 지연시간을 줄이고자 하는 것이며, 주로 예측 정확도가 관건이 됩니다. 예측적인 방법에는 시간 경계 값(타임아웃)을 두어 일정 시간이 지나면 저전력 상태로 바꾸어 버리는 타임아웃에 근거한 방법과 과거 활성 및 비활성 상태의 정보를 기록하여 그것을 근거로 상태 변화를 예측하는 방법 등이 있습니다.

통계적인 제어 방법은 어떠한 사건이 일어나는 것을 정확히 예측하는 것은 본래 불가능하다는 가정 하에서 불확실성을 내포하는 추상화된 시스템 모델을 만들어 확률에 기초한 통계적 결정을 내리게 됩니다. 이러한 방법에는 통계에서 흔히 사용되는 마코프 체인(Markov Chain)을 이용하여 시스템과 시스템의 외부 환경을 모델링하는 CMP(Controlled Markov Process)라는 방법이 있습니다. 모델링을 통해 얻을 수 있는 이점은 전력 소비 함수를 최소화하고 성능 제약 조건을 충족시킬 수 있는 정책 P를 찾아내는 것입니다.

저장 매체의 한계를 극복한다
임베디드 시스템의 또 다른 특징으로 예를 들었던 저장 매체의 제한은 운영체제의 입장에서 상당히 까다로운 점입니다. 대개의 임베디드 시스템은 크기의 제약으로 하드디스크와 같은 장치를 사용할 수 없습니다. PDA 안에 하드디스크를 넣을 만한 공간이 있다면 크기가 얼마나 커질까요? 물론 플래시 롬과 같은 장치들을 사용할 수 있지만 근본적인 제약을 막지는 못합니다. 따라서 임베디드 시스템을 위한 운영체제는 그 크기도 매우 작을 뿐만 아니라 몇 가지 구조적인 변화를 겪고 있습니다.

메모리 구조의 변화
임베디드 시스템에 사용되는 메모리의 크기는 매우 작습니다. 기존의 PC나 유닉스 서버급에서 사용되던 운영체제는 효율적인 메모리 관리를 위해서 메모리 구조가 상당히 복잡하게 되어 있습니다. 실제 운영체제에서 사용되는 메모리 관리 구조는 세그먼테이션과 페이징을 비롯해서 각 페이지와 세그먼트마다 다른 종류의 프로텍션 모드를 가지고 있고, 이러한 전체 구조가 응용 프로그램마다 따로 관리되고 있습니다. 메모리 가격의 지속적인 인하는 대규모의 메모리를 장착하는 시스템을 만들게 되고 메모리의 제한이 급격하게 줄어들면서 메모리의 효율적인 사용보다는 안정적인 시스템을 구축하는데 더 큰 목적을 두게 된 것이었지요. 물론 이를 지원하기 위한 프로세서의 설계와 디자인도 큰 영향을 미치고 있습니다. 하지만 임베디드 시스템에는 아직까지 메모리를 자유롭게 사용할 만큼 풍부한 메모리 자원이 있지는 않습니다.

임베디드 시스템들은 특성상 여러 가지의 응용 프로그램을 한꺼번에 실행하는 것이 목적이 아닌 경우가 많습니다. 더욱이 임베디드 시스템에 사용되는 프로세서에서도 메모리 구조를 단순하게 구성하는 경우가 많습니다. 따라서 메모리가 작은 초기 버전의 임베디드 시스템용 운영체제들은 MMU (memory management unit)를 지원하지 않는 프로세서를 위한 메모리 관리를 축소한 형태의 임베디드 운영체제들이 있습니다. 또한 여러 가지 응용 프로그램의 사용을 제한하고, 가상 메모리 시스템을 포기하는 형태의 운영체제도 있습니다. 멀티태스킹이나 프로세싱을 지원하지 않는 운영체제들의 경우 대개가 이러한 형태입니다.

윈도우 시스템과 그래픽 환경
그래픽 환경은 임베디드 시스템에서 크게 필요하지 않다고 생각하기 쉽습니다. 하지만 사용자의 인터페이스 장비로 키보드나 마우스와 같은 장치를 사용하기 힘들고 대개 터치패드의 형태를 가지고 있기 때문에, GUI를 필요로 하는 시스템이 많습니다. 대개 UI를 지원하기 위한 서브 시스템은 라이브러리 형태를 사용하고 있습니다. 마이크로-윈도우라는 라이브러리 등을 사용하여 작은 메모리를 사용하면서도 훌륭한 시각적 효과를 얻을 수 있는 방식을 가지고 있습니다.
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. BlogIcon gucci sale 2012.08.10 21:54  댓글주소  수정/삭제  댓글쓰기

    떠한 차이가 있는지 알아보기로 하죠떠한 차이가 있는지 알아보기로 하죠

[송인준]임베디드 시스템에 쓰이는 운영체제 - 1 [INFO]Embedded


임베디드 시스템에 쓰이는 운영체제 - 1

저 자 : 송인준



요즘 IT 잡지나 신문에서 많이 볼 수 있는 단어 중 하나가 바로 임베디드 시스템(Embedded System)이라는 말입니다. 과연 이 임베디드 시스템이 무엇인지, 그리고 왜 필요한지, 이러한 컴퓨터 시스템에는 어떠한 운영체제가 필요한지를 이번 연재에서 알아 봅시다.

임베디드 시스템이라는 것을 정의하기에 앞서, 이 임베디드 시스템이 절대로 낯선 존재라고 생각하지 마십시오. 주변의 핸드폰, PDA, 심지어 냉장고와 TV, 콘솔 게임기 등도 임베디드 시스템의 한 종류입니다. 이렇게 말하니 이제 좀 친숙해지는 것 같지요? 그러면 이번 호에는 임베디드 시스템이 무엇인지부터 시작해서, 무엇이 문제인지, 그리고 이런 문제를 해결해나가기 위한 노력들을 살펴보도록 합니다. 또한 이러한 임베디드 시스템을 구동시키는 운영체제를 알아보고 그 디자인을 살펴보도록 하겠습니다. 이번 호에는 지난 연재에 비해 최신의 기술을 다루는 편이네요. 그럼 지금부터 임베디드 시스템과 그것에 쓰이는 운영체제를 공부해 봅시다.

임베디드 시스템의 정의
먼저 무엇이 임베디드 시스템인지, 도대체 어떤 특성이 있고 왜 나왔는지부터 파악해야 합니다. 그렇다면 임베디드(Embedded)라는 말이 무엇을 의미하는 걸까요? 영어사전을 찾아보면 ‘깊숙이 박다. 파묻다. 끼워 넣다’ 등의 의미로 풀이되어 있습니다. 임베디드 시스템이란 간단히 PC가 아닌 어떠한 장치에 끼워 넣은 시스템을 의미합니다. 어떤 독자는 우리말로 ‘내장형 시스템’이라고 표현하기도 합니다. 하지만 우리들이 이번 호에 공부하면서 내장형 시스템이라는 말보다는 임베디드 시스템이라는 말을 쓰도록 하겠습니다. 이 말이 좀더 친숙한 면이 많기 때문이지요.

그렇다면 다시 임베디드 시스템의 정의로 돌아가 보죠. 과연 어떤 장치에 내장한 시스템을 단순히 임베디드 시스템이라고 할까요? 만약 채점을 하면 50점짜리 답안이라고 할 수 있겠네요. 정확한 정의를 내리자면, 임베디드 시스템이란 제한된 자원을 갖고 특정한 목적을 갖는 작업을 처리하기 위한 시스템이라 할 수 있습니다. 제한된 자원이라면 휴대폰을 예로 들어, 크기가 작아야 하고 배터리 수명의 제한 등이 있습니다. 또한 특정한 목적을 갖는 작업이란 휴대폰의 예에서는 전화의 송수신을 담당하는 호(call) 처리가 될 것입니다.

이러한 정의를 두면, 임베디드 시스템이란 우리 주변에서 쉽게 찾아볼 수 있는 시스템이란 것을 알았을 겁니다. 실제로 연간 생산되는 임베디드 시스템은 데스크톱 PC에 비해 훨씬 많은 양을 차지합니다. 오디오, 비디오, TV, 심지어 전자렌지까지 도처에 널려 있습니다. 그렇다면 이제 이러한 임베디드 시스템의 공통적인 특징들을 살펴보도록 하겠습니다.

임베디드 시스템의 공통적인 특징
‘임베디드 시스템은 제한된 자원을 갖는다’
임베디드 시스템의 가장 큰 특징이며 그것을 정의하는 가장 큰 요소는 제한된 자원을 갖는다는 점입니다. 휴대폰이나 PDA, MP3 플레이어 등 주위에서 쉽게 볼 수 있는 임베디드 시스템의 큰 특징은 에너지가 제한적이라는 점입니다. 배터리를 쓰는 것들의 가장 큰 약점이라고 할 수 있죠. 하나의 예로, 휴대폰에서 지금보다 더 화려하고 빠른 게임을 즐기는 것이 불가능한 것은 아닙니다. 이미 CPU의 성능이나 메모리의 성능은 매우 뛰어난 기술을 갖추고 있으니까요. 다만 그것을 구동시키는 에너지원인 배터리의 문제가 더 크다고 할 수 있습니다. CPU의 속도를 빠르게 하려면 배터리 소모가 늘어나게 되는데, 그렇게 하면 아침에 충전한 전화기가 점심 먹을 때에 삑삑 소리를 내며 전원이 꺼질 수도 있겠죠.

배터리의 제한
사실상 가장 큰 문제점이라고 할 수 있습니다. 물론 냉장고나 자동차, 혹은 전자레인지에 들어가는 임베디드 시스템은 그 심각성이 좀 덜한 편이지만, 컴퓨터 개발자들이 흔히 접하게 되는 PDA 같은 경우에는 배터리로 인한 에너지의 제한점이 큰 걸림돌이 되는 경우가 많습니다. 이러한 배터리, 즉 파워의 제한을 해결하는 방안에는 몇 가지가 있습니다.

우선 하드웨어적인 문제로 해결하는 방법입니다. 가장 기본적인 것은 물론 배터리의 용량을 늘리는 방법입니다만, 그것은 기술의 발전 속도상 어려운 일입니다. 또 다른 방법으로는 CPU의 모드를 두는 것입니다. 마냥 빠르게만 작동하는 CPU가 아니라, 그 속도를 늦추거나 하는 일이 없을 때는 잠들어 있는 것입니다. 이렇게 CPU를 제어하는 방법 외에 메모리의 설계를 저전력을 위한 구조로 바꾸는 방법도 있습니다. 이러한 하드웨어 해결책 외에도 소프트웨어 해결책도 있습니다. 운영체제의 구조를 저전력을 위한 구조로 바꾸는 것이 하나인데, 이것은 CPU의 모드를 어떻게 하면 적절하게 변환할지를 운영체제에서 제어하는 것입니다. 또한 임베디드 시스템 위에서 돌아가는 소프트웨어의 구조를 저전력을 위한 형태로 만들기 위해 특화된 컴파일러를 이용하는 것도 하나의 방법입니다. 우리가 공부하는 것은 임베디드 시스템을 위한 운영체제이지만, 이를 공부하기 전에 하드웨어 접근방법에는 무엇이 있는지 간략하게나마 살펴보고 진행하겠습니다.

저전력을 위한 CPU 구조
저전력을 위한 CPU 구조에도 몇 가지의 접근 방식이 있습니다. 그중에서 가장 대표적인 것은 가변적인 전력 기술(variable-voltage mechanism)입니다. 전력 소비를 줄이는 가장 효율적인 방법이 전력을 낮추면 된다는 것은 누구나 아는 사실입니다. 전통적인 시스템에서는 고정적인 전력을 사용하였지만, 최근에는 전력을 동적으로 변하게 하는 방법을 사용합니다. 이렇게 전력을 동적으로 변화시켜서 사용하기 위해서는 언제 얼마큼 전력을 낮추어야 할지 정해야 하는데, 이것을 CPU의 동작이 활발한 때와 활발하지 않은 때로 나누어서 정하는 것입니다. 요즘 PDA 등에 많이 쓰이는 암(ARM) CPU의 경우, 7개의 모드를 갖습니다.

저전력을 위한 메모리 설계
메모리와 CPU의 데이터 전송시에 소비되는 전력 낭비를 줄이기 위한 방안들이 연구되고 있습니다. 이 분야는 전산학을 전공한 개발자들에게 생소하며 전자공학과를 전공한 사람들이 주로 연구하는 분야이지요. 메모리와 CPU 간의 데이터 전송을 줄이기 위해 비트의 수를 줄이는 방법이 있습니다. 또한 성능 향상을 위해 만들어진 캐시의 설계를 전력 소비를 줄이기 위한 설계로 바꾸어 나가는 방향도 있습니다.

저전력을 위한 컴파일러 최적화
하드웨어 접근법을 앞에서 살펴봤습니다. 이외에 소프트웨어 실행시에 전력의 소비를 최소화하려고 노력하는 움직임도 있습니다. 그러기 위해서는 최적화된 컴파일러를 사용해야 하는 것이지요. 물론 이러한 해결책은 하드웨어적인 해결책을 기반으로 행해지는 것이 보통입니다. 이러한 방법은 프로그램 개발자가 코딩할 때와 컴파일할 때에 코드 수준의 최적화라 할 수 있습니다. 앞으로 임베디드 시스템의 응용 프로그램을 개발할 일이 많은 개발자는 이러한 저전력에 대한 개념을 가지고 개발에 임한다면 한 단계 높은 수준의 프로그램을 개발할 수 있을 것입니다.

저전력을 위한 운영체제 구조
저전력을 위한 운영체제의 구조에는 하드웨어를 어떻게 조작할 것인지에 대한 접근방식입니다. CPU의 모드를 어떻게 제어할 것인지가 주를 이루게 됩니다. 즉, CPU의 모드 중 전력을 덜 소비하는 모드를 정하려면 저전력을 위한 프로세스 스케쥴링 등이 필요하게 되는 것이지요.

저장 매체의 제한
임베디드 시스템이 갖는 제한된 자원 중에는 저장 매체에 대한 것도 빼놓을 수 없습니다. PDA나 휴대폰에는 보통 대용량의 하드디스크 대신 플래시 메모리를 장착합니다. 플래시 메모리는 하드디스크에 비해 용량대비 가격이 비쌉니다. 하지만 하드디스크를 달지 못하는 이유는 간단합니다. 그것은 하드디스크의 암을 움직여주는 모터에 있습니다. PDA나 휴대폰에 그러한 모터가 달린다면 약간의 충격이라도 쉽게 파손되고 소음도 심할 수 있습니다.

크기의 제한
임베디드 시스템의 크기를 보면 가전제품에는 영향을 주지 않지만 휴대용 기기에는 크게 작용하는 편입니다. 이동성을 중시하는 휴대용 기기에 큰 덩치를 가진 것이라면 여간 가지고 다니기 어렵습니다. 크기의 제한은 간접적으로 에너지의 제한도 가져옵니다. PDA에 007 가방만한 배터리를 들고 다녀도 상관은 없으나, 크기가 너무 커져 휴대하기 불편할 게 뻔합니다.

이러한 총체적인 문제들, 즉 임베디드 시스템 중 특히 휴대용 기기들이 갖는 제한된 자원이라는 한계점은 앞으로 더욱 발전해야 할 여지들을 남겨주고 있습니다. 지금도 이것들을 해결하기 위해 부단히 노력중이지요. 제한된 자원이라는 임베디드 시스템의 특성 말고 다른 또 하나의 큰 특성으로는 특화된 목적을 갖는다는 점입니다. PDA나 전자수첩의 경우, 개인정보의 관리라는 특화된 목적을 갖고 있습니다. 또한 라우터에 들어가는 시스템의 경우, 데이터 패킷을 최적의 경로로 포워드하기 위한 특화된 목적을 갖는 것이지요. 그렇다면 일반적인 목적을 갖는 범용 시스템과 특화된 목적을 갖는 임베디드 시스템에는 어떠한 차이가 있는지 알아보기로 하죠.
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. BlogIcon mulberry sale 2012.08.10 21:54  댓글주소  수정/삭제  댓글쓰기

    떠한 차이가 있는지 알아보기로 하죠