운영체제가 탄생하게 된 배경에 대해서 알아보았다. 이번에는 탄생 후 발전해가는 과정을 알아보자.
CPU가 빨라지고, 메모리의 크기가 늘어나는 등 하드웨어의 발전은 곧 운영체제의 발전으로 이어졌다.
기존에 운영체제가 없던 시절에는 개발자가 곧 운영자였기 때문에, 컴퓨터를 셋업하는 동안 컴퓨터는 많은 시간을 놀게된다.(idle상태)
이런 와중에 컴퓨터 하드웨어는 꾸준히 발전했고, 이런 비싼 성능을 가진 컴퓨터가 노는 것을 방치할 수 없게 된다.
컴퓨터의 활용률을 높이기 위해 노력한 끝에, GM-NNA I/O와 같은 초기 형태의 배치 운영체제가 개발되었다.
배치운영체제
출현 배경
- 컴퓨터의 idle time을 줄여 활용률을 향상시키기 위함
배치 운영체제의 컴퓨터 시스템
- 개발자-운영자 분리
- batch : 한 개발자가 작성한 펀치 카드의 묶음
- 메인프레임 컴퓨터는 한번에 하나씩 작업을 처리
- 운영자는 순서대로 컴퓨터에 실행하라고 지시, 출력된 결과물을 차례대로 정리
- CPU작업 - I/O작업 - CPU작업 - I/O작업 - CPU작업 - I/O작업 - ... - 종료
문제점
- 한번에 하나의 프로그램을 메모리에 로딩하여 실행하기 때문에, CPU가 노는 시간이 길었다.
다중 프로그래밍(multi programming) 운영체제
출현 배경
- 하드웨어 기술의 발전으로 CPU, 메모리의 속도가 빨라졌다.
- 기존 배치 시스템은 I/O 작업(파일 읽기, 프린트 출력) 발생 시 CPU idle time 발생
- I/O 장치가 CPU보다 훨씬 느리기 때문에 idle time이 꽤 길다.(전체 시간의 80~90%를 차지한다는 연구 보고도 있다.)
다중 프로그래밍 운영체제의 컴퓨터 시스템
다중 프로그래밍은 여러 프로그램을 메모리에 올려놓고, CPU가 한 프로그램을 실행하다 I/O가 발생하면, 메모리에 로딩된 다른 프로그램을 실행하며 CPU의 idle time을 줄인다.
- 테이프 장치 -> 하드디스크 장치로 변경(빠른 입력속도를 위해서)
- 디스크 장치에는 실행을 대기하는 여러 프로그램이 담긴다.(메모리가 수용할 수 있는 만큼만)
- CPU가 한 프로그램을 실행하다가 운영체제에 I/O작업을 요청하면, 운영체제는 I/O장치에게 입출력을 지시하고 CPU가 메모리에 로딩된 다른 프로그램을 실행하도록 한다.
- I/O작업이 완료되면, 운영체제는 현재 CPU가 하던 일을 멈추고 입출력을 기다리는 기존 프로그램을 실행하도록 한다.
문제점 (많은 문제가 발생한다...)
1. 메모리 이슈
- 여러 프로그램을 동시에 메모리에 올려야하기 때문에 큰 메모리가 필요하다.
- 또한 각 프로그램을 어디에 로딩할 것이고, 할당될 메모리의 크기는 얼마가 적당한지 등 관리가 필요하다.
- 프로그램마다 할당된 메모리 영역을 서로 침범하지 않도록 보호해야한다.
2. CPU 스케줄링과 컨텍스트 스위칭
- I/O가 발생하는 동안 다른 프로그램을 실행시킬 때, 어떤 프로그램을 선택할지 결정하는 CPU 스케줄링 이슈 발생
- 실행 중단할 프로그램의 상태(context)를 저장하고, 다시 실행시키기로 한 프로그램의 상태(context)를 CPU에 복귀시키는 컨텍스트 스위칭 이슈 발생
3. 인터럽트(interrupt) 개념 도입
- I/O작업이 끝났음을 알리기 위한 방법이 필요했기 때문이다.
4. 동기화
- 여러 프로그램이 동시에 실행되면서 동일한 자원을 동시에 사용하는 문제가 발생했다.
ex) 프로그램A가 자원R을 사용하던중 실행 중단. 프로그램B가 실행되며 자원R을 사용하고 종료. 다시 프로그램A가 자원 R을 사용하려고 하니 프로그램B가 자원R의 값이나 상태를 바꿔놓아 엉망이 됨. -> 동기화가 필요하다!
5. 교착상태(deadlock)
- 위와 같은 자원에 대한 동시사용을 제어하기 위해 프로그램은 독점적으로 자원을 소유할 수 있도록 만들어졌지만 이 개념은 교착상태라는 새로운 문제를 발생시킨다.
ex) 프로그램A가 자원R1을 소유한 상태에서 프로그램B가 소유한 자원R2을 사용하고자 요청.
동시에 프로그램B는 자원R2를 소유한 상태에서 프로그램A가 소유한 자원R1의 사용을 요청.
이런식으로 두 프로그램이 서로 상대가 소유한 자원을 요청하며 무한정 대기하게 되는 상황 -> 교착상태
시분할 다중프로그래밍(Time Sharing Multiprogramming) 운영체제
출현 배경
- 배치 운영체제, 다중프로그래밍 운영체제에서 다음 문제점을 인식하고, 해결하고자 했다.
- 비대화식 처리방식 - 당시 다중프로그래밍 기법은 여러 프로그램이 모여진 후 특정 시간에 모두 처리하는 방식으로, 개선된 배치 처리나 다름없었다.
- 느린 응답시간과 오랜 대기시간 - 개발자는 오랜시간 후 결과물을 프린트물로 받아보게된다. 중간 결과물에 대한 즉각적인 대응이 불가능하기에 디버깅이 오래걸린다.
시분할 운영체제 시스템
- 대화식 운영체제로 사용자에게 빠른 응답이 제공되며 즉각적인 대응이 가능하다. (터미널 : 키보드와 모니터로 이루어진 간단한 입출력 장치)
- 메모리에 로딩된 모든 프로그램을 동일한 시간 간격(time slice)으로 나누어, 돌아가면서 CPU를 할당하고 실행시킨다. (각 프로세스에게 동일한 시간 할당량을 주며 번갈아 실행시키는 스케줄링 기법을 round-robin 이라고 부른다.)
- CPU의 처리속도가 굉장히 빠르기 때문에 응답이 늦게온다고 느껴지지 않는다.
- I/O작업 시 운영체제는 다음 프로세스를 즉각 실행시킨다.
- 멀티프로그래밍기법과 대화식처리, 시분할 스케줄링을 결합하여 여러 프로그램을 동시에 실행시키는 운영체제이다.
문제점
- 응답속도 저하 - 많은 사용자가 사용할 때 발생한다.
- 공간의 제약 - 터미널이 있는 전산실을 가야 사용 가능하다.
참고자료
황기태, 「운영체제」, 생능출판사, 2020