출처: https://3months.tistory.com/307 [Deep Play]

4-1/시스템프로그래밍

Processes

코딩하는 랄뚜기 2022. 3. 10. 19:14

Processes

 

Process는 program이 메모리에 올라가 CPU가 접근 할 수 있는 상태를 의미한다.

Program이라고 하면 안되고 Processor이라고도 하면 안된다. (Processor는 CPU이다.)

 

Process는 두 가지 추상적인 개념을 program에 부여한다.

 

  1. Logical control flow
    • 각각의 프로그램이 CPU를 독점적으로 사용는 것으로 착각한다.
    • OS가 context switch를 해주기 때문에 가능하다.
  2. Private address space
    • 각각의 프로그램이 메인 메모리를 독점적으로 사용하는 것으로 착각한다.
    • OS가 virtual memory를 제공해주기 때문에 가능하다.

Logical control flowPrivate address space 때문에 CPUMultiprocessing이 가능한 것 처럼 보이게 된다.

하지만 실제 process가 사용하고 있는 memory는 virtual memory로 실제로는 memory하나에 따로 따로 mapping되어있다.(빨간선)

CPU도 한 process가 독점하는 것이 아니라 실제로는 정해진 시간만 해당 process를 실행하고 context switch를 통해 다음 process로 이동한다. (파란선)

 

짧게 말해 CPU는 process를 시간으로 분류하고 memory는 process를 공간으로 분할한다.

 


 

Concurrent Processes

 

우리가 만약 두 process가 concurrent하거나 sequential하다고 하면 어떻게 생각할까?

 

아마도 위 처럼 A,B,C는 concurrent하고 B,C는 sequential하다고 생각할 것이다.

하지만 Multiprocessing불가능하기 때문에 실제 concurrentsequential은 다음과 같다.

 


 

Context Switching

 

Context Switching kernel 영역에서 Process를 바꿔주는 것이다.

위 그림은 잘 와닿지 않는다. 좀 다른 그림으로 Context Switching을 표현해보자.

 

Private address space 때문에 각각의 Process들은 메인 메모리를 혼자 사용하고 있다고 생각하지만 실제로는 위 처럼 User영역은 각자 할당되어있고 Kernel 영역은 공유하고 있다.

 

P1이 실행되다가 context switch를 해야한다면 현재 정보들을 register에 save하고 (위 그림에서는 주소라고 표현하였지만 실제로는 훨씬 많은 값들이 저장된다) 다음 실행해야 할 process의 정보를 register에서 load한다.

 

Context switch가 끝났으면 P2를 실행하면 된다.

'4-1 > 시스템프로그래밍' 카테고리의 다른 글

Unix I/O, RIO package  (0) 2022.04.04
Signal  (0) 2022.03.28
Shell  (0) 2022.03.22
Process Control  (0) 2022.03.15
Exceptional Control Flow, Exception  (0) 2022.03.09