
건물 하나에 컴퓨터 하나가 겨우 들어갈 정도로 크기가 컸다.
사용법이 어려워 일반인은 사용하지 못했고, 컴퓨터를 전문적으로 다루는 직군인 오퍼레이터(Operator)가 존재했다.
이 당시 컴퓨터는 별도의 운영체제가 존재하지 않는 Bare Machine 환경이었다 (설명 편의상 No Operating System이라 부르기도 한다).

이 모든 과정이 오퍼레이터가 직접 컴퓨터에 입력하면서 진행된다.
꾸러미라는 뜻으로, 프로세스를 일괄 처리한다는 뜻이다.
초기 컴퓨터의 작동 과정을 컴퓨터 메모리에 넣어 자동화한 것이 Batch Processing System이다.
Resident: 거주라는 뜻으로, 이 프로그램이 항상 메모리 안에 거주한다는 의미이다.
메모리 안에 들어있는 프로그램으로서, 메모리에 상주하여 일괄적인 일을 처리하는 역할을 수행했으며, 이를 최초의 운영체제라고 할 수 있다.
Resident Monitor는 메모리 하단의 보호 영역에 적재되어, 사용자 프로그램이 해당 영역을 덮어쓸 수 없도록 보호되었다.
컴퓨터 메모리에는 OS와 User Program이 들어있는데, Batch Processing System은 Resident Monitor를 제외하고 하나의 애플리케이션만을 메모리에 올릴 수 있었다.
하나의 애플리케이션을 수행하기 위해서는 CPU (계산 담당)와 I/O 장치 (입출력 담당)가 동작해야 한다. 문제는 Batch Processing System에서는 CPU가 동작할 때 I/O 장치는 동작할 수 없고, I/O 장치가 동작할 때 CPU는 동작할 수 없다. 즉, 둘이 동시에 동작할 수가 없다.
특히 CPU가 동작하지 않는 상태를 Idle 상태라고 하는데, I/O 장치의 속도는 CPU에 비해 매우 느려서 Idle 상태의 비율이 매우 높았다.
컴퓨터는 매우 비싼 자원이었기 때문에 더 효율적인 사용 방법을 고민하게 되었고, 그로 인해 등장한 개념이 Multiprogramming System이다.
이름처럼 메모리에 여러 애플리케이션이 한 번에 올라가는 시스템이다.
하나의 애플리케이션에서 CPU가 동작하고 있다면, 유휴 상태의 I/O 장치가 다른 애플리케이션의 I/O 작업을 처리하도록 한다.
즉, CPU의 Idle 상태를 최대한 줄이도록 한다.
다중 프로그래밍을 통해 메모리에 여러 애플리케이션을 올리면서 여러 이슈가 생겼다.
여러 애플리케이션이 메모리에 올라와 있을 때, 어떤 프로세스에 CPU를 먼저 할당할지 결정하는 이슈.
새로 실행하는 프로그램을 어느 메모리 영역에 할당할지 결정하는 과정.

60년대 후반 ~ 70년대로 접어들면서, 모니터와 키보드를 통해 컴퓨터 - 사용자 간의 상호작용이 가능해졌다. 하지만 여전히 비싼 가격으로 인해 하나의 컴퓨터에 여러 개의 단말기 (Terminal)를 연결해서 사용했다.
실제 프로세서는 Host Computer에만 존재하며, 각 사용자들은 모니터와 키보드만을 가지고 이 프로세서를 공유하며 사용했다.
간단하다. 한 명의 사용자가 CPU를 사용하고 있으면 나머지 사용자들은 CPU를 사용할 수 없다.
왜? CPU는 단 하나 뿐이니까! CPU 사용을 끝낼 때까지 기다려야만 했다.
CPU가 하나의 프로그램을 수행하는 시간을 제한하고, 그 시간이 지나면 무조건 다음 프로그램으로 넘어가도록 (Switching) 하는 방식이다.
이 때 Switching의 주기(타임 슬라이스, Time Slice / 퀀텀, Quantum)를 매우 빠르게 설정하면 (ms 단위로), 각 사용자들은 마치 하나의 CPU를 온전히 사용하는 듯한 경험을 할 수 있다.
하나의 컴퓨터를 같이 사용하므로 여러 사용자들끼리 메시지 혹은 데이터를 주고 받는 등의 상호 작용이 가능해졌다. 즉, 프로세스 (Process)간의 통신이 가능해졌다.
이후 운영체제는 개인용 컴퓨터(Personal Computer)의 등장과 분산 시스템으로 발전해 나간다. 다음 편에서는 프로세스와 스레드에 대해 다룬다.