오늘은 프로그램을 실행하고 잠시 뒤 결과를 확인하는 일이 자연스럽다. 초기 컴퓨터에서는 다음 작업을 시작하는 일조차 사람의 손을 많이 거쳤다. 입력을 준비하고 장비에 올리고, 프로그램이 끝나면 결과를 꺼낸 뒤 다음 작업을 다시 준비했다.

비싼 컴퓨터가 계산하지 않고 사람을 기다리는 시간은 큰 낭비였다. 이 낭비를 줄이려는 시도에서 운영체제의 역할이 선명해지기 시작했다.

운영체제의 역사는 기능 목록이 늘어난 기록이라기보다 한정된 컴퓨터를 누구에게, 어떤 순서로, 얼마나 나눠 줄 것인가를 바꿔 온 과정이다.

본문 이미지 1 / 시간 흐름 컴퓨터를 나누는 방식이 바뀌어 온 과정
장면 설명운영체제의 발전은 한정된 컴퓨터 시간을 작업과 사용자에게 더 촘촘하게 나누는 과정이었다.

수동 작업 전환

초기 컴퓨터는 지금처럼 로그인해서 프로그램을 실행하는 범용 환경이 아니었다. 한 작업을 수행하도록 장비와 입력을 준비하고, 끝나면 다음 작업으로 교체했다.

프로그램이 입출력을 기다리는 동안 CPU가 쉬더라도 다른 작업을 자연스럽게 끼워 넣기 어려웠다. 작업을 전환하는 절차 자체가 사람과 장비에 묶여 있었기 때문이다.

이 시기의 문제는 CPU가 느리다는 데만 있지 않았다. 다음 작업을 고르고 실행 환경을 준비하는 과정이 자동화되지 않았다는 것이 더 큰 병목이었다.

배치 처리

여러 작업을 미리 모아 두고 컴퓨터가 순서대로 처리하도록 만들면 작업 사이의 사람 개입을 줄일 수 있다. 이것이 배치 처리의 핵심이다.

운영 프로그램은 한 작업이 끝났는지 확인하고 다음 작업을 불러오며 입출력과 오류를 관리했다. 사람은 매 작업마다 기계 앞에서 준비하지 않아도 됐고, 컴퓨터는 대기 시간을 줄일 수 있었다.

하지만 사용자는 자신의 작업이 묶음 안에서 차례를 기다리는 동안 결과를 볼 수 없었다. 코드를 잘못 작성했다면 오랜 시간이 지난 뒤 실패한 출력물을 받고 다시 줄의 뒤로 돌아가야 했다.

배치 처리는 컴퓨터의 빈 시간을 줄였지만 사용자와 컴퓨터의 거리는 여전히 멀었다.

본문 이미지 2 / 작업 묶음사람의 준비 시간을 줄인 배치 처리
장면 설명배치 처리는 작업을 미리 모아 사람이 매번 기계를 준비하던 공백을 줄였다.

멀티태스킹

작업 하나가 프린터나 저장 장치의 응답을 기다리는 동안 CPU는 계산할 수 있다. 메모리에 여러 작업을 준비해 두고, 하나가 기다리면 다른 작업으로 CPU를 넘기는 방식이 필요해졌다.

이를 위해 운영체제는 메모리에 어떤 작업이 있는지, 지금 실행할 수 있는 작업이 무엇인지, 입출력이 끝나 다시 실행할 수 있게 된 작업이 무엇인지 알아야 했다. 자원 배분과 보호가 운영체제의 중심 역할이 된 이유다.

여러 작업이 동시에 진행되는 것처럼 보이지만 CPU 코어 하나는 한순간에 하나의 실행 흐름을 처리한다. 운영체제가 짧은 간격으로 실행 대상을 바꾸고 기다림을 겹쳐 사용하면서 전체 컴퓨터의 활용도를 높인다.

시분할과 대화형 사용

시분할 시스템은 CPU 시간을 짧게 나누어 여러 사용자의 작업에 배분했다. 각 사용자는 터미널에서 명령을 입력하고 비교적 빠르게 응답을 받았다.

배치 처리에서 중요한 질문이 “다음 작업은 무엇인가”였다면, 시분할에서는 “여러 사용자에게 납득할 만한 응답 시간을 어떻게 제공할 것인가”가 중요해졌다. 운영체제는 실행 순서뿐 아니라 사용자와 프로세스의 분리, 파일 공유와 접근 제어까지 책임져야 했다.

한 대의 컴퓨터가 여러 사람에게 각자의 컴퓨터처럼 느껴지기 시작했다. 오늘날 여러 프로그램을 동시에 띄워 사용하는 경험은 이 시분할과 멀티태스킹의 연장선에 있다.

본문 이미지 3 / 시간 분할여러 터미널이 한 컴퓨터를 동시에 쓰는 장면
장면 설명시분할은 CPU 시간을 빠르게 교대해 각 사용자가 컴퓨터와 직접 대화하는 감각을 만들었다.

UNIX의 등장

1960년대 말 시작된 UNIX는 다중 사용자 시분할 운영체제였다. 계층형 파일 시스템, 프로세스 생성, 선택 가능한 명령 언어와 파일 및 장치를 아우르는 입출력 모델을 제공했다.

UNIX가 운영체제 역사 전체를 혼자 만든 것은 아니다. 다만 작은 도구를 조합하고, 프로세스와 파일을 일관된 인터페이스로 다루며, 다양한 기계로 이식할 수 있게 설계한 방식은 이후 운영체제에 오래 영향을 남겼다.

첫 글에서 본 read()도 이 계보 안에 있다. 애플리케이션이 파일 디스크립터를 통해 커널에 읽기를 요청하는 단순한 인터페이스 뒤에서 운영체제가 공유와 보호를 맡는다.

핵심 개념

운영체제의 변화와 자원 공유

운영체제 역사Operating System History
컴퓨터의 작업 준비, 자원 배분, 사용자 상호작용과 보호가 자동화되고 확장되어 온 과정이다.
배치 처리Batch Processing
미리 준비된 여러 작업을 한 묶음으로 받아 사람의 지속적인 상호작용 없이 순서대로 처리하는 방식이다.
시분할Time-Sharing
CPU 시간을 짧은 구간으로 나누어 여러 사용자의 작업이 대화형으로 컴퓨터를 공유하게 하는 방식이다.
멀티태스킹Multitasking
운영체제가 여러 작업의 실행 상태를 관리하고 CPU 시간을 번갈아 배분하여 함께 진행되게 하는 방식이다.
유닉스UNIX
1960년대 말 Bell Labs에서 시작된 다중 사용자 시분할 운영체제 계열과 그 규범을 가리킨다.