2020. 4. 10. 19:09ㆍProgramming/CS
프로세스 관리
프로세스 : cpu 자원을 효율적으로 나누어 주는 것.
program vs process
- program : HDD 안에있는, 아직 메인메모리로 call 되지 못한 데이터.
- process : HDD 안에서 메인메모리로 적재되어 처리되는 데이터.
cpu는 program이 아니라 process 와 커뮤니케이션함. 정리하면 하드디스크 속 프로그램, 메인메모리에서 살아 움직이는 프로세스.
프로세스의 상태
- new : 메인 메모리로 올라온 상태
- 메모리 할당
- PCB 생성
- ready : 초기화를 끝내고 실행할 준비가 모두 된 상태 Queue에서!
- dispatch(PID): 준비 -> 실행
- running : 실제 cpu 가 실행중인 서비스
- timeout(PID): 실행 -> 준비
- exit(PID): 실행 -> 완료
- block(PID): 실행 -> 대기
- waiting : 예를들면 프린트 등의 업무를 처리할 때, cpu는 다른 프로세스를 먼저 처리하고 프린트하는 애는 waiting 상태로 둠 (예를들면 프린트가 끝나면(waiting 끝), 다시 Ready 상태로 두어 cpu 실행을 기다림.) I/O를 만난상태 등이 있음.
- wakeup(PID): 대기 -> 준비
- terminated : 해당 프로세스의 모든 작업이 끝난 상태
- 메모리 정리(삭제)
- PCB 삭제
그리고 멀티프로세스시스템과는 다르게, 그림에서 running -> ready로 가는 부분 은 TSS(Time Sharing System)의 경우에 해당한다. TSS는 일정 시간이 지나면 강제로 switching 하기 때문! 그림에서는 interrupt
라고 표현했지만, time expired
의 의미의 interrupt이다.
이렇게 대부분의 프로세스는 생성, 준비, 실행, 대기, 완료 상태 (active status)로 운영되지만 특수한 경우가 존재한다.
-
pause status(휴식 상태)
- 프로세스가 일시적으로 쉬고있는 상태이다. 프로그램 실행중
ctrl + z
를 눌렀을 경우, sleep~ 상태로 들어간것이다.
- 프로세스가 일시적으로 쉬고있는 상태이다. 프로그램 실행중
-
suspend status(보류 상태)
일시 정지 상태. 일반적으로 아래와 같은 경우가 있다.<img src="./img/4-8.png" width="50%" >
- 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때
- 프로그램에 오류가 있어서 실행을 미루어야 할 때
- 바이러스와 같이 악의적인 공격을 하는 프로세스라고 판단될 때
- 매우 긴 주기로 반복되는 프로세스라 메모리 밖으로 쫓아내도 큰 문제가 없을 때
- 입출력을 기다리는 프로세스의 입출력이 계속 지연될 때
정리해보자면, 대부분이 컴퓨터의 성능을 떨어뜨리는 경우나 || 실행을 미루어도 큰 지장이 없는 경우이 suspend status라고 표현한다.
이렇게 suspend status로 들어간 process는 메모리 밖으로 쫓겨나
swap area
에 보관된다.
PCB(Process Control Block = TCB, Task Control Block)
process == task. 같은 의미로 사용한다. 이 PCB(TCB)안에는 프로세스에 대한 모든 정보가 들어가있다. 하나의 프로세스 당 1개의 PCB가 있다. 보통 PCB에 아래와 같은 정보들이 들어가기 때문에, struct(구조체)등으로 만들곤 한다.
[PCB내에 들어가는 정보들]
상태 정보
: 처음에 0A6 번지에서 시작했고, 현재는 0D3 번지까지 running 하다가 waiting 상태로 되었다! 등각종 중간값
: 프로세스가 사용했던 중간값.MMU Info
: 프로세스가 switching 되면서 메인메모리의 처리가 진행되면서 base, limit 값이 변동되는데, 그 변동값을 MMU가 저장하고있으니 그 MMU의 info를 저장P ID
: 프로세스 ID. 현재까지 CPU를 얼마나 사용했는지 기록하기위함 (너무 많이 사용한 친구는 다음부터 적게 사용하게 둔다거나)
PCB는 OS 내, 프로세서 관리부서 안에 들어있음! PCB-P1, PCB-P2 ... 이렇게
프로그램과 프로세스의 관계를 다시한번 PCB를 통해 정리해보자면
- Process -> Program이 OS로부터 PCB를 얻는다
- 실행되고있는 Process가 종료됨에따라 해당 PCB가 폐기되고 -> Program이된다
으로 정리할 수 있다. 또한 컴퓨터전원을 켰을 때 OS의 프로세스를 메모리에 올리는 boot strap
이 많은 os관련 프로세스를 실행한 후 일반 프로세스가 실행되므로, 컴퓨터에는 일반 사용자의 user process와 OS의 kernal process가 섞여서 실행된다.
Queues
많은 프로세스들이 cpu에서 처리되기를 메인메모리에서 기다리고있고, 하드디스크에서도 메인메모리로 적재되기 위하여 수많은 프로그램들이 큐 대기열로 기다리고있다.
- Job Queue : HDD -> RAM으로 올라가기 위해 HDD에서 job(작업)들이 기다리고있음
=>job scheduler
가 처리
하지만 실제로, Queue 처럼 줄세우기로 기다리긴 하지만 단순한 FIFO로 job 를 처리하지는 않는다. 어떤 job을 먼저 처리해줄 것인지를 계산하는 것을job scheduling(잡 스케쥴링)
이라고 하고, 그 해당 업무를 담당하는 프로그램은job scheduler
이라고 한다. - Ready Queue : RAM -> CPU 서비스를 받기 위해 process 들이 기다리고있음(ready, 대기상태인 job들)
=>cpu scheduler
가 처리 - Device Queue : I/O를 사용하려고 하는데 다른 프로세스가 사용중이라서 process 들이 기다리고있음
=>device scheduler
가 처리 ex. print, disk, mouse scheduler... 등이 있음
프로세스들이 하기위한 작업에 따라 이러한 종류의 대기열이 존재한다.
물론 job queue
와 그를 처리하는 job scheduler
, ready queue
와 그를 처리하는 cpu scheduler
, device queue
와 그를 처리하는 device scheduler
code 들은 모두 OS 내에 들어가있다.
각 큐에 따른 스케쥴러의 담당 업무를 살펴보았는데, 그 특징을 알아보자.
-
job Scheduler = long-term Scheduler
일반적으로 메모리가 꽉 차있을 경우에는 HDD에서 RAM으로 프로그램을 이동시킬 수가 없으니 job scheduler가 일을 할 필요가 없다. 그래서, RAM에서 하나의 프로세스가 완전히 끝나고 공간이 생겼을 때 job scheduler가 일을 한다. 그래서 항상 실행되는 스케쥴러가 아니라 몇분 간격으로 스케쥴러가 실행되므로 long-term scheduler라고도 한다.job scheduler는 i/o-bound process, CPU bound process를 적절히 분배해준다.
-
cpu Scheduler = short-term Scheduler
순서대로 프로세스를 처리하지 않기 때문에, 스케쥴링 계산을 매우 빨리 해야한다. (1초에 몇십~몇백번씩 진행해야함). PC에서 여러개의 프로그램이 동시에 실행되고있다고 느끼는 이유는 RAM에서 switching 이 계속해서 이루어지기 때문이다. 그래서 짧은시간에 스케쥴링이 일어나야하므로 shortTerm scheduler라고도 한다.
Multiprogramming
현대의 운영체제는 대부분이 여러개의 프로세스를 RAM에 적재하여 cpu에서 프로세스를 처리하는 Multiprogramming 이다.
관련 용어를 몇개 집고 넘어가자.
-
Degree of Multiprogramming : main memory에 process 가 몇개 올라가있는가
-
I/O-bound process vs CPU-bound process
- I/O 관련 일을 많이 하는 process (ex. word)
- CPU사용하는(계산하는)관련 일을 많이 하는 Process (ex. 슈퍼컴퓨터 사용하는 app, search algorithm, video streaming)
그래서 OS가 I/O-bound, CPU-bound process 를 적절히 mix 하여 처리할 수 있도록 스케쥴링 해주어야한다.
-
Medium-term Scheduler : TSS(주로 대화형시스템)에서 swapping 이 short-term보다는 덜 일어나고, long-term보다는 자주 일어날 때의 업무를 담당할 때 medium-term scheduler라고 한다. 메모리를 쭉 뒤져서 어느친구를 쫓아낼까 !@?!@??!@ 하는 경우.
시나리오를 한번 따져보자.
- A,B,C 가 하나의 서버 컴퓨터를 공유중인 TSS 시스템.
- RAM에는 OS, ProgramA, ProgramB, ProgramC가 resident 되어 프로세스 처리중
- B가 자리를 비워 몇분간 사용 하지 않음
- RAM의 OS는 B가 사용중이지 않은 상태라는 것을 감지
swap out
: RAM에서 ProgramB를 내쫓고 서버의 HDD에 둠- 서버의 HDD에 저장된 B를
swap device
라고 부름 - 이제 OS는 A, C가 더 많은 용량의 RAM을 사용할 수 있게 하던지 다른 프로그램이 RAM에 적재될 수 있도록 하던지.. 처리함.
- B가 자리로 복귀하여 다시 사용하려고 함
swap in
: OS는 그를 감지하자마자 서버HDD에서 다시 RAM으로 공간을 확보해 B를 옮김
'Programming > CS' 카테고리의 다른 글
[OS] 프로세스의 생성과 종료 (0) | 2020.04.19 |
---|---|
[OS] CPU Scheduling 알고리즘, 평가 척도 (0) | 2020.04.11 |
[OS] Dual Mode(이중모드), 하드웨어 보호 (0) | 2020.04.08 |
[OS] OS의 서론, 역사, 인터럽트 기반 시스템 (0) | 2020.04.07 |
[OS] 폰노이만구조, CPU와 성능개선 (0) | 2020.04.04 |