2014년 4월 8일 화요일

아날로그와 디지털(Analog vs. Digital)

우리글이 많은 소리를 표현할 수 있지만 여전히 부족한 것이 있다. 영어에도 매우 미묘한 소리들이 있어서 우리글로 표현이 어려운 것들이 있다.

그 중에서 Digital에 대해서 우스게 이야기가 있다. 우리나라에서 Digital을 어떻게 표기할 것인가에 대해서 디지탈, 디지틀, 디지털이라는 세가지 용어표현에 대해서 전문가들이 다툼이 있었다. 디지탈과 디지틀을 주장하는 전문가들이 디지털이라는 주장에 밀리게되자 디지털을 주장하는 전문가에게 "디지털이 뭐냐? 돼지털이냐?" 라고 했다는...

그럼 아날로그와 디지털이란 무엇일까?

먼저 딱딱한 정의부터 적어보자.

아날로그: 연속적으로 변화하는 물리량(?).
디지털: 0과 1로 기록된 불연속적으로 변화하는 물리량(?).



이 말을 그대로 이해하는 사람도 있고, 그렇지 않은 사람도 있을 것이다. 이해하는 사람은 패스~ 그러나 이해하지 못하는 사람을 위해서 좀 더 쉽게 살펴보자. 먼저 물리량이라고 했는데 물리량이 뭐야? 물리량이란 그냥 값이다. 온도나 시간이 하나의 물리량이며, 따라서 26.7도, 35초와 같은 것이 물리량이다.

아날로그와 디지털은 숫자의 개념으로 이해하면 보다 쉽게 이해할 수 있다. 우리가 일반적으로 수는 정수와 실수로 구분할 수 있다.
이때 두개의 실수값 사이에는 또다른 실수값이 존재한다. 실수(實數, real number)를 모르는 실수( 失手, mistake)는 없기 바란다. 따라서 실수값은 연속적인 값이다. 아날로그란 이와 같이 시간이나 진폭과 같은 값이 끊임없이 존재하는 물리량, 즉 어떠한 값을 가진 것을 의미한다. 그리고 실수값은 무한히 존재하는 값이기 때문에 어떠한 범위를 정하더라도 아날로그 물리량은 무한히 존재한다.

반면에 정수는 어떠한가? 정수는 1과 2사이에 정수값이 존재할 수 없다. 정수가 뭔지 모르겠다고? 이 자료를 읽기전에 초등학교 산수책을 먼저 볼 것을 권한다. 이와 같이 정수는 값이 연속적으로 존재하지 않고 띄엄띄엄(불연속) 존재한다. 이러한 값을 이진수(binary, 0과 1만을 갖는 수체계)로 표시한 것이 디지털이다. 따라서 디지털 물리량은 범위를 정하면 유한한 수가 존재한다.

"아날로그와 디지털이 이렇게 다른 것이라면 우리가 스마트폰에서 즐겨듣는 음악, 촬영한 사진, 재미있게 보는 동영상은 다 뭐야?"라고 궁금함이 생긴다면 둘 사이의 관계를 살펴봐야 한다. 슈퍼스타케이에서 많은 도전자들이 노래를 부른다면 이는 아날로그 물리량으로 존재한다. 그런데 이러한 아날로그 음악을 우리가 스마트폰에 저장할 때는 디지털 음악으로 저장하고 있다. 동일한 정보(또는 음악이나 신호)가 아날로그로도 존재하고 디지털로도 존재한다는 것이다.

그러면 아날로그와 디지털 사이를 이어주는 다리가 있어야 하는 것 아닐까? 그리고 아날로그는 무한히 존재하지만 디지털은 유한 존재이니까 둘 사이에 연결되지 않는 것도 있는 것이 아닐까? 오~ 예! 정답.. 여러분이 이런 생각을 했다면 아주 날카롭게 위에 설명한 것을 이해한 것이다.

무한한 아날로그 물리량에서 이를 대표할 수 있는 값들만을 추려서 0과 1로 표현하면 디지털로 나타내는 것이다. 여기서 아날로그를 대표할 수 있는 값을 추리는 과정을 우리는 표본화 또는 샘플링이라고 한다. 표본화나 샘플링이라는 이야기는 많이 들어보지 않았는가? 선거철만 되면 출구조사나 여론조사를 많이하는데, 모든 유권자에 대해서 조사를 하기에는 비용과 시간이 많이들기 때문에 유권자의 분포(나이, 성별, 지역 등에 따른)에 따라서 일부 유권자에 대해서만 조사를 한 뒤에 그 결과를 예측하면서 나오는 용어가 바로 샘플링이다. 즉, 전체를 사용하기 곤란할 때, 일부 만을 추려내는 과정이다.

