1619, 1/81 회원가입  로그인  
   faustl
   SSI_20130526132811_V_59_20130526133203.jpg (22.4 KB), Download : 105     [오른쪽 버튼 눌러 다운 받기]
   [자작] 컴퓨터시스템 제작법(하드웨어해킹을 위한..)

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=7927 [복사]



사진출처: http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=081&aid=0002338251



사실 요즘 많은 분들이 '~하는 방법'같이 알고리즘 짜인걸 좋아하셔서 일단 제목은 저렇게 달았지만 컴퓨터 시스템을 만든다는 건 그렇게 단순한게 아니니 쉽게 머리에 넣고자 하시는 마음가짐은 좋지 않습니다..(제 생각입니다. 디스는 제발..)

아무튼 낚시글은 아닙니다. 저는 독학으로 컴퓨터구조와 시스템을 공부하고 설계하고 있는 사람인데, 제가 알고 있는 것을 공유하고자 강좌를 해보는 것입니다.(테디베어 효과도 얻구요)

제가 강의할 내용은 컴퓨터시스템 공부를 위한(컴퓨터시스템을 알게되면 AVR ATmega같은 마이크로컨트롤러나 MPU 등등 디지털시스템은 공부 다한거라고 볼 수 있습니다) 길라잡이입니다.



컴퓨터를 설계하기 위해 필요한 것은 일단 두 가지 개념을 잘 아는 것에서 시작합니다
바로 '컴퓨터시스템이란 무엇인가' 와 'AND OR NOT이란 무엇인가' 입니다.


첫번째로 컴퓨터시스템이라는 걸 직역하자면 컴퓨터'계' 라고 볼 수 있는데요. 하나의 세상이라고 생각하셔도 됩니다.. 다만 컴퓨터만 가득한 그런 세상이 아니고 '컴퓨터'라고 불리기 위해서 필요한 연산과 장치의 집합을 컴퓨터'계', 다시말해 컴퓨터 시스템이라고 불린다고 생각하는 것입니다.
그렇다면 '컴퓨터'라고 인정받기 위해 필요한 연산과 장치는 무엇이 있을까요?
과거 스티브잡스와 워즈니악이 PC 애플1을 만들던 시대로 돌아가봅시다.

우선 장치로는 하나의 보드(재료가 무엇이냐에 따라 다르지만 흔히 자주보는 녹색회로기판)
그리고 키보드(일반적 입력하드웨어), 모니터(일반적 출력하드웨어) 하나씩이면 됩니다.

그리고 연산에는 산술연산과 논리연산, 그리고 저장(사실 이건 연산에 속하진 않지만 간단히 생각해보기 위해서 메모리에 데이터를 보내는 연산이라고 생각합시다) 있습니다.

간단하죠? 이걸 정리해보면...
컴퓨터로 인정받기 위한...........................?

장치목록은 - 하나의 메인회로기판(CPU나 램, 하드디스크가 전부 포함된)과 모니터, 키보드
그리고
가능해야하는 연산목록은 - 산술연산, 논리연산, 저장
인 것입니다.

이제 첫번째 개념을 간단히 설명했습니다. 컴퓨터시스템이란 무엇인가? 에 대한 간략한 답이죠. 혹시 모르니 한문장으로 요약하자면 내부적으로 산술연산과 논리연산이 가능하며, 저장 기능이 있고, 키보드(기본입력장치)와 모니터(기본출력장치)가 연결된 하나의 회로보드(회로판, 회로기판 다 같다고 보셔도 됩니다.)를 가진 장치. 인 것입니다. 누구는 아니라고 하시기도 하겠지만 하드웨어에 대해 잘 모르시는 분들이 컴퓨터시스템을 쉽게 이해할 수 있도록 배려합시다......(디스는 무서웡)

(또한 이 강좌는 매우 생략하고 편집된 방법으로 지식을 전달하는 강좌이며 목적은 컴퓨터시스템설계에 대한 간단한 길라잡이 입니다. 학문적으로 태클을 거시는 분이 있다면 저는 할말이 없습니다..)

