이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다.
프로그램된 기계에 대한 필요성은 컴퓨터를 개발하기 전에도 존재해 왔다. 가장 유명한 예는 섬유 제조에 있었다. 만약 크고 붉은 식탁보를 짜고 싶다면, 단순히 베틀에 붉은 실을 넣고 작동시키면 되었다. 하지만 만약 줄무늬나 격자무늬와 같은 패턴을 옷에 넣고 싶다면 어떨까?
근로자들은 주기적으로 방직기를 패턴의 모양에 따라 변경을 해야 했고, 상당히 노동집약적이어서 패턴이 들어간 섬유를 비싸게 만들었다. 이에 대응하여 Joseph Marie Jacquard는 프로그래밍이 가능한 방직기를 개발하였으며, 1801년에 처음 시연되었다. 펀치카드에 의해 옷감에 패턴이 들어가야 할 열이 지정되었다. 구멍의 유무에 따라 특정한 실이 높게 또는 낮게 직조기에 유지되도록 결정되었다. 이렇게 교차된 실은 씨실이라 불리며 실의 위나 아래를 지나갔다. 줄을 가로질러 패턴을 변화시키기 위해 펀치카드들은 기다란 사슬로 배열되었고, 방직기에 대한 일련의 명령을 형성했다.
많은 사람들은 Jacquard의 방직기를 최초의 프로그래밍 방식 중 하나로 여기고 있다.
구멍 뚫린 카드는 싸고 믿을만하며 사람들은 명료하게 데이터를 저장하는 방법을 읽을 수도 있다. 1세기쯤 지난 후에 펀치 카드는 1890년 최신 인구조사를 표로 만드는 데 쓰인다. 각각의 카드는 개인의 데이터를 나타냈다. 인종, 혼인 여부, 자녀 수, 태어난 도시 등의 것들을 말이다. 각각 인구 통계학적인 질문에는 인구 조사원이 적절한 위치에 구멍을 뚫을 수 있었다. 그리고 카드가 집계 기계로 들어가게 되면, 구멍이 있으면 특정 답변의 누적 합계가 1만큼 증가했다. 이런 방법으로 전체 자치주의 사람 수를 셀 수 있었고, 결과적으로 인구통계학에 관해 물어봤던 질문들에 대한 합계 또한 계산할 수 있었다.
주목해야 할 것은 초기의 집계 기계가 그들은 단지 도표화 하나만 할 수 있다는 점에서 진정한 컴퓨터가 아니었다는 것이다. 그들의 작업은 고정되었고 프로그래밍이 가능하지 않았다. 펀치카드는 데이터를 저장했지만 프로그램은 저장하지 않았다. 60년이 지나도록 이 비즈니스 기계는 기능이 향상되었으며, 빼고, 곱하고, 나누는 기능이 추가되었다. 심지어 언제 특정한 작업을 수행할지에 대한 간단한 결정이 가능해졌다. 이러한 기능들은 대략적으로 작동시키기 위해 다른 계산을 수행할 수 있는 프로그래머가 제어 패널(Control Panel)을 조작했다.
이 패널은 작은 소켓들로 채워져 있었고, 프로그래머가 케이블을 연결하여 값이나 신호를 기계의 다른 부분으로 보낼 수 있었다. 이러한 이유로 프로그래머들은 플러그 보드(Plugboards)라고 불리기도 했다. 불행히도, 이것은 다른 프로그램이 실행되어야 할 때마다 이 기계의 선을 조정해야 한다는 것을 의미했다. 그리하여 1920년대에는 이러한 플러그 보드를 교체가 가능하도록 만들었다. 이것은 프로그래밍을 훨씬 편하게 만들 뿐만 아니라, 다른 프로그램을 기계에 연결할 수 있게 해 준다. 이 플러그 보드는 프로그래밍하기 극도로 복잡했다.
1940년대에 손익을 계산하는 플러그 보드는 IBM 402 회계 기계를 사용했고, 인기가 많았다. 그리고 이런 스타일의 플러그 보드 프로그래밍은 전자컴퓨터에만 국한되지 않았다.
1946년에 완성된 세계 최초의 범용 목적의 전자 컴퓨터인 애니악은 1톤을 사용했다. 프로그램이 종이에 완전히 완성된 이후에도, 물리적으로 애니악을 연결하고 프로그램을 실행시키는 데에는 3주 이상 걸렸다. 초기의 컴퓨터에서 거대한 비용을 감안하면, 단순히 프로그램을 전환하는 데 몇 주의 고장은 허용될 수 없었으며, 새롭고, 더 빠르고, 더 유연한 방법의 기계 프로그래밍 방법이 절실히 필요했다.
다행히도 1940년대 후반부터 50년대에 이르자 전자 메모리가 실현 가능해졌다. 비용이 감소함에 따라 메모리 크기는 커졌다. 프로그램을 물리적인 플러그 보드의 선으로 저장하는 대신에, 전체 프로그램을 컴퓨터의 메모리 안에 저장하는 게 가능해졌다. 메모리는 프로그래머에 의해 쉽게 변경될 수 있고 CPU에 의해 빠르게 접근이 가능했다. 이러한 컴퓨터들은 프로그램 내장식 컴퓨터(stored-program computers)라고 불렸다.
충분한 컴퓨터 메모리가 있으면 실행하고 싶은 프로그램뿐만 아니라 도중에 생성된 새로 만든 값들도 포함해서 프로그램이 필요한 어떤 데이터든지 저장할 수 있다. 프로그래밍 데이터를 단일 공유 메모리에 통합하는 것을 폰 노이만 구조(Von neumann architecture)라고 한다. 저명한 수학자이자 물리학자인 Jonh von Neumann의 이름을 따왔는데, 맨해튼 프로젝트와 몇몇 초기 전자식 컴퓨터에 관한 일을 했었던 사람이다.
폰 노이만 컴퓨터의 특징은 산술 논리 장치와 데이터 레지스터, 명령 레지스터 및 명령 주소 레지스터를 포함하는 처리 장치하는 것이다. 마지막으로, 데이터와 지침 모두를 저장하는 메모리라는 것도 말이다.
폰 노이만 구조의 맨 처음의 프로그램 내장식 컴퓨터는 1948년에 맨체스터 대학에서 만들어졌고, 별명은 "베이비"였다. 심지어 현대의 컴퓨터도 같은 구조를 사용한다.
이제 전자식 컴퓨터 메모리는 훌륭하지만 모두가 실행하기 전에 프로그래밍 데이터를 컴퓨터에 로드해야 한다. 그리고 이러한 이유로 펀치 카드가 사용되었다. 1980년대에는 거의 모든 컴퓨터에 펀치 카드 판독기가 있었다. 하나의 펀치 카드를 빨아들여 카드의 내용을 컴퓨터 메모리에 기록할 수 있었다. 펀치카드의 무더기들을 로드해오면 판독기는 그 모두를 큰 블록으로 순서대로 메모리에 로드한다. 프로그래밍 데이터가 메모리에 저장되면 컴퓨터는 그것을 실행하라는 메시지를 받게 된다.
물론, 아주 간단한 컴퓨터 프로그램조차도 수백 가지의 명령어를 가지고 있었고, 만약 실수로 펀치카드를 실수로 바닥에 떨어뜨리는 불운을 겪는다면, 코드들을 바르게 순서대로 되돌리는 데에 몇 시간, 며칠 혹은 몇 주가 걸릴 수 있었다. 일반적으로 스트라이필이라 불리는 카드 덩어리의 측면에 대각선을 그리는 트릭으로 순서를 기록했다. 펀치카드들을 올바른 순서대로 놓을 수 있는 작은 단서인 것이다.
펀치카드로 구멍이 뚫려 만들어진 가장 큰 프로그램 중 하나는 1955년 미국 공군의 세이지 방공 시스템이었다. 절정에 이르면서, 이 프로그램은 전 세계 프로그래머의 20%를 고용했다고 한다. 주요 제어 프로그램은 엄청 큰 62,500개의 펀치카드에 저장되었고, 대략 5메가 바이트의 데이터와 동일한 값이었다고 한다.
또한 펀치카드는 컴퓨터에 데이터를 넣는 것뿐 아니라 데이터를 꺼내오는 것에도 유용했다. 프로그램의 마지막에, 결과는 컴퓨터 메모리와 펀치카드에 기록할 수 있었다. 그리고 이 데이터는 사람에 의해 분석되거나 추가 계산을 위해 두 번째 프로그램에 로드될 수 있었다.
펀치카드와 가까운 친척으로 펀치 종이테이프(Punched paper Tape)가 있다. 기본적으로 같은 아이디어지만, 개별 카드를 쓰지 않고 계속 이어서 사용되었다. 마지막으로, 플러그 보드와 펀치 종이 외에도 1980년 이전에 컴퓨터를 제어하고 프로그래밍할 수 있는 또 다른 일반적인 방법으로 패널 프로그래밍(Panel programming)이 있다. 특정 기능을 활성화하기 위해 케이블의 플러그를 물리적으로 연결하는 대신, 스위치와 버튼으로 가득 찬 거대한 패널로 작동할 수 있었다. 메모리 안의 다양한 값과 기능의 상태를 표시하는 표시등들도 있다. 50~60년대 컴퓨터들은 거대한 제어 콘손이 특징이었다. 스위치만 사용해서 전체 프로그램을 입력하는 경우는 드물긴 했지만 가능했다. 애호가 시장에 팔기 위해 만들어진 초기의 가정 컴퓨터는 광범위하게 스위치를 사용했다. 왜냐하면 대부분의 일반 사용자들은 펀치 카드 판독기와 같은 비싼 주변장치를 살 여유가 없었기 때문이다.
최초의 상업용으로 성공한 가정용 컴퓨터는 Altair 8800이었는데, 선조립되었거나 키트로, 두 가지 버전으로 팔렸다. 키트는 아마추어 컴퓨터 애호가들에게 인기가 많았고 전례에 없는 저렴한 가격에 판매가 되었는데, 1975년에 약 400$로 2017년 가격으로는 약 2000$였다. 8800을 프로그래밍하려면 문자 그대로 패널 앞에 있는 스위치들을 켜고 끄면서 명령에 대한 이진 opcode를 입력한다. 그리고 deposit 버튼을 눌러 해당 값을 메모리에 입력한다. 그리고 메모리의 다음 위치에서, 스위치를 다시 토글 해서 다음 명령으로, deposit 하는 등, 이런 방식으로 입력했다. 마침내 전체 프로그램을 메모리에 입력했다면, 다시 스위치를 토글 해서 메모리 주소 0으로 다시 이동하여 실행 버튼을 누르고 조그만 신호가 깜빡이는 것으로 작동하는지 확인할 수 있었다. 이것이 1975년의 가정용 컴퓨터이다.
플러그 보드의 스위치든, 펀치 된 종이이든 초기 컴퓨터의 프로그래밍은 전문가 영역이었다. 생계를 위해서 하거나, 기술에 대한 열정으로 작업하는 전문가들이었다. 이 일에는 하드웨어의 기본에 대한 자세한 지식이 필요했다. 프로그램을 작성하는 데에 opcode와 레지스터에 대한 기지가 필요했다. 이건 프로그래밍이 어려웠고 지루했다는 걸 의미한다. 심지어 전문 기술자들이나 과학자들도 컴퓨팅이 제공할 수 있는 것을 최대한 활용하기 위해 애썼다. 필요했던 것은 컴퓨터에게 무엇을 해야 할지 간단히 알려주는 방법, 프로그램을 작성하는 더 간단한 방법이었다. 이것이 바로 프로그래밍 언어(Programming Languages)이다.
'컴퓨터공학 > 기초' 카테고리의 다른 글
프로그래밍의 기본 : 문장과 함수 (0) | 2022.08.05 |
---|---|
최초의 프로그래밍 언어 (0) | 2022.08.03 |
고급 CPU 설계 (0) | 2022.08.02 |
명령어와 프로그램 (0) | 2022.07.31 |
중앙 처리 장치 (CPU) (0) | 2022.07.30 |
댓글