cdma 1x, cdma 1x evdo, wcdma 간단 비교

Posted by ironmask84
2010. 12. 2. 14:31 컴퓨터공학/통신 기술



CDMA 1x

CDMA2000-1X 란 미국 퀄컴이 독자적으로 개발한 IMT-2000 기술표준 중 하나.
'CDMA2000-1X'는 기존 셀룰러나 PCS용 주파수를 그대로 사용하나, 초당 144Kbps 속도로 데이터를 전송할 수 있어 동영상이나 고속 무선 인터넷 서비스를 실시할 수 있다.
CDMA2000-1x는 동기식 2.5세대에 속했으나, 국제통신연합(ITU)이 144Kbps~ 2Mbps의 속도와 동영상을 제공하는 서비스를 3세대로 규정했기 때문에, 이 기준의 하한선에 해당하는 cdma2000-1x는 사실상 '3세대'에 속하게 됐다.

 

CDMA 1x EVDO

EV-DO는 Evolution Data Only의 약자이다.
CDMA 1x EV-DO는 동기식 IMT2000 기술로서 CDMA 1x(CDMA 2000)에서 한단계 발전하여
데이터 처리속도를 이론적으로 최대 2.4Mbps로 높인 기술로, EV(Evolution)은 1x에서
진화를 위미하고, DO(Data Only)는 음성과 데이터 신호 가운데 데이터 속도만
올렸다는 의미를 담고 있다.
3세대 이동통신(IMT-2000) 공식기술표준 중 하나

 

WCDMA

WCDMA폰은 별거아니고 WCDMA라는 통신방식을 따른 휴대폰인데요.
Wide-CDMA라는건 유럽쪽에서 만든 통신방식입니다.IMT-2000이라는 차세대 이동통신 규격은 WCDMA와 CDMA2000이라는 두가지 방식이 있는데 유럽쪽에서 만든게 WCDMA 미국,캐나다쪽은 CDMA-2000인데요 CDMA-2000은 기존의 CDMA와 같이 동기식이고 기존CDMA통신망을 활용할수있으며 WCDMA는 비동기식이라서 기지국이나 통신망을 새로세워야 하지만 CDMA-2000보다 월등한 성능을 자랑합니다.
대한민국은 휴대폰수출강국이라서 늘 자국이 실험무대가 되어야하므로(?)두가지 방식을 다 서비스하는 유일한 국가입니다.현재까진요 -_-;;;;
당연히 새로나오는 WCDMA폰이 기존의 CDMA-2000방식 휴대폰보다 초당데이터통신량이 몇배빠릅니다.동영상보기에 더 좋겟죠?+_+

 

혹시나 모르니 부가설명!(쉽게...)
동기식은 순차적으로 신호를 보내는 방식이고 비동기식은 그때그때 필요할때 보내는 방식인데 대체로 어떤통신방식이던 비동기식이 기술적으로 어렵지만 성능이 더 좋습니다.

 

MSM?000, MSM?100 계열 : CDMA 1x 방식

MSM?500 계열 : CDMA 1x EVDO 방식

MSM?200 계열 : WCDMA 방식


[출처]
CDMA 1x, CDMA 1x EVDO, WCDMA|작성자

 

CDMA 1x EVDO의 정의

Posted by ironmask84
2010. 12. 2. 14:29 컴퓨터공학/통신 기술



CDMA 1x EVDO의 정의

CDMA 2000 1x EV-DO(1x-Evolution-Data Only)는 `꿈의 이동통신`이라고 불렸던 IMT-2000을 실현할 첫번째 기술입니다. 퀄컴이 기존의 CDMA기술을 이용하여 개발한 고속 무선데이터 전송 기술로 기존의 CDMA 규격과 망을 대부분 그대로 이용하면서 빠른 인터넷 사용이 가능합니다. 다운로드 2.4Mbps, 업로드 307.2Kbps의 속도로 유선에서 사용되는 ADSL방식과 똑같이 무선에서도 구현되고 있습니다.

퀄컴은 CDMA One과 CDMA 2000 기술을 상용화시킨 경험으로 `고속 무선인터넷 서비스`(일명 High Data Rate)를 개발했으며 유럽의 표준인 비동기식 IMT-2000에 대응하고자 이를 1x EV라고 칭하고(1X EV는 크게 1x EVDO와 1x EVDV가 있습니다). 현재 Phase1규격인 EVDO는 규격이 완료되어 한국에서 상용화가 되었고 일본 등이 상용화를 거의 완료한 상태입니다. Phase2규격인 IX EVDV는 현재 규격 논의가 한창이며 최근 규격제정에 한국의 삼성, LG등 대기업이 많은 영향력을 행사하고 있다는 뉴스를 접할 수 있습니다. 특히 EVDV는 고속 무선 데이터와 음성을 동시에 향상시킨 사실상의 동기식 IMT-2000입니다. (한국의 경우 LG 텔레콤이 준비중인 동기식 IMT-2000 서비스가 CDMA 1X EVDV와 3x EV입니다)

SK 텔레콤이 2000년 10월에  시작한 CDMA 1X의 경우, 원칙적으로 음성위주의 프로토콜을 기반으로 다소 변형적인 고속 Packet 데이터 서비스를 구현하고 있으므로 전송속도에는 기본적으로 한계가 있었습니다. 그러나, Ix EVDO의 고속 데이터 전송기술을 사용하면 보다 빠른 속도의 데이터 전송이 가능해져 현재의 June, Fimm과 같이 실시간 동영상 서비스나 멀티미디어 다운로드가 가능해 졌습니다. 현재 June, Fimm의 가입자는 CDMA2000과 1x EV e동시사용(듀얼 모드) 단말기를 이용하여 평상시에는 CDMA 2000으로 음성 서비스를 받고, 필요할 때만 EV모드로 전환하여 고속 무선데이터 서비스를 이용하고 있습니다.


CDMA 1x EVDO와 이전 네트워크의 비교

 기존에 서비스를 제공했던 IS-95A/B및 CDMA2000 1x를 EVDO와 비교하면 위의 표처럼 표현해 볼 수 있습니다. 1x EVDO는 기존의 IS-2000무선 프로토콜과는 완전히 다른 고속 데이터 전송만을 위한 전용 규격으로서 최대 전송속도가 2.4M까지 가능하며, 시스템을 구현할 때도 기지국 장치를 별도로 설치하고, 나머지 시스템 및 망 구성요소는 이전 네트워크의 장비를 공통으로 사용합니다. 서비스 측면에서는 `Wireless IP`로 기지국에서 교환기나 기지국 제어기를 거치지 않고 바로 인터넷 망에 접속을 하도록 설계되어 있어 음성위주로 구현된 교환기를 거치지 않으므로 고속 데이터 서비스의 효율을 극대화 시킬 수 있습니다. 이러한 무선 전송을 가능하게 해주는 퀄컴의 모뎀 칩은 MSM4500부터 가능한데, 일반적으로 사용되고 있는 MSM5500 이상의 칩은 앞서 말씀 드린 것 같이 cdma2000 1x와 Cdma2000 1x EVDO을 동시에 지원하는 Dual Mode 방식입니다. 



내용 중에 이해가 안 되는 부분이 있으시다면?

지난 회까지 우리는 `무선 인터넷의 정의`와 `무선 인터넷의 산업`을 알아보았고 기술적으로 어떤 방향성을 가지고 무선인터넷이 발전해 가는지를 `무선인터넷 접속방식의 발전`을 통해서 살펴보았습니다. 이번 시간부터는 CDMA 1x EVDO, W-CDMA, 휴대인터넷 등 점 더 심화된 내용을 접근하게 될 것입니다. 구체적인 내용 중에서 기술적인 용어의 `낮설음`때문에 주저하실 필요는 없습니다. 무선인터넷을 얘기할 때 사용되는 기술용어나 개념은 계속해서 반복되기 때문입니다. 내용 중에 이해가 안 되는 부분이 있으시다면 앞의 무선인터넷 관련 글을 다시 한번 읽어보시거나 아래의 몇 가지 사항을 숙지하시면 도움이 될 것으로 생각됩니다. (또한, IT라는 것이 크게 통신과 인터넷으로 구분되고 사용되는 용어들이 거의 유사하며 두 분야가 통합되어 가고 있으므로 인터넷으로 모르는 용어를 검색하시면 대부분 찾아보실 수 있습니다.) 



1)환과 패킷교환은 아래와 같은 의미가 있었습니다.


회선교환 전송방식 (Circuit)

회선교환 전송방식이란 송수신 단말기간의 데이터를 전송할 때 무선자원을 할당 받아 데이터 전송이 종료할 때까지 무선자원을 계속해서 점유하고 있으므로, 음성통화와 마찬가지로 통화요금이 접속시간에 비례하여 과금 됩니다. 또한 점유하는 무선자원을 통해 실시간 데이터를 송수신할 수 있습니다. 현재 우리가 쓰고 있는 음성통화는 회선교환 방식이며 IMT-2000의 영상통화도 회선 교환방식을 이용하여 구현합니다. (현재 EVDO 서비스의 화상통화는 패킷교환 방식입니다) 만약 통신사업자가 사용자가 많을 것으로 예상되어 대규모 투자를 하는데 주저하지 않는다면 영상통화가 지금의 음성통화와 같이 굉장히 값싸고 질적으로도 우수한 회선 교환방식으로 이용될 것입니다. 실제로 현재 구현되고 있는 시험용 IMT-2000 영상 전화 시스템은 회선 교환방식으로 개발되고 있고 국제 규격도 이를 추천하고 있습니다.

패킷 교환 전송방식 (Packet)

패킷 교환 전송방식이란 송수신 단말기간의 데이터를 전송할 때마다 무선자원을 할당 받아 사용하며, 전송 데이터가 없는 경우에는 자원을 할당 받지 않으므로 자원의 활용 차원에 매우 효율적입니다. 패킷 교환 전송은 패킷(꾸러미)를 128byte, 256byte, 512byte 단위로 묶어서 순서대로 전송합니다. 따라서 전송된 패킷 단위로 과금 되므로 회선교환 방식에서 회선 시간에 비례한 과금 방식보다 매우 경제적이나, 패킷 교환 전송방식은 패킷을 전송 할 때마다 무선자원을 할당 받는 절차가 필요하므로 실시간성으로 데이터를 주고 받는 데는 적합하지 않습니다.

중요 용어

IWF(Inter working Function)
무선 시스템과 전화망 사이에서 데이터를 전송하는 기법으로 이동통신 시스템과 인터넷을 연결하기 위한 무선 데이터 장치를 말합니다.

PSTN(Public switched telephone network)
국내 유선전화 교환기를 합니다.

BSC(BTS System Controller)
기지국 제어기로 기지국이 통제하는 범위내의 이동전화 등록, 제어 및 트래픽 채널 할당, 핸드오프 수행, 호 설정과 종결의 처리를 가능하게 해주는 장비와 소프트웨어를 말합니다.

BTS(Base Transceiver Station)
기지국 장비로 안테나와 모뎀으로 구성되며, CMDA의 복잡한 무선 채널 정합 및 전력 제어 등을 담당합니다. 지상에 설치되어 있는 BTS는 각각의 무선접속 시스템을 통해 이동단말기와의 무선통신을 가능하게 하고, 전송경로에 위치해 있는 연결된 BSC와 신호를 송수신한다. 20~40여 개의 BTS가 하나의 BSC와 연결되어 있습니다.

HLR(Home Location Register)
이동가입자의 위치를 관리합니다. HLR에는 가입자 정보(각종 부가서비스 가입내역 포함)와 이동장치 정보의 두 유형의 정보가 담겨 있습니다. 
 

CDMA2000 1X EVDO의 비교

Posted by ironmask84
2010. 12. 2. 14:26 컴퓨터공학/통신 기술



1. 개요

○ Cdma2000 1x EVDO는 Evolution Data Only의 약칭인 동기식 데이터 이동통신 방식으로 데이터 전송속도가 -최고 2.4Mbps로 데이터 전송에 한해 고속전송이 가능해 “DO"라는 이름이 붙여졌으며 HDR(High Data Rate)이라고도 함

○ CDMA기술을 이용하여 퀄컴이 개발한 패킷 무선 데이터 전송 신기술로서 IS95A,B를 모두 수용하는 메가급 고속데이터 전송이 가능한 순방향으로 최대 2.4Mbps이며 역방향은 307.2Kbps의 전송속도를 지님

○ HDR은 기존 IS95망에서 Data Core Network을 통한 Data 전용 인터넷을 연결하는 것으로 3세대망에서도 Data 전송속도를 기존속도와 똑같이 지원할 수 있음

 

2. 데이터 채널 링크

가. 순방향 데이터 채널링크

○ HDR의 순방향 데이터 채널링크는 Pilot 채널, MAC채널, Control 채널, Traffic 채널로 구성됨

○ HDR은 패킷회선방식으로 Pilot 신호를 감지하고 있다가 전송이 필요할때만 회선을 포착하여 전송하고 송수신이 없을때에는 회선을 포착하지 않음

○ 순방향 트랙픽 채널은 38.4kbps ~ 2,476Mbps 사이의 가변 데이터 전송율을 제공하며, 1FA당 한 순간에는 하나의 사용자 데이터만 전송이 가능하며, 여러 사용자에게 데이터를 시간상으로 스케쥴링하여 전송

채널링크
------
Pilot
-액세스 터미널에서 동기획득에 사용
MAC 채널
-media Access Control 채널로 Reverse Power Control 채널과 Reverse Activity 채널이
-있음
Control 채널
-방송메세지 또는 특정 엑세스 터미널을 향한 메시지를 송신함
-전송율은 38.4kbps 또는 76.8kbps 사용
Traffice 채널
-액세스 터미널이 순수한 데이터를 전송하는데 사용

나. 역방향 데이터 채널링크

○ HDR의 역방향 데이터 태널링크는 순방향 링크보다 매우 복잡한 구조로 Access 채널, Traffic 채널,
-- ACKnowledge 채널로 구성됨

○ 역방향

심사항목
내용
-Access 채널
-링크가 연결되지 않은 상태에서 기지국과 연결하기 위해서 사용됨
Traffic 채널
-단말기에서 기지국으로 전송되는 역방향으로 데이터를 전송할 때 사용함
ACK 채널
-물리계층 하이브리드 ARQ 동적을 위해 순방향으로부터 수신된 데이터에 대한
- ACK는 보낼때 사용함

3. 네트워크 구조

○ HDR은 고속패킷 전송만을 위해 최적화된 시스템으로 IS95 시스템과 동일한 주파수대역인 1.25㎒를 사용함

○ IS95의 BSC나 MSC 같은 네트워크 변형없이 단지 AP(Access Point)를 기지국에 추가함으로 구현이 가능함

○ AP는 iS95의 기지국 기능을 수행하는 장비로 내부에 IS-95의 BSC와 MSC기능을 포함함

○ 추가장비는 단지 인터넷 연결을 위한 라우터 장비와 요금과금, 사용자 인증, 사업자의 데이터 서비스를 위한 추가적인 네트워크 장비임

 

4. Cdma 2000 1x와 비교