그리고 이제 두번째로 미리 알아둘 개념을 소개하겠습니다. 바로 AND, OR, NOT이라는 것인데, 이걸 알아둬야 하는 이유는 명백합니다. 이건 영어의 ABC이며 한글의 ㄱㄴㄷ이고 컴퓨터하드웨어는 당연하고 세상 모든 디지털기기의 알파벳이기 때문입니다.

그렇다면 3개뿐이라는게 아주 다행스럽죠? 그 외에도 XOR이니 NOR NAND같은 변종들이 있긴 하지만 그 모든건 전부 저 세가지(AND OR NOT)로 만들어지는 것이기 때문에 신경쓸 필요 없습니다. 우리는 ㄱㄴㄷ...ㅍㅎ같은 자음과 ㅏㅑㅓㅕㅗㅛㅜㅠ같은 모음으로 가나다라를 만들지, 가나다라, 궤눼뒈뤠, 궭뉅뒑뤩들을 직접 외우면서 배우는 건 아니니까요.

어쨌든 이 3가지 요소가 정확히 무엇인지 설명하기에는 10진법과 2진법부터 시작해서 비트, 바이트, 각종 코드등을 설명해야 하기 때문에 하드웨어에 관심이 있으신 분들은 이 세가지에 대한 공부가 필수적으로 필요하다!!라는 것만 강조하고 넘어가겠습니다. (필수입니다. 필요조건이라는 말이죠.)
그리고 이 AND, OR, NOT이라는 것이 모여서 컴퓨터가 해야하는 모든 연산을 가능하게 한다는 것만 알아두시면 됩니다. 덧붙이자면 이걸 알아두시면 전자공학의 회로이론지식을 접목해서 논리회로를 직접 만들 수도 있게됩니다.(계산기나..디지털 시계나...타이머를 이용한 시한폭탄(불법입니다. 그냥 그런 지식을 얻게 된다는 겁니다.) 등등)

ps: 위의 AND OR NOT이 무엇인가에 대해서는 네이버 책같은 검색창에 '디지털공학'이라고 치면 나오는 책들 중 아무거나 보시면 됩니다. (디지털 논리설계, 디지털 공학, 디지털 회로설계 등등.. 다 같은 겁니다.) 타분야 분들 혹은 나이 어리신 분들은 '공학'이라는 이름이 붙은 전공서라고 무서워하실 필요없습니다. 그 어떤 배경지식의 연계도 없이 하드웨어공부의 가장 최소단위부터 설명하는 책입니다. 천천히 풀어보시면 아무 배경지식 없는 초등학생도 읽을 수 있겠구나. 하실겁니다.  


이제 두가지 개념의 틀이 생겼습니다. 장치목록의 요소들과 연산목록의 요소들을 하드웨어로 구현해내면 그것이 바로 컴퓨터입니다. 추가설명하자면 연산목록(산술연산과 논리연산, 저장)은 전부 AND, OR, NOT이라는 기본 개념들로부터 가능하게 됩니다.(앞에 언급한 디지털공학 서적 참고하세요)

저도 처음 컴퓨터구조를 공부할땐 많은 편견이 있었죠.(사실 무지상태에선 당연하지만..)
CPU는 따로 칩으로 나오는 것이고, 메인보드는 어디 또 다른데서 만들어져 나오는 것이고, 그래픽카드는 어떤게 필요하고.. 메모리는 램을 의미하는 것이고.. 아무튼 그랬죠.

요즘은 산업이 너무 발달해서 분업도 복잡하게 되어 있고 이부품 저부품이 따로 생산되고 그에따라 IDE방식 SATA방식 어쩌고 저쩌고 하는데, 이런건 다 신경쓰지 마세요. 컴퓨터관련 용어는 개념적 용어와 물리적 용어가 뒤죽박죽되어 있어서 헷갈리기 십상입니다. 본격적인 하드웨어 공부를 시작할 때, 이런 용어들이 절대 하나만 가리키는 것이 아니다 라는 것을 잘 알고 계셔야 합니다.

