초기의 컴퓨터는 한 번에 한 작업을 실행했다. 프로그램을 바꾸려면 사람이 장비를 준비하고 다음 작업을 올려야 했다.
운영체제의 역사는 이 수고를 줄이는 데서 시작했다. 이후에는 한 대의 컴퓨터를 여러 작업과 사용자가 나누고, 서로 다른 하드웨어에서 같은 프로그램을 실행하며, 수많은 서비스를 격리하는 방향으로 발전했다.
1950년대, 다음 작업을 자동으로
1950년대 초반에는 프로그램이 끝날 때마다 다음 작업을 사람이 준비했다. 비싼 컴퓨터가 계산보다 준비를 기다리는 시간이 길어졌다.
1956년 IBM 704에서 가동된 GM-NAA I/O는 초기 배치 처리 운영체제의 대표 사례다. 여러 작업을 모아 두고 앞선 작업이 끝나면 다음 작업으로 제어를 넘겼다.
운영체제의 첫 역할은 복잡한 화면을 제공하는 것이 아니었다. 컴퓨터가 쉬지 않도록 다음 일을 이어 주는 것이었다.
1960년대, 한 대를 여러 사용자가
배치 처리는 처리량을 높였지만 사용자는 자기 차례가 끝날 때까지 기다려야 했다. 이 문제에서 다중 프로그래밍과 시분할이 발전했다.
다중 프로그래밍은 한 작업이 입출력을 기다리는 동안 다른 작업에 CPU를 배분했다. 시분할은 CPU 시간을 더 짧게 나누어 여러 사용자가 한 컴퓨터와 대화하듯 작업하게 했다. 1960년대 초 공개된 CTSS가 이 변화를 보여준다.
1964년 발표된 IBM System/360은 호환되는 컴퓨터 제품군이라는 방향도 제시했다. 소프트웨어를 기계 한 대에 묶어 두지 않고 같은 구조를 따르는 여러 모델에서 사용할 수 있게 했다.
이 시기에 운영체제는 작업 순서를 넘기는 프로그램에서 CPU와 메모리, 사용자의 차례를 조정하는 관리자로 커졌다.
1970년대, 하드웨어가 달라도 같은 방식으로
UNIX는 1969년 Bell Labs에서 시작됐고 1973년 C로 다시 작성됐다. 운영체제 대부분을 고급 언어로 작성하면서 다른 하드웨어로 옮기기 쉬워졌다.
프로세스, 파일과 파이프 같은 인터페이스는 하드웨어의 차이를 애플리케이션에서 밀어냈다. 프로그램은 디스크 장치의 세부 명령보다 운영체제가 제공하는 공통 방식을 사용했다.
운영체제는 자원을 배분하는 데서 한 걸음 더 나아가 서로 다른 하드웨어를 같은 방식으로 다루게 하는 추상화 계층이 됐다.
1980년대와 1990년대, 컴퓨터가 개인에게
마이크로프로세서와 개인용 컴퓨터가 보급되면서 운영체제의 사용자는 전산실 운영자에서 개인으로 넓어졌다. CP/M과 MS-DOS가 개인용 컴퓨터의 프로그램 실행 기반을 만들었고, Macintosh와 Windows는 그래픽 인터페이스를 대중화했다.
네트워크가 퍼지면서 운영체제는 화면과 파일뿐 아니라 다른 컴퓨터와의 연결도 기본 기능으로 다루기 시작했다. 한편 UNIX 계열의 표준화가 이어졌고, 1991년 시작된 Linux는 공개된 소스와 공동 개발 방식으로 서버 운영체제의 흐름을 바꿨다.
이 시기의 운영체제는 개인이 컴퓨터를 사용하는 환경이자 애플리케이션이 올라가는 플랫폼이 됐다.
2000년대 이후, 운영체제는 더 넓은 곳으로
운영체제는 PC 화면을 넘어 휴대전화와 서버에 들어갔다. Android는 앱과 시스템 서비스, 하드웨어 추상화 계층과 Linux 커널을 층으로 나눈다. 사용자는 커널을 거의 보지 않지만 모든 앱은 그 위에서 자원을 배분받는다.
클라우드에서는 한 대의 물리 서버를 여러 가상 머신과 컨테이너가 나눠 쓴다. Linux의 cgroup은 프로세스를 계층으로 묶고 CPU와 메모리 같은 자원을 통제한다. 과거에는 사용자의 차례를 나눴다면 이제는 서비스마다 실행 환경을 나누고 격리한다.
운영체제가 사라진 것이 아니다. 눈에 보이는 화면보다 보이지 않는 실행 기반으로 더 넓게 퍼진 것이다.
운영체제의 발전은 무엇을, 누구와 나눌 것인가가 바뀐 역사다. 처음에는 다음 작업에 컴퓨터를 넘겼고, 이후에는 여러 사용자와 프로그램에 CPU와 메모리를 나눴다. 지금은 수많은 장치와 서비스에 격리된 실행 환경을 제공한다.
결과적으로 운영체제는 하드웨어를 대신 조작하는 프로그램 하나가 아니다. 한정된 자원을 여러 프로그램이 안전하고 일관된 방식으로 사용하도록 배분하고 추상화하는 실행 체계다.