구분
cdma2000 1x
cdma2000 1x EVDO
속도
144Kbps
2.4Mbps
서비스
음성, 동영상
초고속데이터(음성도 가능)
이동성
제한적
제한적
주파수
셀룰러-800㎒
PCS-1.9㎓
셀룰러-800㎒
PCS-1.9㎓
시기
2000.10.1
2002.1.28
서비스
무선동영상
포토메일
고품질 무선동영상
화상전화
멀티미디어 메시지

 

 

cdma2000 1x EVDO의 초간단 정의

Posted by ironmask84
2010. 12. 2. 14:20 컴퓨터공학/통신 기술



  • 3세대형 이동통신/ 1.25㎒ 협대역(주파수)에서 최대 2.4Mbps급 데이터 전송속도를 구현
  • ‘휴대형 비대칭디지털까입자회선(ADSL)’.
    • 이 기술은 현존하는 이동통신 서비스 중 처음으로 수Mbps급 데이터 전송속도를 구현, 세계 통신업
      계의 이목 집중
    • 이에 따라 ADSL이 유선 인터넷 대중화의 기폭제가 됐듯이 EVDO에 대한 기대 상승
  • 지난 2월 우리나라에서 처음 서비스를 도입.
  • 지난 99년 미국 퀄컴이 시험통화에 성공하고 2002년 2월 SK텔레콤이 대중서비스의 전기를 마련
  • 고속 패킷 전송에 적합하도록 시스템을 최적화, 문자·영상·음악 등의 데이터를 최대 2.45Mbps급 속도로 전송
    • cdma2000 1x보다 20배 정도 빠른 이동통신을 구현.
  • 호환성양호 -코드분할다중접속(CDMA)방식 이동통신망에서 음성통화용 핵심망을 거치지 않고 별도의 인터넷망으로 데이터를 보낼 수 있기 때문
    • 동기(북미)식 기술이어서 IS95A/B, cdma2000 1x 통신망과 데이터를 호환, 기존 이동통신 시스템을 업그레이드하기에 적합한 것도 장점
    • 망 포설작업이 마무리단계에 이른 cdma2000 1x 시스템(네트워크)를 그대로 사용할 수 있는 것. 따라서 초기 설비투자비용을 최소화
  • 동기식 이동통신 국제표준화기구(3GPP2) 2000년 10월 cdma2000 1x EVDO를 공식 기술표준으로 채택
    • 궁극적으로 3세대 이동통신시대가 열린 셈
  • 데이터 전송속도가 2Mbps 이상으로 빨라짐에 따라 휴대폰으로 멀티미디어서비스, 영상회의, 초고속 인터넷을 즐길 수 있을 전망
  • 지난 96년 이후로 전성기를 구가한 2세대 코드분할다중접속(CDMA)방식 이동통신(IS95A·B)은 최대 64Kbps 속도로 데이터를 전송한다. 주로 단문메시지서비스(SMS), 개인정보관리(PIMs), PCMCIA타입 모뎀을 사용해 저속 인터넷에 접속할 수 있다. 그러나 64Kbps급 데이터 전송속도로는 무선 인터넷을 구현하는 데 한계가 있다.
  • CDMA에 이어 3세대 이동통신의 첫 단추를 꿴 것이 cdma2000 1x
    • 회선 데이터 전송방식을 이용했던 CDMA와 달리 패킷 데이터 전송방식을 채택, 전송속도가 144Kbps급으로 올라선 것
    • 이로써 휴대폰 안으로 컬러 콘텐츠, 플러그인게임, m커머스를 불러들였다.
  • 미국 퀄컴은 올해부터 cdma2000 1x와 cdma2000 1x EVDO를 동시에 지원하는 모바일스테이션모뎀(MSM) 5500칩을 공급
    • 이 칩을 통해 데이터는 cdma2000 1x EVDO 네트워크로, 음성은 cdma2000 1x 네트워크로 송수신하는 것.
    • 더불어 MSM 5500칩이 광역측위시스템(GPS)과 블루투스 기능을 지원함으로써 휴대폰을 만능기기로 탈바꿈시킬 태세

출처 : https://blog.naver.com/PostView.nhn?blogId=041022jh&logNo=60009406165


 

Sprintf 함수

Posted by ironmask84
2010. 11. 24. 14:15 컴퓨터공학/C언어 레퍼런스


sprintf
#include <stdio.h> // C++ 에서는 <cstdio>

int sprintf ( char * str, const char * format, ... );


str 에 데이터를 형식에 맞추어 쓴다.
str 가 가리키는 배열에 형식 문자열에 지정한 방식 대로 C 문자열을 쓴다. 쉽게 설명하자면, printf 에서 화면에 출력하는 대신에 화면에 출력할 문자열을 인자로 지정한 문자열에 쓴다는 것이다. 이 때, 인자로 지정한 배열의 크기는 배열에 쓰여질 문자열의 크기 보다 커야만 한다. 주의할 점은 sprintf 함수는 자동적으로 str 맨 마지막에 NULL  문자를 붙이기 때문에 항상 한 칸의 여유가 있어야 한다.

   인자
 

str

C 문자열이 저장될 char 배열을 가리키는 포인터
 
format