예를들어 이 데이타는 메모리에 저장된다. 메모리는 스택이다. 이런식으로 설명을 해놓을 경우, 다른 사람이 같은걸 놓고 이 데이타는 SRAM에 저장된다. SRAM을 스택으로 사용한다. 이래버리면 전공으로 그 공부만 하는 사람이 아닌이상 헷갈려서 시간투자대비 헛도는 시간이 늘어납니다. 일단 말하자면 메모리라는 건 개념적인 용어입니다. 그리고 SRAM도 개념적인 용어입니다. 비트들을 저장할 수 있는 장치는 전부 메모리입니다. 하드디스크라고 부르는 장치도 메모리고, 우리가 램 램 하는 램카드도 메모리고 조그만한 레지스터도 메모립니다.(레지스터는 물리적인 용어입니다.)

여러분의 고정관념을 깨기 위해 몇가지 얘기해보자면 버퍼라는 것도 개념적인 용어입니다.(이런 개념적인 용어들이 바로 착각을 일으켜서 공부를 힘들게 하죠.)
잠시 저장하는 기능이 있다면 전부 버퍼입니다. 근데 이런 잠시 '저장'이 바로 함정입니다. 저장하면 전부 메모리라고 부를 수도 있는 것입니다. 극단적인 예로 제 집의 1T바이트짜리 하드디스크에 야동을 수천개 다운로드해놓은 뒤에 다른 1T짜리 하드디스크로 전부 옮긴다면, 그리고 계속 그런식으로 사용한다면, 바로 그 첫번째 하드디스크는 버퍼가 되는 것입니다. 그런 버퍼가 레지스터라는 조그마한 장치(이것도 메모리)를 이용해 쓰일 수도 있고 램이라는(이건 레지스터가 많이 모여있는 것이라고 보면 됩니다.) 좀더 큰 장치를 이용할 수도 있는 거죠.
앞서말한 스택이라는 건 프로그래밍 공부하시는 분들은 자주 들어보셨을 텐데, 이 스택또한 마찬가지 입니다. 스택의 특징은 넣은 순서대로 늦게 나오는 것이죠. 빨대를 책상위에 수직으로 세우고 그 구멍에 비비탄을 넣어서 쌓아보면, 맨 마지막에 넣은 비비탄이 첫번째로 나오고, 가장 먼저 넣은게 가장 늦게 나오는게 바로 스택입니다. (자료구조라는 과목이 이런 망할놈의 추상화된 개념적용어들로 사람들을 괴롭힙니다.) 8바이트가 최대용량인 램을 말그대로 램으로 사용할 수도 있지만, 거기에 먼저 8비트하나를 저장하고 차곡차곡 쌓으면서 스택처럼 사용한다면? 그게 스택입니다.

아무튼 이런 식으로 하드웨어를 공부하실때 용어에 기죽으시면 안됩니다. 아 내가 바보멍청이라 버퍼를 배웠는데도 컴퓨터를 까보니 버퍼라는 회로는 없구나..잘못배웠나보다 난 진짜 바보멍청이야 이럴 필요 없다는 겁니다. 진짜 부딪히면서 배우길 각오해야는 겁니다. 실제로 컴퓨터를 세세하게 분해하면(아까 말한 기본이 되는 메인회로판을 분해하면) 전부 AND OR NOT 의 작동을 하는 게이트(그냥 작은 트랜지스터라고 생각합시다.)들과 전선들로만 이루어져 있다는 걸 깨닫게 됩니다. (다시말하지만 이미 아시는분들도 입문자분들을 위해 양해를..) CPU라면서 인텔이 판매하는 칩들, 메인보드의 서로 종류가 다른 칩들, ATmega같은 AVR들... 전부다 그 안에 까보면 죄다 AND, OR, NOT을 수행하는 게이트로만 이루어져 있는 겁니다. 그런 AND, OR, NOT게이트들은 전부 트랜지스터로 이루어져 있습니다.

이 경우 처음에 이런 의문을 갖는 분들도 계시죠. "아니...트랜지스터는 그거 몸뚱이에 다리 세개달린 그놈아닌가.. 그게 어떻게 이 작은 Intel CPU칩에 수백만개가 들어가있다는거야... 아 대체 트랜지스터가 뭐야"
그냥 트랜지스터 역할을 하는 훨씬작은 다른걸 이용해서 넣은겁니다. (또다시 개념적용어의 함정이죠. 트랜지스터 역할을 하기 때문에 트랜지스터가 수백만개 들어갔다 하는 겁니다. 제가 생각하기에 세상 모든 공부는 이런 용어의 개념만 명확히 하면 쉬워집니다.)




