IT equipment/1940

에드삭 [EDSAC | 6 May 1949]

AICAT 2025. 2. 3. 07:00
반응형

전자 지연 저장 자동 계산기(EDSAC)는 초기 영국 컴퓨터이다. 존 폰 노이만의 EDVAC에 대한 초기 보고서에서 영감을 받아, 모리스 윌크스와 그의 팀이 영국 케임브리지 대학 수학 연구소에서 구축하였다. EDSAC는 맨체스터 마크 1 이후 정기적으로 운영된 두 번째 전자 디지털 저장 프로그램 컴퓨터이다.

 

나중에 이 프로젝트는 J. Lyons & Co. Ltd.의 지원을 받아 상업적으로 적용 가능한 컴퓨터를 개발하려 했고, 그 결과 라이온스가 EDSAC 디자인을 바탕으로 LEO I을 개발하게 되었다. EDSAC에 대한 작업은 1947년에 시작되었고, 1949년 5월 6일에 첫 프로그램을 실행하며 제곱수의 표와 소수 목록을 계산하였다. EDSAC는 1958년 7월 11일에 최종적으로 종료되었으며, EDSAC 2에 의해 대체되었고, 이는 1965년까지 사용되었다.

 



EDSAC가 운영을 시작하자마자 대학의 연구 요구를 충족시키기 위해 사용되었다. 이 컴퓨터는 메모리에 수은 지연선을 사용하고, 논리 회로에는 감쇠된 진공관을 사용하였다. 전력 소모는 11 kW였다. 모든 일반 명령의 사이클 시간은 1.5 ms였고, 곱셈의 경우 6 ms였다. 입력은 5홀 천공 테이프를 통해 이루어졌으며, 출력은 전신 인쇄기를 통해 제공되었다.

초기에는 누산기와 곱셈기 레지스터만이 등록되어 있었다. 1953년에 데이비드 휠러가 일리노이 대학교에서 돌아오면서 원래 EDSAC 하드웨어의 확장으로서 인덱스 레지스터를 설계하였다.

1952년에는 자기 테이프 드라이브가 추가되었으나 실제로 유용할 만큼 잘 작동하지 않았다.

1952년까지 사용 가능한 주 메모리(명령어 및 데이터)는 단 512개의 18비트 워드였고, 백업 저장소는 없었다. 지연선(또는 "탱크")은 각각 512 워드를 제공하는 두 개의 배터리로 배열되어 있었다. 두 번째 배터리는 1952년에 가동되었다.

전체 1024단어 지연선 저장소는 1955년 또는 1956년 초까지 사용 가능하지 않았으며, 그 이전까지는 프로그램이 약 800단어로 제한되었다.

 

존 린들리(1958-1959 학위 과정 학생)는 "우리가 1950년대 후반에 사용할 수 있었던 조잡하고 신뢰할 수 없는 수제 천공, 인쇄 및 검증 장비로 단 하나의 정확한 테이프를 만드는 것이 얼마나 힘들었는지"를 언급하였다.

EDSAC의 주 메모리는 1024개 위치로 구성되었으나, 처음에는 512개 위치만 설치되었다. 각 위치는 18비트를 포함하고 있었지만, 타이밍 문제로 인해 가장 높은 비트는 항상 사용할 수 없었고, 그래서 실제로는 17비트만 사용되었다. 하나의 명령어는 5비트 명령 코드, 하나의 여분 비트, 10비트 피연산자(일반적으로 메모리 주소), 그리고 17비트 또는 35비트 피연산자를 사용하는지 제어하는 길이 비트로 구성되었다(두 개의 연속 단어, 리틀 엔디안). 모든 명령 코드는 하나의 니모닉 문자로 표현되었으며, 예를 들어 Add 명령어는 A 문자를 위한 EDSAC 문자 코드를 사용하였다.

EDSAC은 내부적으로 2의 보수를 사용하는 이진수를 사용하였다. 숫자는 17비트(하나의 단어) 또는 35비트(두 개의 단어) 길이였다. 특이하게도 곱셈기는 숫자를 고정 소수점 분수로 취급하도록 설계되었으며, 범위는 −1 ≤ x < 1이었다. 즉, 이진점은 부호 비트 바로 오른쪽에 위치하였다. 누산기는 부호를 포함해 71비트를 저장할 수 있어 두 개의 긴(35비트) 숫자를 곱하더라도 정밀도를 잃지 않았다.

사용 가능한 명령어는 다음과 같다:

Add
Subtract
Multiply-and-add
AND-and-add (이름: "Collate")
Shift left
Arithmetic shift right
Load multiplier register
Store (선택적으로 누산기 지우기)
Conditional goto
Read input tape
Print character
Round accumulator
No-op
Stop

 

 

나누기 명령어는 없었지만 다양한 나누기 서브루틴이 제공되었고, 누산기에 직접 숫자를 로드할 방법도 없었다(누산기를 지우는 "Store and zero accumulator" 명령어 후에 "Add" 명령어가 필요했다). 무조건 점프 명령어도 없었고, 절차 호출 명령어도 존재하지 않았다. 이는 아직 발명되지 않았다.

모리스 윌크스는 1953년에 발표된 논문에서 EDSAC의 상대 주소 지정 모드에 대해 논의하였으며, 이는 서브루틴 사용을 용이하게 하려는 제안이었다.

초기 명령어는 유니셀렉터 스위치 세트에 하드와이어로 연결되어 있으며, 시작 시 메모리의 낮은 단어에 로드되었다. 1949년 5월까지 초기 명령어는 31단어로 구성된 원시적인 재배치 어셈블러를 제공하였으며, 이는 위에서 설명한 니모닉 디자인을 활용하였다. 이는 세계 최초의 어셈블러로, 소프트웨어 산업의 시작으로 여겨진다. EDSAC의 시뮬레이션과 초기 명령어 및 첫 프로그램에 대한 전체 설명이 제공된다.

