[개발일지]/필기

Process1

broship 2021. 8. 3. 09:30

프로세스란?

- Process is a program in execution: 실행중인 프로그램

프로세스의 문맥(context):

- CPU 수행 상태를 나타내는 하드웨어 문맥(program counter, 각종 register)

- 프로세스의 주소 공간(code, data, stack)

- 프로세스 관련 커널 자료 구조(PCB, Kernal stack)

 

프로세스의 상태: 프로세스는 상태(status)가 변경되며 수행된다

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

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

- Blocked(wait, sleep):

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

Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리는 상태

disk에서 파일을 읽어와야 하는 경우

- New: 프로세스가 생성중인 상태

- Terminated: 수행이 끝난 상태

 

- CPU 안에 있으면 running 상태

- ready queue에 있으면 ready 상태

- I/O 작업을 해야해서 I/O queue에 있으면 blocked 상태

- 하드웨어뿐 아니라 소프트웨어 상에도 같은 공유 데이터에 접근하려 하면 또 queue에서 기다려야됨(blocked)

- 위 사진에 있는 queue에 대한 정보는 커널 영역중 data 부분에 특정 자료구조 형태로 존재함

 

PCB

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

- pointer: queue에 담겨진 PCB들을 지목하고 있는 용도

- process state: ready or running or blocked

- process id: 프로세스 고유의 id

- scheduling information, priority: cpu에 올라가는 프로세스 순서는 선착순이 아닌 우선순위에 따라 결정됨, 그 우선순위에 대한 정보가 담겨있음

 

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

- Program counter, register: 해당 프로세스가 어떤 register 값을 넣어서 실행하고 있었는가

 

3) 메모리 관련 

- code, data, stack 위치 정보

 

4) 파일 관련

- 해당 프로세스가 어떤 파일을 읽고 있는지 등(어떤 외부 자원 사용하는지)

 

 

문맥교환(Context Switch)

- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

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

1. CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장(다음번 수행때 위치를 기억하기 위해)

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

 

- 시스템 콜이나 인터럽트 발생시 반드시 문맥교환(CPU 넘겨줌)이 일어나는 것은 아님

- CPU를 사용하는 프로세스가 바뀐 경우만 문맥교환이라고 함

- 인터럽트나 시스템콜이 일어나고도 다시 기존 프로세스로 돌아오면 문맥교환이 아님

- 프로세스가 실행되다 커널 함수 호출하고 다시 기존 프로세스로 돌아오는 경우를 예로 들수 있는데, 커널 함수 호출을 위해 잠시 자기 위치를 save 해야하지만 다른 프로세스로 넘어가기 위한 save 보다는 부담이 적음

 

 

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

1) Job queue

- 현재 시스템 내에 있는 모든 프로세스의 집합

- Job queue = Ready queue + Device queue

2) Ready queue

- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합

3) Device queue

- I/O device의 처리를 기다리는 프로세스의 집합

 

 

ready queue 와 다양한 device queue

- ready queue는 하나, 그 외에는 전부 device queue

- queue에는 사실 프로세스가 줄서있는 것이 아닌 운영체제가 프로세스를 관리하는 PCB라는 자료구조가 줄서있는 것임

 

- ready queue에서 기다리다가 차례가 되면 CPU를 사용할 수 있음

- I/O request: I/O 작업이 필요하면 CPU를 반납하고 I/O 작업을 완료하고 다시 ready queue에서 기다림

- time slice expired: timeout 되었을떄도 CPU를 반납하고 ready queue에서 기다림

- wait for an interrupt: I/O request 와 같은 얘기

- fork a child: 프로세스가 실행중인 동안 자식 프로세스를 실행시킬 수 있음, 그때도 CPU를 반납하고 ready queue에서 기다림

- 하나의 프로세스가 CPU 사용이 끝나면 더이상 ready queue에 돌아가지 않고 빠져나옴

 

 

스케줄러

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

- 다음에 어떤 프로세스에게 CPU를 줄지 정하는 스케줄러

- 엄청 빠른 속도로 처리되여야 하기 때문에 Short-term, millisecond 단위

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

- 메모리를 어떤 프로세스에 할당할지 결정하는 스케줄러

- 맨 위 사진에서 new 상태 -> ready 상태 할때 admitted 되야지만 프로세스가 메모리에 올라가서 CPU를 사용할 준비를 할수있음

- 이렇게 new 상태에 있는 프로세스에게 admit 하는 역할, 메모리를 줄지 말지를 정하는 역할을 담당

- 하지만 메모리에 너무 많은 프로세스가 올라갈 경우 각 프로세스마다 메모리를 너무 적게 할당받는 문제가 발생하여 최근에는 이런 롱텀 스케줄러가 없음

3. Medium_term scheduler(중기 스케줄러 or Swapper)

- 최근에는 프로세스가 시작되면 무조건 메모리를 줌, 그러다가 너무 많은 프로세스가 메모리에 올라와있으면 여유공간 마련을 위해 몇몇 프로세스를 통째로 메모리에서 디스크로 쫓아냄

- 이렇게 시작 전에 결정하는게 아니라 무조건 올린 후 그 다음 어떤 프로세스를 남겨놓고 어떤 프로세스를 쫓아내는지 결정하는 역할을 담당

 

- 이런 중기 스케줄러 역할때문에 기존 프로세스 상태(running, ready, blocked)에서 새로 추가된 상태가 존재함

Suspended(stopped)상태:

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

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

- 메모리가 너무 많이 올라와 있을때를 제외하고도 사용자가 프로그램을 일시 정지시킨 경우도 메모리를 잃어버린 경우이므로 suspended 상태라고 함

 

blocked: 자신이 요청한 event가 만족되면 ready로 돌아감

suspended: 외부에서 resume 해주어야 active됨

 

suspended가 추가된 프로세스 상태도

- running(user mode): 사용자 프로그램이 직접 실행중인 경우

- running(monitor mode): 사용자 프로그램이 시스템 콜등을 통해 커널 함수를 실행하는 경우(이 경우도 사실 OS가 실행중이다 라고 하지 않고 사용자 프로그램이 실행중이다 라고 함)

- suspended blocked: blocked 상태에서 suspended가 됨

- suspended ready: ready 상태에서 suspended가 됨

- suspended 상태는 기본적으로 inactive 상태라고 함 메모리에 올라와 있지 않아 아무것도 할수없는 상태, 단 suspended blocked 상태일 경우 I/O등의 작업이 끝나면 suspended ready 상태로 바뀔순 있음

'[개발일지] > 필기' 카테고리의 다른 글

Process Management  (0) 2021.08.12
Process2 - 스레드  (0) 2021.08.10
System Structure & Program Execution 2  (0) 2021.07.28
System Structure & Program Execution 1  (0) 2021.07.25
Introduction to Operating Systems  (0) 2021.07.21