그럼 이제 어느정도 용어의 함정들은 실컷 말했고 아까의 컴퓨터라고 불리기 위해 갖추어야할 장치목록과 연산목록으로 돌아가 보죠.

강좌 맨 위에 첨부한 사진이 바로 애플1입니다. 스티브잡스가 열심히 고함지르고 스티브워즈니악이 열심히 납땜해서 만든 컴퓨터죠. 옆에 이것저것 있는건 치워버리고 모니터 키보드 녹색 회로기판 하나가 아까 말한 세가지 기본장치입니다. 개념적인 용어로는 하드웨어라는 것이죠.
아마 해쿨분들이라면 컴퓨터내부(데스크탑)정도는 보셨을 텐데요. 현대의 컴퓨터에 비하면 너무나 간단하게 생겼죠. 그래도 저건 컴퓨터의 역할을 하기 때문에 컴퓨터인 것입니다.
요즘 우리가 컴퓨터를 살때 고려하는 그래픽카드나 사운드카드는 옵션입니다. CPU도 전문회사(Intel같은)가 CPU만 만들기 때문에 톡 떨어지는 것이지 처음 컴퓨터를 공부할땐 그냥 메인보드 하나에 CPU가 완전히 부착되어 있는 저런 애플1같은 컴퓨터를 생각하시는게 마음편합니다.
엇 그런데 왜 정사각형 모양의 CPU가 없을까요? CPU가 없는거 아닌가요?
결론부터 말하면 아닙니다. 하드웨어를 처음 배우시는 분들(전자공학등에 문외한이신 분들, 혹은 컴퓨터관련 학과인데 소프트웨어밖에 공부한적 없는 학생분들)은 이미 현대의 인텔코어(CPU)나 하드디스크같은 기계적장치들(하드웨어들)에 익숙해진 나머지 이젠 편견에 사로잡혀버린겁니다. 이걸 전부 설명하려면 힘들고 간단히 말해서 겉모습은 똑같지만 내용물이 하는 역할은 다르다. 라고 말할 수 있습니다. 칩옆에 다리처럼 나온 핀들이 어떤형태인가 차이라고 보시면 됩니다.
그리고 동일한 칩이더라도 다른 용도로 사용될 수 있다는 것을 아셔야 합니다.
아까 말했던 것처럼 회로기판에 RAM이라고 써진 칩이 두개 박혀있더라도, 어 이건 뭐지 듀얼램인가..
라고 섣불리 판단하면 안된다는 겁니다. 하나는 램으로 쓰고(바로 이경우 이 칩을 메인메모리라고 부릅니다.) 나머지 하나의 램은 포인터값이나(C언어에서 흔히 나오는..) 재귀함수의 리턴값등들 저장하는 스택메모리로 사용될 수도 있는거죠.

또한 아까 말한 AND, OR, NOT을 수행하는 게이트들을 묶어서 디코더, 인코더, 플립플롭, 레지스터, 램, 카운터, 멀티플렉서 등등을 만들어냅니다. 전부 '디지털 공학'이라는 서적에서 자세히 나옵니다.
일단 하나하나 간략히 살펴 보면..

AND게이트와 OR게이트와 NOT게이트들을 이리저리 연결하다보면(방법은 역시 디지털공학서적 참조) 인코더, 디코더, 가산기(덧셈해주는 기계라고 생각해주세요. 일단 이것만으로 덧셈연산은 구현가능한 겁니다.) 등을 설계할수 있습니다.

그 다음으로 AND게이트 4개~10개 정도를 묶어서 플립플롭이라는 걸 만들 수 있는데, 이런 플립플롭은 딱 하나의 비트를 저장할 수 있는 메모리입니다. 아까 말했던 바로 그 저장장치인 것이죠.

