CTSS

<우리의 예정된 IBM 709 컴퓨터를 위한 시분할 운영 프로그램>​9​이라는 메모에서 매카시는 이렇게 적고 있다.

MIT 컴퓨테이션 센터에 일을 요청하면 결과를 받는 시간은 기계의 상태, 작업자의 효율, 대기 작업의 양 등에 따라 3시간에서 36시간 사이입니다. 시분할을 통해서, 이 응답시간을 특정 목적인 경우에는 초 단위로 줄이자고 제안하는 바입니다.​9​

그는 1960년에 MIT에 도입될 예정이었던 고성능 컴퓨터 IBM 709에 시분할 기능을 구현해서 빠른 응답시간을 제공하자고 주장했고 기술적인 접근 방법도 제안했다. 그는 인터럽트를 사용해서 일정 시간 간격으로 사용자의 요구를 처리하자고 했으며 메모리 관리 방법 등에 대해서도 언급했다. ‘시간 공유’를 구현하기 위해 ‘시간 분할’을 사용하자는 내용이었다.

그의 주장은 MIT 내에서 지지를 받기 시작했고 CTSS로 이어졌다. 흥미롭게도 막상 존 매카시 본인은 시분할 시스템 개발에 참여하지 않았다. 그에 대해서 존 매카시는 다음과 같이 언급한 바가 있다.

나는 시분할에 관한 메모를 모스 교수에게 보냈고 그는 호의적인 반응을 보였습니다. 하지만 그는 이렇게 말했습니다. “음, 자네는 시분할을 하고 싶은 건가, 인공지능을 하고 싶은 건가? 새로 온 조교수 중에 티거라고 있는데 이쪽으로 잘할 것 같은데.” 그래서 나는 “좋습니다. 티거에게 시분할을 시키죠. 나는 인공지능을 하겠습니다”라고 말했습니다.​3​

아마도 모스 교수는 존 매카시가 인공지능과 시분할을 둘 다 하기에는 무리라고 보았던 듯싶다. 결국 티거 교수가 시분할 시스템 개발을 위한 위원회를 이끌게 되었는데 주위의 조언을 무시하고 비현실적인 목표를 추구했고, 이에 거부감을 느낀 페르난도 코바토가 매카시의 개념을 검증하려는 용도로 작은 시스템을 개발하기 시작했다. 그 시스템의 이름이 CTSS이다.

최초의 시분할 시스템으로 인정받고 있는 CTSS는 Compatible Time Sharing System의 약자이다. 이를 그대로 번역하자면 ‘호환성이 있는 시분할 시스템’이 되겠다. ‘시분할 시스템’이라고 명시적으로 표현했으므로 우리는 이 시스템이 시분할 시스템임을 바로 알 수 있다. 그런데 ‘호환성이 있는compatible‘이라는 표현을 굳이 이름에 넣은 이유는 무엇일까? 이름에 넣었다는 것으로 보아 이 시스템의 정체성에 아주 중요한 역할을 하고 있음이 분명하다. 코바토는 다음과 같이 설명했다.

우리의 첫 포부는 소박했습니다. 먼저, 이 시스템은 다른 그룹에서 시도하던 야심적인 설계가 현실화되기에 앞서서 가능성을 보여주는 시제품demonstration prototype이었습니다. 그리고 두 번째로 이 시스템은 범용의 프로그래밍을 처리하려 했습니다. 또한 마지막으로는, 이미 여러 해에 걸쳐서 일괄처리 환경에서 개발되어 온 소프트웨어들을 그대로 실행할 수 있어야 했습니다. 그래서 그런 이름을 가지게 되었습니다.​5​

‘호환성이 있는’ 시스템이 의미하는 바는, 기존의 일괄처리 환경에서 작성한 소프트웨어를 수정 없이 실행할 수 있는 시스템을 말하는 것이었다. 아울러 CTSS는 ‘시제품demonstration prototype‘이었다. 제대로 서비스를 제공하기 위해 만든 것이 아니라, 시분할 시스템의 개념이 실제로 동작하는지를 확인해 보기 위해 만든 것이었다. 따라서 아주 소박한 출발이었다.


CTSS는 기존의 IBM 709 컴퓨터에 터미널을 연결해서 복수의 사용자가 동시에 프로그래밍 작업을 할 수 있는 형태를 목표로 했다. 여기서 말하는 터미널은 오늘날과 같이 디스플레이 화면에 키보드가 붙어 있는 형태는 아니었고, 전자식 타이프라이터를 말했다. 그래서 직접 프로그램 소스 코드를 편집하는 식의 작업을 상상하면 곤란하다. 오늘날 우리가 흔히 접하는 셸shell이라는 사용자 환경도 멀틱스에서 제안되었으므로 CTSS의 터미널은 아주 원시적인 것이었다. CTSS의 사용자가 기대할 수 있었던 것은, 다른 사용자의 프로그램이 끝날 때까지 기다릴 필요 없이 바로 자신의 프로그램을 실행해 보는 것이었다. 아무튼 당시에는 터미널이라는 개념이 아직 자리 잡기 전이었으므로 전자식 타이프라이터를 연결하기 위해 모뎀을 사용하는 것부터 새로운 시도였다. 그리고 컴퓨터 시스템 자체의 하드웨어도 보강되어야 할 필요가 있었다.

