본문 바로가기
about COMPUTER/컴퓨터 시스템

# 08. 프로세스

by saniii 2020. 10. 20.

 

 

[프로세스]

프로세스 : 지금 실행중인 프로그램

 

프로세스의 문맥 (context)가 매우 중요하다.

프로세스의 중간을 끊어서 봐도 어떤 과정 중인지 왜 이런 과정 중인지를 이해할 수 있으려면 문맥이 중요하다.

 

프로그램이 카운터가 어디를 가리키고 있는가 (프로그램이 어디까지 실행 됬는가)

프로세스의 메모리에 뭐가 저장되어 있는가

 

프로세스의 상태를 나타내는 모든 요소를 문맥이라고 한다.

하드웨어 문맥

프로세스의 주소 공간

: 메모리에 관련

프로세스 관련 커널 자료구조

: PCB 운영체제가 이 프로세스에 대해 어떤 값을 가지고 이쓴ㄴ지

: Kernel stack :

 

프로세스 혼자 실행되지 않기 때문에 (프로세스가 번갈아가며 실행되기 때문에)

프로세스의 현재 상태를 저장해놓지 않으면(문맥을 모르면) 다시 해당 프로세스의 차례가 돌아왔을 때 프로세스를 처음부터 실행해야 할 것이다.

 

# 프로세스의 상태 process state (CPU는 한 개 라고 가정)

+ Running : CPU를 잡고 instruction을 수행중인 상태

+ Ready : CPU를 기다리는 상태 (메모리와 같은 다른 조건은 모두 만족)

+ Blocked (wait, sleep) :

: CPU를 주어도 당장 instruction을 수행할 수 없는 상태

: 프로세스 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태 (ㄷ스크에서 file을 기다리는 상태)

---이렇게 크게 세가지로 나눌 수 있다.---

+ NEW: 프로세스가 생성 중인 상태

+ Terminated : 수행(execution)이 끝난 상태 , 종료중인 상태

 

+ 프로세스의 상태

연두색은 프로세스를 나타냄

CPU는 매우 빠르고 여럿이서 공유하는 자원

하나의 프로세스가 cPU안에서 running 하다가 timer가 끝나면 interrupt되어 ready queue의 가장 끝으로 가 대기한다.

프로세스가 CPU에서 running하다가 I/O device가 필요하면 DISK I/Oqueue에 가서 대기(줄서기)(프로세스 -> blocked) 그럼 controller의 지휘하에 순서대로 작업 실행

IO의 작업이 끝나interrupt가 오면 그뒤로는 위엣 ㅓ기술한 프로세스 순서와 같음

 

공유 데이터에 여러 프로세스가 접근하면 역시 queue에 대기하여 차례대로 사용한다.(프로세스 -> blocked)

 

>> Queue는 커널의 data 영역에 자료구조로 queue를 만들어 놓고 운영

 

+ 프로세스 상태도

 

 

+ Process Control Block (PCB)

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

다음의 구성 요소를 가진다 (구조체로 유지)

(1) OS가 관리상 사용하는 정보

Process state, Process ID

scheduling information, priority

(2) CPU 수행 관련 하드웨어 값

Program counter, registers

(3) 메모리 관련

Code, data, stack의 위치 정보

(4) 파일 관련

Open file descriptors

 

+ 문맥 교환 (Context Switch)

- CPU 제어권을 한 프로세스에서 다른 프로세스로 넘겨주는 과정

- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행

CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장

CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

 

- System call이나 Interrupt 발생 시 반드시 context switch가 일어나는 것은 아님

 

(1)

 

 

(2)

 

 

 

(1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCBsave해야 하지만

문맥교환을 하는 (2)의 경우 그 부담이 훨씬 큼 (eg. cache memory flush)

 

 

 

+ 스케줄러 (Scheduler)

- Long-term scheduler (장기 스케줄러 or job scheduler)

시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정

프로세스에 memory(및 각종 자원)을 주는 문제

degree of Multiprogramming을 제어

time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)

- Short-term scheduler (단기 스케줄러 or CPU scheduler)

어떤 프로세스를 다음번에 running시킬지 결정

프로세스에 CPU를 주는 문제

충분히 빨라야 함 (millisecond 단위)

- Medium-Term Scheduler (중기 스케줄러 or Swapper)

여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄

프로세스에게서 memory를 뺏는 문제

degree of Multiprogramming을 제어

 

 

+ 프로세스의 상태 (Process State)

Running

CPU를 잡고 instruction을 수행중인 상태

Ready

CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

Blocked (wait, sleep)_오랜작업 중

I/O 등의 event(스스로) 기다리는 상태

() 디스크에서 file을 읽어와야 하는 경우

Suspended (stopped)_의도하지 않게 메모리를 아예 뺏겨 강제로 정지된 상태

외부적인 이유로 프로세스의 수행이 정지된 상태

프로세스는 통째로 디스크에 swap out 된다

() 사용자가 프로그램을 일시 정지시킨 경우 (break key)

시스템이 여러 이유로 프로세스를 잠시 중단시킴

(메모리에 너무 많은 프로세스가 올라와 있을 때)

 

Blocked: 자신이 요청한 event가 만족되면 Ready

Suspended: 외부에서 resume해 주어야 Active

 

 

 

 

 

댓글