컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (16)

나빌레라의 이미지

#16. 영원히 기억하라.

플로피 디스크라는 것을 기억하는가? 이 이야기를 읽는 사람들 중에 5.25인치나 3.5인치 플로피 디스크를 알고 실제로 사용까지 해 본 사람들은 이제 어느덧 올드 유저 소리를 들어도 아무도 이의를 제기하지 않을 정도로 플로피 디스크는 이제 오래된 구세대 입력 장치가 되어 버렸다. 그렇다면 천공 카드는 혹시 알고 있는가? 아마 알고 있는 사람들 조차도 컴퓨터의 역사를 다루는 책에서나 접해봤을 것이다. 나 역시도 천공 카드라는 입력 장치가 초창기 컴퓨터에서 쓰였다는 정도 밖에 모르고 실제로 본적도 써 본적도 없다.

이 이야기를 구성해 가면서 입력 장치 부분을 생각하다 보니 의외로 천공 카드는 자연스럽게 도출되는 입력 장치 중 하나였다. 그만큼 천공 카드는 그 구성이나 동작이 원시적이고 직관적이며 이해하기 쉽다. 또한 현존하는 많은 복잡하고 신기한 입력 장치들도 결국은 디지털 값을 표현하고 읽는 방법의 차이일 뿐 디지털 값을 입력해서 읽게한다는 기본 개념은 결국 천공 카드와 같다. 모든 디지털이 스위치로 영과 일을 입력하는 것에서부터 시작했듯, 모든 입력 장치도 디지털을 원시적으로 표현하는 천공 카드에서부터 시작했다.(고 생각한다.)

위 그림은 한 줄에 8개의 동그라미가 여러 줄 있는 긴 종이다. 저 종이가 내가 생각하는 천공 카드다. 두께는 문구점에서 흔히 구입할 수 있는 약간 두꺼운 도화지 정도 수준이면 적당하다. 눈치 빠른 분들은 위 그림만 보고도 무엇을 의미하는지 파악하셨으리라. 파악 못했어도 상관없다. 이제부터 설명하겠다.

위의 천공 카드는 1바이트(8비트) 입력이 가능한 천공 카드다. 한 줄에 구멍이 여덟 개고 8비트 입력이 가능한 카드. 무언가 8이라는 숫자로 연관 관계가 형성되지 않는가? 그렇다. 구멍 한 개가 1비트를 의미한다. 그리고 맨 위에 0부터 7까지 숫자가 있다. 0이 LSB고, 7이 MSB다. 그래서 이진수 그대로 1인 비트에 구멍을 뚫어주면 된다.

예를 들어 1을 표현하고 싶으면 0번 구멍에 구멍을 뚫어주고, 123(01111011)을 표현하고 싶으면 0번, 1번, 3번, 4번, 5번, 6번 구멍에 구멍을 뚫어주면 된다. 만약 16비트를 표현하고 싶다면 위 천공 카드 한 줄의 구멍을 16개 만들어 주면되고 32비트를 표현하고 싶으면 구멍을 32개 뚫어주면 된다.

그러면 천공 카드의 값을 어떻게 읽을 수 있을까. 읽는 방법은 아주 많다. 카드의 아래, 위에 램프와 감광 센서를 달고 빛을 비추면 스위치를 닫는 장비를 만든다든지 초음파를 쏴서 강도를 측정한다든지하는 식으로 어떻게든 8개의 구멍중 어떤 구멍이 뚫려있는지만 판단할 수 있으면 된다. 나는 아주 원시적인 천공 카드 리더기를 만들어 보려한다.

이번에도 내가 사용할 부품은 전자석과 스프링 스위치 뿐이다.

왼쪽 read 스위치가 닫히면 위에 있는 전자석이 동작하면서 스프링이 달린 스위치 8개가 밀려 올라와 스위치가 닫히면서 램프가 켜지게 된다. 스위치를 밀어올리는 도구로 전자석이 아니라 모터를 사용할 수도 있을 것이다. 전자석이나 모터가 아니라도 스위치를 밀어 올릴 수 있는 도구라면 무엇이든 써도 상관없다.

전자석과 스위치 사이에 천공 카드를 위치시킨다면 천공 카드에 구멍이 뚫린 부분만 스위치가 닫히고 구멍이 없는 부분은 카드에 막혀서 스위치가 중간에 멈추기 때문에 스위치가 닫히지 않는다.

위 그림은 34(0010 0010)을 입력한 천공 카드를 리더기에 집어 넣었을 때 모습이다. 1을 입력으로 넣어야 할 부분의 스위치만 선택적으로 닫히게 할 수 있다. 일정 시간 간격으로 천공 카드를 앞으로 밀면서 전자석에 전압을 주면 천공 카드가 아무리 길어도 순서대로 8비트 값을 계속 읽을 수 있을 것이다.

