임베디드랜드

    더운 곳인지 추운 곳인지도 아는 것은 짐을 챙기는데 도움을 줍니다. 이와같이 생판 모르는 곳을 가려면 그 지역에 관한 전반적인 개략과 특징을 알아보는 것이 순서입니다.

    새로운 것을 배우는 것도 새 친구를 사귀는 것도 사랑에 빠지고 연애(戀愛)를 할 때도 다 마찬가지입니다. 어쩌면 공부(학문)의 세계는 지구상의 어떤 지역보다도 훨씬 색다르고 다채로운 색채로 채워져 있는지도 모릅니다. 인간(人間)의 마음을 탐험하는 것도 시시한 공부보다 훨씬 더 매력적인 테마가 아닐런지요?

    그러므로 "마이컴"의 세계로 여행하든 "마이컴"이라는 친구를 사귀던, 먼저 해야 할 일은 그 놈의 동네를 파악하는 일이 되겠습니다. ^^

    http://www.devicemart.co.kr/mart7/circuitry/bbs.php?table=eproject&where=ALL&search_step=1&category=왕초보마이컴입문&query=view&uid=12&p=1

    호랑이를 잡으려면 호랑이 굴에 들어가야 합니다. (하긴 먼저 호랑이가 사는 산에 올라가야죠...) 요즈음은 호랑이보다는 "유니콘을 잡으려면... 해리네 동네로..." 가 더 적합할지도 모르지요.
    우리는 흔히 "마이컴은 디지털로 동작한다..." 등등의 말을 많이 듣습니다. 현대는 디지털 시대래... 디지털이 세상을 바꿀거야... 정보는 인터넷, 인터넷은 디지털, 아날로그는 구시대... 블라블라...
    그래요. 맞습니다. 마이컴은 디지털입니다... 그런데 이건 뭐 광고카피 같군요. -_- 앞으로의 시대는 디지털, 디지터의 반대는 아날로그. → O.K. 그 다음은요?
    디지털의 세계는 트랜지스터나 FET로 이루어 집니다. 보다 정확히 말하면 트랜지스터나 FET를 스위치 모드에서 사용할 때 나타나는 세계입니다. (왕초보 전자회로 네번째 회로만들기 / 트랜지스터 참조)
    스위치 모드는 결과가 둘 밖에 없습니다. (두가지 상태라고 표현) 1과 0 혹은 H와 L. 그런데 이게 무슨 의미를 갖고 있는지... 모든 것 중에서 1과 0 만 남아있게 되면 우리가 살고있는 세계와 뭐가 달라지길래 야단일까요? (간단해서 좋구먼...)
    우리가 살아가는 세계는 아날로그 세계입니다. 한마디로 복잡한 세상이죠. 어디를 둘러봐도 오로지 한가지 의미로만 사용되는 경우는 없습니다. 간단한 단어는 물론이고 빛 조차도 수많은 색깔로 분해됩니다. 영화의 스토리에는 복선이 깔려 있습니다. 귀를 기울이면 여러가지 소리가 섞여 들어옵니다. 학교에서 공부만 배웁니까? 아니지요 온갖 세상일이 학교 울타리 안에서 다 일어납니다. 모순과 역설이 섞여 있는 세상 → 이것이 "아날로그의 느낌"입니다.
    세상의 모든 일에는 장점과 단점이 한 울타리 내에서 동거하고 있습니다. 이것은 자연의 섭리입니다. 그렇다면 아날로그의 장점은 무엇일까요? 답은 효율(效率)입니다. 자연(自然)은 지극히, 너무나도 효율적입니다. 그래요? 단점은요? 답은 불확실 입니다. 해석이 애매한 부분이 나오거나 정보가 섞일 수 있는 여지가 무수히 존재합니다.
    반대로 디지털세계의 장점과 단점은 정확성과 비효율입니다.
    세계에서 가장 빠른 슈퍼컴퓨터는 일본NEC가 개발한 어스 시뮬레이터로 35테라플롭스(초당 약 35조회) 의 연산속도를 갖고 있다는 기사가 발표되었습니다. (2004/06/04) 그러나 이 기사에는 중요한 가정이 숨겨져 있습니다. 그것은 계산결과가 언제나 옳다는 것입니다. 컴퓨터니까 오류가 없다구요? 아닙니다. 논리가 반대입니다. 인간(人間)이 오류없는 컴퓨터를 발명한 것입니다. 그 핵심은 비효율을 무릅쓰고 정확성을 채택한 결과입니다. 바로 디지털을 선택한 것입니다. 위대한 선택이었습니다.
    우리는 지식을 받아들일 때 정확히 알고 받아야 합니다. 그래야 단단한 지식을 디딤돌로 삼아 울타리 너머를 멀리까지 바라다 볼 수 있습니다. (응용할 수 있다는 말) 그렇다면 어느정도 알아야 정확히 안다고 말할 수 있을까요? 때에 따라 다를 수 있지만, 대부분의 경우는 다른 사람에게 자료없이 말이나 글로 설명할 수 있으면 됩니다. ^^ (이 기준으로 곰곰 생각해 보면 이외로 많은 부분에서 정확한 지식을 갖고 있다는 것을 알 수 있습니다. 간단한 예로 동네에서 누가 길을 물어오면 망설임 없이 깔끔하게 대답할 수 있지요? 그렇다면 당신은 동네지리에 대한 정확한 지식을 보유하고 있는 겁니다)

    ▶ 디지털의 기본단위 비트 (bit)


    비트의 개념은 간단합니다. 그림에서 처럼 종이를 잘라 작은 정사각형을 만듭니다. 정사각형에는 숫자를 적을 수 있습니다. 마이컴은 디지털 세계에서 동작하므로 사용할 수 있는 숫자의 종류는 단 두 개, 1과 0 뿐입니다. 여기서 숫자를 적는다는 것은 비유적 논법으로 실제로는 전기의 전압상태가 기록됩니다. (전압이 높으면 1, 낮으면 0)

    ※ 전압이 높다 → 1, H, 전원전압, 전압이 낮다 → 0, L, GND 부근

    마찬가지로 작은 정사각형은 트랜지스터나 FET의 회로를 집적해서 만들어 집니다. 그림의 우측에 4개의 NAND 게이트로 구성된 데이터 래치 (Data Latch)와 동작표가 있습니다. 데이터 래치(회로)는 작은 정사각형에 대응합니다.

    ※ 로직 IC의 일종인 NAND 게이트는 트랜지스터나 FET로 만들어 집니다.

    데이터 래치는 어떤 순간의 상태를 유지할 수 있습니다. 시간이 흘러도 상태를 유지한다는 의미는 기억이 되었다는 것을 말합니다. 작은 정사각형에 숫자를 기입해 두면 기록한 것이 되고, 기록한 내용을 나중에 이용하면 머리속에 기억했다가 사용하는 것과 같습니다. 따라서 기록 = 기억으로 생각해도 좋습니다. 여러분의 노트는 과거의 기억을 (기록의 형태로) 담고 있는 것입니다.

    ▶ 자리 가중치가 존재하는 바이트 (byte)

    디지털 세계의 단점은 비효율에 있다고 앞에서 말했습니다. 여기서 비효율의 구체적 의미는 복잡함입니다. 보시다시피 한개의 비트로는 간단한 역할밖에 할 수 없습니다. (아니 0 한개나 1 한개로 뭘 하죠???)

    그렇지만 비트가 여러개 모여서 숫자열을 구성하면 이야기가 달라집니다.

    ※ 비트 1개 → 2^1 = 2 가지 상태표현 (0, 1) ※ 비트 2개 → 2^2 = 4 가지 상태표현 (00, 01, 10, 11) ※ 비트 4개 → 2^4 = 16 가지 상태표현 (0000, 0001, 0010, 0011, 0100, ‥‥, 1110, 1111) ※ 비트 8개 → 2^8 = 256 가지 상태표현 (0000 0000, 0000 0001, ‥‥, 1111 1110, 1111 1111)

    인류의 위대한 발명 중 하나가 숫자의 자리에 가중치를 부여하는 개념입니다. 자리개념은 몇 개의 숫자를 나열하여 엄청나게 큰 수를 표현할 수 있게 해 줍니다. 이 때 하나하나의 숫자는 평등하지 않고 놓여진 자리에 따라 역할이 달라집니다. (그림에서 8개의 정사각형은 고리로 연결해서 자리를 고정시켜 놓은 것을 볼 수 있습니다)

    마이크로 컴퓨터는 8개의 비트모음인 바이트(byte)를 하나의 단위로 많이 사용합니다. 예를들면 저장할 때도 1 바이트씩, 읽어올 때도 1 바이트마다, 계산할 때도 1 바이트 사이에서, 숫자를 적을때도 1 바이트... 이런 식입니다. 특별한 경우에 사용하기 위해 1 바이트 내의 어떤 특정한 비트만을 변경하는 기능도 있습니다. 그러나 2개에서 7개의 비트를 한꺼번에 변경하는 경우는 없습니다. 특수하게 4개의 비트(니블)을 다루는 경우는 몇몇 있습니다.

    1 바이트의 하드웨어(회로)는 데이터 래치 8개를 한 묶음으로 만들어 사용합니다.

    ▶ 바이트 (byte) 를 쌓아놓은 창고 → 메모리 (memory)

    자리개념은 바이트를 이해하면 끝입니다. 1 바이트로는 2^8 = 256 밖에 표현할 수 없지만 한 바이트를 2개 연결하면 2^16 = 65536 라는 큰 수를 표현할 수 있습니다. 하지만 이렇게 큰 수를 마이컴에서 필요한 경우는 별로 없습니다.

    번호가 붙어있는 방이 많이있는 창고가 메모리입니다. (이 번호가 어드레스(주소) 입니다) 하나의 바이트는 번호가 붙어있는 방에 하나씩 저장될 수 있습니다. 메모리에서 저장된 각각의 바이트 사이에는 연관이 없습니다. 즉 각각의 바이트는 내용을 독립적으로 읽거나 변경할 수 있습니다.

    실제 메모리에서는 그림에서 처럼 바이트 전체을 '넣었다' '뺐다' 하지는 않습니다. 그 대신 방마다 필요한 수의 데이터 래치를 미리 넣어두고 필요시에 (데이터 래치의) 내용만을 변경합니다. 이 때 메모리에 전원을 껏다 켜도 데이터 래치의 내용이 변하지 않으면 ROM, (데이터 래치의) 내용이 제멋대로의 상태로 변해 있으면 RAM이 됩니다. (메모리의 내용이 텅 비는 경우는 없습니다. 반드시 0 아니면 1이 될 따름입니다. 단지 과거의 기억이 유지되고 있는지? 변하는지? 가 중요한 것입니다)

    마이크로 컴퓨터 메모리 중에서 어떤 특정한 번지는 외부세계와 전기적으로 연결되어 있습니다. 따라서 마이컴 내에서 메모리 특정번지의 숫자를 읽어보면 외부의 상태를 알 수 있고, 특정번지의 숫자를 바꾸어서 외부의 상태를 변경할 수 있습니다. 여기서 외부란 마이컴 IC의 핀을 말하며 상태란 전압의 높고 낮음을 의미합니다.

    외부와 연결된 메모리의 주소는 (마이컴) 하드웨어의 디자인에 의존하므로 마이컴 기종에 따라 달라집니다. 그러므로 어떤 마이컴을 사용하려면 설명서(메뉴얼)에서 내부 메모리와 IN/OUT에 관련된 자료를 찾아 두어야 합니다.

    ▶ 마이크로 컴퓨터에서 필요한 작업

    드디어 마이크로 컴퓨터 (마이컴)에 대한 이야기를 할 시간이 되었습니다.

    자, 재미있는 질문 하나... 마이컴을 대표하는 단어를 하나 고른다면 무엇이 적당할까요? 첨단기술을 연상하는 단어가 적합하다고 생각하면 답은 "NO" 입니다.

    정답은 기계(machine) 입니다. 어쩐지 약간 의외라고 생각되시는지요? 현대의 컴퓨터는 미래를 다룬 영화에서 보여주는 이미지처럼 판단과 지각능력을 보유하고 있는 신비로운 무엇으로 묘사되어 왔습니다. 그러한 이미지는 사실이 아닙니다. 마이컴을 포함한 컴퓨터의 동작은 자동차의 엔진이나 19 세기의 태엽시계와 같은 정교한 기계와 아주 유사합니다. 물론 컴퓨터는 움직이는 소리도 나지 않고 시커먼 연기도 내뿜지 않지만 단순반복, 정확함, 비 타협이라는 기계만의 고유한 특징을 간직하고 있습니다. 결론적으로 컴퓨터는 환경에 적응할 수 있는 생물에 반하는, 재료를 강철 톱니바퀴에서 실리콘 트랜지스터로 대치시킨 분명한 기계입니다. 마이컴은 컴퓨터의 부분집합이므로 역시 기계(machine) 입니다. 단지 귀여운 기계일 따름이지요. 그러나 이 특별한 기계가 세상을 바꾸어 놓았다는 사실만은 정확히 직시해야 합니다.

    컴퓨터의 원형은 19 세기 영국의 수학자이자 발명가였던 찰스 베비지(Chales Babbage)에서 출발하여 20 세기의 영국 수학자 알란 튜링(Alan Turing)에 이르러 이론적 완성을 보게 됩니다. (1820 -1940)

    이 두 영국인의 생애는 비극으로 마감합니다. 컴퓨터의 역사와 발전에 대한 자세한 이야기는 많은 문헌에나와 있습니다. 필자가 읽은 책으로는 <기계의 노예 (Slaves of the machine), J. E. 로린스/임백준옮김, 출판사 : 지정, ISBN 89-87315-26-6, 2000년 발행, 6,000> 을 추천할 수 있습니다.

    위의 그림은 마이컴이 마이컴으로써 동작하기 위해 필요한 요소들을 보여주고 있습니다. 설명하고 이해하는데 편리하도록 주인과 개를 등장 시켰습니다. 주인은 개한테 명령(지시)를 합니다. 개는 주인의 명령(지시)를 충실히 따릅니다. 그런데 개가 재주가 있으면 몇개나 있겠습니까? 딱 세가지 입니다.

    첫째 재주 : 창고에서 판자(1 바이트)를 물어 내오고, 집어 넣을 수 있습니다. 둘째 재주 : 물어온 판자에 숫자(이진수)를 쓸 수 있습니다. ← 이만하면 대단한 겁니다... 세째 재주 : 옆에 있는 계산기에 두 개의 판자를 차례로 집어넣고 계산되어 나온 판자를 창고에 넣습니다.

    계산기는 또 어떻구요... 딱 더하기, 빼기만 합니다. (곱하기, 나누기 ← 이런거 우리살람 몰라 해!!!)

    그래도 이 세가지 재주만으로 주인의 명령(지시)가 정확하고 (개가) 일할 시간히 충분히 있으면 오늘날의 컴퓨터가 하는 작업을 전부 할 수 있습니다.

    지금까지의 설명은 무엇을 말하고자 하는 것일까요? 마이컴 내부에서 동작에 필요한 명령을 개의 세 가지 재주라는 비유를 들어 설명하였습니다. (창고, 책상, 계산기) 그 밖의 명령들은 주인의 명령(지시)에 해당하는 프로그램에 관한 것입니다.

    ▶ 마이크로 컴퓨터 명령의 이해 (프로그램)

    아무리 비유지만 주인이란 이미지는 어쩐지 올바르지 않습니다. 마이컴은 기계래매요??? 개야 시키는데로 일하니까 기계처럼 보이지만 인간(人間) 이라니요? 적당하지 않아요... 라는 항의가 들어옵니다. -_-

    맞습니다. 그렇다면 주인을 녹음기로 바꾸어 봅시다. 오토리버스 기능이 있는 녹음기는 10 년 동안이라도 혼자서 떠들 수 있습니다. 물론 개는 기분이 나쁘겠지요... ^^ 하지만 이와같이 바꿔 놓으면 마이컴이 기계라는 사실이 좀 더 분명해 집니다. (사실 녹음기는 프로그램과 근본적으로 다른 점이 있습니다. 일하는 개하고 명령(지령)하는 호흡을 맞추기도 쉽지 않구요... 하지만 지금은 무시하고 넘어갑시다)

    ※ 녹음기가 프로그램과 다른 점 : 아무리 오토리버스 녹음기라도 녹음된 순서를 바꾸는 재주는 없습니다. 그러나 프로그램에서는 조건에 따라 스스로 순서를 변경할 수 있습니다. 순서의 변경... 이거 대단한 것입니다. 예를들어 1, 2, 3, 4, 5 라는 다섯개의 숫자를 나열할 때 왼쪽부터 정렬하면 12345, 오른쪽부터 정렬하면 54321이 됩니다. 결과는 완전히 다른 숫자가 나왔지요? 차이는 하나, 정렬 순서밖에 없습니다.

    이제 결론을 내려봅시다. 결론은 딱 하나, 마이컴의 내부가 복잡해도 동작자체는 별 거 아니라는 겁니다. 덧붙여 알아두어야 할 것은 명령(지령)에 필요한 단어와 문법입니다. 이 단어와 문법은 마이컴 안에 전자회로로 심어져 있습니다. (변경불가!!) 그러므로 마이컴을 사용하는 (프로그램을 짜는) 우리들에게는 옴치고 뛸 자유가 전혀 없습니다. 기계한테 뭘 바라겠습니까? 시키는 일이나 하기를 바랄 밖에요... 뭘 시킬 수 있느냐고요? 그거야 그놈이 할 줄 아는 일이나 시키는 거지요... 마이컴이 할 줄 아는 일은 명령어안에 들어 있습니다. 우리의 일은 이미 정해져 있는 명령어를 순서대로 나열해서 (우리가) 원하는 결과를 얻어내는 것입니다. 이 일이 프로그래밍입니다.
Posted by suvisor