제로베이스 컴퓨터 공학자 따라잡기 온라인 완주반 강의를 듣고 정리한 포스팅
멀티프로그래밍(Multi programming)
멀티프로그래밍?
위키백과에 따르면, 멀티 프로그래밍은 CPU작업과 입출력 작업을 병행하여 CPU이용과 처리량을 향상시킬 수 있는 스케줄링 알고리즘이다. 위의 그림과 같이 하나의 Program의 wait 시간동안 다른 응용 프로그램을 실행한다.
프로세서는 한번에 한 작업만 가능하기때문에, 실제로는 스케줄러에 의해 통제되어 한 프로그램이 일부 수행하고 나서 또 다른 프로그램이 일부 수행되는 방식으로 진행을 한다. 그 시간 간격이 매우 짧기 때문에 마치 병렬적으로 작업이 진행되는 것처럼 보인다. 이런 방식으로 수행되기 때문에, 멀티 프로그래밍은 CPU 활용도를 극대화하는 스케줄링 알고리즘이다.
프로세스 상태
이런 스케줄링을 하기 위해서는 프로그램 A가 run 상태인지, Wait 상태인지 알고있어야 한다. 즉, 어느 시점에 어떤 프로세스를 넣어주어야 할지 알아야 한다. Process 상태는 어떤 Process를 넣을지 결정하느데 있어서 매우 중요하다.
Process 각 상태는 아래와 같다.
- New : 프로그램이 메인 메모리에 할당된다.
- Ready : 할당된 프로프램이 초기화와 같은 작업을 통해 실행되기 위한 모든 준비를 마친다.
- Running : CPU가 해당 프로세스를 실행한다.
- Waiting (Blocked) : 프로세스가 끝나지 않은 시점에서 I/O로 인해 CPU를 사용하지 않고 다른 작업을 한다. 해당 작업이 끝난다면 다시 CPU에 의해 실행되기 위해 Ready상태로 돌아간다. 이 상태에서는 특정 이벤트 (I/O 작업이 다 완료 되었다는 것을 알려주는 이벤트) 발생 대기상태이다.
- EX : 저장매체에 파일 읽기 요청 → 해당 프로세스는 파일을 다 읽을 떄까지 block 상태가 된다. → 파일 읽기가 끝나면 특정 event가 발생되고 block 상태가 끝난다.
프로세스 상태간 관계
Process 상태는 다음과 같이 진행이 된다.
시분할 시스템의 경우를 예로 들어보면, 시분할 시스템은 특정 시간 후 다른 process를 실행시켜야 한다.
- 현재 Running중이었던 process는 I/O 처리를 위해 Blodk(Wait)상태가 되어 특정 event가 발생할 때까지 대기한다.
- Schduler는 ready상태에 있는 다른 process를 실행하고, 그 process는 running 상태가 된다.
- 시분할 시스템의 경우 특정 시간이 지나면 다른 process를 실행시켜야 하므로 running 중인 process를 ready 상태로 바꾼다.(다음 ready상태의 precess를 실행)
- block 상태였던 processs는 특정 event가 발생되면 (I/o 작업이 끝났단느 event) 다시 ready 상태로 돌아간다.
프로세스 상태간 관계 - Process Scheduling Queue
이 부분은 강의에서 깊게 다루지는 않았지만(추후에 조금 더 다룰 것 같다) 프로세스 상태간 관계를 다룰 때 언급을 했으므로, 구글링을 통해 설명을 아주 조금 더 보충하였다. 참고문서
OS는 process의 상태마다 각각의 Queue를 갖고있다.
- Job Queue : 시스템에 있는 모든 프로세스들이 들어있는 queue
- Ready Queue : Main memory에 올라와 있는 프로세스들이 들어있다. 실행되기 위해 대기중인 Queue이다. 연결리스트로 구현되어있다.
- Device Queues : I/O 장치를 사용하기를 기다리는 프로세스들이다. 연결리스트로 구현되어있다.
만약, 3개의 Process가 스케줄러에 실행을 요청한다면
readyQueue.pop() , blockQueue.push()등을 반복하여 Ready Queue , Running Queue, Waiting Queue를 돌면서 Queue에 들어온 순서대로 실행이 된다.
필기를 한것인데, 나중에 복습할 때 참고를 하기위해 악필이지만 넣어보았다.