Dog foot print

[복습하는 OS] 프로세스 본문

카테고리 없음

[복습하는 OS] 프로세스

개 발자국 2020. 6. 24. 22:11

Process란 

먼저 program은 유저가 문제를 해결하기 위한 절차 및 수행과정으로 정의된다. 이러한 program은 batch system에서는 job이라 불리며, time shared system에서는 user program이라고 불린다. 그러므로 이 program은 천공카드 혹은 하드디스크 내부에 file로써 보관되어 있는데 이를 수행하려면 memory에 적재되어야만한다. 이때 실행되는 program을 Process 라고 하며 active상태 인 프로그램이라고 부르기도 한다.

 

Process영역

process는 여러개의 Part로 구성되어 있는데, 이 구성은 다음과 같다. 

 

  • Text : 현재의 프로그램 코드를 구성하는 영역
  • Program Counter : 다음 실행할 명령어 
  • Stack : 임시적인 데이터 (함수의 파라메터, 리턴되는 주소, 지역 변수)
  • Data Section : 전역 변수
  • Heap : 실행 도중 할당되는 메모리 영역

Process State

Process는 생성과 종료, I/O를 기다리는 상태, CPU점유, CPU 점유 대기의 상태를 가진다.

 

  • new : Process가 생성된 상태
  • ready : Process가 cpu점유를 기다리는 상태
  • running : Process가 cpu점유 중이며, 명령을 수행하는 상태
  • waiting : Process가 어떤 이벤트나 I/O 결과를 기다리는 상태
  • terminated : Process가 종료된 상태

 

 

이를 다이어그램으로 표현하면 위의 그림과 같이 표현이 가능하다. 

 

Process Control Block (PCB)

각 Process마다의 정보를 가지고 있는 메모리 영역이다. task control block이라고도 불린다. 

 

  • Process State : Process가 현재 running, waiting, ready등의 상태인지를 저장한 영역
  • Program Counter : Process가 실행할 다음 명령어 주소
  • CPU Register
  • CPU scheduling infomation 
  • memory management infomation
  • accounting infomation 
  • I/O status Infomation

Process가 현재 running 상태 일때 interrupt가 발생하여, Process가 교체 되는 것을 Context-switching이라고 불리는데, 이때 기존의 Process는 ready상태로 가기 전 자신의 현재 상태를 PCB에 SAVE하고 다른 Process가 종료되면 본인의 PCB에서 인터럽트 되기 전 상태를 LOAD한다. 

 

Process scheduling 

CPU활용도를 높이기 위해서, Process는 정해진 time quantum후에 다른 Process로 switching 당한다. 이때 다음 실행할 Process를 선택하는 역할을 Process scheuduler가 담당한다. 

 

Process는 여러 queue에 의해 관리되는데, 대표적으로 3가지의 queue가 존재한다.

 

  • job queue : 시스템 내부에 존재하는 모든 Process의 집합
  • ready queue : 실행 대기 중인 Process의 집합
  • device queue : I/O 수행을 대기하고 있는 Process의 집합 

이때 어느 프로세스를 execute 상태로 전환하는지 결정하는 Short - term - scheduler 가 존재하며, 흔히들 cpu shceduler라고 불리는 프로세스가 이것이다. 그와 반대로 어느 Process가 ready 상태로 전환되어야 하는지 판단하는 Long-term scheduler 도 존재한다.

 

 Context switching

 

한국어로 직역하면 문맥 전환?이 될 것이다. 꽤나 프로그래밍 에서는 많이 사용되는 언어인데, 한국어로는 잘 와닿지 않는 단어이다. context switch는 현재 running 상태에 있는 process가 존재하는데 cpu scheduling에 의해서 다른 process로 전환되는 것을 의미한다. 

 

이때 프로세스는 현재 가지고 있는 모든 현재 상태를 PCB에 저장(save)하고,  추후 할당 받은 새로운 process가 cpu할당을 끝내면, cpu scheduling에 의해 다시 실행되는 process는 이전에 종료되었던 상태를 PCB에서 Load하는 것으로 다시 작업을 이어 나갈 수 있다.

 

Process creation

process는 또 다른 process를 새로 생성 할 수 있는데, 이를 process creation이라고 한다. 생성된 process는 children process 라고 불리며 , 이를 생성한 process는 parent process라고 불린다. 각 process는 Process identifier를 가지고 있어서 process를 식별 할 수 있다. 

 

부모와 자식 process는 자원을 공유 할 수 있는데 이때 옵션은 전부 공유 하거나, 부모 프로세스의 일부만 공 하거나 전부 공유하지 않을 수 있다. 

 

프로세스를 생성한 부모 프로세스는 자식과 동시에 실행되거나, 자식 프로세스가 종료된 이후 실행이 가능하다. 왜 부모가 먼저 terminated 되는 옵션은 없을까? 그 이유는 자식 process는 자신의 명령어를 모두 실행한 후 부모에게 이에 대한 상태를 보고해야하는데, 부모가 죽고나면 자식은 전달되어야하는 pid나 state를 return할 곳이 없어서,  계속 메모리에 한 구석을 차지하는 zombie 상태가 되어 부모의 pid를 모르는  orpahn상태가 되기 때문이다. 이를 방지하기 위해서 OS측에서는 부모 프로세스가 죽으면 자식 프로세스를 모두 abort시켜버리는 cascading termination을 실행하기도 한다. 이를 위해서 자식을 생성한 부모 프로세스는 wait() 을 호출하여 자식이 종료되었는지를 확인 하고 계속 작업을 이어 나가기도 한다. 

 

 

반응형
Comments