여러분이 가지고 있는 스마트폰이 얼마만큼의 저장장치를 갖고 있는가? 32GB? 64GB? 좋다. 여러분이 좋은 스마트폰에 64GB의 저장장치를 갖고 있다고 하자. 그런데, 아날로그를 불연속적인 디지털 데이터가 아닌 연속적인 디지털(? 말에 모순이 있지만 그렇다고 하자) 데이터로 전환한다면 아날로그에는 무한개의 물리량이 존재하기 때문에 디지털로도 무한개의 데이터가 나오게 된다. 그러면 "아" 소리 하나를 저장하기에도 64GB는 턱도 없이 부족한 용량이 된다. 그렇지만 여러분은 64GB의 저장용량이면 고화질 영화도 30편이상, 고음질 음악은 수천에서 수만곡을 넣어가지고 다닐 수 있다.아니? 어찌 이런일이? 바로 샘플링의 마술이다. 어차피 인간의 감각기관은 아날로그로 표현되어 있는 모든 값을 인지할 수 없다. 따라서 적당히(?) 몇개만 전달해줘도 차이를 감지하지 못하므로 제한된 수량의 데이터만으로 아날로그 음악이나 사진, 동영상을 표현할 수 있고, 제한된 용량의 저장장치를 충분히 효과적으로 활용할 수 있는 것이다.

이와 같이 아날로그 물리량을 디지털 물리량으로 전환하는 장치를 아날로그-디지털 변환기(Analog to Digital Converter: ADC)라고하며, 디지털 물리량을 아날로그로 전환하는 장치를 디지털-아날로그 변환기(Digital to Analog Converter: DAC)라고 한다. 샘플링을 포함하여 이들 구조는 하드웨어 관련 내용이므로 다음 기회에 한번 더 다루어 보자.


2014년 3월 27일 목요일

AR DRONE 쿼드콥터

배터리로 구동되는 쿼드콥터. 오래는 못날리지만 언제 어디서든지 쉽게  날릴 수 있다.

실내보호 장착 모습

야외비행 하울링 장착 상태

일자산 공원에서 날린 쿼드콥터가 촬영한  영상.





컴퓨터의 저장장치(Computer Storage)

우리는 기억력이 감퇴되거나 기억할 수 있는 한계를 넘어서는 것을 잃어버리지 않기위해서 메모장이나 수첩을 사용한다. 컴퓨터 메모리는 용량에 한계가 있으며, 이를 극복하기 위해서 보조기억장치인 저장장치를 이용한다. 마치 우리가 기억의 한계를 극복하기 위해서 수첩을 사용하는 것처럼 컴퓨터에는 보조기억장치인 저장창치가 있다.

메모리(여기서는 주 메모리인 RAM)와 보조기억장치는 둘다 기억장치(메모리)이지만 가격대비 용량과 속도의 차이로 인하여 RAM은 주 기억장치(주 메모리)로 사용되며, 대용량으로 데이터를 저장해 놓기위해서는 보조기억장치(저장장치)를 사용한다.

보조기억장치로 사용되는 저장장치는 많은 프로그램이나 데이터, 멀티미디어 등을 저장해야 하므로 대용량이며, 주기억장치인 RAM에는 현재 실행되고 있는 프로그램이 보조기억장치로부터 로딩되어 있다.

그렇다면 보조기억장치로 사용하는 저장장치에는 무엇이 있는가?

오늘날 가장 많이 사용하는 대용량 저장장치로는 하드디스크드라이브(HDD)가 있으며, 가격은 비싸지만 저전력에 속도도 빠른 반도체드라이브(SSD: Solid State Drive), 플래시 메모리를 이용한 기타 저장장치(USB 메모리, SD카드 메모리 등)가 있다. 지금은 잘 사용되지 않는 광학매체(CD, DVD, Blueray Disk), 플로피디스크, 마그네틱 테잎 등도 대용량(?) 저장매체에 속한다. 오늘날 대용량의 개념이 TB 단위로 되어있어서, 대용량이라는 용어가 무색하지만 해당 저장장치들이 등장하였을 당시에는 분명히 대용량이라는 용어를 사용함에 어려움이 없었으리라.

1. HDD(Hard Disk Drive)

2.5" SATA HDD (wikipedia)

하드디스크는 이름에서 나온 것 처럼 단단한 원판(디스크, platter)에 자성체를 도포하여 저장장치로 이용하는 것으로써, 가격대비 저장용량 면에서 가장 효율적이기 때문에 많이 사용하고 있다. 하드디스크는 구동장치까지 함께 내장되어 사용하기 때문에 하드디스크드라이브라고 부르고 있으며, 디스크를 회전하기 위한 모터(스핀들 모터)와 디스크에 데이터를 기록하고 읽어내기 위한 헤드가 달린 팔(arm)과 같은 구동계가 있어서 충격에 약하다.