위 str 에 쓰여질 문자열을 포함하는 형식 문자열으로, 이는 형식 태그를 포함할 수 있다. 이 때, 형식 태그는 부수적 인자로 지정한 데이터와 치환되어 쓰여지게 된다. 이 때, 데이터가 치환되는 방식은 형식 태그에 의해 좌우된다. 따라서 부수적 인자의 개수는 적어도 형식 문자열에 사용된 형식 태그의 수 보다 많아야 한다.
  • 형식 태그는 아래와 같이 생겼다.

  • %[플래그(flag)][폭(width)][.정밀도][크기(length)]서식 문자(specifier)

  • 이 때 서식 문자(specifier) 는 대응하는 인자를 어떠한 형태로 표현할지를 결정하는데에 가장 중요한 역할을 한다.

  • 서식문자 출력 형태

    c 문자
    a
    d or i 부호 있는 십진법으로 나타난 정수 392
    e 지수 표기법(Scientific notation) 으로 출력하되, e 문자를 이용한다.
    3.9265e+2
    E 지수 표기법(Scientific notation) 으로 출력하되, E 문자를 이용한다. 3.9265E+2
    f 십진법으로 나타낸 부동 소수점 수
    392.65
    g %e 나 %f 보다 간략하게 출력 392.65
    G %E 나 %f 보다 간략하게 출력 392.65
    o 부호 있는 팔진수
    610
    s 문자열
    sample
    u 부호없는 십진법으로 나타낸 정수
    7235
    x 부호없는 16 진법으로 나타낸 정수 (소문자 사용)
    7fa
    X 부호없는 16 진법으로 나타낸 정수 (대문자 사용)
    7FA
    p 포인터 주소
    B800:0000
    n 아무것도 출력하지 않는다. 그 대신, 인자로 부호 있는 int 형을 가리키는 포인터를 전달해야 되는데, 여기에 현재까지 쓰여진 문자 수가 저장된다.
    % % 다음에 %를 또 붙이면 stdout 에 % 를 출력한다.

  • 위 서식 문자를 이용한 다양한 출력 형태는 아래와 같다.

  • #include <stdio.h>
    int main()
    {
        int integer = 123;
        char character = 'c';
        char string[] = "hello, world";
        int* pointer = &integer;
        double pi = 3.141592;
        char buf[100];
        

        sprintf(buf, "integer : (decimal) %d (octal) %o \n", integer, integer);
        printf("%s \n", buf);

        sprintf(buf,"character : %c \n", character);
        printf("%s \n", buf);

        sprintf(buf,"string : %s \n", string);
        printf("%s \n", buf);

        sprintf(buf,"pointer addr : %p \n", pointer);
        printf("%s \n", buf);

        sprintf(buf,"floating point : %e // %f \n", pi, pi);
        printf("%s \n", buf);

        sprintf(buf,"percent symbol : %% \n");
        printf("%s \n", buf);

        return 0;

  • 출력 결과


  •    형식 태그에는 위 말고도 플래그, 폭, .정확도, 제한자(modifier), 부-서식문자(sub-specifiers) 에 관련된 정보들이 포함될 수 있다. 먼저 플래그를 살펴보면 플래그는 기본적으로 출력되는 형태에 대해 조금 더 자세하게 지정할 수 있게 해준다. 플래그는 아래와 같다.

    플래그 설명
    - 폭에 맞추어 왼쪽 정렬을 하여 출력한다. - 를 붙이지 않는다면 기본적으로 오른쪽 정렬이 되어 출력한다. (아래 폭 지정자 참조).
    + 출력 결과값이 양수인 경우라도 + 기호를 앞에 붙여서 출력하도록 한다. (물론 음수면 자동적으로 - 가 붙는다). 기본적으로 지정하지 않았을 경우 음수에만 앞에 - 가 붙는다. 
    (공백) 앞에 부호가 붙지 않는다면 한 칸을 띄어서 출력한다. (다시말해 123 은 " 123" 으로 출력되고 -123 은 "-123" 으로 출력된다)
    #
    o, x, X 서식 문자들과 사용되면 출력되는 값 앞에 각각 0, 0x, 0X 가 붙게 된다. (이 때 0 은 제외한다)
    e, E, f 서식 문자들과 사용되면 소수점 아래 수들이 없음에도 불구하고 강제적으로 소수점을 붙이도록 한다. 원래 소수점 아래 수들이 없다면 소수점을 붙이지 않는다.
    g 와 G 서식 문자들과 사용되면 e 와 E 일때와 동일한 작업을 하지만 소수들의 뒷부분에 붙는 0 들 (123.1200 등) 은 제거되지 않는다. 
    0 수들을 왼쪽으로 정렬하되 빈 칸을 삽입하는 대신에 0 을 삽입한다. (폭 지정자 참조)

  •   폭은 말그대로 출력되는 데이터의 폭을 지정해준다. 참고로 여기서의 폭(width)은 뒤에 나오는 길이(length) 와는 완전히 다른 개념이므로 유의 하시기 바란다.


  • 설명
    (수) 출력할 최소의 문자 개수. 만일 이 수 보다 출력할 수 보다 작다면 빈칸을 삽입하여 길이를 맞춘다. 대신에, 이 수 보다 출력할 수가 큰 수의 경우 잘려서 출력되지는 않는다.
    * 폭을 형식 문자열에 지정해서 받지 않지만, 그 대신에 형식 문자열 뒤에 오는 인자들에 넣어서 받는다. 이 때, 이는 정수 값이여야 하며 폭을 지정하는 변수 뒤에 출력할 데이터가 위치하면 된다.

  • /* 사용 예 */
    #include <stdio.h>
    int main()
    {
        FILE *fp = fopen("output.txt", "w");
        char buffer[100];
        int i = 123;
        int j = -123;
        double f = 3.141592;

        sprintf(buffer, "폭 맞추기 \n");
        fputs (buffer, fp);
        sprintf(buffer, "i : %6d \n", i);
        fputs (buffer, fp);
        sprintf(buffer, "i : %7d \n", i);
        fputs (buffer, fp);
        sprintf(buffer, "i : %2d \n\n", i);
        fputs (buffer, fp);

        sprintf(buffer, "왼쪽 정렬 \n");
        fputs (buffer, fp);
        sprintf(buffer, "i : %5d끝 \n", i);
        fputs (buffer, fp);
        sprintf(buffer, "오른쪽 정렬 \n");
        fputs (buffer, fp);
        sprintf(buffer, "i : %-5d끝 \n\n", i);
        fputs (buffer, fp);

        sprintf(buffer, "# 문자의 사용 \n");
        fputs (buffer, fp);
        sprintf(buffer, "i : %#x \n", i);
        fputs (buffer, fp);
        sprintf(buffer, "i : %#X \n\n", i);
        fputs (buffer, fp);

        sprintf(buffer, "부호 붙이기 \n");
        fputs (buffer, fp);
        sprintf(buffer, "%+d, %+d \n", i,j);
        fputs (buffer, fp);
        return 0;
    }

  • 출력 결과

  • 파일에 쓰여진 모습

  • 정밀도는 말그대로 수치 데이터를 출력할 때 어떠한 정밀도로 출력하는지 (즉, 몇 자리 까지 출력해야 되는지) 를 지정해준다. 참고적으로 정밀도를 나타낼 때, 앞에 꼭 마침표(.) 을 찍는 것을 잊지 말기 바란다. 마침표를 찍는 이유는 앞에 폭과 구분을 하기 위해서 이다.

  • . 정밀도 설명
    .숫자 정수 지정자 (d,i,o,u,x,X) 의 경우 : 정밀도는 출력되야할 최소의 자리수를 일컫는다. 만일, 어떤 정수의 자리수가 정밀도 보다 작다면 앞에 0 이 붙어서 자리수를 맞추게 된다. 또한 자리수가 더 크다고 해서 정수를 잘라서 출력하지는 않는다. 만일 정밀도가 0 이라면, 소수점 뒤에 자리수를 출력하지 않는다.
    e,E, F 의 경우 : 여기서 정밀도는 소수점 이하 출력될 자리수를 의미한다.
    g, G 의 경우 : 출력될 유효 숫자의 수를 의미한다.
    s 의 경우 : 출력될 문자의 최대 개수를 의미한다. 원래는 널 문자를 만나기 전까지 모든 문자가 출력되었었다.
    c 의 경우 : 아무 효과 없다.
    만일 정밀도가 지정되지 않는다면 기본값으로 1 이 된다. 또한, 마침표(.) 을 찍었는데 아무런 숫자를 적지 않았다면 기본적으로 0 이 적혔다고 생각한다.
    .* 형식 문자열에서 정밀도를 나타내지는 않지만 뒤에 인자로 정밀도 값을 준다. 이 때 인자는 형식 태그가 적용되는 데이타 앞에 있어야 한다.  

       길이는 출력하는 데이터의 정확한 크기를 지정하는데 사용된다. 예를 들어서 %d 서식문자의 경우 막연하게 '정수형 데이터를 십진법으로 출력한다' 였지만 길이를 지정해주면 어떻나 크기로 데이터를 출력해야되는지 (int 냐 short 냐 등등) 을 지정할 수 있다. 

  • 길이
    설명
    h 인자를 short int 혹은 unsigned short int 로 생각한다. (오직 i, d, o, u , x, X 서식 문자에만 적용된다)
    l 정수 서식 문자(i,d,o,u,x, X) 에 사용되었을 경우 인자를 long int 나 unsigned long int 로 생각하며 c 나 s 에 사용되었을 경우 wide character 나 wide string 으로 생각한다.
    L 인자를 long double 로 생각한다. (오직 부동 소수점 서식 문자인 e,E,f,g, G 에만 적용된다)

  • /* 사용 예 */
    #include <stdio.h>
    int main()
    {
        double f = 3.141592;
        int i = 12345;
        char buffer[100];

        sprintf(buffer, "f : %.3f \n", f);
        printf("buf: %s \n", buffer);
        sprintf(buffer, "i : %.10d \n", i);
        printf("buf : %s \n", buffer);

        return 0;
    }

    출력 결과


    부수적인 인자

    형식 문자열에 따라 함수는 여러 인자들을 가지며, 각 인자는 형식 문자열의 각 형식 태그에 순차적으로 대응된다. 기본적으로 형식 문자열에 들어 있는 형식 태그의 수와 뒤따라 붙는 인자들의 수는 같아야 한다. (물론 .* 이나 * 과 같은 예외적인 상황은 제외한다)

       sprintf 함수의 활용 - 수를 문자열로 바꾸기
     

    sprintf 함수를 잘 이용하면 수를 손쉽게 문자열로 바꿀 수 있다. 바로 다음과 같이.

    #include <stdio.h>
    int main()
    {
        int i;
        char str[100];

        scanf("%d", &i);
        sprintf(str, "%d", i);

        printf("str : %s \n", str);

        return 0;
    }


    실행 결과


    i 의 값을 %d 의 형태로 str 에 문자열로 넣었으니 str 에는 i 의 값이 문자열의 형태로 변환된다.
    마찬가지 방법으로 i 의 값을 16 진수나 8 진수 형태로 (%x, %o) 넣을 수 도 있다.

       리턴값
     

    str 에 쓰기가 성공할 경우 쓰여진 총 문자의 개수가 반환된다. 이 때, 이 문자의 개수는 맨 마지막에 자동적으로 붙는 NULL 문자는 포함하지 않는다.
    실패할 경우 음수가 리턴된다.

       실행 예제
     

    /*

    sprintf 함수 예제
    이 예제는 http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/
    에서 가져왔습니다.

    */
    #include <stdio.h>
    int main ()
    {
        char buffer [50];
        int n, a=5, b=3;
        n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
        printf ("[%s] is a %d char long string\n",buffer,n);
        return 0;
    }


    실행 결과



       연관된 함수
     

    • printf  :  표준 출력(stdout) 에 데이터를 형식에 맞추어 출력한다.
    • sscanf  :  문자열에서 데이터를 형식에 맞추어 읽는다.

     

    Software Process Model

    Posted by ironmask84
    2008. 9. 28. 21:06 컴퓨터공학


    소프트웨어 프로세스 소프트웨어 제품을 생산하기 위해서 필요한 활동의 집합이다.
    소프트웨어 프로세스의 기본적인 활동은 다음과 같으며 모든 프로세스에 대해서 공통적이다.

    1. 소프트웨어 명세화 : 소프트웨어 기능과 운영상의 제약 조건을 정의
    2. 소프트웨어 설계와 구현 : 명세서와 일치하는 소프트웨어를 생산
    3. 소프트웨어 검증 : 고객이 원하는 소프트웨어인지 검증
    4. 소프트웨어 진화 : 소프트웨어는 변하는 고객의 요구에 맞도록 개선되어야 함

    비록 '이상적인' 소프트웨어 프로세스는 없지만 많은 조직에서 소프트웨어 프로세스를 개선할 수
    있는 여지는 있다.

    소프트웨어 프로세스 모델(프로세스 패러다임)은 소프트웨어 프로세스의 추상적인 표현이며, 명확한
    기술이 아니다.
    오히려 소프트웨어 개발의 방법을 설명하기 위해서 사용될 수 있는 프로세스의 추상화이다.
    특정 소프트웨어 공학 프로세스를 만들기 위해서 인용되고 확장될 수 있는 프로세스 프레임워크로
    생각할 수도 있다.

    이 프로세스 모델을 도식화 하여 나타낸 일련의 흐름을 Software LifeCycle 이라고 하며 주요한 요소

              1. Phases          |          2. Intermediate Products          |          3. Reviews

    를 포함하고 있다.
    어떤 LifeCycle 이 옳다거나 혹은 잘 못되었다는 기준은 없다.
    개발 상황이나 목표 등을 명확하게 고려하여 적절한 모델을 택하는 것이 중요하며 그것이 S/W 공학
    을 전공한 Architect 의 역량이 아닐까라고 생각해본다.

    [ 1. Build and Fix Model ]
    소위 'Simple is Best' 의 명확한 보기가 될 수 있는 모델로..
    내 노트에 '될 때 까지 계속해, 어서~♡(싸모님 ver)'  라고 적혀있다.
    제목 그대로 First 작업 후 test 를 하여 Modify 를 반복하는 방법이다.
    거의 대부분의 학생들이 report 할 때 적용하는 방식이라고 강석중 교수님께서 농담을 하셨는데..;;
    사실이라는..;;;
    사용자 삽입 이미지

    Build & Fix Process Model

    [ 2. WaterFall Model ]
    한글번역본을 보면 '폭포수' 모델로 번역되어 있다.
    흔히 순차적인 작업을 일컫는 용어로써 단계별로 Verify 와 Test를 거치며..
    단순하고 간단하다는 장점이 있다.
    또한 문서가 각 단계마다 만들어지기에 다른 공학 프로세스 모델에 잘 어울리기도 한다.
    하지만 폭포수는 한 번 물이 떨어지면 다시 역으로 올라오지 못하는 자연의 진리처럼...
    WaterFall Model 은 오류가 생겼을 경우 이전 단계로 돌아갈 수 없다는 단점이 있다.
    그래서 수정시에는 Intergration 이라는 단계를 거치게 된다.

    사용자 삽입 이미지

    WaterFall Process Model


    [ 3. Rapid Prototyping Model ]
    개인적인 모토이기도 한 Speed & Fast 를 중점적으로 고려하는 Model 이다.
    진화적 모델이라고도 변역하는데 여기서 Prototype 은 '원형' '시제품' 'Demo' 등을 의미한다.
    즉 초기에 구현을 한 후 이것을 이용하여 사용자의 의견을 반영, 만족스러운 시스템이 개발될 때
    까지 Version UP 을 하는 방법이다.
    Prototype 의 운명은 다음의 두 가지로 나누어지게 된다.
    1. 실험적 개발(testing)
    고객과 함께 그들의 요구사항을 찾아내면서 최종 시스템을 만들어가는 과정으로 Prototype의
    일부분을 가지고 개발이 시작되며 그 시스템은 고객에 의해 제안된 사항을 토대로 수정/추가
    되면서 발전한다.
    즉, Prototype 을 실제적으로 사용하게 된다.

    2. 쓰고 버리는 프로토타이핑(Throwaway Prototyping)
    사용자의 요구사항을 이해하고 시스템에 대한 요구사항을 더 잘 정의하기 위한 프로토타입으로
    이해가 잘 되지 않는 고객의 요구사항을 실험하는데 쓰이며 추후에는 버려지게 된다.

    이 방식의 문제점은 Abstract(추상화)이 가능하기 때문에 Design 과 실제 Implement 된 시스템
    사이의 Gap 이 생길수가 있다는 점이다.
    대형 시스템의 경우 WaterFall 과 함께 Prototype model 를 혼용하는 것을 추천한다.
    사용자 삽입 이미지

    Rapid Prototyping Model

    [ 4. Incremental Model ]
    순차적, 점증적이라는 뜻의 Increments 를 정의하고 각 증분에 대한 우선순위를 적용한 후에
    단계별로 순차적으로 개발하는 Process Model 을 일컫는다.
    이전의 WaterFall 과 Prototype 의 단점인 유지보수의 어려움 및 설계 및 요구분석에서의 난해함을
    보완하기 위해서 나온 모델이다.
    점증적 개발 프로세스는 다음과 같은 장점을 지닌다.
    1. 고객은 전체 시스템이 인도될 때 까지 기다릴 필요가 없다.
       각 증분마다 결과물이 나오며 첫 번째 증분이 고객의 가장 핵심적인 요구사항을 충족하기 때문
       이다.
    2. 고객은 초기의 증분을 프로토타입으로 사용하고 추후에 시스템 증분에 대한 요구사항을 정보
        또한 얻을 수 있는 경험을 획득할 수 있다.
    3. 전체 프로젝트 실패에 대한 위험이 적다.
       한 증분에서 문제가 생기면 그 부분을 집중적으로 보완하면 결과적으로 성공적인 개발이 된다.
    4. 가장 높은 우선순위 서비스가 먼저 인도되고 추후의 증분이 그것과 통합되기 때문에, 가장
       중요한 시스템 서비스가 가장 많이 시험된다.
    그러나 모든 것은 양면적인 성향을 띄듯이, Incremental Model 에도 문제는 있다.
    증분되는 각각의 작업은 비교적 작아야 하며(20,000라인 이하) 각 증분은 시스템 기능을 제공해야
    한다는 점이다.
    또한 전체 Frame Work Architecture 를 미리 설계해야 하는 어려움이 따르며 각 증분을 check 하기
    위한 check List 가 존재해야 한다.
    Operations 가 각 단계별로 보이지 않는다는 단점도 가지고 있다.

    이러한 점증적 방법의 변형을 익스트림 프로그래밍(Extreme Programming) 이라고 한다.
    이 방법은 매우 작은 증분을 개발하고 인도하는 것으로, 이 프로세스에 고객이 참여하고 지속적인
    개선과 프로그래밍이 이루어진다.
    사용자 삽입 이미지

    Incremental Process Model

    [ 5. The Spiral Model ]
    나선형 모델(달팽이 모델, Boehm, 1988)은 내부 반복을 동해서 시스템의 타당성을 증진시키고
    요구사항 정의, 시스템 설계 등의 단계를 완성시키는 프로세스 모델이다.
    나선에 있는 각 반복을 네 부분으로 나타내면 다음과 같다.
    1. 목표 설정 : 프로젝트의 단계에 대한 목표와 Risk, 대안전력 등이 설정된다.

    2. 위험 평가 및 감소 : 식별된 각 위험의 종류에 따라 상세 분석이 수행.
                                   필요에 따라서 프로토타입 시스템을 개발하기도 한다.

    3. 개발과 검증 : 위험평가 후에 그 시스템에 대한 개발 모델이 선택된다.
                           예를 들어 UI에 대한 Risk 가 높다면 Prototyping Model을 선택하게 될 것이며
                           주요 위험이 서브시스템 통합이라면 WaterFall Model 이 적합할 것이다.

    4. 계획 수립 : 나선에 대한 추가 반복을 수행할 지의 여부를 결정 후 다음 단계 계획을 수립    


    사용자 삽입 이미지

    The Spiral Process Model

    '컴퓨터공학' 카테고리의 다른 글

    국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
    합병정렬 - 알고리즘  (0) 2008.09.21
    퀵소트 - 알고리즘  (4) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    Embedded에서 ARM의 의미  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache 적중률  (1) 2008.08.31
    cache memory - 2  (0) 2008.08.31
     

    합병정렬 - 알고리즘

    Posted by ironmask84
    2008. 9. 21. 22:43 컴퓨터공학


     
     Merge Sort


    합병정렬은 mergesort(머지소트)라고도 불리우며 O(nlogn)의 복잡도를 가지는 정렬알고리즘이다. 합병정렬 또한 앞서 살펴본 분할정복법을 사용한다. 정렬은 해당 아이템의 수가 많은 수록 비교 및 삽입 연산이 많이 발생하게 된다. 따라서 그 연산을 최소화하기 위하여 정렬하고자 하는 해당 배열을 충분히 분할한 후 거꾸로 합병하면서 정렬을 하여 최종적으로 전체 배열의 정렬을 하는 방식이다.

    합병정렬은 다음과 같은 절차로 진행된다.

    1. 분할 : 배열을 n/2개 아이템으로 가진 2개의 부분배열로 분할한다.
    2. 정복 : 정렬함으로써 각 부분배열을 정복한다(푼다). 배열이 충분히 작지 않으면 재귀 호출을 한다.
    3. 통합 : 부분 배열에 대한 답들을 합병하여 하나의 정렬된 배열로 만든다.

    배열을 2개 이상의 배열로 분할 할 수 있는데 n개의 배열로 분할하게 되면 n-원 합병정렬이 된다.

    다음은 재귀적 방법을 이용하여 합병정렬을 구현한 것이다. 재귀적 함수에는 반드시 종료조건이 존재해야 한다. 종료조건은 배열의 크기가 1에 도달하는 경우가 되고, 바로 그 시점부터 합병이 시작된다.

    사용자 삽입 이미지

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define KEY_SIZE   50    // 정렬할 배열의 크기
    // 배열의 내용을 다른 배열로 복사하는 함수
    void arrayCopy(const int src[], int dest[], int size)
    {
          int i;
          for (i=0; i<size; i++) {
                dest[i] = src[i];
          }
    }
    // 분할된 부분배열을 합병하는 함수
    void merge(int h, int m, int Ldiv[], int Rdiv[], int key[])
    {
          int i, j, k;
          i = j = k = 0;
     
          while (i < h && j < m) {
                if (Ldiv[i] < Rdiv[j]) {
                      key[k] = Ldiv[i++];
                } else {
                      key[k] = Rdiv[j++];
                }
                k++;
          }
     
          /* 나눠진 두개의 배열에서 어느 한쪽이 더 큰경우
           * 나머지 배열의 요소를 복사한다.
           */

          if (i == h)
                arrayCopy(Rdiv+j, key+k, m-j);
          else
                arrayCopy(Ldiv+i, key+k, h-i);
    }
    // 합병정렬을 수행하는 함수
    void mergeSort(int n, int key[])
    {
          const int h = n/2;
          const int m = n -h;
          int L_index, R_index, key_index;
          int *Ldiv, *Rdiv;
          if (n>1) {
                Ldiv = (int *)malloc(h * sizeof(int));
                Rdiv = (int *)malloc(m * sizeof(int));
                arrayCopy(key, Ldiv, h);
                arrayCopy(key+h, Rdiv, m);
     
                mergeSort(h, Ldiv);
                mergeSort(m, Rdiv);
                merge(h, m, Ldiv, Rdiv, key);
     
                free(Ldiv);
                free(Rdiv);
          }
    }
    int main(void)
    {
          int i;
          int key[KEY_SIZE];
     
          srand((unsigned int)time(NULL));
          printf("====== Before Merge sort");
          for (i=0; i<KEY_SIZE; i++) {
                if (i%20 == 0)
                      puts("\n");
                key[i] = rand() % 100;  // KEY_SIZE 만큼의 무작위 수 생성
                printf("%d ", key[i]);
          }
          mergeSort(KEY_SIZE, key);   // 합병정렬
          printf("\n\n====== After Merge sort");
          for (i=0; i<KEY_SIZE; i++) {
                if (i%20 == 0)
                      puts("\n");
                printf("%d ", key[i]);
          }
          return 0;
    }

    위 구현된 합병정렬을 살펴보면 알겠지만 합병정렬을 수행하기 위해 입력된 배열 이외의 추가적인 배열(Ldiv, Rdiv)가 사용되는 것을 알 수 있다. 따라서 mergeSort 함수가 수행될 때 마다 배열들이 추가적으로 할당된다.

    최상위의 두 배열의 아이템 개수는 n개이다. 처음 재귀호출을 하게 되면 이는 n/2개가 되고, 다음에는 n/4개가 된다. 평균적으로 재귀 호출시 두 배열의 아이템 개수는 바로 전 아이템 개수 합의 반이 된다. 따라서 추가적으로 만들어지는 배열아이템의 총 수는 n(1 + 1/2 + 1/4 + ... ) = 2n 이 된다.

    위의 예제가 분할정복법(Divide-and-Conquer)를 설명하기에는 적합할지 모르지만 메모리 사용에서는 상당히 비 효율적이다. 따라서 제자리정렬(in-place sort)로 다시 구현해 보자. 제자리정렬은 입력을 저장하는 데 필요한 장소 이외의 추가적인 저장장소를 사용하지 않는 정렬 알고리즘이다.

    다음은 제자리 정렬로 구현한 합병정렬이다.

    void merge(int low, int mid, int high)
    {
          int i, j, k;
          for (i=low; i<=high; i++) {
                temp[i] = key[i];       // 임시배열로 해당 키 값을 복사한다.
          }
          i = low; j = mid+1; k = low;
          while (i <= mid && j <= high)
                if (temp[i] < temp[j])
                      key[k++] = temp[i++];   // 다시 원래 배열로 키 값을 크기에 맞게 복사한다.
                else
                      key[k++] = temp[j++];
          while (i <= mid)              // 키값에 따라 복사되고 난 나머지 키들을 복사한다.
                key[k++] = temp[i++];
    }
    void mergeSort(int low, int high)
    {
          int mid;
          if (low < high) {
                mid = (low + high)/2;
                mergeSort(low, mid);
                mergeSort(mid+1, high);
                merge(low, mid, high);
          }
    }

    출처: http://proneer.tistory.com/entry/Sort-합병-정렬Merge-Sort

    '컴퓨터공학' 카테고리의 다른 글

    국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
    Software Process Model  (0) 2008.09.28
    퀵소트 - 알고리즘  (4) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    Embedded에서 ARM의 의미  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache 적중률  (1) 2008.08.31
    cache memory - 2  (0) 2008.08.31
     

    퀵소트 - 알고리즘

    Posted by ironmask84
    2008. 9. 21. 22:38 컴퓨터공학



     
    Quick Sort


    퀵 정렬(Quick Sort)는 호아(Hoare, 1962)가 정의한 알고리즘으로 이름에서도 알 수 있듯이 매우 빠른 수행속도를 가진다. 퀵 정렬은 합병정렬과 비슷하게 분할정복법(Divide-and-Conquer) 방법에 근거한다. 전체 데이터를 두 부분으로 분할한 다음, 분할된 각 부분은 재귀적으로 다시 퀵 정렬을 수행한다.

    퀵 정렬은 합병정렬과 비슷하게 보이지만 합병정렬과는 다르게 전체 데이터를 균등하게 분할하는 것이 아니라 기준(pivot)을 선택하여 기준보다 작은 데이터를 왼쪽에 위치시키고, 큰 데이터는 오른쪽에 위치시킨다. 일반적으로 기준은 첫번째 데이터로 선택한다. 결과적으로 기준의 왼쪽에는 기준보다 작은 데이터가, 오른쪽에는 큰 데이터가 위치하게 된다.

    기준에 따라 데이터의 이동을 살펴보면 다음과 같다.

    15 22  13  27  12  10  20  25

    1. 기준 아이템(15) 보다 작으면 왼쪽, 크면 오른쪽에 위치시켜 분할한다.

    10  13  12  15  22  27  20  25


    2. 부분배열을 정렬한다.
    10  12  13  15  20  22  25  27

    위 내용은 한번의 부분배열을 통해 정렬되는 과정을 보여준 것이다. 실제 퀵 정렬은 재귀적으로 더이상 분할할 수 없을때까지 분할된 후 정렬을 수행한다.

    다음을 통해 좀 더 쉽게 퀵 정렬을 살펴볼 수 있다.

    [Flash] http://proneer.tistory.com/attachment/dk030000000000.swf



    다음은 퀵 정렬에 대한 알고리즘이다.
    void quicksort( index list[], index left, index right )
    {
              if ( left < right ) {
                        index pivot = partition( list, left, right );
                        quicksort( list, left, pivot-1 );
                        quicksort( list, pivot+1, right);
              }
    }

    다음은 분할에 대한 알고리즘이다.
    index partition( index list[], index left, index right)
    {
              index pivot, temp, low, high;
              low = left;
              high = right+1;
              pivot = list[left];
              do {
                        do 
                                  low++;
                        while ( list[low] < pivot );
                        do 
                                  high--;
                        while ( list[high] > pivot );
                        if ( low < high ) SWAP( list[low], list[high], temp );
              } while ( low < high );
             
              SWAP( list[left], list[high], temp );
              return high;
    }

    그럼 이제 퀵 정렬의 복잡도를 살펴보자. 퀵 정렬은 최악의 경우 O(n2) 의 복잡도를 갖는다. 최악의 경우는 모든 데이터가 정렬된 경우이다. 이 경우 맨 앞의 데이터를 기준으로 선택했을 경우 데이터가 분할되지 못하므로 한번의 비교 연산이 n 번 이루어 진다고 하면 모든 데이터에 대해서는 O(n2)의 시간이 걸릴 것이다.

    복잡도가 O(n2)인데 어떡해 이 알고리즘이 빠른 정렬이라고 불리게 되었을까? 그 이유는 평균의 경우 때문이다. 평균적인 경우 데이터에서 기준으로 선택될 확률은 모두 같다. 따라서, 평균은 모든 가능한 순서를 같은 횟수 정렬할 때의 평균 정렬시간이다. 말이 조금 어려울지 모르나 평균적인 경우에는 O(n log n)이 된다.

    특히, O(n log n)의 복잡도를 가지는 다른 정렬알고리즘 보다도 더 빠르게 수행된다는 것이 증명되었다. 이러한 이유는 불필요한 데이터의 이동을 줄이고 먼 거리의 데이터를 교환할 뿐만아니라, 한번 결정된 기준은 추후 연산에서 제외되는 성질을 가지기 때문이다.

    퀵 정렬은 추가적인 메모리공간을 가지지 않는 제자리 정렬임에도 불구하고 한가지 단점은 앞서 말한대로 이미 정렬된 데이터에 대해서는 오히려 많은 시간이 걸리게 된다. 이러한 문제를 해결하는 방법은 기준을 선태할 때 왼쪽에서 선택하는 것이 아니라 중간 값을 기준으로 선택하는 것이다.


    다음은 하나의 함수에 분할과 정렬을 모두 구현한 예이다.
    void quicksort(int a[], int lo, int hi)
    {
              //  lo is the lower index, hi is the upper index
              //  of the region of array a that is to be sorted

             int i=lo, j=hi, h;
             int x=a[(lo+hi)/2];
             //  partition
             do {    
                 while (a[i]<x) i++;
                 while (a[j]>x) j--;
                 if (i<=j) {
                     h=a[i]; a[i]=a[j]; a[j]=h;
                     i++; j--;
                 }
             } while (i<=j);
             //  recursion
             if (lo<j) quicksort(a, lo, j);
             if (i<hi) quicksort(a, i, hi);
    }



    퀵 정렬 라이브러리 함수 사용
    보통 C언어 라이브러리에는 퀵 정렬 함수가 제공된다. 일반적으로 qsort 라는 이름으로 제공되며 다음과 같은 함수 원형을 가진다.

    함수의 원형
    void qsort(
              void *base,
              size_t num;
              size_t width,
              int (*compare) (const void *, const void *)
    };

    base - 배열의 시작주소
    num - 배열 요소의 개수
    width - 배열 요소 하나의 크기(바이트단위)
    compare
    - 비교함수, 포인터를 통하여 두개의 요소를 비교하여 비교 결과를 정수로 반환, 사용자가 제공하여야 한다.

    함수 사용 예
    #include <stido.h>
    #include <string.h>
    #include <stdlib.h>

    int compare( const void *arg1, const void *arg2 )
    {
              if ( *(double) arg1  >  *(double *) arg2 ) return 1;
              else if ( *(double) arg1  ==  *(double *) arg2 ) return 0;
              else return -1;
    }

    int main()
    {
              int i;
              double list[5] = { 2.1, 0.8, 2.2, 1.5, 3.3, 1.0 };
              qsort( (void *)list, (size_t)5, sizeof(double), compare );
             
              return 0;
    }

    Reference : Data Structures in C, 생능출판사
                     FOUNDATIONS of ALGORITHMS using C++ PSEUDOCODE, 사이텍미디어
                     http://ko.wikipedia.org/
                     http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/quick/quicken.htm
    출처 : http://proneer.tistory.com/entry/Sort-퀵-정렬Quick-Sort


    2015_11_23 추가 (Integer 타입으로 테스트 코드)
    (Visual Studio 에서 자동들여쓰기 정렬 기능 - Alt+F8 굿)

    #include <stdio.h>
    #include <stdlib.h>

    void quicksort( int *a, int low, int high )
    {
    int pivot;
    /* Termination condition! */
    if ( high > low )
    {
    pivot = partition( a, low, high );
    quicksort( a, low, pivot-1 );
    quicksort( a, pivot+1, high );
    }
    }

    void swap(int *a,int left,int right)
    {
    int temp;
    temp = a[left];
    a[left] = a[right];
    a[right] = temp;
    }

    // pivot 위치를 left 즉, index의 첫번째 위치의 녀석으로 잡고 돌아간다..
    int partition( int *a, int low, int high )
    {
    int left, right, pivot;
    int *pivot_item = (int *)malloc(sizeof(int));

    *pivot_item = a[low];

    pivot = left = low;

    right = high;

    while ( left < right ) {
    /* Move left while item < pivot */
    while( a[left] <= *pivot_item ) left++;
    /* Move right while item > pivot */
    while( a[right] > *pivot_item ) right--;
    if ( left < right ) swap(a,left,right);
    }
    /* right is final position for the pivot */
    a[low] = a[right];
    a[right] = *pivot_item;
    return right;
    }

    void main()
    {
    int val[8] = {67, 90, 57, 25, 84, 32, 73, 54};
    int i = 0;

    quicksort(val, 0, 7);

    printf("val : ");
    for(i = 0; i < 8 ; i++)
    {
    printf("%d\n", val[i]);
    }

    }


    '컴퓨터공학' 카테고리의 다른 글

    국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
    Software Process Model  (0) 2008.09.28
    합병정렬 - 알고리즘  (0) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    Embedded에서 ARM의 의미  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache 적중률  (1) 2008.08.31
    cache memory - 2  (0) 2008.08.31
     

    삽입정렬 - 알고리즘

    Posted by ironmask84
    2008. 9. 21. 22:02 컴퓨터공학


     
    Insertion Sort


    삽입정렬은 이름에서 알 수 있듯이 삽입을 통해 정렬을 완성하는 알고리즘이다. 삽입정렬은 모든 데이터를 앞에서부터 차례로 비교 하여 자신의 위치에 삽입을 통해 정렬을 수행한다. 배열이 길어질수록 효율이 떨어지지만 구현이 간단하다는 장점이 있다.

    삽입정렬의 과정을 살펴보면 다음과 같다.

    [Flash] http://proneer.tistory.com/attachment/dl146.swf



    다음은 삽입정렬을 구현한 예이다.

    #using C
    void insertionSort(int list[], int n)
    {
              int i, j, key;
              for(i=1; i<n; i++) {
                        key = list[i];  // 두 번째 값부터 선택
                        for(j=i-1; j>=0 && list[j]>key; j--)  // 선택된 값(key)보다 작은 값을 찾는다.
                                  list[j+1] = list[j];       // 작은 값을 찾은 경우 그 값뒤의 모든 값을 우측으로 이동
                        list[j+1] = key;       // 해당되는 곳에 값을 삽입한다.
              }
    }

    삽입정렬 또한 비교연산을 상수로 보고 주어진 데이터가 정렬되어 있지 않다고 보면 O(n2)의 시간복잡도를 가진다. 삽입정렬의 특징은 시간복잡도가 입력 자료의 구성에 따라 달라진다는 사실이다. 입력 자료가 정렬되어 있으면 있을 수록 빨라진다. 따라서, 같은 시간복잡도를 가지는 선택정렬이나 버블정렬보다 효율이 높다.

    삽입정렬은 또한 안정한 정렬방법이며 제자리 정렬(in-place sort)이다. 안정한 정렬이라는 것은 같은 값일 경우 상대적 위치가 바뀌지 않는 경우이다. 제자리 정렬은 정렬을 위해서 주어진 자료 공간 이외의 공간을 사용하지 않고 정렬하는 것을 말한다.


    Reference : http://ko.wikipedia.org/
                     Data Structures in C, 생능출판사

    출처 : http://proneer.tistory.com/entry/Sort-삽입-정렬Insertion-Sort

    '컴퓨터공학' 카테고리의 다른 글

    국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
    Software Process Model  (0) 2008.09.28
    합병정렬 - 알고리즘  (0) 2008.09.21
    퀵소트 - 알고리즘  (4) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    Embedded에서 ARM의 의미  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache 적중률  (1) 2008.08.31
    cache memory - 2  (0) 2008.08.31
     

    임베디드 시스템과 임베디드

    Posted by ironmask84
    2008. 9. 15. 18:11 컴퓨터공학


    임베디드 시스템과 임베디드 OS

    임베디드 리눅스, 윈도우 CE, 팜 OS 등 모빌 디바이스 시장이 꾸준한 성장세를 유지하면서 디벨로퍼들의 관심을 끌고 있다. 모빌 컴퓨팅 장비와 솔루션들이 기업 생산성 향상을 위한 주요 도구로 자리잡아 가면서 21세기 주요 화두로 등장한 임베디드 프로그래밍의 주가 또한 동반 상승하고 있는 추세다. 특집 1부에서는 임베디드 시스템의 정의와 발전, 그리고 임베디드 시스템에서 사용되는 각종 OS에 대해 살펴본다.


     

    현재 컴퓨터 프로그래밍에 관련된 일을 하고 있거나 배우고 있는 이들의 일반적인 관심사는 화려한 그래픽 유저 인터페이스 환경에서 기교를 발휘해 프로그래밍을 하는 것이 아닐까 한다. 많은 사람들이 마이크로소프트 윈도우 환경에서 MFC와 같은 라이브러리를 구현하는 것이 사실이다. 하지만 컴퓨터 프로그래밍에는 PC 환경에서 구현하는 프로그래밍 외에 임베디드 시스템에서 구현하는 프로그래밍도 있다. 임베디드 시스템은 PC 환경과 공통적인 부분도 있으나 다른 점이 상당수 존재하므로 임베디드 시스템에서의 프로그래밍도 PC 환경에서의 프로그래밍과 다른 점이 많다. 이 글에서는 임베디드 시스템의 정의와 발전, 그리고 임베디드 시스템에서 사용되는 각종 OS에 대해서 알아본다. 먼저 임베디드 시스템의 정의와 발전되어 온 과정을 살펴보기로 한다.


     

    임베디드 시스템의 정의

    전기, 전자, 컴퓨터 기술들이 발달하면서 이들 기술을 이용한 다양한 기기들이 우리의 생활 주변에 들어오게 되었다. PC를 제외하더라도 일상 생활에서 사용되고 있는 TV, 냉장고, 세탁기, 전자레인지 같은 전자 가전제품 뿐만 아니라 우리가 가지고 다니는 핸드폰, PDA, 그리고 사이버 아파트의 홈 관리 시스템, 홈 네트워크 게이트웨이 장치, 그 밖의 교통관리 시스템, 주차 관리 시스템, 홈 관리 시스템, 엘리베이터 시스템, 현금 지급기(ATM), 항공 관제 시스템, 우주선 제어장치, 군사용 제어 장치 등 셀 수도 없이 많은 기술들이 우리 생활과 밀접하게 관련되어 도움을 주고 있다.

    위에서 열거한 것들의 개발 환경을 생각해 보면 임베디드 시스템의 개념을 잡는데 상당히 도움이 될 것이다. 임베디드 시스템(Embedded System)이란 미리 정해진 특정 기능을 수행하기 위해 컴퓨터의 하드웨어와 소프트웨어가 조합된 전자 제어 시스템을 말하며, 필요에 따라서는 일부 기계(mechanical parts)가 포함될 수 있다

    즉 우리 생활에서 쓰이는 각종 전자기기, 가전제품, 제어장치는 단순히 회로로만 구성된 것이 아니라 마이크로프로세서가 내장되어 있고, 그 마이크로프로세서를 구동하여 특정한 기능을 수행하도록 프로그램이 내장되어 있는 시스템을 가리키는 것이다.

    세탁기를 예로 들면 예전의 것은 세탁과 탈수의 기능만 갖는 단순한 기기였지만 요즘 나오는 세탁기는 옷감 종류부터 시작해서 세탁할 옷의 양, 물의 온도 등을 고려하여 세탁할 수 있도록 되어 있다. 이와 같이 이전의 시스템으로는 하기 힘든 것을 마이크로프로세서와 그에 따른 제어 프로그램이 내장된 임베디드 시스템이 수행하는 것이다(그림 1 참조).

    임베디드 시스템의 발전과 적용

    초기의 임베디드 시스템은 그 구성이 매우 단순하다. 8bit/16bit 컨트롤러에 제한된 동작을 하도록 하는 소프트웨어가 탑재된 시스템이 전부였다. 물론 이 시스템은 지금도 사용된다. 하지만 강력한 마이크로프로세서와 Digital Siginal Processing(DSP) 칩이 일반적으로 사용됨에 따라 사용영역이 넓어지고 그에 따른 소프트웨어도 발달하게 되었다. 또한 이러한 대형 시스템을 제어하기 위한 임베디드 OS가 등장하게 되었다.

    임베디드 시스템이 적용된 여러 분야를 살펴보기로 한다.


     

    공장 자동화

    공장 자동화(FA : Factory Automation)는 사무 자동화, 가정 자동화와 더불어 3A로 불린다. 그 중에서 공장 자동화는 가장 급속도로 발전하여 자동화 산업의 선도적 역할과 제조 공정 분야의 중추적인 기능을 수행하고 있다.

    공장 자동화는 미리 작성된 소프트웨어를 통해 사람의 개입 없이도 제품의 설계, 제조, 조립, 검사 등의 생산 공정을 거쳐 창고로부터 제품이 출하되는 일체의 생산 과정을 자동적으로 관리하는 시스템인데 중앙 제어 시스템에 의해 제어된다. 이와 같은 공장 자동화의 최종 목표는 무인화(unmanned factory)이기 때문에 생산라인에서 사용되는 기계 장치가 점차 자동화되어 감에 따라 인간의 노동력도 자동화된 기계 장치로 대체되고 있다.

    공장 자동화의 이점은 생산량의 증대, 생산비의 절감, 품질의 향상, 생산 기간의 단축, 기능공 부족 해소, 위험한 작업의 대신 수행을 들 수 있다.

    공장 자동화에서 임베디드 시스템의 발전 모습을 가장 찾아보기 쉬운데, 공장 자동화의 발전이 임베디드 시스템의 발전과 역사를 함께 한다고 보아도 무관하다. 지금 세워지고 있는 공장들은 노동력 중심의 공장 설비보다 최신 시스템의 자동화 설비 장치를 가지고 제품을 보다 효율적으로 생산해 내고 있다.

    공장 자동화에 들어가는 자동화 장비와 설비들이 바로 임베디드 시스템의 한 부분이다. 이 장비와 설비들은 목적에 따라 하드웨어로 구성되어 있다. 확장성, 업그레이드, 기능 수정을 위해 소프트웨어를 조합하여 구축하기도 한다.

    이러한 장비는 1960년대 초 1, 2차 세계대전 이후 제어분야 제품의 생산과 연구 개발이 활발하게 진행되면서 발전하였다. 특히 1957년 러시아의 첫 번째 인공위성 발사, 1962년 미국의 첫 번째 통신위성 발사의 성공은 이러한 Digital Control 분야를 발전시키는데 큰 역할을 했다. 이때 가장 인기 있었던 분야가 Direct Digtal Control(DDC)였다. 기존의 아날로그 컨트롤러가 수행하던 것들을 컴퓨터가 하게 된 것이다. 그러나 이러한 발전과 애플리케이션의 증가에도 불구하고 기존의 아날로그 컨트롤러에 비해 월등히 가격이 비쌌기 때문에 컨트롤이 실패했을 경우 백업이 불가능했다.

    1970년대 초반(하드웨어 시대)은 컴퓨터 컨트롤 하드웨어, 소프트웨어를 포함한 계측기기의 발전 시대였다. 또한 네트워크 상에 연결된 몇 대의 컴퓨터에 대한 분산 공정 제어가 공장 생산설비의 목적으로 개발되었다. 1974년에 프로그램을 저장하고 재호출할 수 있는 메모리를 탑재한 PLC를 Matsushita Electrical Indust rial에서 제작하였고, 곧이어 마이크로프로세서가 개발되면서 현재의 임베디드 시스템과 같은 모습을 갖추게 되었다.

    현재는 각급 공장의 생산라인 시스템을 제어, 감시 및 자동화 할 수 있고, 생산 과정에서 얻어지는 각종 생산 자료 및 정보들을 컴퓨터가 데이터베이스에 저장한다. 특히 단독 구성, 상위 호스트와의 네트워크 구축을 통해 생산과 결과 통보를 용이하게 한다.


     

    가정 자동화

    가정 자동화(HA : Home Automation)란 주택을 단순한 주거 개념으로 보지 않고 컴퓨터와 통신 및 반도체 기술을 응용하여 일상 생활을 자동화시킨 가정을 의미한다. 컴퓨터 통신망을 이용하여 생활정보, 문화정보, 홈뱅킹, 홈쇼핑, 학습 정보, 진료 등 많은 정보를 얻음으로써 사용자들이 시간과 공간의 제약에서 자유로와 지는데 목적이 있다.

    가정 자동화에 대한 기술개발은 이미 70년대부터 시작되었다. 리모트 컨트롤 하나로 집안이나 외부에서 조명, 수도, 가스, 난방, 가전 제품 등을 제어하는 것이 목표였다. 이런 시도에는 주로 유선개념이 적용됐기 때문에 여러 기기를 제어하는 데 전기선 외에 별도의 선과 장치가 필요한 것이 단점이다.

    최근에는 무선제어 기술이 발달하면서 가정 자동화 시스템에 대한 연구가 활발하다. 앞으로 가정의 가전 제품 환경이 무선 쪽으로 변할 것이 분명하기 때문에 정보통신 업체들뿐만 아니라 가전 제품 업체들도 많은 연구를 하고 있다. 국내에는 삼성전자와 LG전자 등이 이미 개발에 착수한 것으로 알려져 있다. 무선제어 기술의 가장 큰 걸림돌은 가전 제품에 장착될 무선 모듈의 단가와 표준화 문제이다. 이노버텍은 표준 공용 무선 프로토콜인 스왑(SWAP : Shared Wireless Access Pro tocol)에 맞춰 제품을 개발됐다. 2∼3년 후면 무선을 이용한 가정 자동화 시스템이 활발하게 보급될 것이라는 게 업계의 예상이다.


     

    PDA

    PDA는 Personal Digital Assistant의 약자로, 번역하면 휴대형 정보 단말기이다. 노트북보다 훨씬 작은 소형 컴퓨터이며 전자수첩보다 강력한 컴퓨팅 파워를 갖고 있다. 전체 크기가 작기 때문에 디스플레이 장치(LCD)의 크기가 제한되며, 펜으로 문자를 써서 인식하게 하는 펜 입력을 기본으로 하고 있다.

    일정관리, 주소록, 메모장 같은 개인정보 관리 프로그램을 기본으로 제공하며, PC와 연결하여 자유롭게 데이터를 주고받을 수 있다. 또한 기본으로 제공되는 프로그램 외에 새로운 프로그램을 설치하여 사용할 수 있다. 최근에는 무선통신의 발달로 PDA를 통한 인터넷 접속이 가능하게 되어, PDA는 무선인터넷 분야를 새롭게 개척해 가고 있다.

    스케줄과 거래처 관리가 필수적인 비즈니스맨이나 일정관리가 필요한 대학생들은 주로 다이어리, 전자수첩 등 비효율적인 방법으로 개인정보를 기록되고 이용해 왔다. PDA는 기본적으로 제공되는 프로그램과 추가 애플리케이션을 통해 개인정보 관리의 비효율성을 개선해 준다. 또한 PDA의 개인정보 관리 프로그램들과 대응되는 PC용 개인정보 관리 프로그램을 제공해 PDA와 PC를 연결하여 입력된 정보들의 수정, 추가, 백업을 지원함으로써 새로운 차원의 개인정보 관리 방안을 제시한다. PDA를 이용하면 장소에 구애받지 않고 이동 중에도 휴대폰과 연결하여 인터넷에 접속할 수 있다. 웹 페이지 검색, 이메일 송수신, PC 통신, 주식매매 등 PC에서 할 수 있는 인터넷의 주요 기능들을 PDA에서 이용할 수 있다.


     

    각종 전자 제품

    최근 출시되는 전자 제품 중에는 마이크로프로세서를 넣지 않았거나 프로그램을 탑재하지 않은 제품은 거의 없다. 물론 간단한 장치들은 그런 프로그램이 없어도 직접 회로를 설계하여 해결할 수 있지만, 조금만 덩치가 크거나 지능적인 제품들은 거의 임베디드 시스템을 도입하고 있다. 주위의 밝기에 따라 조도가 바뀌는 스탠드, 주변의 밝기에 따라 자동으로 화질이 명도가 바뀌는 기능을 탑재하거나 적당한 시간에 자동으로 켜지고 꺼지는 텔레비젼도 있다.

    텔레비젼에 장착해 인터넷 서비스를 구현하는 셋톱 박스들도 선보이고 있다. 여기에는 반드시 임베디드 시스템이 필요하다. 뿐만 아니라 전자레인지, 전기 밥솥, 진공 청소기, 에어컨, 냉장고 등의 전자 제품들은 임베디드 시스템의 도움 없이는 불가능하다. 이제는 가전제품들도 인터넷과 결합한 인터넷 TV, 인터넷 냉장고, 인터넷 전기밥솥들이 등장하고 있다. 이런 기술들은 단순한 회로 구성이 아닌 진보된 하드웨어 기술과 소프트웨어 기술이 어우러진 고급 임베디드 시스템의 결정체이다.


     

    임베디드 시스템에서의 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가 포함된다고 보는 편이 좋을 것이다.


     

    임베디드 OS

    현재 나온 임베디드 OS는 그 종류가 무수하게 많다. 그 중 대부분은 RTOS이며 RTOS가 임베디드 OS라고 말해도 손색이 없을 것이다. 하지만 여기에는 Windows CE, 임베디드 Linux, 그리고 임베디드 시스템에서 Java를 쓸 수 있도록 하는 임베디드 Java와 퍼스널 Java 등이 포함된다.

    우선 기존의 상용 RTOS를 살펴보고, End-User의 강자 Windows CE, 엄청난 열기의 임베디드 Linux, 임베디드 Java와 퍼스널 자바의 가능성에 대해서 언급해 보겠다.


     

    상용 RTOS

    RTOS는 그 종류만 해도 수를 헤아리기 힘들다. 그 이유는 데스크탑 시장처럼 특정 OS가 임베디드 OS 시장을 점유하는 것이 아니기 때문이다.

    이들 RTOS는 선점형 멀티태스킹을 지원하며 PO SIX를 지원한다. 각 태스크들은 우선순위를 가지고 있어 높은 우선순위를 가지는 태스크들이 먼저 실행되는 구조이다. 그리고, 이들 RTOS는 보통 커널 모드와 사용자 모드가 있어 시스템 콜에 의해서 이 모드에 대한 독립성을 보장한다. 또한 통합개발환경과 디버깅 툴을 개발하여 개발자들이 쉽게 개발할 수 있도록 지원하고 있다. 단점이라면 이들 RTOS들이 대부분이 상용 OS들이라 라이센스 비용이 만만치 않은 것이다.

    현재의 RTOS들을 열거하면 지금은 WindRiver와 통합된 ISI의 pSOSystem, WindRiver의 VxWorks, 마이크로텍의 VRTX, 마이크로웨어의 OS-9 등의 상용 RTOS와 교육용으로 나온 uCOS Real-Time Kernel이 있다.


     

    ① pSOSystem

    ISI에서 1980년대에 개발한 pSOSystem은 우리나라의 여러 업체가 채택해서 사용하고 있는 RTOS로 삼성전자가 pSOS+ 개발에 참여해 라이센스를 갖고 있어 비교적 우리나라에 잘 알려져 있다. 컴파일러 전문업체(Diab Data)와 디버깅 전문업체(SDS)를 따로 두고 있기 때문에 이들 분야에 있어 다른 RTOS들 보다 높은 기술력을 가지고 있다. 현재 삼성전자가 개발한 휴대폰의 핵심칩인 Scom3000에 포팅되었으며, 각종 통신장비와 네트워크 장비 등에서 사용되고 있다(그림 2 참조).

    이 RTOS는 커널을 중심으로 해서 여러 개의 soft ware components들로 구성되어 있다. 이들 soft ware components들은 각각의 독립적인 모듈로 되어 있으며 통합개발환경 툴로 pRISM+를 제공하고 있다.

    pSOSystem은 선점형 멀티태스킹 RTOS로 각 태스크들은 우선순위를 가지고 있어 우선순위가 높은 태스크들의 작업수행이 먼저 이루어진다. 따라서, 선점형 스케줄링 방식을 따른다고 볼 수 있다. 만일 각 태스크들이 같은 우선순위를 가진다면 스케줄링 방식은 Time slicing에 의한 라운드로빈 방식으로 바뀌게 된다. 태스크의 수는 총 256개이며 태스크 레벨이 255가 가장 높고, 0이 가장 낮다. 특이할 사항은 레벨 240에서 255는 Kernel에 의해 사용되도록 지정되어 있다는 것이다.

    그리고 태스크 관리, 세마포어, 메시지 큐, 타임관리 및 타이머, 이벤트 및 비동기 Signal, 에러처리, 동적인 메모리 저장관리, 다른 태스크들로부터의 코드나 데이터 보호 등의 서비스를 지원한다. 여러 개의 다른 실행모드를 가지고 있는 CPU를 위해서 사용자 모드와 슈퍼바이저 모드를 제공하고 있다. 각 components들을 간단하게 설명하면 다음과 같다.


     

    ·pSOS+: 실시간 멀티태스킹 커널로서 단일 프로세서용 커널이다.

    ·pSOS+m: 다중프로세서용 멀티태스킹 커널.

    ·pNA+: TCP/IP 프로토콜 스택

    ·pRPC+: Remote Procedure Call 라이브러리

    ·pHILE+: 파일 시스템 관리자 (MS-DOS, NFS, ISO9660 지원)

    ·pPERC+: ANSI C/C++ 표준 라이브러리

    ·pROBE+: 타겟용 저수준 디버거

    ·pMONT+: 타겟용 고수준 디버거/분석기

    ·pNET+: 디버깅을 위한 ethernet 연결

    ·pSOS+ Query Library: pSOS+ 객체에 대한 상세 정보 제공

    ·pERC: 실시간 자바

    ·pLM+: 라이브러리 관리자

    ·OpTIC: 그래픽 라이브러리

    ·pRISM+: 통합개발환경


     

    pSOSystem의 전체 구조는 그림 3을 참조하기 바란다.

    pSOSystem은 실시간 멀티태스킹 커널을 중심으로 여러 개의 software components와 라이브러리를 두고 있다. 이런 components와 라이브러리는 선택적으로 사용될 수 있다. 하부구조에는 디바이스 드라이버와 칩과 각종 디바이스의 정보를 담고 있는 BSP(Board Support Package)를 담고 있다. 만일 하드웨어가 변경될 경우 이 BSP만 수정하여 시스템 프로그램에 많은 변경없이 쉽게 만들어 낼 수 있으므로 BSP를 따로 구별한다. 따라서, 전체적으로 정리해 보면 BSP와 디바이스 드라이버의 바탕 위에 커널과 기타 필요한 compo nent들을 링크하고, 다시 그 위에 사용할 각종 태스크와 application 프로그램을 제작하여 사용하는 것이다.


     

    ② pSOSystem의 통합 개발환경 pRISM+

    pRISM+는 pSOSystem 개발자가 좀더 용이한 개발을 위해 소스코드 분석을 위한 툴과 컴파일러, 링커, 디버깅할 수 있는 툴을 제공하는 통합 개발환경이다. 그 구성을 살펴보면 pSOSytem, pRISM+ Manager, pRISM+ Wizard, Object Browser, ESp, SNiFF+ 등을 들수 있다(Version 1.2.1을 기준, 그림 4 참조). pSOSystem에서는 컴파일러나 통합개발환경을 CPU별로 제공한다. 따라서 대상이 되는 CPU에 대해서는 최상의 지원을 할 수 있다는 장점이 있다.


     

    ③ VxWorks

    화성 착륙선 패스파인더의 운영체제로 쓰인 Wind River의 RTOS인 VxWorks는 pSOSystem과 유사한 점이 많다. pSOSystem이 통합 개발환경으로 pRI SM+를 제공한다면 VxWorks는 토네이도를 제공한다. VxWorks의 커널인 마이크로 커널은 선점형 멀티태스킹이며 총 태스크의 단계는 256이고 스케줄링 방식도 높은 우선순위를 가지는 태스크가 먼저 실행하는 방식을 지원한다. 만일 같은 우선순위를 가진다면 라운드 로빈방식의 스케줄링을 이용하는 것도 pSOSystem과 유사하다. 또하나 pSOSystem이 여러 개의 Compo nents로 되어 있다고 하면 VxWorks는 200개 가량이 모듈을 지원하는 형식으로 되어 있어 개발자는 이들 필요한 모듈만 사용해서 시스템에 맞는 운영체계를 구성할 수 있다.

    VxWorks는 현대의 RTOS들이 지원하는 거의 모든 서비스를 지원하고 있다. 태스크 간의 통신을 위해 세마포어와 메시지 큐, 공유메모리, 소켓, signal 등을 제공하고, 표준 TCP/IP 네트워킹과 ROM이나 로컬 디스크, 네트워크로 부팅이 가능하게 되어있다. 파일시스템은 MS-DOS와 RT-11 파일 시스템을 지원하는 등 여러 가지 서비스를 제공하고 있다. VxWorks의 구조는 크게 하드웨어에 의존하는 BSP와 디바이스 드라이브 영역과 하드웨어에 의존하지 않는 커널과 그에 따른 모듈, 그리고 애플리케이션 프로그램으로 나누어진다. 이것은 pSOSystem과 매우 유사한 부분이다.


     

    ④ VxWorks의 통합 개발환경 토네이도

    토네이도는 교차개발환경을 지원하는 통합 개발환경이다. 이 툴의 구성은 크게 3가지로 나누어지는데 Vx Works, Application 개발 툴(컴파일러와 프로그램들), VxWorks의 Application을 관리하고, 디버깅하고, 모니터링할 수 있는 통합 개발환경들로 이루어져 있다. 여기에는 소스코드 에디터, C와 C++ 컴파일러, 타겟 시스템의 상태를 visual한 환경에서 모니터링할 수 있는 브라우져, C언어 해석기인 WindSh 등의 기능이 들어 있다. 토네이도는 pRISM+와 달리 CPU마다 각각 다른 툴과 컴파일러를 제공하는 것이 아니라, 하나의 컴파일러에 모든 CPU를 지원한다(그림 5 참조).


     

    ⑤ WindRiver의 새로운 RTOS: Cumulus

    ISI가 WindRiver에 합병된 사실은 RTOS에 관심을 가진 이들은 다들 알고 있을 것이다. 또한 Wind River에서 새로운 RTOS가 나올 거라는 것은 쉽게 짐작할 수 있을 것이다. WindRiver는 2000년 2월 29일 시카고에서 열린 “the Embedded System Confe rence East”에서 새로운 RTOS를 개발한다고 발표했다. 코드네임은 Cumulus이며 이 RTOS는 pSO System과 VxWorks의 장점을 뽑아 만든다고 했으며, 아직까지는 작업중이라고 했다. 그리고 pSOSystem 사용자를 위해 올해 3/4분기 쯤에 “Stratus”를 발표한다고 했다.

    자세한 내용은 pSOSystem 홈페이지를 참조하기 바란다(http://www.isi.com). 만일 Cumulus가 나온다면 통합 개발환경에 있어 pRISM+를 따라 CPU 별로 따른 컴파일러와 개발툴을 지원할 것인지, 아니면 토네이도처럼 하나의 컴파일러에 모든 CPU를 지원할 것인지 지켜봐야 할 것이다.


     

    ⑥ VRTX

    VRTX는 Mentor Graphics Corporation에서 개발한 RTOS로 상당히 신뢰성이 높은 OS로 정평이 나 있다. FAA의 RTCA/DO-178B LEVEL A의 인증을 받고 있으며 기타 정부의 다른 기관으로부터도 인증을 받아 그 신뢰성을 인정받고 있다. 현재 통신장비, 네트워크 장비, 셀룰러, 경주용 자동차의 엔진 제어 시스템 등 다방면의 분야에서 사용되고 있다. 현재 우리나라에는 다산 인터네트에 공급되고 있으며, 삼성전자의 통신장비, 발전소의 모니터링 시스템, 전동차의 제어시스템 및 모니터링 시스템에서 사용되고 있다(그림 6 참조). VRTX는 기존의 RTOS와 크게 다른 점은 없다. 선점형 멀티태스킹 커널을 가지고 있으며, OS는 모듈 형태로 되어 있어 사용자들은 선택적으로 사용하여 운영체계를 구성할 수 있다. 이런 모듈들에는 멀티태스킹 커널 이외에 메모리가 매우 협소한 임베디드 시스템을 위해 커널의 양을 최적화한 커널도 있고, TCP/IP 프로토콜 스택 이외에 OSI 프로토콜 스택도 지원하고 있다. 파일 시스템은 MS-DOS 6.1을 포함하고 있으며, ANSI-C 라이브러리도 제공된다.

    VRTX는 스케줄링에 특이할 만한 사항을 가지고 있는데 시스템 콜의 중간쯤에 인터럽터가 발생하여 생기는 시간적 지연을 막기 위해 선점가능한 시스템 콜을 가지고 있다. 따라서 VRTX는 태스크가 수행할 준비가 되자마자 스케줄링이 가능하다.


     

    ⑦ VRTX의 통합개발환경 스펙트라

    VRTX의 통합개발환경 스펙트라는 총 4개의 모듈로 구성되어 있다. 기본적으로 통합개발환경이 가지는 RTOS와 디버깅 툴, 컴파일러를 제공하고, host와 타겟 시스템과의 연결방식도 이더넷, 시리얼, ICE, JTAG, BDM 등 여러 가지 방식을 제공한다(그림 7 참조). 스펙트라에서 주된 디버깅 툴은 XRAY 디버거인데 이 디버거는 시뮬레이션 기능, 모니터링 기능 등이 있다. 특히 툴이 GUI로 구현되어 빠른 편집, 컴파일, 다운로딩, 디버깅이 가능하다. 소스 수준의 디버깅과 타겟 시스템이 없어도 시뮬레이션이 가능하다. 공통적으로 필요한 소스코드는 따로 제공하고 있어 개발의 시간을 단축가능하다는 것도 장점이다. 이외에 상용 RTOS는 그 수를 헤아리기 힘들 정도로 많이 있으나, 몇가지 공통점을 이야기하면 아래와 같다(표 1 참조).


     

    ·선점형 멀티태스킹

    ·모듈화

    ·스케줄링 방식이 우선순위에 의한 방식 내지 라운드 로빈 방식

    ·통합개발환경 지원


     

    그외의 임베디드 OS

    그외의 임베디드 OS는 RTOS와는 달리 임베디드 시스템이 가지는 실시간적인 요소를 그다지 충족하지 못하는 OS들이다. 하지만 이들 OS들은 나름대로의 장점을 가지고, 실시간적인 요소가 그다지 필요없는 임베디드 시스템에 탑재되어 있다. 대표적인 OS가 Win dows CE, 임베디드 리눅스, 임베디드 Java/퍼스널Java 등이다.

    ① Windows CE

    PC 계열의 시장을 제패한 윈도우는 다시 모빌 시장으로 뛰어들었다. 즉 기존의 윈도우 인터페이스에 모빌네트워크 기능을 강화하여, 가전제품, PDA, 자동차 셋톱 박스 등에 탑재될 임베디드 OS를 만드는 일이었다. 버전 1.0에서 2.0 , 2.01, 2.11, 2.12(현재 3.0 Beta)에 이르기까지 커널은 여러 차례 버전업 되었지만, 여전히 윈도우의 모양을 하고 있다. 하지만 이런 요구를 맞추다보니 하드웨어의 사양이 매우 높아서, 가격 경쟁력에서 다른 모빌 제품에 밀리고 있는 실정이다. 네트워크 기능을 보면 적외선 통신, 데스크탑과의 오토싱크, 그리고, PCS나 셀룰러 폰을 이용한 웹 브라우징 능력을 갖고 있다. 특히, 차세대 가전 제품에 Windows CE를 이용하여 하나의 윈도우 호환 환경에서 홈 오토메이션, 카 내비게이션 등을 고려함으로써 한때 하드웨어 업체들의 강력한 지원을 받기도 하였다. 따라서, 개발 환경은 다른 상용 OS에 비해서 훨씬 편리한 것을 알 수 있다. 문제는 완전한 리얼타임 OS가 아니라는 점이고, 이러한 단점으로 인해서, 산업용, 정밀용으로는 신중히 생각해야 한다는 것이다. 물론 윈도우 98이나 NT에 비해서 상당히 안정적인 편이다.

    Windows CE는 32bit Windows OS와 호환성이 있는 임베디드 OS이다. 여러 RTOS와 마찬가지로 모듈화 되어 있다. 차이가 있다면 그 모듈이 좀더 세분화가 가능하다. 그 세분화한 것을 컴포넌트라고 한다. 좀더 자세히 말하면 모듈은 완전한 기능을 갖춘 것이고 컴포넌트들은 그렇지 못한 것이다. 이렇게 모듈화 되어 있기 때문에 필요한 부분만 선택하여 사용할 수 있게 되어 있다. 또한, 커널은 선점형 멀티 스레딩을 지원한다. Windows CE는 기본적으로 32개의 프로세서를 가질 수 있고, 하나의 프로세서는 8개의 스레드를 가질 수 있다. 이 스레드는 스케줄링의 기본이 된다.

    32bit Windows와 호환성이 있기 때문에 win32 API를 이용하여 쉽게 프로그램을 포팅할 수 있다. 개발 툴은 Platformbuilder 2.11, Windows CE for VC++ 6.0, Windows CE for VB 6.0이며, 섬세한 제어분야가 아니고, 엔드 유저를 지향하는 비쥬얼한 제품에 상당히 유리하다. 또한 TCP/IP, PPP와 IrDA 같은 프로토콜을 가지고 있어 다른 윈도우 시스템에 쉽게 연결할 수 있고, Win32 Serial APIs, TAPI, Winlnet 등을 지원한다. 실제 Windows CE가 가장 많이 쓰이는 시장은 PDA 시장이다. 그러나 현실적으로 대부분의 PDA 시장은 Palm OS가 장악하고 있고, Windows CE가 차지하는 부분은 미미하다. 이런 현실에 마이크로소프트는 새로운 기능을 첨가한 Windows CE를 개발하려는 모습을 보이고 있다. 이를 포켓 PC라고 명하고 있으며, 그 내용을 살펴보면 Color Display를 지원하고, Outlook, Excel, Windows Media Player, Internet Explorer, eBook reader, Word and Money와 같은 애플리케이션 프로그램을 탑재하며 휴대폰과 연계해 wireless 기능까지 구현하겠다는 계획이다.


     

    ② 임베디드 리눅스

    Linux는 초기 PC나 서버급 시스템에 포팅이 되어 사용되다 최근 임베디드 시스템으로 그 관심사가 옮겨진 듯하다. 이미 해외에서는 임베디드 시스템에 리눅스가 포팅이 되어 실제 제품으로 나오고 있는 예도 비일비재하다. DEC에서 만든 DECstation이란 worksta tions은 MIPS 기반의 R2000/3000/4000에 리눅스를 포팅되었고, 모토롤라에서는 콜드파이어에 uclinux를 포팅하여 네트워크 장비를 개발하였다.

    http://www.arm.uk.linux.org/에 가보면 ARM core를 CPU로 쓰는 시스템에 linux를 포팅하여 만든 제품들이 있다. 주로 StrongARM 시스템에 포팅한 사례가 많다. Empeg라는 mp3 플레이어도 있으며, Itsy라는 Compag에서 만든 PDA역시 StrongARM에 리눅스를 포팅하여 만든 제품이다. 그중에 눈에 띄는 제품이 있는데 그것은 지메이트에서 만든 PDA인 YOPY이다.

    YOPY역시 StrongARM 시스템에 리눅스를 포팅하였으며, MP3 및 MPEG player, 웹 브라우저, 이메일 기능 등이 있다. GUI의 기능을 부가하기 위해 덩치가 큰 Xwindow 대신 W-window을 사용하였다.

    임베디드 OS분야에서 임베디드 리눅스의 비중은 점점 커져가고 있다. 기존의 임베디드 OS와 비교를 해보았으때 상용 OS보다는 임베디드 시스템이 가지는 실시간적인 요소를 충족시키지 못하는 것은 사실이다. 또한 Windows CE보다는 개발환경이 좋은 편도 아니다. 그리고 본래 PC 기반으로 만들어 졌기 때문에 메모리가 열악한 임베디드용으로 쓰기에는 커널이 너무 크다. 이런 불리한 점을 가진 임베디드 리눅스가 그 비중이 커지고 사람들이 많이 다루는 이루는 오픈 소스에 라이센스 비용이 없다는 것이 임베디드 리눅스가 가지는 큰 장점이라 하겠다. 그렇지만 분명 Rea-Time 기능이 떨어지기 때문에 Hard-Real Time System에서는 쓰기 힘들고, 커널의 크기를 줄여서 PDA 같은 임베디드 시스템에만 가능할지 모른다. 이러한 임베디드 리눅스에 실시간 제어의 요소를 가미한 것이 RT-Linux이다.


     

    ③ RT-Linux

    기존의 리눅스는 Time-slice에 의한 스케줄링 방식을 가지고 있다. 따라서, 지금 수행하고 있는 프로세서보다 다음에 수행될 프로세서가 우선순위가 높더라도 바로 지금 수행되는 프로세서가 중단되는 것이 아니고 time-out이 되어야만 현재의 프로세서가 CPU를 놓아준다. 또한, 현재 수행되는 프로세서가 다른 프로세서보다 우선순위가 높다고 해서 계속 수행되는 것이 아니라, 역시 time-out이 일어나면 다른 프로세서에게 CPU를 양보해야만 한다. 이런 이유로 인해서 기존의 리눅스가 Real-Time 기능이 떨어지는 것이다.

    RT-Linux는 New Mexico Tech의 Victor Yodaiken에 의해서 시작된 것으로 기존이 리눅스에 Real-Time 기능을 부과하였다.

    리눅스는 커널자체가 Real-Time 기능이 떨어지기 때문에 이를 대신할 리얼타임 커널을 만들었다. 여기서 기존의 커널을 그대로 두고 새로이 리얼타임 커널을 추가했다고 보는 편이 좋을 것이다. 이렇게 함으로써 최소한의 소스변경으로 리얼타임 기능을 추가할 수 있는 것이다. 기존의 커널은 새로운 리얼타임 커널 아래에서 하나의 태스크로 둔다. 여기서 기존의 커널은 우선순위가 가장 낮은 태스크로 두고, 다른 리얼타임 태스크들이 없으면 비로소 실행된다.

    리얼타임 커널은 리얼타임 태스크를 생성, 스케줄링해서 실행하고, 기존의 리눅스 커널은 자신의 태스크를 관리하고 자신의 인터럽터를 처리한다. 리얼타임 커널의 스케줄링은 선점형 스케줄러로써 태스크의 우선순위를 두고 스케줄링을 실시한다. 따라서, 커널이 선점형 커널이 되어야 하므로, 기존의 리눅스 커널이 제공하는 시스템콜을 리얼타임 태스크나 인터럽터가 이용하지 못하게 함으로써 이를 해결하고 있다.

    RT-Linux는 기존이 리눅스에 비해 리얼타임 기능이 향상된 것은 사실이지만 기존의 리눅스 커널에다 새로이 리얼타임 커널을 추가한 것으로 열악한 임베디드용으로 OS의 덩치가 큰 것이 단점이다.


     

    ④ 임베디드 시스템에서의 Java

    1990년에 Sun Microsystem에서 Green 프로젝트로 개발된 Oak는 전자제품에서 사용할 소프트웨어로 개발되었다. 이 소프트웨어는 다른 시스템에 대해서 이식성이 매우 높았으나 전자제품과 같은 임베디드 시스템에서는 쓰이지 못하고, 인터넷 프로그래밍에 쓰일 수 있다는 가능성을 발견해 Oak를 인터넷 프로그래밍이 가능하게 개발하여 만든 것이 Java이다. 이제껏 인터넷 프로그램으로만 쓰이다가 Java가 임베디드 시스템에서 사용될 수 있도록 한 것 중 대표적인 것이 SUN의 임베디드 Java와 퍼스널 Java인 것이다.

    Java의 가장 큰 장점은 어떠한 시스템에도 Java API와 JVM(Java Visual Machine)만 있으면 자바코드가 이식이 가능하다는 것이다. Java API와 JVM이 내장하고 있는 임베디드 Java와 퍼스널 Java는 기존의 상용 RTOS와 연계되어 사용가능하다는 것이다. 간단히 이야기해서 RTOS가 포팅된 타겟 시스템에 임베디드 Java나 퍼스널 Java에 연계되어 그 위에 Application으로 Java 코드나 Java 에플릿이 실행가능하다는 뜻이다.


     

    ⑤ 임베디드 Java와 퍼스널 Java의 비교

    퍼스널 Java는 JDK와 호환성을 가지고 있는 Java 응용 환경(Java Appication Environment : JAE)를 내장하고 있어 Java 애플릿 수행이 가능하다. 따라서, 어느 정도의 애플릿이 필요한 웹 브라우징 폰이나 셋톱 박스 같은 제품에서 사용한다. 임베디드 Java는 애플릿을 구현하는 부분이 빠진 JAE를 가지고 있어 애플릿 구현이 되지 않는다. 따라서 사용자 인터페이스가 제한적이다. 구현가능한 제품도 모빌 폰, 네트워크 장비, 프린터 등 사용자 인터페이스가 제한적인 제품에 사용된다.


     

    ⑥ JavaChip

    Java 코드를 마이크로 프로세서에서 직접 실행해서 프로그램의 수행속도를 빠르게 하기 위해 만든 프로세서가 JavaChip으로 picoJava, microJava, UltraJava 등이 있다. picoJava는 PDA, 스마트폰, 저전력 가전 디바이스에, microJava는 저가 네트웍 디바이스, PDA, 전기 통신 기기, 게임기에, UltraJava는 웹 PC등의 테스크탑 환경의 시스템에 각각 사용된다.


     

    마치며

    이상으로 임베디드 시스템의 정의와 특징, 그리고 임베디드 시스템을 제어하기 위한 각종 임베디드 OS에 대해서 간략하게 살펴보았다. 임베디드 시스템을 이해하고 임베디드 OS를 알려고 한다면 시스템 개발환경을 구축하여 실제로 임베디드 OS를 시스템에 포팅하여 애플리케이션 프로그램을 구현해 보는 것이 가장 빠를 것이다.

    현재 임베디드 시스템은 데스크탑 환경에서처럼 하나의 OS가 시장의 대부분을 차지하는 것이 아니라, 어떤 OS도 시장을 장악하지 못한 채 여러 개의 OS들이 출시돼 있는 상태다. 이들 OS들을 다 아는 것도 좋겠지만, 자신의 시스템에 맞는 OS를 택해 완벽하게 구현해 보는 것도 좋을 것이라 생각한다.

    출처 : http://cafe.naver.com/lovevirus4u/8 

    '컴퓨터공학' 카테고리의 다른 글

    국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
    Software Process Model  (0) 2008.09.28
    합병정렬 - 알고리즘  (0) 2008.09.21
    퀵소트 - 알고리즘  (4) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    Embedded에서 ARM의 의미  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache 적중률  (1) 2008.08.31
    cache memory - 2  (0) 2008.08.31
     

    Embedded에서 ARM의 의미

    Posted by ironmask84
    2008. 9. 15. 18:09 컴퓨터공학


    "ARM은 Advanced RISC Machine을 의미" 라고 하네요.

    1..최초의 ARM 프로세스(ARM은 Advanced RISC Machine을 의미)는 80년대 중반에 Acorn Computer Group에 의해서 고안되고 제조되었다. 시작할 때의 목적은 낮은 전력 소비로  낮은 비용의 프로세스와 높은 실행능력과 전력 효율을 구축하기 위한 것이었다.


    영국에 ARM이라는 회사가 있는데 이곳에서는 전문적으로 코어를 연구하는 곳입니다. 이곳 에  서 코어를 개발해서 각 회사(삼성,노키아,인텔등등)로 코어의 라이센스를 받고 팔게 되죠.

    그러면 이 코어를 가지고서 각 회사에서는 시퓨를 만드는것입니다.
    각 회사마다 제조 공정이 틀리기 때문에 같은 ARM코어를 사용하더라도 서로 다른 시퓨가 되어버  리죠. 그래도 내부적인 코어가 같기 때문에 arm용 어셈을 사용해서 시퓨를 제어 할 수 있는 거죠.


    2....ARM은 회사가 아니라 연구기관입니다.
    이곳은 제품을 만들어서 판매 하지 않습니다.

    쉽게 말씀드리지만 AMD나 Intel은 자기들이 CPU를 만들어서 판매 하지만 ARM이라는 회사는 CPU의 설계도를 만들후에 이에 대한 라인센스 비용을 받아고, 그 기술을 이전을 해서 하는 것입니다.

    만약 PDA 에서 ARM 9이라는 프로세서라면 ARM사에서 만든 ARM 9이라는 것이 아니라,
    ARM사에서 라이센스한 다른회사 노키아나 모토로라 텔슨...등등 이라는 회사들이 만든 라이센스해서 자기들이 제조한 ARM 9이라는 것입니다.

    쉽게 말해서 ARM 라이센스는 국내 삼성에서도 되어 있습니다.
    삼성에서 최근에 보면 자기네들이 헨드폰에 칩을 자율화한다고 이야기하지 않습니까?
    이것은 ARM사에서 ARM 11의 라이센스를 따서, 이것을 가지고 헨드폰에 쓸수있는 ARM11 CPU를 본격적으로 생산 한다는 것입니다.

    이러한 라이센스비용은 칩당 얼마의 라이센스비용을 지불하게 됩니다.
    물론 노티아나, Ti(테사스인스투루먼트)..등등에서도 생산을 하고 있습니다.

    옛날에 보면 Intel의 SA1110이라는 CPU를 들어보셨을 것입니다. 이것이 바로 스트롱암이라고 불리는데요. 이것은 바로 ARM 9 코어를 가지고 라이센스를 해서 변형을 한 CPU입니다


    출처 : http://canu.tistory.com/4


    '컴퓨터공학' 카테고리의 다른 글

    Software Process Model  (0) 2008.09.28
    합병정렬 - 알고리즘  (0) 2008.09.21
    퀵소트 - 알고리즘  (4) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache 적중률  (1) 2008.08.31
    cache memory - 2  (0) 2008.08.31
    cache memory - 1  (0) 2008.08.31
     

    운영체제의 종류

    Posted by ironmask84
    2008. 9. 15. 18:07 컴퓨터공학


    1)DOS

    DOS는 Disk(ette) Operating System의 약자 즉, 디스크 운용체계이다.
    그러나 DOS는 디스크뿐 아니라 출력장치, 입력장치, 인쇄장치 등 퍼스널컴퓨터의 여러 장치들을 함께 제어해주기 때문에 범용적으로 컴퓨터 운용체계라고 부르는 것이 적절하다.
    다시말해 DOS는 퍼스널컴퓨터의 본체, 모니터, 키보드, 프린터, 디스크드라이브 등의 조작법을 제공하여 각 장치의 기능을 활성화시키는 핵심 소프트웨어로서 사람의 두뇌에 해당한다.

    DOS의 대명사격인 MS-DOS가 처음 선보인 것은 81년으로 IBM이 인텔사의 8086/8088마이크로 프로세서를 CPU로 채택, 개발한 IBM PC가 처음 등장했던 시기와 같다.
    그러나 이보다 3년 앞선 78년에 8086마이크로프로세서에서 작동할 수 있는 DOS가 미 디지틀리서치사에 의해 개발된 바 있다.
    이것이 바로 8비트 퍼스널컴퓨터용 CP/M인데 이 운용체계는 MS-DOS개발의 근간이 됐다.

    < 마이크로소프트-도스의 역사>

    오퍼레이팅시스템(Operating System)은 PC하드웨어에서 응용애플리케이션을 운영할 수 있게 조정해주는 시스템 소프트웨어다.

    OS는 복잡한 칩들과 부품덩어리인 컴퓨터를 인간이 제어할 수 있게 해주는 중요한 역할을 하고 있다.

    OS를 기반으로 모든 종류의 응용애플리케이션은 하드웨어의 메모리나 보조기억장치 등의 장치를 활용할 수 있기 때문이다.

    워크스테이션이나 PC, 매킨토시 등 모든 형태의 컴퓨터에는 유닉스나 제닉스, 윈도우NT, 윈도우95, OS2, 시스템7, 넥스트스탭 등의 OS가 사용되고 있으며 OS를 기반으로 응용 애플리케이션 개발사들이 다양한 프로그램을 개발하고 있다.

    PC에서 가장 폭넓은 사용층을 확보하고 있는 MS-DOS 역시 이같은 OS중의 한 종류다.

    현재는 윈도우와 그래픽 사용자 환경이 일반화돼 도스가 한물간 시스템 소프트웨어로 전락하고 있지만 MS도스는 IBM PC에서 절대적이었다고 했을 정도로 소프트웨어 개발사에 한 획을 그은 시스템 소프트웨어로 기록되고 있다.

    잘 알려진 바와 같이 MS도스는 80년 초반, 마이크로소프트에서 개발했다.

    70년대 말과 80년 초반은 PC의 핵심부품인 CPU와 메모리, PC개발이 활발하게 진행되던 시기.
    더불어 PC를 제어할 오퍼레이팅 시스템의 개발이 대두되기 시작한 시기이기도 했다.

    1975년 2월 빌게이츠와 폴 알랜에 의해 설립된 마이크로소프트사는 이듬해 마이크로소프트라는 트레이드 마크를 정식으로 사용하면서 본격적인 소프트웨어 개발에 주력했다.

    1980년 마이크로소프트는 인텔 8086과 자일로그 Z80, 모토롤라의 M68000과 호환성을 가지는 OS인 마이크로소프트 제닉스를 개발하면서 오퍼레이팅 시스템 개발에 관한 명성을 확보하게 된다.

    그해 11월 IBM은 빌게이츠에게 새로 출하될 PC를 위한 오퍼레이팅 시스템을 개발해줄 것을 의뢰하고 12월 PC프로토 타입을 마이크로소프트에 인도함으로서 마이크로소프트에게 베이직과 OS를 개발할 수 있는 창구를 열어준다.

    마이크로소프트는 IBM PC의 프로토타입을 바탕으로 MS-DOS를 개발했다.
    특히 1981년 7월 시애틀컴퓨터 프로덕트로 부터 86도스를 매입해 MS-DOS에 접목하는 등 PC OS개발에 박차를 가해 IBM PC시장을 석권할 만반의 준비를 갖추어 나갔다.

    마이크로소프트에서 처음 개발한 MS-DOS는 8비트용 CP/M와 유닉스등의 OS로 부터 많은 영향을 받았으나 업그레이드를 지속하면서 독자적인 영역을 확보해 나갔다.

    특히 1981년 IBM은 4.77MHz 인텔 8088CPU와 64KB의 램에 MS도스를 탑재한 5150퍼스널컴퓨터를 발표했으며 이후 인텔과 마이크로소프트 MS도스 시스템간의 밀월관계가 시작된다.

    2)윈도우즈9.x / NT

    Microsoft Windows

    마이크로소프트에서 개발한 PC의 MS-DOS에서 수행하는 그래픽 방식의 다중 작업 지원 프로그램 또는 운영 체제.
    이는 여러 개의 사용자 프로그램을 각기 다른 그래픽 윈도우에 띄워서 사용할 수 있도록 하며, 프로그램간에 자료의 이동도 가능하다.
    또 그래픽 윈도우와 메뉴 방식이므로 사용하기가 편리하다.


    Microsoft Windows 9X

    32비트 운용체제.
    95년 8월 출시되어 1년동안 전세계적으로 4천만개가 팔렸다.
    플러그 앤드 플레이(PnP) 기능과 인터네트용 프로토콜 TCP/IP 지원 기능이 판매에 효과를 보였다.
    출하 때 가장 중요한 특징이었던 '마이크로소프트 네트워크(MSN)'가, 네트스케이프가 주도한 인터네트 열풍으로 95년 12월 MSN의 포기와 인터네트의 수용으로 결말났다.
    윈도즈95의 차기 버전으로 각각 '윈도즈98'과 '윈도즈98 Second Edition'이 있다.

    NT

    윈도2000은 NT 커널 기반의 MS 차세대 개인용 OS를 말한다.

    윈도2000은 완벽한 멀티태스킹을 구현하여 윈도98보다 뛰어난 성능을 제공하는 것은 물론 기업용 컴퓨터에 버금가는 높은 신뢰성과 안정성을 제공한다.

    윈도2000은 윈도98과 윈도NT의 다음 버전이 통합된 것으로 완벽한 64비트 커널 구조를 갖는 차세대 NT기반 기술을 사용한다.

    윈도2000은 시스템 관리자의 수동적인 손길이 전혀 필요 없이 모든 컴퓨팅 기능을 수행할 수 있도록 하는 「제로 관리」를 표방하고 있다.
    < 이를 위해 데이터 복구기능인 「인텔리미러(IntelliMirror)」, 「서버 클러스터링」, 네트워크 클라이언트들을 쉽게 관리할 수 있는 「액티브 디렉터리」기능 등을 「윈도2000」에 포함시킬 것이라고 한다.
    전문가들은 베타 2버전까지는 기능들이 다소 복잡하고 불안정해 쉽사리 이를 안정화하기 힘들 것이라고 예측하기 때문에 「윈도2000」의 구체적인 출시 가능성은 베타 3버전이 나온 후에야 알 수 있을 것이라고 관측하고 있다.

    3)UNIX

    유닉스는 AT&T's Bell Labs의 시스템 엔지니어인 Kenneth Thompson과 Dennis Ritchie가 1969년에 처음 만들어 졌다.
    그뒤 수많은 개선을 하면서, 많은 사람들이 사용하게 되자, 1977년 Interactive Systems Corporation에서 처음으로 상용 유닉스를 판매하기 시작했다.
    이와 함께 켈리포니아의 버클리 대학에서 유닉스 시스템에 대한 작업을 시작하고, 1977년에 흔히 BSD라고 알려진 Berkeley Software Distribution 운영체제를 선보였다.
    이 운영체제 또한 많은 사람들의 호응에 힘입어, C 쉘이라는 쉘이 널리 사용되기 시작했다.
    한편 AT&T 버전에서는 다른 쪽으로 개발을 계속했으며, 1978년 버전 7에서는 Bourne 쉘이 처음으로 포함되었고, 1983년까지 각종 상용 유닉스를 취급하는 회사들이 성장하면서, Sun Microsystems에서 유닉스 워크스테이션을 발표하였다.
    여기서 System V라는 새로운 운영체제가 등장하는데, 이것은 원래의 AT&T UNIX 운영체제를 그대로 수용하면서, 기타 여러가지 장점들을 포함시켜, 요즘 많은 사람들이 사용하게 되었다.

    4)LINUX(The Linux operationg system)

    리눅스(Linux)란 워크스테이션에서 주로 사용되는 유닉스와 유사한 운영체제이다.
    중대형급 이상에서 사용되는 유닉스와는 달리 386급 PC에서도 활용할 수 있고 유닉스와 거의 비슷한 기능을 제공한다는 장점을 갖고 있다.
    리눅스는 핀란드 헬싱키 대학 Linus Torvalds에 의해 개발됐으며 91년 11월 버전 0.10 이 공개되면서 보급이 확대되기 시작했다.
    리눅스는 그래픽 환경의 X와 텍스트 형태의 언어, TEX, TCP/IP의 네트워킹을 지원하고 응용 프로그램들 역시 다수 개발돼있기 때문에 유닉스와 거의 유사한 환경을 제공한다는 것이 특징이다.
    1960년대 벨연구소에서 처음 개발돼 공개소프트웨어 형식으로 배포되던 유닉스의 상용화가 리눅스탄생의 배경이 된 것이다.
    당시 많은 프로그래머들은 유닉스와 같이 강력하면서도 동일한 환경을 제공하고 소스 역시 여러 사람들이 공유할 수 있는 운영체계에 대한 필요성을 느끼고 리눅스 개발작업에 동참하게 됐다.
    리눅스는 소프트웨어 버전업 과정에서 개발자들이 독립적으로 만든 다양한 종류의 프로그램이 발표됐는데, 레드핫 (Red Hot)소프트웨어에서 만든 「레드햇」과 「슬랙웨어」 등이 현재 인기를 끌고 있다.

    5)MAC OS

    애플 컴퓨터 사의 매킨토시 컴퓨터에 사용되는 운영 체제의 총칭이다.
    개객의 운영 체제 이름은 System으로 불리며 System 7, System 7.5 등이 있다.

    미국 애플 컴퓨터 사가 1997년 7월에 발매한 Mac용 운영 체제이다.
    처음에 이 버전 8은 버전 7.5보다 대폭적인 기능 확장이 예상되었지만 여러 번 애플 컴퓨터 사의 전략 변경으로 차기 운영 체제의 랩소디(Rhapsody)까지 이어 주는 것이 되었다.
    주된 기능 확장은 파인더의 멀티스레드화 등이다.

    6)BeOS

    최근 반 마이크로 소프트진영이 전폭적으로 지원을 약속한 운영체제가 있다.
    그 중 하나는 자유로움의 상징 숨쉬는 OS인 리눅스이고, 다른하나는 바로 지금 언급하려고 하는 미디어 기반 64비트 운영체제인 Be사의 BeOS이다.
    윈도우즈95가 등장한 그해에 때를 같이하여, 일개 벤처기업에 불과했던 Be사는 BeOS를 발표하였다.
    비록 그당시엔 파워PC만을 대상으로 그들의 운영체제를 소개했지만, 지난 97년 인텔플랫폼에서 운영이 가능한 "BeOS 3.0 for Intel"을 발표하기에 이르렀다.

    출처 : http://canu.tistory.com/5

    '컴퓨터공학' 카테고리의 다른 글

    합병정렬 - 알고리즘  (0) 2008.09.21
    퀵소트 - 알고리즘  (4) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    Embedded에서 ARM의 의미  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache 적중률  (1) 2008.08.31
    cache memory - 2  (0) 2008.08.31
    cache memory - 1  (0) 2008.08.31
    컴퓨터 시스템에서의 계산표현에 쓰이는 보수들  (0) 2008.08.30
     

    프로그래밍언어론 - 용어

    Posted by ironmask84
    2008. 9. 3. 22:19 컴퓨터공학


    Algorithms + Data Structures = Programs

    dangling reference ==> 해체된 공간을 가리키는 포인터, 위험 함.
    dangling object (garbage라고도 함) ==> 메모리 할당은 되어있으나, 참조할 방법이 없는 것
    fragmentation ==> 실제 가용 공간은 큼에도 불구하고,
                              가용공간이 조각나 있어서 큰 객체를 할당할 수 없게 되는 현상

    aliasing
    ==> 같은 변수에 대한 다른 이름, 하나의 위치를 두 가지 변수가 가리키기 때문에 발생
    장점 : copy본이 필요없다. 일관성 유지
    단점 : 값 변동을 추적하려면 예상치 못한 결과가 나온다, readablity가 떨어진다.

    Data Object의 정의
    ==> 데이터 값을 포함하는 container 또는 memory location, 일반적으로 변수라고 함.

    Data Object의 속성
    ==> Type, Location, Value, Name, Scope, Lifetime

    L-Value => 객체의 위치
    R-Value => 변수의 내용(값)

    Abstraction : 간략화 (implementaion 측면)
    Encapsulation : 묶음
    Information hiding : 세부구현 숨김 (Design concept 측면)

    Abstract Data Types
    ==> 1. value와 operation을 묶을 수 있도록 언어에서 지원해야 함 (encapsulation)
          2. 구현 세부 사항을 숨기도록 설계해야 함 (abstraction, information hiding)

    Subprogram ==> side effect(값을 리턴하지는 않고, 다른 어떤 변수의 값을 변화시키는 것)가 일어나는 것
    Function     ==> 값을 리턴하는 것

    Activation Records => 수행 중인 서브프로그램의 데이터 보관

    Lifetime : 할당되어 사용 가능한 시간
    Scope : 프로그램 내에서 볼 수 있는 영역

    Parameter => 매개변수, 형식인수 (ex => sub(x, y)       )
    Argument => 인수, 실 인수          (ex => call sub(5, 3) )

    Parameter Passing 종류
    ==> Call by Name, Call by Reference, Call by Value, Call by Value-result

    '컴퓨터공학' 카테고리의 다른 글

    퀵소트 - 알고리즘  (4) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    Embedded에서 ARM의 의미  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    cache 적중률  (1) 2008.08.31
    cache memory - 2  (0) 2008.08.31
    cache memory - 1  (0) 2008.08.31
    컴퓨터 시스템에서의 계산표현에 쓰이는 보수들  (0) 2008.08.30
    자료구조 - Tree  (0) 2008.08.30
     

    cache 적중률

    Posted by ironmask84
    2008. 8. 31. 01:11 컴퓨터공학


    캐쉬적중율에 대해 이의가 들어와서 추가 답변을 하겠습니다.
    일반적으로 캐쉬적중율은 캐쉬슬롯의 크기와 개수에 영향을 받습니다.
    같은 크기의 캐쉬메모리라면 캐쉬슬롯의 크기가 커지면 캐쉬슬롯의 개수가 적어지므로 캐쉬적중율이 작아질수 있습니다.
    하지만 캐쉬메모리 자체가 커진다면 분명 캐쉬적중율은 높아집니다.
    그렇기 때문에 최신의 프로세서가 대용량 캐쉬를 적용할려고 하는 이유가 되기도합니다.

    그리고 두번째로 FSB에 대해서도 말씀해주셨는데, 이의를 제기하신 분께서 말씀하신데로 FSB는 CPU의 내부 동작클럭을 말하는 것이 아닌 것이 맞습니다. 하지만 최근에 FSB 533/800 MHz 라고 표기하는 것은 메인보드 전반(노스브릿지, 사우스브릿지, 각종 메모리, AGP 장치등)에 데이터가 흐르는 동작클럭을 의미하는 것이 아니라. 일부분 (프론트 사이드 버스 부분)의 동작클럭을 말하는 것입니다. 하지만, 이 클럭이 CPU 내부동작클럭(2.8G, 3.0G 라고 표기하는 CPU 코어의 동작클럭이 아닌)과 같기 때문에 그렇게 설명한 것입니다. 이점은 제가 명확하게 설명을 하지 못한 것 같습니다.

    세번째로 AMD CPU의 정수연산능력에 대해 말씀하셨는데, 이점은 최근의 애슬론 CPU의 비교테스트에서도 인텔 CPU보다 높게 나타난 기사를 본적이 있어서 말씀드린 것입니다. 그리고 대부분의 프로그램에서 AMD와 인텔이 아무런 문제 없이 사용할 수 있는 것이 사실이지만, 몇몇 프로그램이 AMD에서 문제를 일으키는 경우가 있습니다. 대표적인 프로그램이 가상머신 프로그램인 VMware 라는 프로그램입니다. 이 프로그램은 인텔 CPU에 최적화되어 AMD CPU를 가진 컴퓨터에서는 동작하지 않는다고 알려져 있습니다.

    최대한 간단히 적으려다보니 중요한 핵심을 많이 잘못적은 것 같습니다. 좋은 지적해주셔서 감사합니다.

    http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10405&eid=HW3922TTvGVih/zRSLJ6V1STXprJfeMa&qb=xLO9rLjeuPC4riC5rsGm

    에서 퍼옴.

    '컴퓨터공학' 카테고리의 다른 글

    퀵소트 - 알고리즘  (4) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    Embedded에서 ARM의 의미  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache memory - 2  (0) 2008.08.31
    cache memory - 1  (0) 2008.08.31
    컴퓨터 시스템에서의 계산표현에 쓰이는 보수들  (0) 2008.08.30
    자료구조 - Tree  (0) 2008.08.30
     

    cache memory - 2

    Posted by ironmask84
    2008. 8. 31. 01:11 컴퓨터공학


    인텔의 펜티엄 CPU는 내부적으로 여러가지 구조를 갖습니다.
    CPU의 성능 평가 기준으로 캐쉬메모리의 크기를 가지고 말하기도 합니다.
    캐쉬 메모리는 고속의 메모리로서 CPU와 메인메모리 사이의 속도차를 조절하는 고속메모리 입니다.
    하지만 캐쉬메모리는 집적이 어렵고 가격이 비싸다는 단점이 있습니다.
    그래서 인텔 CPU에 캐쉬메모리를 없애거나 적은 양의 캐쉬메모리를 적재한 저가형 CPU를 생산하고 있습니다. 이 CPU에 붙는 이름이 셀러론 입니다.
    셀러론은 기본적으로 펜티엄이랑 같은 구조이지만, 동시에 여러개의 프로그램을 수행할 경우 등에서 좋은 성능이 안 나오는 경우가 있습니다.


    캐쉬메모리는 앞서 말했듯이 고속의 시퓨와 상대적으로 저속인 메인메모리 사이의 속도를 조정하는 고속의 메모리 입니다.
    캐쉬의 성능은 시퓨가 처리해야할 명령어가 캐쉬메모리안에 있느냐 없느냐를 가지고 평가합니다. 이것을 캐쉬 적중율이라 합니다.
    캐쉬 메모리의 크기가 클수록 캐쉬적중율을 높일 수 있고, 상대적으로 많은 프로그램이 메모리에서 동시에 수행되어도 문제 없이 동작할 수 있게 됩니다.
    일반적으로 셀로론 시퓨에는 128KB의 캐쉬메모리, 노스우드 CPU에는 512KB, 프래스캇 CPU에는 1M의 캐쉬메모리가 장착되어 있습니다.

    '컴퓨터공학' 카테고리의 다른 글

    퀵소트 - 알고리즘  (4) 2008.09.21
    삽입정렬 - 알고리즘  (0) 2008.09.21
    임베디드 시스템과 임베디드  (0) 2008.09.15
    Embedded에서 ARM의 의미  (0) 2008.09.15
    운영체제의 종류  (0) 2008.09.15
    프로그래밍언어론 - 용어  (0) 2008.09.03
    cache 적중률  (1) 2008.08.31
    cache memory - 1  (0) 2008.08.31
    컴퓨터 시스템에서의 계산표현에 쓰이는 보수들  (0) 2008.08.30
    자료구조 - Tree  (0) 2008.08.30