그럼 이제 이 플립플롭을 8개를 만들어보죠. 그다음에 일렬로 쫙 늘여보죠. 그럼 어떻게 될까요?
하나의 플립플롭은 0과 1을 저장할 수 있는데, 8개의 플립플롭은 0 0 0 0 0 0 0 0 또는 1 0 1 0 1 1 0 1 등등 갖가지 비트들을 저장할 수 있게됩니다. 이게 바로 레지스터의 실체입니다. 이 경우 8개의 비트를 저장할 수 있기 때문에 8비트 레지스터라고 부르죠.

그리고 이런 8비트 레지스터를 100개 만들어봅시다. 그 다음 그 100개의 8비트 레지스터를 건물 층 쌓듯이 차례차례 붙여올립니다. 그럼 바로 이게 램입니다. 8비트 저장공간이 100개 있는 램이죠.

카운터는 시간에 맞춰 순서대로 1씩 더해지는 레지스터입니다. 시계라고 생각하시면 쉽게 이해됩니다.

위에 카운터에서 시간이라는 얘기가 나왔는데 바로 이 시간의 실체는 클록펄스라는 주기적인 전기신호입니다. "너 컴퓨터 CPU 몇 클럭이냐" 바로 여기서 나오는 그 클럭입니다.

CPU라는건 개념적인 용어로 [중앙 처리 장치] 라고 불리는데 영어로 직역하면 [Central Processing Unit]이고 앞글자만 따면 CPU입니다. 별거없습니다. 그냥 아까 말한 메인메모리처럼, 중앙에서(핵심적으로) 무언가를 처리(산술연산 혹은 논리연산)하는 하드웨어(어떤 모양의 칩이든)는 전부다 CPU입니다.

다시 처음부터 정리하자면 컴퓨터라고 불리우려면 키보드, 모니터, 회로기판하나를 갖추고 있어야 하고, 그 회로기판은 산술연산, 논리연산을 할 수 있어야 한다.
그리고 그런 산술연산과 논리연산을 가능하게 하려면 회로 기판위에 AND, OR, NOT게이트들의 모음인 디코더, 인코더, 플립플롭, 레지스터, CPU, 램, 버스가 있어야 한다.

그럼 이젠 CPU가 무엇인지 살펴보겠습니다.

CPU는 전문기업에서만 제조가능한 대단한 것은 아닙니다.(물론 트랜지스터 집적도나 설계효율은 대단하지만) 말그대로 산술연산과 논리연산이 가능하면 CPU입니다.

CPU라고 불리는 것을 한번 쪼개보죠. 물론 가장 간단한 타입의, 간신히 CPU라고 불릴만한 장치로요.
임의로 정한 설계방식이니 회사마다 다를 수 있습니다. 아직 조금 어려운 단어지만 단일누산기구조 CPU입니다.

일단 쪼개보면(실제로 쪼개지 마세요.. 작아서 안보입니다) 아래와 같은 것들이 튀어나옵니다.

플립플롭 1~2개
8비트 레지스터 8~9개
멀티플렉서 십수개 이상
ALU 하나(이름에 겁먹지 마세요. 그냥 덧셈뺄셈해주고 논리연산(AND, OR, NOT)해주는 게이트들의 묶음입니다. 이 ALU는 기억장치가 아닙니다. 즉, 메모리의 한종류가 아닙니다.)

이게 끝입니다. 지금까지 설명한걸 생각해보면 CPU라는 건 죄다 게이트들의 묶음이라는 걸 알 수 있습니다. 각각의 레지스터들은 역시 앞에서 말했듯이 각각 역할이 다릅니다. 램에서 가져온 정보를 저장하는 역할도 있고, 두 개 정도의 레지스터는 ALU에 연결되서 두 레지스터에 저장된 각각의 8비트 데이터들을 연산(산술 혹은 논리)하는 용도이고, 그 연산된 결과값은 또 그값만을 저장하기 위한 또다른 레지스터에 저장되는 겁니다. 또 다른 하나의 레지스터는 입력레지스터이고, 또 다른 하나의 레지스터는 출력레지스터입니다. 이 두개의 입출력 레지스터가 바로 입출력 버퍼의 실체라고 보면됩니다.(왜냐면 임시 저장되니까요)

