튜링상 관련 업적

범용 대규모 시분할 컴퓨터 시스템인 CTSS와 멀틱스에 관한 개념을 만들고 개발을 주도하여 선구적인 일을 했음.

1990년 튜링상 선정 이유

시분할 시스템이란

시분할 시스템은 원래 영어로 time-sharing system이다. 말 그대로 번역하면 ‘시간-공유 시스템’이 되어야 맞다. 그런데 한국식 표현은 ‘시간-분할 시스템’이다. ‘시분할’이라는 한글 표현을 누가 처음 제안했는지는 확실치 않다. 아마도 ‘시간-공유’라는 표현이 오해를 불러일으킬 소지가 있다고 보았던 듯싶다. 실제 구현 방법을 염두에 둔다면 시간을 공유한다는 말보다는 시간을 분할한다는 말이 더 적확하다. 그렇다면 왜 ‘시간-공유time-sharing‘라는 표현이 등장한 걸까? 그건 그런 개념이 등장하게 된 배경을 알아야 이해할 수 있다.

여러 사람이 동시에 컴퓨터를 사용하는 방식은 1950년대 초부터 일부 학자들을 통해 제안되어 왔다. 만약 기계를 공유하자는 개념이라면 machine sharing이라고 표현했을 것이다. 그런데 이것은 제안자들의 의도를 정확하게 반영하지 못한다. ‘컴퓨터를 공유한다’고 하면 그 기계를 여러 사람이 함께 사용한다는 의미인데, 순번을 정해서 돌아가며 사용하는 것도 역시 공유이다. 제안자들이 원한 것은 그것이 아니었다. 어느 시간 동안에 한 사람이 독점해서 사용하는 것이 아니라, 동시에 여러 사람이 사용할 수 있기를 원했다. 그래서 ‘machine sharing’이 아니라 ‘time sharing’이라고 다르게 표현했던 것이 아닌가 싶다.

초기의 time-sharing system은 오늘날의 시분할 시스템과는 조금 달랐다. 여러 사용자들의 작업(혹은 요구)을 하나씩 돌아가면서 처리한다는 개념에서는 동일하지만 프로세서를 다음 차례의 작업에 넘겨주는 타이밍이 달랐다. 입출력 명령어처럼 시간이 오래 걸리는 명령어가 나타날 때 프로세서를 다음 차례의 작업에게 넘겨주었다. 이런 형태에 대해 ‘시분할’이라는 표현을 적용하기는 애매하다. 오늘날과 같이, 시간 간격을 정해서 그 시간만큼만 프로세서를 사용하도록 하는 형태의 시분할 시스템 구현을 최초로 제안한 이는 존 매카시로 알려져 있다.

그가 1959년 1월 1일에, 당시 MIT 컴퓨테이션 센터장이던 필립 모스 교수에게 보낸 메모의 제목이 <우리의 예정된 IBM 709 컴퓨터를 위한 시분할 운영 프로그램A Time-Sharing Operator Program for our Projected IBM 709>​9​이다. 제목에 나오는 time-sharing은 오늘날의 ‘시분할’로 해석이 가능하다. 이에 비해 1959년 6월에 영국의 컴퓨터 과학자인 크리스토퍼 스트레이치도 <대형 고속 컴퓨터에서의 시간 공유Time Sharing in Large Fast Computers>​10​라는 논문을 발표했는데 여기서 사용한 time sharing은 오늘날의 ‘시분할’과는 조금 다르다.


시분할 시스템이 등장하기 전에 멀티프로그래밍multi-programming이라는 개념이 있었다. 멀티프로그래밍이란, 동시에 여러 개의 프로그램을 실행하는 방법이다. 이는 일괄처리의 비효율성을 극복하기 위한 해결책이었다.

일괄처리 방식에서는 펀치카드 혹은 펀치테이프에 기록된 프로그램들이 컴퓨터에 의해 차례대로 수행된다. 예를 들어 10명의 학생이 컴퓨터 프로그래밍 수업을 듣고 있다고 가정해 보자. 이들에게 10 x 10 크기의 행렬을 계산하는 숙제가 떨어졌다. 그러면 이 학생들은 각자 프로그램을 작성한 후 이를 펀치카드에 기록하고 컴퓨터 운영작업자에게 제출한다. 운영작업자는 10명이 제출한 것을 차곡차곡 모은 후에 이것을 컴퓨터 입력장치에 집어넣는다. 그리고 컴퓨터의 시작 버튼을 누르면 컴퓨터는 펀치카드를 한 장씩 읽어가면서 프로그램을 수행한다. 그래서 첫 번째 학생이 제출한 프로그램의 수행이 끝나면 두 번째 학생이 제출한 프로그램이 수행되고, 이렇게 차례로 열 번째 학생의 프로그램까지 처리된다. 마지막 펀치카드까지 모두 처리되면 이제 열 명의 학생에게 결과가 통보된다. 만약 에러가 발생했다면 해당 학생은 수정된 펀치카드를 다시 컴퓨터 운영작업자에게 제출하고 결과가 나오기를 목이 빠지게 기다린다.

일괄처리 방식은 한 프로그램이 끝나야 다음 프로그램이 시작된다. 그런데 만약 프로그램에 입출력 명령어가 있다고 가정해 보자. 예를 들면 테이프에 있는 데이터를 읽어야 하는 경우이다. 테이프의 맨 처음에 원하는 데이터가 있다면 좋겠으나 만약 테이프의 맨 뒤에 있다면 한참의 시간이 흘러야 한다. 일괄처리 방식은 그 입출력 작업이 완료되기를 하염없이 기다린다. 그동안 프로세서는 아무 일도 하지 않는다. 만약 이렇게 프로세서가 오랫동안 쉬어야 하는 상황이 발생한다면 그동안에 다른 프로그램을 수행하는 것이 바람직해 보인다. 이것이 바로 멀티프로그래밍이다. 프로세서가 놀고 있는 틈새 시간에 다른 프로그램을 수행함으로써 여러 프로그램이 겹치면서 수행될 수 있도록 하는 것이다.​¶​

멀티프로그래밍은 여러 사용자가 동시에 컴퓨터를 사용하는 인터렉티브interactive 개념이 아니었다. 일괄처리 방식의 비효율을 극복해 보려는 시도였다. 하지만 멀티프로그래밍의 개념은 자연스럽게 멀티 사용자의 개념인 ‘시분할’로 발전했다.

1 2 3 4 5 6