HDD의 모습(wikipedia)

하드디스크의 디스크는 단단한 형태를 갖는 금속으로 만들어져 있기 때문에 기록밀도를 높이는 장점을 갖고 있어서 대용량 저장장치를 만드는데 용이하다. 디스크는 기록을 위해서 트랙, 섹터, 세그먼트로 구분되어있다. 이전에는 하드디스크의 용량을 늘리기 위해서 디스크(플래터)를 여러장 쌓는 경우가 있었는데, 2장 이상의 디스크가 놓여있으면 원통형으로 구성되기 때문에 이는 실린더라고 구분하였다.



2. SSD(Solid State Drive)
SSD는 반도체 플래시 메모리를 이용하여 대용량 저장장치인 하드디스크를 대체하는 저장장치로 각광을 받고 있다. 하드디스크와 달리 기계적인 장치가 없기 때문에 물리적인 충격에 강하고 저전력이면서 데이터 전송속도가 빠른 장점이 있지만, 가격이 하드디스크드라이브의 7~10배에 달하는 것이 걸림돌이다. 하지만 지속적인 반도체 기술의 성장과 플래시 메모리 가격의 하락으로 그 차이는 점차 줄어들게 될 것이다.
SSD는 플래시메모리를 사용하지만, 외부 인터페이스는 하드디스크드라이브와 동일하게 구성되어있어서 기존에 사용하던 하드디스크와 쉽게 대체가 가능한 구조로 되어있다.

3. 메모리카드와 USB 메모리
우리가 많이 사용하는 이동식 저장장치로써 USB메모리와 카메라나 스마트폰에 많이 사용되는 SD(Secure Digital) 카드 등은 SSD와 마찬가지로 플래시 메모리를 이용하여 제작한다. 외부 인터페이스나 외형은 다르지만 기본 소자가 플래시 메모리를 이용한다는 측면에서는 거의 유사한 형태라고 볼 수 있다.
아래 사진은 플래시메모리를 이용한 다양한 메모리카드와 USB 메모리를 보여주고 있다. 사진에서 보는 것 처럼 다양한 외형과 인터페이스를 갖고 있는 것을 알 수 있다.


4. 기타
이외에도 광학 매체나 기존에 사용되던 저장장치도 많이 있으나 과거의 역사이야기 이므로 다음 기회에 다뤄보기로 하자.

2014년 3월 25일 화요일

컴퓨터 메모리(Computer memory)

CPU는 인간의 두뇌에서 연산을 담당하는 부분이다. 물론 CPU 내부에도 일부 고속의 메모리가 들어있지만 요즘 같이 커다란 프로그램을 실행시키려면 두뇌의 기억과 같은 역할을 해줄 대용량 메모리가 필요하다.

컴퓨터의 기본 구성 요소인 주메모리가 우리가 컴퓨터나 스마트 기기에서 실행하는 프로그램을 담아두고 순서에 따라서 프로그램이 지시하는 동작을 수행한다. 우리가 컴퓨터에서 "메모리"라고 이야기하는 것은 바로 이 "주메모리"를 의미한다. 메모리는 비휘발성 메모리와 휘발성 메모리로 구분할 수 있으며, 비휘발성 메모리는 전원이 공급되지 않더라도 한번 기록된 데이터는 지워지지않고 남아있다. 우리가 일상적으로 많이 사용하는 플래시메모리(usb 메모리)가 대표적인 비휘발성 메모리이다. 반면에 휘발성 메모리는 전원이 공급되지 않으면 기록된 데이터가 사라지기 때문에 휘발성이라고 불리며, 컴퓨터 주메모리로 사용되는 RAM(Random Access Memory)가 대부분 휘발성 메모리이다.

지금의 컴퓨터는 주메모리는 모두가 반도체로 만들어진 메모리이며, 그 용량도 매우 크다. 주메모리로 사용되는 메모리는 DRAM(Dynamic Random Access Memory)이 사용된다. 반도체 메모리는 크게보면 SRAM(Static Random Access Memory)와 DRAM으로 나눌 수 있는데, SRAM은 전원이 공급되어 있는 상태만 유지하면 데이터가 유지되며, 속도가 빠르지만 제작비용이 많이들고 공간을 줄이는데 제약사항이 있어서 CPU안에 들어가는 레지스터나 캐시 메모리와 같이 고속의 메모리에 사용된다.