플립플롭 1~2개는 덧셈해서 나오는 캐리값을 저장하기 위한 용도이거나 두 8비트 레지스터의 데이터를 더했는데 그 값이 8비트를 넘어가는 경우, 오버플로우가 있는지 없는지 확인하는 상태신호를 저장하기 위한 1비트 메모리로 사용되는 겁니다. 그리고 마지막으로 멀티플렉서라는 건 데이터 선택기라고도 불리는데, 쉽게 말하자면 지금 설명하고 있는 CPU내의 모든 레지스터들을 멀티플렉서에 연결해놓고 이중에 하나씩을 선택해서 출력하는 겁니다. 왜 굳이 그렇게 하는가 하냐면, 전선을 아끼기 위해서라고 보면 됩니다. 8~9개의 레지스터가 8비트쯤 되면 레지스터 하나당 전선이 십수개는 나오는데 그것들을 전부 늘여놓으면 회로의 소형화가 어렵거든요.

  그래서 이렇게 멀티플렉서(역시 이것도 AND, OR, NOT게이트들로 이루어져 있습니다.)라는 장치를 이용해서 레지스터끼리 묶어놓고, 그 출력을 모든 레지스터의 입력과 램(메인메모리)에 연결해놓고 선택해서 8비트 데이터를 이리저리 왔다갔다 굴리는 것입니다. 이렇게 오만가지의 역할을 하는 여러개의 레지스터가 하나의 라인을 타고있죠? 이게 바로 버스(BUS)의 실체입니다. 버스는 멀티플레서로 만들어지는 것입니다. 예전 컴퓨터 조립할때 버스선 버스선 했는데 그 버스선이라는게 바로 이 멀티플렉서의 출력에서 나오는 선입니다. 이런 버스시스템은 3상태버퍼라는 특이한 게이트를 이용해서 만들수도 있지만 그냥 그런게 있다는 것만 알아두시고 당장은 멀티플렉서로 버스를 만드는 구나 하는것만 알아두시면 됩니다.

이 강좌는 어디까지나 길라잡이로서 하드웨어 공부를 시작하시고싶으시거나 관심있으신 분들이 헤매이지 않으시도록 큰틀만 집고 넘어가는게 목적입니다. 이부분의 자세한 내용은 네이버 책 검색창에 '컴퓨터구조'라고 치셔서 나온 책을 읽으세요. 말그대로 컴퓨터 구조를 다룹니다. 다만 컴퓨터 시스템구조 라는 식의 '시스템'자가 들어간 책은 조심하셔야 합니다.....거의 비슷하지만 약간 분야가 다른데, 전자의 책이 하드웨어를 집중으로 다룬다면 후자의 책들은 시스템 프로그래밍쪽(어셈블리)을 강조한다고 보시면 됩니다.(저의 경우는 그랬습니다..)

CPU의 간단한 설명이 끝났습니다. CPU는 무슨 마법의 장치가 아니라, 여러개의 레지스터들(작은 기억장치들)과 ALU(덧셈뺄셈연산, 논리연산)회로가 램에서 가져와 저장한 자기들의 데이터를 버스를타고서 이리저리 보내면서 연산한 뒤에 나머지 값을 다시 램으로 보내는 장치인 것입니다. 그때 그 CPU 안에 있는 레지스터들이 8비트레지스터들이면 한번에 8비트연산이 가능하므로 8비트 CPU라고 부르는 것입니다. 레지스터들이 전부 64비트면? 그럼 64비트CPU가 되는 겁니다.

기존의 컴퓨터가 메인보드, CPU 등등으로 나뉘어지는 이유는 산업화의 영향때문입니다. 절대 별다른 이유가 있는것이 아니라는 거죠.

사실 CPU하나가 컴퓨터라고 볼 수 있습니다. 나머진 전부 옵션이죠. 램과, CPU와 보조기억장치(하드디스크)를 서로 연결해놓고 아까 설명한 입출력 레지스터들에 모니터와 키보드를 연결해놓으면 컴퓨터는 완성됩니다. (분명히 집고넘어가지만 이건 명령어집합을 생략한 강좌입니다. '컴퓨터구조'책을 읽으시면 명령어집합은 자연스럽게 이해하실 수 있습니다. 그리고 그런 명령어집합이 바로 어셈블리어입니다.)

  
그럼 이제 마지막입니다.

