운영체제의 발전 과정
1946년, 최초의 컴퓨터 애니악이 있던 시절에는 운영체제와 같은 소프트웨어가 존재하지 않았고, 오퍼레이터가 수동 조작을 통해 프로그램을 실행했습니다. 프로그램 하나를 실행하고 나서 다른 프로그램을 실행하려면 컴퓨터를 다시 세팅해서 프로그램을 시스템에 로드해야만 했기 때문에 프로그램의 실행이 준비되기까지 시간이 매우 오래 걸렸습니다.
1960년대에 위의 문제점을 해결하기 위해 등장한 것이 *모니터*라는 소프트웨어 입니다.
이제는 사람이 아니라 운영체제처럼 소프트웨어가 컴퓨터를 작동시키도록 한 것이죠.
위 그림은 메인 메모리를 나타낸 것인데, 메인 메모리 위에 모니터가 올라가있는 것을 볼 수 있습니다.
지금의 운영체제처럼 실행을 위해 메인 메모리 위에 올라가 있는 것이죠.
모니터의 아래를 보면 사용자 프로그램이 들어갈 수 있는 영역이 있는데, 이곳에 사용자 프로그램을 집어넣고, 실행시키고, 결과를 출력하게 하는 것이 모니터의 역할입니다.
마치 지금의 운영체제가 하는 역할과 비슷합니다.
실행해야 될 일련의 응용프로그램들이 묶음(마그네틱 테이프 또는 종이 카드 묶음)으로 준비가 되어 있으면, 모니터는 묶음 중 앞에 것 부터 차례대로 메모리에 집어넣고, 실행하고를 반복하며 프로그램의 실행을 제어합니다.
이런식으로 묶음(큐)에 있는 작업들을 차례대로 실행하는 방식을 일괄 처리 방식(Batch System)이라고 하고,
그 중에서 하나의 큐를 사용해 작업을 들어오는 순서대로 처리하는 방식을 단순한 일괄 처리 방식(Simple Batch System)이라고 합니다.
모니터는 Simple Batch System에서 프로그램을 차례대로 실행시키고, 컴퓨터 안에서 일어나는 일들을 제어하는 역할을 했기 때문에 운영체제의 초기 모습이라고 할 수 있습니다.
Simple Batch System에서의 프로그램 처리 방식은 Uni Programming 방식이 이용된 것입니다.
Uni Programming
위 그림은 Uni Programming 방식을 나타낸 것입니다.
Run이라고 되어있는 부분은 프로그램이 실행중임을 나타내고 Wait이라고 되어 있는 부분은 프로그램이 실행되지 않고 있는 상태입니다.
CPU가 프로그램을 실행시키기 때문에 CPU의 관점에서 보면 프로그램이 Run 상태일때는 CPU가 일을 하고 있는 것이고, 프로그램이 Wait 상태일 때는 CPU가 일을 하지 않는 상태인 것이죠.
Wait 상태일 때 프로그램은 입/출력을 기다리고 있기때문에 CPU는 입력 또는 출력이 일어난 후에야 프로그램을 이어서 실행시킬 수 있습니다. 따라서 입력 또는 출력을 기다리는 동안 CPU는 하는 일이 없습니다.
아래의 예는 입출력을 기다리는 시간 즉, Wait 상태에 있는 시간 때문에 CPU의 Utilization이 나빠진 경우입니다.
✔️ Utilization은 CPU의 활용도라는 뜻으로, CPU가 사용된 시간 중 CPU가 작업을 처리한 시간의 비율입니다. 아래의 예를 보면 Utilization이 무엇인지 더 이해가 잘 가실 겁니다.
입/출력 작업은 보통 CPU보다 느리게 동작합니다.
위의 예시에서 보면, 파일로부터 데이터를 하나를 읽는데 15㎲가 걸리고, 입력된 데이터를 가지고 CPU가 100개의 명령어(Instruction)들을 처리하는 데는 1㎲가 걸립니다. 또, 그 결과를 출력하는데는 15㎲가 걸리게 됩니다.
그럼 이 작업을 처리하는 데 총 31㎲가 걸렸는데 그 중 CPU가 일을 한 시간은 1㎲밖에 되지 않습니다.
그래서 CPU Utilization은 약 3.2%가 되는 것이죠.
이 예시 즉, Uni Programming은 CPU Utilization이 매우 낮기 때문에 좋은 방식이 아닙니다.
Uni Programming은 CPU Utilization이 매우 낮다는 단점이 있습니다.
다음으로 알아볼 Multi Programming은 Uni Programming보다 CPU Utilization이 개선된 방식입니다.
Multi-Programming
위 그림은 Multi Programming 방식을 나타낸 것입니다.
앞에서 살펴봤던 Uni Programming 방식과 다르게 여러 개의 프로그램을 번갈아 실행하는 것을 볼 수 있습니다.
Uni Programming에서는 프로그램 A가 Wait 상태일 때 CPU는 그냥 기다리기만 했지만,
Multi Programming에서는 A를 기다리는 동안 프로그램 B를 실행하고, 또 프로그램 B를 기다리는 동안에는 프로그램 C를 실행합니다.
그러다가 A가 입/출력을 끝내면 다시 A를 실행했다가, A가 다시 입/출력을 하게되면 B를 실행하고, B도 입/출력을 하게 되면 C를 실행하게 됩니다.
이렇게 되면, 전체적으로 봤을 때 Uni Programming보다 CPU가 기다리는 시간이 줄어들게 됩니다.
따라서 CPU Utilization도 높아지게 되는 것이죠.
⭐ 그렇다면 Multi-Programming은 Uni Programming보다 CPU Utilization이 높아졌으니까 무조건 좋은 것일까요?
→ 답은 아닙니다. 항상 얻는 것이 있으면 잃는 것이 있기 마련이죠.🥲
Multi Programming역시 CPU Utilization은 높아졌지만, 다른 단점이 생기게 됩니다.
그게 무엇인지는 아래에서 알아보도록 하겠습니다.
위 그림은 앞 글 "운영체제 개요"에서도 나왔던 그림입니다.
운영체제의 역할에 대해서 설명할 때 소프트웨어가 실행되기 위해서는 메인 메모리 위에 있어야 하기 때문에 메인 메모리 안에 들어가있는 것이고, 나머지 공간에는 사용자 프로그램(응용프로그램)이 들어와 운영체제가 그 프로그램들을 실행시키는 것이라고 했었습니다.
즉, 운영체제가 실행하려는 프로그램은 메인 메모리에 들어와 있어야 합니다.
그럼 Uni Programming의 경우, 메인 메모리 중 사용자 프로그램이 들어가는 공간에 하나의 프로그램만 들어가면 되지만,
Multi Programming은 여러 개의 프로그램이 들어가야 합니다.
따라서 Multi Programming은 더 많은 메모리 공간이 필요하게 되는 것이죠.
메모리가 커져야 하는 것은 하드웨어적인 요구사항 입니다.
Multi Programming은 한 프로그램의 입/출력을 기다리는동안 다른 프로그램을 실행하게 됩니다. 그런데 이때, 다음 프로그램으로 어떤 프로그램을 실행할지 선택을 해야 합니다.
따라서 그 결정을 할 수 있는 기준이 운영체제 소프트웨어 안에 구현되야 합니다.
이것이 소프트웨어적으로 필요한 조건입니다.
이렇게 운영체제가 어떤 것을 실행할지 결정하는 일을 프로세스 스케줄링이라고 합니다.
잡 스케줄링 또는 CPU 스케줄링이라고도 부릅니다.
cf) 프로세스 스케줄링은 커널의 기능 중 하나이다.
프로세스 스케줄링에 대해서는 나중에 자세히 알아보도록 하겠습니다.
✅ 정리
Uni Programming은 하나의 프로그램이 CPU와 메모리를 독점하기 때문에 CPU Utilization이 낮아지게 된다.
-> 하나의 프로그램이 끝나기 전까지는 CPU가 일을 하지 않아도 다른 프로그램을 실행할 수 없기 때문
Multi Programming은 CPU를 여러 프로그램이 번갈아 사용하기 때문에 CPU Utilization이 높아지게 된다.
-> 한 프로그램이 실행하지 못하는 상태일때 다음 프로그램을 실행하는 방식
-> 다음으로 어떤 프로그램을 실행할지 결정하는 것은 프로세스 스케줄링이라고 한다.
Multi Programming의 장점과 단점
장점 | 단점 |
CPU Utilization이 높아짐 -> CPU가 대기하는 시간이 줄어들기 때문 |
1. 더 큰 메모리 공간이 필요함 -> 여러 개의 프로그램이 메모리 안에 들어와 있어야 하기 때문 2. 운영체제가 복잡해짐 -> 프로세스 스케줄링 기능이 운영체제 안에 구현되어야 하기 때문 |
'운영체제' 카테고리의 다른 글
[운영체제] 운영체제의 구성 (0) | 2023.04.03 |
---|---|
[운영체제] Timesharing (0) | 2023.04.02 |
[운영체제] Multi Programming vs Multi Processing (0) | 2023.04.02 |
[운영체제] SMP(Symmetric Multi Processing) (0) | 2023.04.02 |
[운영체제] 운영체제 개요 (0) | 2023.03.28 |