[OS] 프로세스 관리

2020. 4. 10. 19:09Programming/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)로 운영되지만 특수한 경우가 존재한다.

  1. pause status(휴식 상태)

    • 프로세스가 일시적으로 쉬고있는 상태이다. 프로그램 실행중 ctrl + z를 눌렀을 경우, sleep~ 상태로 들어간것이다.
  2. 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 내에 들어가있다.

각 큐에 따른 스케쥴러의 담당 업무를 살펴보았는데, 그 특징을 알아보자.

  1. job Scheduler = long-term Scheduler
    일반적으로 메모리가 꽉 차있을 경우에는 HDD에서 RAM으로 프로그램을 이동시킬 수가 없으니 job scheduler가 일을 할 필요가 없다. 그래서, RAM에서 하나의 프로세스가 완전히 끝나고 공간이 생겼을 때 job scheduler가 일을 한다. 그래서 항상 실행되는 스케쥴러가 아니라 몇분 간격으로 스케쥴러가 실행되므로 long-term scheduler라고도 한다.

    job scheduler는 i/o-bound process, CPU bound process를 적절히 분배해준다.

  2. 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라고 한다. 메모리를 쭉 뒤져서 어느친구를 쫓아낼까 !@?!@??!@ 하는 경우.

    시나리오를 한번 따져보자.

     

 

 

  1. A,B,C 가 하나의 서버 컴퓨터를 공유중인 TSS 시스템.
  2. RAM에는 OS, ProgramA, ProgramB, ProgramC가 resident 되어 프로세스 처리중
  3. B가 자리를 비워 몇분간 사용 하지 않음
  4. RAM의 OS는 B가 사용중이지 않은 상태라는 것을 감지
  5. swap out : RAM에서 ProgramB를 내쫓고 서버의 HDD에 둠
  6. 서버의 HDD에 저장된 B를 swap device라고 부름
  7. 이제 OS는 A, C가 더 많은 용량의 RAM을 사용할 수 있게 하던지 다른 프로그램이 RAM에 적재될 수 있도록 하던지.. 처리함.
  8. B가 자리로 복귀하여 다시 사용하려고 함
  9. swap in : OS는 그를 감지하자마자 서버HDD에서 다시 RAM으로 공간을 확보해 B를 옮김