옮긴이의 말
이 책은 이 분야의 클래식이라 불려도 손색이 없다.
마이크로프로세서라는 분야는 전자공학과 디지털 시스템에 대한 지식, 컴파일러나 디버거와 같은 시스템 소프트웨어 지식, 그 프로세서가 주된 응용 분야로 삼고 있는 응용 소프트웨어의 동작 특성과 알고리즘까지 파악할 수 있어야 하므로 다방면에 걸친 만능선수와 같은 능력이 요구되는 분야이다.
지은이의 글
이 책은 “현 세대가 있도록 만들어준 디지털 기술의 진화에 대하여 살펴보는 약간 독특한 여행기라고 할 수 있다.” -> “컴퓨터가 어떻게 동작하는지 설명하는 책이다!”
저장장치와 메모리에 대한 질문은 보통 “메모리는 책상 위의 공간과 비슷하고, 저장장치는 서류함과 비슷하다.”는 비유로 답할 때가 많다. 메모리와 저장장치를 구분하는 것 자체가 사실은 빠르면서도 저렴하고, 대용량이면서 휘발성이 없는 장치가 없기 때문에 이를 인위적으로 구분하면서 발생한 문제이다.
컴퓨터는 아래로는 트랜지스터들의 집합으로 시작하여 위로는 정보를 컴퓨터의 화면에 표시할 수 있도록 만들어 주는 부분까지 대부분 계층적으로 구성되어 있다.
Chapter 1. 친한 친구와의 대화
만약 친한 친구의 방이 맞은 편에 있고, 불이 꺼진 상태에서 의사소통을 하기 위한 방법으로 손전등을 활용하는 방식이 있을 것이다. 이를 테면 A는 한 번, B는 두 번, Z는 26번 빛을 깜빡거리는 식으로 말이다. 하지만 이 방법은 “How are you?”라는 메세지를 보내기 위해 131번 손전등을 깜빡거려야하며, 물음표를 표현하기 위한 방법도 생성해내야한다.
이런 고민을 가진 사람이 만든 “모스부호(Morse Code)”라는 놀라운 발명을 찾을 수 있다. 이제는 “How are you?”를 표현하기 위해 32번의 깜빡임만 필요할 뿐 아니라, 물음표도 보낼 수 있다.
모스부호의 동작을 설명할 때 일반적으로 ‘점(dot)’과 ‘선(dash)’이라고 한다. 부호(code)라는 용어는 일반적으로 사람과 컴퓨터 간에 정보를 전다하는 체계를 의미한다. 달리 말하자면 부호란 의사소통을 가능하게 하는 것이라 할 수 있다. 어떤 물건에 이름을 지정하는 것은 어떤 규칙이 있는 것이 아니라 대부분 임의로 이루어진다. 어떻게 보면 단어라는 것도 일종의 부호이다.
부호의 형태로는 음성 언어, 문자 언어, 수화, 점자, 속기술 등 의사소통을 위해 수많은 부호들이 사용된다. 어떤 부호가 다른 부호로는 처리가 불가능한 경우에도 적절히 사용될 수 있다면 그 부호는 유용하다고 말할 수 있다.
컴퓨터는 인간이 사용하는 부호를 직접 사용하는 것이 불가능하다. 그럼에도 기술의 발전에 따라 사람이 의사소통에 사용하는 모든 형태로의 정보를 취득하고, 저장하고, 가공하고, 표현하는 것이 가능해지고 있다.
모스부호도 일종의 부호이다. 모스부호에서 점과 선 사이에 잠깐 시간을 두는 것은 필수이다. 손전등을 켜거나 꺼두는 시간은 정해져있지 않다. 이 시간은 모두 점을 표현하는 시간을 기준으로 상대적으로 표현되는 것이며, 이 시간이 얼마나 걸릴지는, 손전등을 얼마나 빠르게 깜박일 수 있을지와 보내는 사람이 얼마나 빨리 특정 글자에 대한 모스부호를 기억해내는지에 달려있다.
그냥 보기에는 모스부호에서 각 알파벳 문자를 위하여 점과 선을 이용한 조합을 할당하는 것이 자판에서 그러하듯 규칙 없이 이루어진 것으로 보이지만, 자주 사용되는 E와 T 같은 문자에는 좀 더 짧고 간단한 부호가 할당되어 있다. 세번의 점, 세번의 선, 세번의 점은 ‘SOS’로 국제 조난 신호를 나타낸다. ‘SOS’는 어떤 약어가 아니고, 단지 쉽게 기억할 수 있는 모스부호 조합을 선택한 것이다.
이 모스부호는 말하기에 비해서는 매우 느리지만, 이정도면 충분히 의사소통에 활용할 수 있고, 이를 소리로 내어 통상적인 말을 대치할 수도 있다. 점은 ‘디’ 선은 ‘다~’라고 부른다. 이러면 모스부호를 적을 때는 점과 선으로, 읽을 때는 단 두개의 모음으로 줄일 수 있다.
여기서 가장 중요한 말은 바로 ‘두 가지’라는 것이다. 두 가지 형태의 깜빡임, 두 가지 모음, 실제로 두 가지 다른 것들은 적절히 조합되어 모든 형태의 정보를 전달할 수 있다.
Chapter 2. 부호와 조합
모스부호는 새뮤얼 핀리 브리즈 모스가 발명하였고, 모스부호의 발명은 역시 이 책의 뒤에서 좀 더 살펴볼 전신의 발명과 매우 밀접하게 연관되어 있다. 모스부호가 부호의 속성을 아는 데 좋은 길잡이가 되었듯, 전신 역시 컴퓨터 하드웨어를 이해하는 데 좋은 길잡이가 될 수 있다.
모스부호는 보내는 것이 받는 것보다 훨씬 쉬움을 알 수 있다. 문자를 모스부호의 점과 선으로 알려주는 표는 있지만, 그 반대로 해석할 수 있도록 해주는 표는 없다.
이를 해결하기 위해 일단 알파벳 순서는 잊는다. 부호가 얼마나 많은 점과 선들로 이루어져 있는지에 따라 부호를 묶어가면서 표를 만드는 접근 방법이 더 좋을 것 같다.
어떤 문자를 나타내는 부호를 수신하면, 일단 점과 선이 몇 개인지 알아내어, 해당 표를 참조하면 된다. 네 표의 크기를 살펴보면 뭔가 패턴이 보인다. 각 표는 직전에 설명된 표보다 두 배의 부호를 가지고 있다는 것을 알 수 있다. 이 흥미로운 경향을 다음과 같이 요약할 수 있다.
점과 선의 수 | 부호의 수 |
---|---|
$1$ | $2$ |
$2$ | $4$ |
$3$ | $8$ |
$4$ | $16$ |
점과 선의 수 | 부호의 수 |
---|---|
$1$ | $2$ |
$2$ | $2 \times 2$ |
$3$ | $2 \times 2 \times 2$ |
$4$ | $2 \times 2 \times 2 \times 2$ |
점과 선의 수 | 부호의 수 |
---|---|
$1$ | $2^1$ |
$2$ | $2^2$ |
$3$ | $2^3$ |
$4$ | $2^4$ |
세 단계를 거치며 표가 아주 간단해졌으며, 표현할 수 있는 부호의 수는 전달된 점과 선의 수를 2의 승수로써 사용하면 얻을 수 있는 것이다. 앞의 표를 아래와 같이 하나의 식으로도 표현할 수 있다.
$표현할 수 있는 부호의 수 = 2^{점과 선의 수}$
2의 거듭제곱은 많은 부호에서 찾아볼 수 있다.
좀 더 쉽게 해독할 수 있도록 다음과 같이 큰 나무의 형태를 가진 표를 그려볼 수 있다.
이 표를 통해 특정한 조합을 해독하기 위해서는 왼쪽에서 오른쪽으로 적절히 화살표를 따라가기만 하면 된다. 이런 측면을 생각해본다면, 처음 모스부호를 정의할 때 이러한 표를 만드는 것이 필요하다는 것을 알게 될 것이다. 이 표를 이용함으로써 같은 코드에 서로 다른 두 개의 문자를 할당하는 바보 같은 실수가 발생하지 않도록 할 수 있다는 점이고, 둘째는 이 표를 통하여 모든 가능한 조합을 확인하고 문자를 할당할 수 있기 때문에, 필요 없이 길게 점과 선의 조합이 만들어지는 일을 막을 수 있다.
이 이후로도 조합을 점차 늘려가면서 부호에 적용할 수 있다.
모스부호는 점과 선이라는 두 가지 요소로 이루어져 있으므로 이진(binary) 부호라 이야기 할 수 있다. 두 가지 성질만 가지는 이진 개체나 모스부호와 같은 이진 부호는 항상 2의 거듭제곱수로 그 결과를 표현할 수 있다. 지금까지 이진 부호를 분석하면서 했던 일들은 수학에서 조합론(combinatorics) 혹은 조합적 분석(combinatorical anlaysis)이라 말하는 분야의 아주 간단한 예이다. 전통적으로 조합적 분석은 확률과 통계 분야에서 가장 많이 사용되고 있다.