[Crash Course: Computer Science] #10 초기의 프로그래밍

이민선(Jasmine)·2022년 12월 28일
0
post-thumbnail

7강과 8강에서 살펴본 CPU 예시에서는 프로그램이 마법처럼 메모리 안에 있었다.
하지만 실제로 프로그램은 컴퓨터의 메모리에 로드되어야 한다.

프로그램된 기계에 대한 필요성은 컴퓨터를 개발하기 전에도 존재해왔다.

프로그래밍 가능 방직기


옛날에는 격자무늬 패턴을 만들 때 주기적으로 방직기를 패턴 모양에 따라 변경해야 했다.
노동집약적이어서 패턴 들어간 섬유가 더 비쌌다고 한다.
이에 Joseph Marie Jacquard는 프로그래밍이 가능한 방직기를 개발하였고, 이는 1801년에 처음 시연되었다.
펀치 카드에 의해 옷감에 패턴이 들어가야 할 열이 지정되었다.
구멍의 유무에 따라 특정 실이 높게 또는 낮게 직조기에 유지되도록 결정되는 것이다.
줄을 가로질러 패턴을 변화시키기 위해 펀치카드들은 길다란 사슬로 배열되어 방직기에 대해 일련의 명령을 형성했다.
Jacquard의 방직기는 최초의 프로그래밍 방식 중 하나로 여겨진다.

인구조사에 쓰인 펀치카드

1890년에 펀치카드는 최신 인구조사를 표로 만드는 데 쓰였다.(1강 참고)

각각의 카드는 개인의 데이터(인종, 혼인 여부, 자녀 수 등)를 나타냈고, 각각의 인구통계학적 질문에는 인구조사원이 적절한 위치에 구멍을 뚫을 수 있었다.
카드가 집계기로 들어가면, 구멍이 있을 경우 특정 답변의 누적 합계가 1만큼 증가했다.
이런 방법으로 전체 자치주의 사람 수를 셀 수 있었고,
결과적으로 인구통계학에 관련 질문들에 대한 합계 또한 계산할 수 있었다.

하지만 초기의 집계 기계는 단지 도표화(tabulate) 하나만 할 수 있었다는 점에서 진정한 컴퓨터라고 할 수는 없었다.
작업이 고정되었고, 프로그래밍이 가능하지 않았기 때문이다.
펀치카드는 데이터를 저장했지만 프로그램은 저장하지 않았던 것이다.

플러그보드(케이블)

60년이 지나도록 이 비즈니스 기계의 기능은 향상되었고,
빼고 곱하고 나누는 기능이 추가되었다.

이런 계산 기능들을 작동시키기 위해 프로그래머가 제어판넬(control panel 또는 plugboards) 에 접근했다.
이 판넬은 작은 소켓들로 채워져있었고, 프로그래머가 케이블을 연결하여 값이나 신호를 기계의 다른 부분으로 보낼 수 있었다.

그런데 다른 프로그램이 실행될 때마다 기계의 선을 조정해야 하는 번거로움이 있었다.
(으.. 끔찍)
1920년대에 플러그보드는 교체가 가능하도록 만들어졌고, 프로그램 별로 기계에 연결할 수 있게 되어 프로그래밍은 훨씬 편해졌다.
하나의 보드에는 세금 계산선을 연결하고, 다른 선은 급여 계산을 위해 연결할 수 있었다.

그런데 꼬인 선들 때문에 이 플러그보드는 프로그래밍하기 극도로 복잡했다.

예시로 1940년 대의 IBM 402 회계기계를 사용했던 손익 계산 프로그램이 있다.
이러한 플러그보드 프로그래밍은 전자컴퓨터에만 국한되지 않았다.

1946년에 완성된 세계 최초의 범용 목적의 전자 컴퓨터 애니악도 마찬가지였다.
애니악을 물리적으로 연결하고 프로그램을 실행시키는 데에만 3주 이상 걸렸다.
초기 컴퓨터의 거대한 비용을 감안하면, 단순히 프로그램을 전환하는 데 몇 주의 가동 중단은 허용될 수 없었다. 이에 더 빠르고 유연한 방법의 기계 프로그래밍 방법이 절실히 필요해졌다.

프로그램 내장식 컴퓨터(펀치 카드)

다행히도 1940년 대 후반부터 1950년 대에 이르자 전자 메모리를 쓸 수 있게 되었다.
비용은 감소하고 메모리 크기는 커졌다.
프로그램을 물리적인 플러그보드의 선으로 저장하는 대신에,
전체 프로그램을 컴퓨터의 메모리 안에 저장하는 게 가능해진 것이다!