천공 카드 리더기를 지난 번까지 만들었던 우리의 컴퓨터 회로에 연결해 보자.

천공 카드 리더기에 미리 구멍을 뚫어 놓은 천공 카드를 넣고 read 스위치를 누르면 천공 카드에 구멍을 입력한 값이 출력되어 SRAM에 입력으로 들어간다. 직접 스위치로 입력을 할때와 마찬가지로 SRAM의 R/W 핀에 0을 입력해 쓰기 모드로 하고 PC 레지스터쪽 CLK도 각 입력마다 같이 펄스를 주면 천공 카드의 값이 순서대로 SRAM에 저장된다. 이후 계산하는 순서는 지난 번에 이야기했던 순서와 같다.

이야기가 여기까지 진행되었으면 자연스럽게 또 다른 의문이 생긴다. SRAM의 출력을 천공 카드에 넣을 순 없을까? 당연히 가능하다. 8비트 입력을 받아서 1인 부분에 자동으로 구멍을 뚫어주는 기계가 있으면 된다. 일종의 자동화된 펀치 기계라고 보면 된다. 이 기계가 SRAM의 출력을 입력으로 받아 천공 카드에 구멍을 뚫어주면 된다.

천공 카드에 구멍을 뚫어주는 기계를 만드는 방법은 아주 많으므로 따로 그리진 않겠다. 위에 리더기와 반대로 동작하면서 전자석의 세기를 천공 카드에 구멍을 뚫을 수 있을 정도로 좀더 세게하여 만들 수도 있고, 역시 모터를 이용해 구멍을 뚫을 수도 있다.

만약 위 그림에서 천공 카드에 구멍 뚫어주는 기계를 청공 카드 리더기와 하나로 만든다면 청공 카드 한 장으로 데이터를 읽고 쓸 수 있다. 다만 덮어쓰기가 안될 뿐이다. 그래서 데이터 입력을 위해 미리 구멍을 뚫어 놓은 라인 다음 줄 부터 SRAM 데이터를 저장하기 위한 용도로 사용할 수 있다. 나중에 컴퓨터를 껏다가 다시 켜고 SRAM 데이터가 저장되어 있는 위치부터 천공 카드를 다시 읽는 다면 컴퓨터를 끄기 직전 SRAM 상태를 유지할 수 있을 것이다.

천공 카드의 각 줄마다 번호를 매겨서 읽기와 쓰기가 가능한 천공 카드 기계가 줄 번호를 입력 받아 해당 줄번호를 찾을 수 있게 한다면 SRAM 용량보다 훨 씬 긴 천공 카드를 이용해 SRAM 용량 보다 큰 정보를 다룰 수 있을 것이다. 천공 카드의 줄 수가 6만 4천 줄 보다 많으면 위 회로의 SRAM에 넣을 수 있는 최대 용량 보다 더 큰 데이터를 다룰 수 있다. 한 백만 줄짜리 천공 카드를 가정해 보자. 이런 식으로 천공 카드를 이용하는 목적은 우리가 하드 디스크를 사용하는 목적과 같다.

읽기와 쓰기가 가능한 천공 카드 기계가 바로 보조 기억 장치다. 저 자리에 하드 디스크가 들어가면 하드 디스크를 보조 기억 장치로 사용하는 것이고, 자기 테이프가 들어가면 자기 테이프가 보조 기억 장치가 되는 것이다. 그리고 SRAM을 주기억 장치라고 부른다. 나는 원시적인 천공 카드를 이용해 이야기했지만 하드 디스크나 메모리 카드, USB 메모리, SSD 등 여러가지 보조 기억 장치들이 연결되고 동작하는 원리는 모두 같다. 결국 주기억 장치(SRAM, DRAM)에 있는 데이터를 잃어 버리지 않고 저장하기 위해 존재하는 것이다.

보조 기억 장치를 사용할 수 있게 되었다. 덕분에 우리는 같은 작업을 위해 매번 같은 입력을 컴퓨터를 켤 때마다 할 필요가 없어졌다. 컴퓨터를 켜고 보조 기억 장치의 내용을 램으로 읽어와 PC 값을 조절한 다음 순차적으로 실행하면 된다.

우리의 디지털 회로는 논리 회로를 거쳐 점점 CPU의 모양세를 갖추며 컴퓨터라고 부를 만한 기계에 가까워지고 있다. 내 이야기도 내가 계획한 내용의 절반 이상을 풀어냈다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.