먼저 당시의 컴퓨터는 일정 시간 간격으로 인터럽트를 발생시켜 주는 회로가 없었다. 시분할 시스템에서는 일정 시간 간격마다 프로세서를 사용하는 사용자가 바뀌어야 하는데 ‘일정 시간 간격’을 알아낼 방법이 필요했다.

또한 사용자가 다른 사용자의 작업을 건드릴 위험이 있었다. 세 가지 측면이 고려되어야 했다. 먼저 다른 사용자가 사용하고 있는 메모리 공간을 건드려서는 안 되었다. 그리고 다른 사용자가 사용하고 있는 파일을 건드려서는 안 되었다. 또한 입출력 명령을 마음대로 수행하게 되면 이미 다른 사용자가 시작한 입출력 작업을 망가뜨릴 수가 있었다. 그래서 코바토는 IBM에 하드웨어 보강을 요청했고 다행히 IBM은 7090 컴퓨터에 이를 반영했다.

일정 시간 간격으로 인터럽트가 발생되었고, 입출력 명령은 권한을 가진 사용자의 프로그램이 아니면 하드웨어적으로 통제되었다. 아울러 각 사용자에게는 메모리 경계를 알려주는 경계 레지스터bound register가 설정되어서 이 경계를 넘어가는 메모리 접근은 하드웨어적으로 거부되었다. 마지막으로 파일시스템에도 접근 권한을 따지는 기능이 추가되었다.​6​

IBM 7090 컴퓨터의 메모리 크기는 32,000 워드였다. 시분할을 관리하는 프로그램, 즉 오늘날의 운영체제는 수퍼바이저supervisor라고 불렸고 크기는 5,000 워드였는데 항상 메모리에 상주했다. 나머지 27,000 워드만큼의 메모리가 사용자의 프로그램에 할당되었다. 경계 레지스터가 구현되기 전에는 항상 한 명의 사용자 프로그램만 메모리에 올라올 수 있었다.

당시에는 아직 자기 디스크가 보편화되기 전이었고 IBM 7090의 저장장치는 자기테이프였다. 사용자가 남의 눈치 보지 않고 프로그램을 직접 실행하기 위해서는 파일 시스템을 따로 가질 필요가 있었다. 따라서 사용자마다 자기 테이프가 할당되었다. 사용자는 작성한 프로그램과 관련 데이터 파일을 자기 테이프에 저장한 후 IBM 7090 컴퓨터의 입출력 장치에 장착했다. 그리고 전자식 타이프라이터를 통해서 그 프로그램의 실행을 명령할 수 있었다.

사용자가 전자식 타이프라이터를 사용해서 명령어를 타이핑하면 그것은 모뎀을 통해 IBM 7090 시스템에 전달되고 인터럽트를 발생시킨다. 그러면 수퍼바이저가 그 명령을 해석해서 수행한다. 사용자가 입력할 수 있는 명령어는 여러 가지가 있었는데 예를 들면 다음과 같은 것들이 있었다.​6​

start | [alpha] | [beta]
load | [alpha-1] | [alpha-2] | ... | [alpha-n]
login | [alpha] | [beta]

맨 앞에 나오는 단어가 명령어 이름이고 | 뒤에 나오는 것은 명령어에 필요한 인자값들이다.


수퍼바이저는 일종의 운영체제이다. 메모리, 파일 시스템과 같은 자원을 관리하면서 동시에 다양한 작업들을 스케쥴링한다. CTSS에서 스케쥴링의 대상은 크게 세 가지로 나누어진다.

  • 사용자가 입력한 명령어들
  • 포그라운드foreground에서 수행되는 사용자 프로그램들
  • 백그라운드background에서 수행되는 사용자 프로그램들

사용자가 입력한 명령어들이 항상 가장 먼저 처리된다. 더 이상 처리할 명령어가 없으면 포그라운드에서 수행되어야 하는 사용자 프로그램들이 처리된다. 그것마저도 더 이상 없으면 백그라운드에서 수행되어야 하는 사용자 프로그램들이 처리된다.

CTSS는 1961년 11월에 처음 시연되었다. 그 후 계속 보강을 거쳤는데 본격적으로 사용되기 시작한 것은 MAC 프로젝트가 시작되면서였다. 멀틱스 개발자들은 CTSS를 사용해서 프로그램을 개발했다. CTSS는 1973년을 마지막으로 더 이상 사용되지 않았다.


CTSS에서 잊지 말아야 할 한 가지 기능이 있다. 다름 아닌 비밀번호password 사용이다.

CTSS는 동시에 여러 사람이 사용할 수 있었고, 터미널을 통해서 컴퓨터 내부에 접근할 수 있었다. 따라서, 남의 데이터를 건드리지 않게 하려면 누가 누구인지를 구별해야 했고, 타인으로 행세하는 것도 막아야 했다. 이를 위해 비밀번호를 사용하는 로그인 기능이 최초로 도입되었다.​#​

1 2 3 4 5 6