컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (0)
KLDP 블로그에 OS 만들기 강좌를 올린지 어느덧 2년 가까이 지났군요.
그 강좌는 책이 되어 출간되었고,
출판사에는 경영상 타격을,
독자들에게는 어려운 설명에 좌절과 분노를,
제 개인 적으로는 괜찮은 경험을 주었습니다.
이제는 거의 안팔리는 것 같은데... 그래도 링크 걸어봅니다.
그리고 2년이 지나고... 저는 또 다른 강좌를 올려볼까 합니다.
어렸을 적 그 유명하신 찰스 패촐드 아저씨가 쓴 "CODE"라는 책을 읽고 좌절했던 경험이 있습니다.
책을 1/3 정도 읽었을 무렵부터 책 내용을 이해하지 못했죠.
그리 두껍지 않은 책이었음에도 다 읽고 나서 멀미 비슷한 증상이 나타났었습니다.
그리고 대학교에 들어가 컴퓨터 구조론을 배울때 다시 CODE 책의 존재가 떠올랐습니다. 하지만 이미 책장에 책은 없어졌고, 서점에서는 절판되었다는 소식만 들릴 뿐이었습니다.
그때부터 그런 비슷한 글을 꼭 쓰고 싶었습니다. 비록 제가 쓴 글의 수준이 패촐드 아저씨의 수준에 이르지는 못할지라도요..
이제부터 시작합니다.
-----
#0.
태초에 빛이 있었다. 성경은 이렇게 시작한다. 태초에 0과 1이 있었다. 내 책은 이렇게 시작하려 한다. 지금 내가 이 글을 쓰고 있는 컴퓨터나 이 책을 읽고 있는 여러분들의 책상 위에 있는 컴퓨터나 디지털이라는 것이 발명되었기에 만들어진 물건이다. 나는 이 책에서 영과 일이라는 아주 단순한 개념부터 시작해 여러분이 사용하고 있는 컴퓨터에 이르는 긴 여정을 이야기하려 한다. 어쩌면 어려울 수도 있고 복잡해 보일 수도 있지만 포기하지 않고 따라 온다면 분명 많은 것을 얻게 될 것이다.
이 책에서 나는 어떤 이야기를 여러분에게 들려줄 것인가. 이제 부터 아주 짧게 내가 앞으로 여러분에게 들려줄 이야기를 정리해 보겠다. 아직 책이 시작하지도 않았는데 이야기를 정리해 주는 이유는 여러분이 이 책을 읽기 전에 이 책에 어떤 내용이 있는 지 알고 이 책이 어떤 흐름으로 진행되는 지를 알아 주길 바라는 마음에서다.
처음엔 영과 일, 스위치 on/off, 음과 양(이것도 디지털이다!). 이렇게 디지털이라는 것이 있었다. 그리고 사람들은 자신들이 익숙한 숫자를 디지털로 표현하고 싶어했다. 이진법이 발명되었다. 이어서 자신들이 익숙한 글자를 디지털로 표현하고 싶어했다. 코드가 생겨났다. 지금도 우리는 많은 코드를 접하며 산다. 아스키 코드, 유니코드...
사람들은 디지털을 신호로 전달하고 싶어했다. 원거리로 디지털 신호를 전송하려다 보니 중간에 신호가 점점 약해졌다. 사람들은 이 신호를 증폭하고 싶어 했다. 전기적 스위치를 이용해 증폭기를 만들었고 이것이 훗날 트랜지스터의 기본 개념이 되었다.
어떤 천재적인 사람이 세상에 있었다. 그 사람은 전류가 하나의 길로만 흐르는 것이 아니라 되돌아 올 수도 있을 것 같다는 생각을 했다. 그 사람은 피드백 회로를 만들었고 거기에서 오실레이터가 만들어 졌다. 오실레이터의 발명으로 전자 회로는 시간의 흐름에 따라 정교하게 제어가 가능하게 되었다. 그리고 스스로 숨쉴 수 있게 되었다.
전기 신호 증폭에 사용되었던 릴레이를 피드백 회로로 잘 구성하면 인풋 신호와 아웃풋 신호를 입맛에 맞게 조절할 수 있다. 이 인풋 아웃풋 값을 잘 알려진 불 연산자의 값과 일치 시켜서 전기적으로 and, or, not 연산 동작을 시킬 수 있게 되었다. 이것을 게이트라고 부르고 게이트의 발명으로 이제 전자 회로를 통해 논리적인 동작을 할 수 있게 되었다. 컴퓨터는 논리적인 동작을 자동화하는 기계다. 전자 회로가 논리적 동작을 할 수 있게 되었다는 것은 컴퓨터로의 진화에 한 발자욱 더 다가갔다는 의미가 된다.
릴레이를 피드백 회로로 엮어 게이트를 만들었다. 게이트를 피드백 회로로 엮으면 역시 인풋에 대해 특정 아웃풋을 내는 회로가 만들어진다. 이것을 플립플랍 회로라고 한다. 플립플랍 회로는 그 구성에 따라서 내부에 신호를 잡아둘 수 있다. 놀랍게도 값을 저장할 수 있게 되었다. 이제 회로는 전기 신호를 그저 흘려 보내는 것 뿐만 아니라 그 신호를 잡아두어 기억할 수도 있게 되었다. 놀라운 발전이다. 우리는 메모리를 만들어 낸 것이다.
스 위치와 전선. 코일 등으로 이루어진 이 복잡한 전자 회로는 너무 크고 느리고 전기를 많이 잡아 먹는다. 사람들은 괴물처럼 커져 버린 이 전자회로를 작게 줄이는 방법을 고민했다. 그리고 답을 얻어냈다. 이 커다란 전자 회로가 얇고 작은 조각 하나에 모두 들어가는 방법을 찾아낸 것이다. 반도체를 이용한 정교한 화학적 제어로 복잡한 전자 회로를 작게 모았다. 회로 집접 기술은 그후 눈부시게 발전했다. 지금 여러분 컴퓨터의 CPU나 메모리 칩을 보라. 이 작은 칩은 예전 체육관 하나를 꽉 채우던 진공관 컴퓨터 보다 훨씬 빠르고 성능이 좋으면서도 그 보다 작고 전기도 덜 소비한다.
논리 게이트를 이용해 메모리를 만들었다. 이제 논리 게이트를 이용해 덧셈기를 만들 수 있다. 이 회로는 메모리에 저장되어 있는 값을 읽어서 더한 다음 다시 메모리에 저장한다. 놀라운 일이 벌어졌다. 우리는 최초의 컴퓨터와 동일한 동작을 하는 기계를 만드는 단계에 까지 이른것이다. 보수법을 이용하면 덧셈기를 이용해 뺄셈을 할 수 있다. 덧셈을 반복하면 곱셈이다. 뺄셈을 반복하면 나눗셈이다. 그리고 약간의 부가 회로를 추가하면 비트 시프트 회로도 구성할 수 있다. 현대 CPU가 하는 모든 일을 우리가 만든 덧셈기도 할 수 있다. 진화는 거의 완성되어 간다.
덧셈기로 덧셈을 할 수 있고, 뺄셈을 할 수 있고, 곱셈, 나눗셈을 할 수 있다. 메모리에서 값을 가져올 수도 있고, 저장할 수도 있다. 메모리에서 값을 가져오는 위치를 바꿀 수도 있다. 이런 작업들은 일련의 스위치로 덧셈기에 명령을 내려서 작업한다. 스위치를 이용한다. 이 책의 이야기는 최초 스위치를 자동화 하는 것에서 부터 본격적으로 진행되었다. 그리고 이야기가 절정에 달하는 이 시점에 다시 스위치가 등장했다. 당연히 자동화 할 수 있다. 덧셈기를 자동화하는 컨트롤 명령어 집합이 만들어 지는 것이다. 우리는 흔히 이 컨트롤 명령의 집합을 기계어라고 부르고 인간이 알아보기 쉽게 기계어를 읽을 수 있는 문자로 일대일 분류해 놓은 것을 어셈블리어라고 부른다.
어셈블리어는 설계자의 뜻에 따라 복잡하고 많이 정의 될 수도 있고, 가장 기본적인 명령어 만으로 구성될 수도 있다. 이것을 선택하는 것은 전적으로 프로세서를 설계하는 설계자 마음대로다. 나는 실제 프로세서를 설계하진 않지만 그 초기 단계인 덧셈기를 만드는 데까지 여러분을 이끌어 왔으니 그 보다 복잡한 프로세서를 설계한다는 기분으로 아키텍처를 설계해 보려 한다. 어셈블리어와 기계어의 조합을 설계하는 것이다. 그리고 실제로 어셈블리어로 만들어진 소스코드를 기계어로 번역하는 어셈블러를 제작해 본다. 이 책에서 제작하는 어셈블러는 아주 기초적이고 간단한 것으로 허점과 버그가 많지만 어셈블러가 무엇인지를 이해하는데는 큰 문제가 없다.
사람들은 프로그램을 만들 때 하나의 파일에 모든 소스 코드를 집어 넣어 프로그램을 만들지 않는다. 프로그래머의 뜻에 따라 논리적으로 구분된 여러 개의 소스 파일에 소스 코드들은 분리되어 있다. 이들은 각각 어셈블리어로 변경되고 어셈블러에 의해 오브젝트 파일로 변환되고 최종적으로 링커에 의해 하나로 합쳐진다. 어셈블리어가 어셈블러에 의해 오브젝트 코드로 만들어지는 과정은 이미 이야기 했다. 이제는 이 오브젝트 코드들을 하나로 묶어 최종 바이너리 파일을 만드는 링커의 기본 개념에 대해 여러분에게 이야기 해 주고 싶다. 실제 링커는 최적화 과정등 많은 복잡한 일을 하지만 내가 여러분에게 이야기 해주는 링커는 단순히 오브젝트 파일을 하나로 합치고 필요한 외부 전역변수들이나 함수들의 주소를 재배치해주는 역할 만한다. 역시 링커도 간단한 링커를 직접 만들어 보면서 여러분께 이야기 해 주고 싶다.
프 로세서는 하드웨어적으로 직접 설계하진 못했지만 우리가 설계한 아키텍처를 기반으로 돌아가는 가상 머신은 충분히 만들 수 있다. 그리고 그 가상머신은 생각보다 어렵지도 않다. 가상 머신을 만들고 앞서 링커가 만들어준 바이너리 파일을 가상머신 위에서 직접 동작시켜 봄으로써 우리의 긴 여정을 마무리 하고자 한다.
그리고 약간의 부록이나 여담삼아 우리의 어셈블리어로 번역되는 고급언어 컴파일러에도 도전해 보려 한다. 많은 예외 상황까지 처리할 수 있는 완성도 높은 고급 언어는 아마 힘들지도 모른다. 하지만 최소한의 고급 언어 흉내 정도는 내 볼 수 있지 않을까 하는 생각을 해 본다.
태초에 영과 일의 디지털에서 여러 전자 회로, 소자 등 하드웨어적 이야기를 지나 결국 궁극의 소프트웨어적 이야기에 이르기까지 긴 여정이 될 것이다. 아직 아무런 준비도 되지 않은 상태에서 이런 계획을 세우고 시작한 나도 과연 끝까지 해 낼 수 있을지 의문이다. 하지만 여러분들이 도와준다면 충분히 가능 할 것이다. 우리의 목표는 이야기를 끝내는 것이다. 시작한 이야기는 끝나야 한다.
자. 이제 이야기를 시작해 보자.
댓글
제가 샀던 책은
제가 샀던 책은 베스트셀러가 안되는 징크스가 생기려나요..
우리 회사에도 몇권 보이던데, 안팔리는게 아니라
이 분야 자체가 돈이 안된다는게 맞을거에요.
내용도 좋고 이 분야에서는 나름 많이 팔린건 아닐지... ;-)
좋은 강좌 기대하겠습니다 +_+
----
섬기며 사랑하면 더 행복해집니다.
몸에 좋은 칼슘이 듬뿍담긴 OS 프로젝트 - 칼슘OS http://asmlove.co.kr/wiki/wiki.php/gurugio
제가 너무 매니악한
제가 너무 매니악한 책을 낸걸까요....^^
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
이내용 대학과정에서
이내용 대학과정에서 배웠던 내용을 모두 합쳐 놓은듯하군요.
하지만 대학과정에서는 왜 배워야 하는지는 가르켜주지 않았는데
여기서는 그게 있군요^^
기대합니다.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐? 그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
-----------------------
내가 쓰는 글은 틀릴 수 있습니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
전에 쓴 강좌도
전에 쓴 강좌도 그렇고
이 강좌도 그렇고, 결국 학교에서 다 배운거 리바이벌하는 것에 지나지 않습니다.
다만 학교에서는 정해진 스케줄에 따라 이것저것 많이 배우느라
배우긴 배웠는데, 그걸 천천히 생각해 볼 시간이 많지는 않았죠..
(사실 그보단, 노느라....^^)
저는 이 글을 쓰면서 읽는 분들이 본인이 알고 있는 내용을 천천히 생각해 볼 수 있는 시간을 가질 수 있었음 좋겠습니다.
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
내용과는 별로
내용과는 별로 상관없습니다만,
이부분은 좀 틀린것 같습니다.
성경에서 '빛'은 창조물이기 때문죠..;;;
http://www.holybible.or.kr/B_GAE/cgi/bibleftxt.php?VR=GAE&VL=1&CN=1&CV=99&FR=
----
웹페이지 : http://bzpalm.net/
----
웹페이지 : http://bzpalm.net/
^^ 그냥 쓴 문장인데,
^^
그냥 쓴 문장인데, 수정해야 겠군요....^^
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
성경을 인터넷에서 검색해보니
First God made heaven & earth
The earth was without form and void, and darkness was upon the face of the deep; and the Spirit of God was moving over the face of the waters.
And God said, "Let there be light"; and there was light.
이 시점에서 빛이 나오네요. 자꾸 자꾸 주제에서 멀어지는...
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
예.
예. 맞아요.
요한복음에 의하면, 태초에 워드가 있었다고 하네요.
MS건 아니었던듯... ;^^
뿜었습니다. 최고!!
뿜었습니다. 최고!! ㅋㅋㅋ
CODE, 참 많은 생각을
CODE, 참 많은 생각을 하게 해주는 책이었고,
동아리 신입생들에게는 필독서로 소개해주는 책인데,
조만간 필독서가 하나 늘어날 것 같은 예감이 드는군요.^^;
---
Make Better Life.
---
Make Better Life.
이 글을 쓰면서
이 글을 쓰면서 CODE와의 차별화를 많이 염두에 뒀는데,
초반 흐름은 아마 거의 CODE와 흡사할 듯 합니다.
뭐 전체 구성도 비슷하지만요...^^
다행인것은 제가 CODE 책을 잃어버린 상태에서 쓴거라.. 표절의혹은 없을것 같습니다..^^
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
롱런할 거라고 생각합니다.
스테디셀러 예약!!
아직 출판 계약도
아직 출판 계약도 맺지 않은걸요~ ㅋㅋㅋ
누가 출판은 해 주려나...-_-
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
지금까지 배운
지금까지 배운 과목들이 어떤 의미가 있었는지..
이해가 되는데요.
난 왜 지금까지 숲을 보지 못했을까라는 자괴감에 빠집니다 -_ㅠ
감사합니다. 숲을 보여주셔서 :D
------------------------------------------------------------
Get busy living, or get busy dying.
------------------------------------------------------------
Get busy living, or get busy dying.
플리플로으로 메모리를 만들어내었다.....
완전 생초보
수없이 들어봤어도 메모리의 진정한 의미를 몰랐었는데. 여기와서 그것이 전기신호를 정장한다는의ㅣ미라는
것을 알게 되어 기쁩니다. 처음으로 알게 되는것이 많은 강좌정말 감사드립니다.....
완전 생초보
재출간 되었습니다.
CODE(코드) (하드웨어와 소프트웨어에 숨어있는 언어, 코드)
0.0 | 네티즌리뷰 3건
찰스 펫졸드 저 | 김현규 역 | 인사이트 | 2010.10.11
페이지 684| ISBN 9788991268838
판형 A5, 148*210mm
정가 28,000원
http://book.naver.com/bookdb/book_detail.nhn?bid=6368946
영어판을 얘기하시는 거라면
Code : The Hidden Language of Computer Hardware and Software (The Hidden Language of Computer Hardware and Software)
0.0 | 네티즌리뷰 0건
Charles Petzold 저| Microsoft Press | 2000.10.01
페이지 400| ISBN 0735611319
정가 21,340원
http://book.naver.com/bookdb/book_detail.nhn?bid=224393
목차
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (0) : http://kldp.org/node/109764
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (1) : http://kldp.org/node/109814
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (2) : http://kldp.org/node/109901
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (3) : http://kldp.org/node/110005
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (4) : http://kldp.org/node/110137
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (5) : http://kldp.org/node/110214
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (6) : http://kldp.org/node/110311
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (7) : http://kldp.org/node/110440
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (8) : http://kldp.org/node/110515
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (9) : http://kldp.org/node/110602
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (10) : http://kldp.org/node/110670
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (11) : http://kldp.org/node/110850
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (12) : http://kldp.org/node/111015
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (13) : http://kldp.org/node/111192
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (14) : http://kldp.org/node/111678
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (15) : http://kldp.org/node/112152
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (16) : http://kldp.org/node/112552
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (17) : http://kldp.org/node/112832
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (18) : http://kldp.org/node/113385
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (19) : http://kldp.org/node/113754
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (20) : http://kldp.org/node/113854
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (21) : http://kldp.org/node/113950
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (22) : http://kldp.org/node/114146
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (23) : http://kldp.org/node/114407
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (24) : http://kldp.org/node/114537
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (25) : http://kldp.org/node/114666
컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (26) : http://kldp.org/node/114667
댓글 달기