EDSAC이 수행한 첫 계산은 1949년 5월 6일에 제곱수를 계산하는 프로그램이었다. 이 프로그램은 캐나다에서 기계를 공부하기 위해 온 비아트리스 워슬리가 작성하였다.

기계는 대학의 다른 구성원들에 의해 실제 문제를 해결하는 데 사용되었고, 많은 초기 기술들이 현재 운영 체제에 포함되어 있다.

사용자들은 프로그램을 어셈블리어로 천공 테이프에 펀칭하여 준비하였다. 곧 그들은 빛에 테이프를 비추어 코드를 읽는 데 능숙해졌다. 프로그램이 준비되면, 종이 테이프 리더 근처에 줄에 걸어두었다. 기계 운영자들은 낮 동안 줄에서 다음 테이프를 선택하여 EDSAC에 로드하였다. 이는 오늘날 잘 알려진 작업 큐와 같은 방식이다. 프로그램이 출력을 인쇄하면, 테이프와 인쇄물은 사용자에게 반환되었고, 그렇지 않으면 프로그램이 중단된 메모리 위치에 대해 통보받았다. 디버거는 한참 후에야 등장하였지만, 캐소드 레이 튜브 스크린은 특정 메모리 내용 표시를 위해 설정될 수 있었다. 예를 들어, 숫자가 수렴하고 있는지 확인하는 데 사용되었다. 누산기의 부호 비트에 연결된 스피커를 통해, 경험 많은 사용자는 프로그램의 건강한 소리와 비건강한 소리를 구분할 수 있었다. 특히 "루프"에 걸린 프로그램의 경우에 그렇다.

근무 시간이 지나면 특정 "승인된 사용자"들이 스스로 기계를 운영할 수 있었으며, 이는 밤 늦게까지 계속되었다. 이는 보통 한 전구가 터지는 상황으로 끝났다고 한 사용자가 언급하였다. 이는 프레드 호일의 소설 The Black Cloud에서도 언급된다.

초기 프로그래머들은 오늘날에는 기피되는 기법들을 사용해야 했다. 특히 자기 수정 코드를 사용하는 것이 그랬다. 나중에야 인덱스 레지스터가 도입되었기 때문에 배열에 접근하는 유일한 방법은 특정 명령어가 참조하는 메모리 위치를 변경하는 것이었다.

데이비드 휠러는 이 프로젝트에서 작업하여 세계 최초의 컴퓨터 과학 박사 학위를 받았으며, 서브루틴 개념을 발명한 것으로 알려져 있다. 사용자는 누산기에 반환 주소(즉, 점프 자체의 위치 + 1)를 두고 서브루틴의 시작으로 점프하여 루틴을 호출하는 프로그램을 작성하였다(이를 "휠러 점프"라고 한다). 관례적으로 서브루틴은 이를 예상하였고, 첫 번째 작업으로 종료 점프 명령어를 반환 주소로 수정하였다. 사용자가 각 서브루틴의 길이를 알고 있어야 하여 여러 개의 중첩된 서브루틴을 호출할 수 있었지만, 재귀 호출은 금지되었다. 사용자는 자신의 프로그램 끝에 마스터 테이프에서 서브루틴 코드를 복사하였다. 그러나 앨런 튜링은 1945년 NPL ACE 설계 제안에 대한 논문에서 서브루틴에 대해 논의하였으며, 재귀를 허용할 수 있는 반환 주소 스택 개념을 발명하기도 했다.

인덱스 레지스터의 부재는 서브루틴 작성자에게도 문제를 야기하였다. 서브루틴이 메모리에 어디에 로드될지 미리 알 수 없었기 때문에, 데이터 저장을 위해 사용되는 코드 영역(이른바 "의사 명령")에 접근하는 방법을 알 수 없었다. 이를 해결하기 위해 초기 입력 루틴이 사용되었으며, 이는 천공 테이프에서 서브루틴을 메모리에 로드하는 책임을 맡았다. 서브루틴을 로드할 때 시작 위치를 기록하고 필요한 경우 내부 메모리 참조를 증가시켰다. 따라서 윌크스가 쓴 것처럼 "기계 외부에서 명령을 나타내는 코드는 내부에서 사용하는 것과 다르며, 그 차이는 한편으로는 프로그래머의 요구에 의해, 다른 한편으로는 기계의 제어 회로의 요구에 의해 결정된다."

EDSAC의 프로그래머들은 제한된 메모리를 최적화하기 위해 특별한 기법을 사용하였다. 예를 들어, 천공 테이프에서 서브루틴을 메모리에 로드할 때 특정 상수를 계산해야 하는 경우가 있었고, 이 상수는 이후에 재계산할 필요가 없었다. 이 상황에서 상수는 "중간 단계"에서 계산되었다. 상수를 계산하는 데 필요한 코드는 전체 서브루틴과 함께 제공되었다. 초기 입력 루틴이 계산 코드를 로드한 후, 제어를 이 코드로 전송하였다. 상수가 계산되어 메모리에 기록된 후에는 초기 입력 루틴으로 제어가 돌아가고, 나머지 서브루틴을 메모리에 기록하는 동안 상수를 계산한 코드를 덮어쓰도록 시작점을 조정하였다. 이는 일반-purpose 서브루틴을 특정 상황에 맞게 조정하더라도 메모리의 최종 차지 공간이 늘어나지 않도록 복잡한 조정을 가능하게 하였다.

반응형