claire 2022. 2. 6. 00:00

프로세스는 실행 중인 프로그램을 말한다. 

프로세스의 문맥(context) - cpu 수행 상태를 나타내는 하드웨어 문맥. 

code data stack으로 이루어진 주소 공간의 code를 program counter가 가리키고 있다. 

- 프로세스의 문맥 

  • cpu 수행 상태를 나타내는 하드웨어 문맥. - program counter, 각종 register
  • 프로세스의 주소 공간 - code, data, stack
  • 프로세스 관련 커널 자료 구조

- 프로세스의 상태

프로세스는 상태가 변경되며 수행된다. 

  • Running - cpu를 잡고 instruction을 수행 중인 상태
  • Ready - CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
  • Blocked(wait,sleep) - CPU를 주어도 당장 instruction을 수행할 수 없는 상태. 메모리에 올라와있지 않고 디스크에 내려가 있다. 디스크에서 file을 읽어와야 하는 경우. process 자신이 요청한 event(예:I/O)가 즉시 만족되지 않아 이를 기다리는 상태. 
  • suspended(stopped) - 외부적인 이유로 프로세스의 수행이 정지된 상태. 프로세스는 통째로 디스크에 swap out 된다. 시스템이 여러 이유로 프로세스를 잠시 중단시킴. ex) 메모리에 너무 많은 프로세스가 올라와 있을 때. 
  • Blocked는 자신이 요청한 event가 만족되면 Ready, Suspended는 외부에서 재개시켜주면 active. 

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

terminated : 수행(execution)이 끝난 상태

 

프로세스가 생성되어 메모리에 올라온 다음 cpu를 얻은 다음 1)i/o와 같이 오래 걸리는 작업을 할 때 blocked상태로 내려와 cpu를 내려놓는 것 2) 할당 시간이 만료되어 cpu를 내려놓음 3) 수행을 끝냄(terminated)

 

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

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

1) OS가 관리상 사용하는 정보 - process state, process id, 스케줄링 정보, 우선순위

2) cpu 수행 관련 하드웨어 값 - program counter, registers

3) 메모리 관련 - code, data, stack의 위치 정보

4) 파일 관련 - open file description.

 

문맥 교환(context switch)

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

cpu가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행. - cpu를 내어주는 프로세스의 상태를 그 프로세스의 pcb에 저장. cpu를 새롭게 얻는 프로세스의 상태를 pcb에서 읽어옴. 

 

system call이나 interrupt 발생시 cpu 제어권이 운영체제로 넘어가고 다시 원래 진행 중이던 프로세스에 넘겨주면 문맥 교환이 일어난 것은 아니다. 하지만 timer interrupt가 들어와서 또 다른 사용자 프로세스에 넘기게 되면 이것은 문맥 교환이 일어난 것이다. 앞선 경우도 context의 일부를 PCB에 save 해야 하지만 문맥 교환을 하는 후자의 경우 그 부담이 훨씬 크다. 

 

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

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

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

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

 

프로세스들은 각 큐들을 오가며 수행된다. 

 

스케줄러는 ms 단위로 이루어진다. short-term scheduler는 어떤 프로세스를 다음번에 running 시킬지 결정. 

long-term scheduler는 job processor라고 하고 어떤 프로세스가 new 상태에 있으면 그 중 어떤 것들을 ready queue로 보낼지 결정한다. 프로세스에 memory를 주는 문제.  

degree of multiprogramming을 제어한다. 메모리에 올라가있는 프로세스의 수를 말한다. 

메모리에 너무 많은 프로그램이 동시에 올라가도 성능이 안좋아진다. 

보통 우리가 사용하는 시스템에는 장기 스케줄러가 없다. 무조건 ready이다. 곧바로 메모리에 올려놓는다. 

그렇다면 우리가 사용하는 프로그램은 degree of multiprogramming을 어떻게 제어하는가

바로 medium-term scheduler로 한다. 다른 말로는 swapper라고 한다. 

여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아낸다. 해당 방법으로 메모리에 올라가 있는 프로세스의 수를 조절한다. 

중기 스케줄러 때문에 메모리가 통째로 빼앗긴 상태. suspended 상태. 

 

프로세스(사용자 프로그램)의 상태이지 운영체제의 상태가 아님을 유의해야 한다. 운영체제가 running 하고 있다는 식으로 말하지 않는다.