1bit 저장을 위한 SRAM 구조(wikipedia)


반면에 DRAM은 전원이 공급되어있어도 시간이 지나면 데이터가 사라지기때문에 주기적으로 데이터를 복구(refresh)해주어야한다. SRAM에 비해서 속도는 느리지만 작은 공간에 고 집적이 가능하고 비용이 적게 들기 때문에 고용량 메모리를 만드는데 적합하다.

16bits 저장이 가능한 DRAM 구조(wikipedia)

DRAM은 개발 이후로 Read/Write 속도를 높이기 위해서 다양한 구조가 등장하였으며, 현재 사용되고 있는 DRAM은 클록을 추가하여 DRAM의 동작을 동기화시키는 SDRAM(Synchronous DRAM)이다. 이 SDRAM에 DDR(Double Data Rate)이 붙은 것은 DRAM의 동작 속도를 더욱 높이기 위한 구조이며, 번호가 높게 붙을 수록 데이터 Read/Write 속도가 높은 것이다. DDR에 비해서 DDR2와 DDR3는 2배와 4배의 속도 개선이 있다.

SDRAM의 외양(홈의 위치가 다름) - wikipedia

2014년 3월 21일 금요일

CPU는 어떻게 동작하는가?(How does the CPU work?)

CPU가 어떻게 생겼는지 좀 이해들이 되었는지 모르겠다. 단순하게 설명하기엔 너무 복잡하고, 복잡하게 설명하면 알아먹기 어려운 것이 CPU의 구성이 아닌가 싶다. 다양한 내부 구성요소를 갖고 있는 CPU는 어떻게 동작하는 것일까?

CPU가 동작한 다는 것은 우리가 지시한 명령어와 데이터의 집합, 즉, 프로그램을 실행시킨다는 것을의미한다. 그렇다면 CPU가 동작을 하기위해서는 명령어나 데이터를 프로그램으로부터 가져와야한다. 프로그램은 컴퓨터에서 실행될 때 주메모리에 적재되어 실행되므로, CPU는 주메모리에 적재되어있는 프로그램에서 명령어나 데이터를 가져와서 CPU가 이해할 수 있는 형태로 해석하고, 해당 동작을 실행하여 생성된 결과를 저장함으로써 하나의  명령어에 대한 동작 사이클(머신사이클: machine cycle)을 마무리 한다. 이러한 동작을 반복적으로 수행함으로서 프로그램에서 지정한 작업을 처리할 수 있다. 이러한 과정을 순서대로 정리하면 다음과 같다.

  1. Fetch: 메모리에서 명령어를 가져오는 단계
  2. Decode: 명령어를 ALU나 FPU가 이해할 수 있도록 해독하는 단계
  3. Execution: ALU나 FPU가 주어진 연산을 처리하는 단계
  4. Store: 연산처리 결과를 메모리에 저장하는 단계


이렇게 순차적으로 머신사이클이 반복된다면 하나의 명령을 처리하는데 기본적으로 4단계가 걸리는 것이며, 하나의 코어만 존재하는 CPU는 다음 명령을 수행하기 위해서는 4단계가 지나가길 기다려야 한다. 그렇지만 오늘날과 같이 멀티코어를 탑재하고 있는 CPU는 동시에 여러개의 명령어를 처리할 수 있기 때문에 메모리로부터 명령어를 가져오는 효과적인 방식이 필요한데, 대표적으로 파이프라이닝(Pipelining) 방식이 널리 사용된다.

아래 그림은 파이프라이닝이 없는 단일 코어 CPU의 명령어 실행동작과 파이프라이닝으로 동작하는 쿼드코어 CPU의 명령어 실행 동작을 나타내고 있다.

출처: Understanding Computer Today and Tomorrow
이렇게 파이프라이닝과 같은 방식으로 머신사이클을 처리하는 이유는 여러개의 코어가 동시에 동작하여 작업을 재빨리 처리하도록 만드는 것이다. 하지만 여러개의 코어에서 동시에 작업을 처리하기 위해서는 프로그램을 만들때 여러개의 작은단위의 작업으로 나눠서 동시에 처리할 수 있도록 만들어줘야 한다. 때로는 반드시 순차적으로 처리해야하는 작업이 있다면, 순차적인 작업이 처리될 동안 다른 코어들은 작업진행을 못하고 쉴 수 밖에 없을 것이다.
  • 파이프라인은 우리가 바다에서 파도타기를 하는 사람들이 파도가 말려서 마치 파이프처럼 생긴 곳을 멋지게 서핑하면서 빠져나오는 것처럼 명령어를 수행하는 머신사이클이 서로 말려서 처리되는 것과 같은 것이다.