그렇다면 운영체제는 어떤 과정 속에서 현재의 모습으로 나타나게 되었을까?
컴퓨터 시스템에서 왜 운영체제가 필요했으며, 초기의 기능은 어떠하였는지 그 역사에 대해서 간단하게 알아보자.
1940년대 - 고정 프로그램 컴퓨터(Fixed Program Computer)
- 전자식 디지털 컴퓨터의 탄생
- 소프트웨어의 개념이 없었다. -> 당연히 운영체제 개념 x, 컴퓨터의 모든 기능은 하드웨어로 만듬
- 당시에는 구현하고자 하는 job을 종이에 스케치한 다음, 컴퓨터 하드웨어 스위치를 세팅하거나 전선을 직접 연결하여 하나의 프로그램을 컴퓨터 기계에 굳히는 방식이었다.
- 이 과정이 끝나면 컴퓨터는 오직 그 프로그램밖에 실행할 수 없다.
- 다른 프로그램을 실행하고 싶으면 전선을 해체하고 다시 위 과정을 반복한다.
- 이 방식에서 디버깅은 높은 크기의 컴퓨터 하드웨어를 등반하며 잘못 연결된 전선을 찾아내는 것을 의미했다.
- 하드와이어드(hard-wired) 프로그래밍 방식
1945년 - 하드웨어와 소프트웨어를 분리시킨 내장 프로그램 개념 등장
- 폰노이만 - 컴퓨터를 하드웨어와 소프트웨어로 분리하는 내장 프로그램(stored program) 개념을 발표
내장 프로그램이란?
- 컴퓨터 = CPU + 메모리
- 프로그램 명령(코드)를 메모리에 저장하고, CPU가 이 명령들을 메모리에서 CPU내부로 가져와 하나씩 처리
** 자세한 내용은 컴퓨터구조 책 참고
- 하드웨어(CPU, 메모리, 입력 장치, 출력 장치)는 그대로 두고, 실행하고 싶은 프로그램을 입력 장치를 통해 메모리에 로딩 후 CPU에게 실행을 지시하면 된다. -> 기존 고정 프로그램 방식의 번거로움 해결!
- 초기에는 펀치카드(punched card)에 구멍을 뚫어 프로그램을 작성하고, 카드 입력기(card reader)를 이용하여 프로그램을 메모리로 읽어들였고, 출력 장치로는 프린터가 이용되었다.
- 이당시 개발자 = 컴퓨터 운영자(operator). 프로그램 개발, 입력, 컴퓨터 가동, 관리 모든 일을 도맡아 함.
- 내장프로그램 방식은 오늘날까지도 이어지고있다.
1950년 - 프로그램 로딩 시대 - 운영체제 개념의 시작
1950년대 당시 활발한 컴퓨터 전문회사 IBM의 사례를 알아보며 왜 운영체제의 개념이 탄생하게 되었는지 알아보자.
IBM 701 메인 프레임
- IBM에서 만든 첫번째 범용 컴퓨터
- 판매하지 않고 대여만 해줬다.
- 컴퓨터의 하드웨어와 메뉴얼만 제공, 소프트웨어는 주지 않았다.
그럼 IBM 701을 대여한 고객(기업)은 어떻게 응용프로그램을 실행하였나?
1. 개발자들은 IBM 701이 설치된 컴퓨터실 앞에서 자신의 차례가 오기까지 대기하다가 입장한다. (이때 주어진 시간은 약 15분으로 알려져있다.)
2. 컨트롤 패널의 스위치를 세팅한 후, 카드 천공기를 이용해 종이에 적어간 프로그램을 카드에 펀칭한다.
3. 펀치된 카드를 입력장치에 쌓고 컨트롤 패널의 LOAD 버튼을 누르면, 첫번째 카드에 작성된 프로그램이 메모리 0번지부터 순서대로 적재되며 프로그램의 실행이 시작된다.
이때 카드 한장에는 최대 24개의 명령을 작성할 수 있었기 때문에, 더 긴 프로그램을 작성하려면 2장 이상의 펀치 카드를 사용해야 했다.
첫번째 카드 : 다음 카드에 작성된 프로그램을 메모리로 읽어오는 코드를 작성
두번째 카드 : 목적하는 프로그램을 작성
- 개발자는 목적 프로그램 뿐만 아니라 목적 프로그램을 로딩하는 코드, 즉 로더(loader)도 함께 작성해야했다.
- 로더는 모든 컴퓨터에 공통적으로 필요했고, 이를 매번 작성하는 것은 엄청난 시간낭비였다.
- 이 로더의 개념은 오늘날 운영체제로 발전하는 계기가 되었다.
1955년 - 원시적인 운영체제 GM OS 탄생, 모니터(Moniter)
- IBM 701의 고객이던 General Motors(GM)은 펀치카드에 담긴 프로그램을 메모리에 탑재하는 로더 프로그램을 개발했다.
- 로더 프로그램은 테이프에 저장하고 필요할 때 실행시킨다.
- 이 로더는 모니터라고 불렸고, 현대에는 이 GM OS를 사용자 프로그램을 읽어 실행시켜준다는 점에서 최초의 원시적인 운영체제라고 부른다.
1956~1957년 - 최초의 운영체제 GM-NAA I/O 탄생
GM은 IBM704를 사용하며 문제점을 느끼게된다.
1. 개발자들은 여전히 대기번호를 뽑고 자신의 차례를 기다려야 한다.
2. 컴퓨터를 효율적으로 사용하지 못한다. 매번 프로그램을 실행시킬 때마다 여러 장치를 점검, 컨트롤 패널의 스위치로 시스템 설정을 해야했는데 이 시간동안 컴퓨터는 놀게된다.
3. 카드 입력장치, 테이프 입력 장치를 제어하는 프로그램 코드는 여전히 개발자가 작성해야한다.
(입출력코드같은 모든 프로그램에 필요한 기능들.. 후에는 라이브러리로 발전하게 된다 -> printf, scanf 등)
이런 문제점을 개선하여 컴퓨터를 효율적으로 사용하기 위해서 NAA(North American Aviation)과 함께 모니터 프로그램을 확장하여, 최초의 운영체제인 GM-NNA I/O 소프트웨어를 개발한다.
GM-NNA I/O 운영체제 설계 지침
- 여러 개발자들이 작성하여 쌓아놓은 작업들을 한 번에 하나씩 순서대로 메모리에 로딩하고 실행시키는 일종의 배치 운영체제이다.
- 개발자 - 운영자 분리. 개발자는 프로그램을 개발만하고, 컴퓨터실에는 운영자만 두어 테이프에 저장된 프로그램을 실행하는 작업을 수행한다.
- 개발자들이 자주 쓰는 코드를 표준화하여 미리 만들어, 공통 라이브러리를 개발하고 활용한다.
- 입출력 장치를 제어하는 루틴 또한 라이브러리 형식으로 갖추고 공유할 수 있도록 한다.
기능 및 동작 과정
- 순차적으로 사용자 프로그램을 읽어 어셈블리어 코드 -> 기계어 코드(목적코드)로 컴파일하기
- 컴파일된 목적 코드를 메모리에 로딩, 메모리에 로딩된 코드를 CPU가 실행
- 실행이 끝나면 컴퓨터의 사용시간, 자원사용량을 프린터로 출력한다
운영체제 탄생 역사 요약
년도 | 핵심내용 | 설명 |
1940년대 | 전자식 디지털 컴퓨터 출현 | 고정프로그램 방식 하드웨어-소프트웨어 개념 구분 x |
1945년 | 폰노이만의 내장 프로그램 컴퓨터 제안 | CPU-메모리 분리 하드웨어-소프트웨어 개념 분리 |
1954년 | IBM 701 내장 프로그램 컴퓨터 탄생 | 프로그램을 로딩하고 실행시키는 로더 프로그램의 필요성 인식 |
1955년 | 원시적인 운영체제 GM OS(모니터) 개발 | 펀치카드에 작성된 프로그램을 읽어 실행시키는 로더 개발 |
1956년 | 최초의 운영체제 GM-NAA I/O 탄생 | 메모리에 상주하는 배치 운영체제 탄생 개발자-운영자 분리 |
참고자료
황기태, 「운영체제」, 생능출판사, 2020