왜 MCU는 중요할까요? (사실 이건 해쿨 대학교 하드웨어해킹강좌를 보시면 됩니다..)
바로 그 MCU에는 비트수는 적더라도(8비트나 16비트등) 거의 수십개에 달하는 레지스터와 ALU와 램과 보조기억장치(EEPROM이라는 장치로 구현, 하드디스크의 역할을 합니다.)가 전부다 들어가 있기 때문입니다. 그래서 마이크로 컨트롤러 혹은 마이크로 컴퓨터라고 불리우는 거죠.

"내가 뭔가 컴퓨터급 연산이 필요한 하드웨어를 만들고 싶은데... 컴퓨터에 꽂히는 CPU는 너무 성능이 크고 수십만원이나 나가..."
걱정하실 것 없습니다.
MCU의 대표주자(적어도 저는 그렇게 생각하는) ATmega 시리즈(보통 ATmega128을 많이 씁니다.)는 기종마다 다르긴 하지만 단돈 몇천원에서 3만원정도면 구할 수 있거든요(디바이스마트에서는 확장기판에 납땜이 된걸로 3만원이면 삽니다.)

제가 이 강좌 처음부분에 컴퓨터 시스템을 알게되면 디지털시스템공부는 다한거라 봐도 된다고 했습니다. 제가 아직 공부가 덜되긴 했지만 틀린말은 아닐거라고 봅니다.
거의 모든 전자기기에는 이런 ATmega같은 MCU들이 내장되어 있습니다. ATmega 하나에 하드디스크기능을 하는 장치가 있어서 프로그램들을 내장할 수 있고, 램도 내장되 있어서 그걸 순서대로 도마 위에 올릴 수도 있고, 레지스터도 32개나 있어서(ATmega128기준) 야채를 썰든 고기를 썰든 다 할 수 있는 것이죠. 게다가 그 모든 결과값을 출력시킬 수도 있고 입력장치로 입력받을 수도 있습니다.
입력장치가 꼭 키보드여야만 할까요?

센서라면 어떨까요? 온도감지 센서나 적외선거리감지 센서라면 그 상황에 맞춰서 무언가를 출력하는(혹은 모니터 대신 소리를 나게한다던가 하는..) 하드웨어를 만들어 낼 수도 있습니다.

그리고 컴퓨터시스템을 공부해야하는 무엇보다도 중요한 이유는 바로, 모든 프로그램들은 이런 하드웨어를 기반으로 짜여져 있다는 것이죠. 아주 쉬운 예로 C컴파일러마다 int나 long의 타입값들이 다르죠. CPU가 32비트 CPU라면 int는 최대 32비트인 것입니다.(물론 일반적이라고는 하지 않겠습니다만..) 그런데 만약 CPU가 8비트 CPU라면? int값의 최대값은 8비트가 되겠지요. 프로그램으로 극복할 수 있겠지만 아무튼 제약이 생긴다는건 사실입니다. 갖가지 오버플로우도 이런 하드웨어에 대한 이해를 통해 피해갈 수 있겠죠.

저는 하드웨어를 알아야만 진정한 해커가 될 수 있다고 믿습니다. 어떤 디지털시스템이든 그것의 구조와 돌아가는 방식의 이해는 근본적으로는 하드웨어에서 출발하며, 그 하드웨어의 방식에 따라 제어가 달라지고 그런 다양한 제어때문에 다양한 어셈블리어가 탄생합니다. (CPU는 회사마다 다른방식으로 설계하기 때문에 어셈블리어도 서로 다 다른거죠.)

쓰다보니 매우 길어졌네요.. 혹시 오류같은게 있으면 쪽지 주시길 바랍니다
감사합니다~ ^^^^^(아싸 포인트)










  Hit : 13635     Date : 2013/10/31 03:54



    
rgone ^^ 참 뭐라고 해야할지 난감하네요.... 2016/01/04