#3-1. Process

cf> process = (한 마디로) 실행중인 프로그램


 

 


* process`s context
 : 이 프로세스가 어디까지 와 있는가 => PC가 필요.
   (즉, 현재 상태 규명)

 v. cpu 수행 상태를 나타내는 하드웨어 문맥 (cpu)
   - Program Counter
   - 각종 register
 v. 프로세스의 주소 공간   (memory)
   - code, data, stack
 v. 프로세스 관련 커널 자료 구조  (kernel)
   - PCB(Process control Block)
   - Kernel stack


cf> 프로세스는 생성이 되면 독자적인 주소공간을 생성한다.


* Process State

- 프로세스는 상태가 변경되며 수행된다.
  => 크게 3가지로 구분!! cpu를 잡고 있거나, 기다리거나, 무언가 오래걸리는 작업을 하고 있거나
 
 v. Running : cpu를 잡고 instruction을 수행중인 상태
 v. Ready : cpu를 기다리는 상태(메모리 등 다른 조건은 모두 만족)
 (즉, cpu만 얻으면 instruction을 실행할수 있는 상태)
 v. Blocked(wait, sleep)
  - cpu를 주어도 당장 instruction을 수행할 수 없는 상태
  - Process 자신이 요청한 event(예:I/O)가 즉시 만족되지 않아
    이를 기다리는 상태
  - (예)디스크에서 file을 읽어와야 하는 경우

 

(경우에 따라 2가지 추가)
 v. New : 프로세스가 생성중인 상태
 v. Terminate : 수행(excution)이 끝난 상태

 

# Ready상태에 있는 프로세스들이 번갈아가며 cpu를 잡았다 놓았다 하면서 time sharing을 구현하고 있다.
# Blocked 상태에 있는 프로세스의 예))
  virtual 공간(주소 공간)에 있는 것들중 메모리에 올라가 있지 않고 disk(swap area)에 내려가 있는 것.

 

 

<프로세스 생태도>

  (이 글의 마지막에 상태도는 suspended 상태 때문에 약간 변하게 된다. )

 

# ready 상태는 최소한의 메모리를 가지고 있다.(당장 instruction실행하는데 필요한 부분들이 메모리에 있다.)

# running 에서는 나가는것이 3가지가 있다.
1. 자진해서 cpu를 내놓는 경우.
  (I/O같은 그런 이벤트 처리를 위해)
2. cpu를 계속 쓰고 싶은데 time sharing을 위해 시간이 다되어서 timer interrupt가 들어와서 ready 상태로 돌아가는 경우.

3. 할일 다해서 끈나는 경우.

 이 상태 변화를 컴퓨터 시스템 입장에서 알기 쉽게 그려놓은것.

 

 

# process는 큐에 들어가서 줄을 서서 자기 차례를 기다린다. (실은 기다린 순서대로 가는것이 아니라 우선순위가 있다.)

 

 

 

 

 

 


# kernel이 Data자료구조를 만들어 놓고, 이런것들을 통제한다.

 

 

* PCB 
 : 커널이 프로세스를 관리하기 위해서 PCB를 둔다.

 

 

# 구성요소(4가지)를 잘보자.

 

 

** 문맥교환 (굉장히 중요한 개념!!)
 : cpu를 게속 이용하는것이 아니라 뺏겼다가 다시 사용한다.
 뺏겼다가 다시 사용할때, 뺏긴 시점의 문맥을 기억했다가 다시 사용하는것이 포인트!

 

 


# 문맥 교환시 필요한 작업.
 : 프로세스가 cpu를 빼앗길때
   pc, register정보(왼쪽 노란색), memory map(아래 초록색) 정보를
   저장해둔다.
   why)) 뺏긴 시점의 문맥을 기억하기 위해!!

 

<문맥교환 그림 설명>


# cpu 제어권 넘어가는걸 설명하는 그림.
# A -> kernel -> A :(다시 A로 오는건 문맥교환x)
  A -> kernel -> B :(문맥교환!!)
# timer 인터럽트 or 오래걸리는 작업(ex> I/O) 의 인터럽트에서는 문맥교환이 일어난다!!
# 문맥교환에는 수행정보등 context의 일부를 PCB에 save 해야해서 cach memory flush(오버헤드)가 발생함.

 

 

* 프로세스를 스케줄링하기 위한 큐

 

 

# job queue 에는 ready queue, device queue 에 들어있는 프로세스들도 들어 있다!!
# But!! ready queue <-> device queue 이다.

 


 
** 실제 프로그램에서 큐가 어떻게 관리되는지 그림으로 알아보자.

 

 

# 1번째가 ready 큐 이고,
  밑에 4개가 device 큐 이다.

 

 

*프로세스 스케줄링 큐의 모습

 

 


# 마지막에 인터럽트가 발생했을떼 ready 상태로 넘어가는거 처럼 그려졌는데 정확하게는 ready상태로 넘어가는게 아니다.(틀린 그림)

 

 

* 스케줄러
 : 순서를 정해주는 것

 - Short-term scheduler
  : 굉장히 짧은 시간 단위로 스케줄이 이루어 진다.
  : 다음번에 어떤 프로세스한테 cpu를 줄지를 결정

 

 - Long-term scheduler
  : 메모리를 어떤 프로세스한테 줄지를 결정.
  : 프로세스가 new 상태에서 메모리에 올라가는것이 허락이 되야 ready 상태가 될수 있다. 그 허락을 결정하는것이 이 스케줄러.
  : degree of MultiProgramming을 제어(memeory에 몇개를 올려 놓을지를 결정하는 것.) -> 중요!!
  : 현재에는 안쓰임.(무조건 ready 상태로 들어감)

  ???)그러면 현재에는 degree of MultiProgramming을 어떻게 제어 하는가? => Medium-term Scheduler!!

 

 - Medium-term Scheduler(swapper)
  : 일단 memory에 다 올려 놓고, memory에 너무 많은 프로세스가 올라가 있으면 필요없는것을 골라 통째로 쫒아냄!!

 


 

# 프로세스의 상태 3가지에, 중기 스케줄러 때문에 추가된 상태가 Suspended 상태이다!
 => 메모리를 통재로 빼앗긴 프로세스들의 상태를 나타냄.
# blocked 와 suspended를 구분하자!
 blocked는 자신의 오래걸리는 작업이 끈나면 다시 ready가 될 수 있지만,
 suspended는 외부에서 허락을 받아야 한다

cf> 사람이 ctrl+z 를 눌러서 프로세스를 중지 시켰을때도 suspended 상태가 된다. 사람이 프로세스를 재개시키면 다시 위의 상태로 돌아갈 수 있다.

 

 

 

** 프로세스 상태도 (최종)

 

 

# running을 두가지로 나누었다.


 

=====================================================================================================

 

※ 추가 개념

 

# pc 또한 register 이다.

# pc는 code부분을 카리킨다.

 

# (사진 설명)

: (code, data, stack)은 가상 주소 공간 이므로,

  pc는 Memory(물리적 공간)에 있는 code를 가리킨다. 

 

# cpu에 관한 문맥은 2가지가 있는데,

 1) pc : 다음 실행할 주소를 가리킨다.

 2) registers : 이 정보로 인해서 다음에 어디를 실행해야 할지 알 수 있다.

'cs > os' 카테고리의 다른 글

#3-3. Thread  (0) 2017.12.29
#3-2. Process  (0) 2017.12.27
#2-2. System Structure & Program Execution  (0) 2017.12.25
#2-1. System Structure & Program Execution  (0) 2017.12.24
# Thread  (0) 2017.12.17

+ Recent posts