메모리는 프로그래머에 의해 쉽게 변경될 수 있고
CPU에 의해 빠른 접근도 가능해졌다.
이러한 컴퓨터들을 "프로그램 내장식 컴퓨터(stored-program computers)"라고 한다.
컴퓨터 메모리가 충분히 있으면 실행하고 싶은 프로그램 뿐만 아니라, 도중에 생성된 새로 만든 값 등 프로그램이 필요한 어떤 데이터든 저장할 수 있다.

프로그래밍 데이터를 단일 공유 메모리로 통합하는 것을 "폰 노이만 구조"라고 한다.
(폰 노이만..경제 공부할 때 많이 마주쳤던 이름..ㅎㅎ 수학자이자 물리학자라고 한다. 몰랐는데 컴퓨터에 진심인 사람이었군)
폰노이만 컴퓨터의 특징은 ALU, 데이터 레지스터, 명령 레지스터, 명령 주소 레지스터를 포함하는 처리장치이자 데이터와 지침 모두를 저장하는 메모리라는 것이다. 7강에서 만든 컴퓨터가 폰노이만 컴퓨터!

폰노이만 구조의 맨 처음의 프로그램 내장식 컴퓨터는 1948년 맨체스터 대학에서 만들어졌고 별명은 "baby"였다.
실행하기 전에 프로그래밍 데이터를 컴퓨터에 로드해야 했고, 이를 위해 펀치카드가 사용되었다.
1980년 대에는 거의 모든 컴퓨터에 펀치카드 판독기가 있었다.
펀치카드를 빨아들여 카드의 내용을 컴퓨터 메모리에 기록할 수 있었다.
펀치카드의 무더기들을 로드해오면 판독기가 순서대로 메모리에 로드하는 것이다.
프로그래밍 데이터가 메모리로 저장되면 컴퓨터는 그것을 실행하라는 메시지를 받게 된다.

펀치카드로 구멍을 뚫어 만든 가장 큰 프로그램 중 하나는 1955년 미국 공군의 세이지 방공 시스템이었다.
피크 때는 전 세계 프로그래머의 20%를 고용했다고 한다.
주요 제어 프로그램은 엄청 큰 62500개의 펀치카드에 저장되었고, 대략 5메가 바이트의 데이터와 같다.

펀치카드는 컴퓨터에 데이터를 넣는 것 뿐만 아니라 데이터를 꺼내오는 것에도 유용했다.
프로그램의 결과를 컴퓨터의 메모리와 펀치카드에도 기록할 수 있었고,이러한 데이터를 사람이 분석하거나 추가 계산을 위해 또 다른 프로그램에 로드될 수 있었다.

펀치 종이테이프(punched paper tape)도 있었다.
개별 카드를 쓰는게 아니라 계속 이어진 형태이다.

(하드드라이브, CD-Rom, DVD, USB처럼 advanced한 저장장치들은 나중 강의에서 다룸!)

패널 프로그래밍(스위치)

플러그보드, 펀치 종이 외에도 1980년 이전에 컴퓨터를 제어하고 프로그래밍할 수 있는 패널 프로그래밍(panel programming)이라는 방법도 있었다.
특정 기능을 활성화하기 위해 케이블의 플러그를 물리적으로 연결하는 대신, 스위치, 버튼으로 가득한 거대한 패널로 작동되었다.

50~60년대 컴퓨터들은 거대한 제어콘솔이 특징이었다.
스위치만 사용해서 전체 프로그램을 입력하는 경우는 드물긴했지만 가능했고, 컴퓨터 매니아들을 타겟하여 만들어진 초기가정용 컴퓨터에 광범위하게 사용되었다.(펀치카드 판독기는 일반 사용자들에게는 비쌌다고 한다)

최초의 상업용으로 성공한 가정용 컴퓨터는 Altair 8800이었는데, 선조립 혹은 키트 두 가지 버전으로 팔렸다.
키트는 아마추어 컴퓨터 애호가들에게 인기가 많았고 저렴한 가격에 판매가 되었다.
패널 앞에 있는 스위치들을 켜고 끄면서 명령에 대한 2진 opcode를 입력한다.
deposit 버튼을 누르면 해당 값을 메모리에 입력 가능.

profile
기록에 진심인 개발자 🌿

0개의 댓글