지난 시간에 이어, 이번 시간에는 프로세스에 대해 다뤄 볼 계획이다.

 

OS는 User의 프로그램, Command Script, System 프로그램 등 다양한 활동을 관리한다.

각각의 활동은 프로세스 내부에 캡슐화되어 있고 프로세스는 실행에 필요한 모든 정보와 execution context를 포함한다.

프로세스는 프로그램이 아니다. 프로세스는 실행 중인 프로그램의 한 인스턴스로 여러 프로세스가 하나의 프로그램을 실행할 수 있으며, 프로세스는 독립적인 entitiy다.

 

OS프로세스관계는 어떻게 될까?

OS는 프로세스를 생성/삭제하고, 중단/재개할 수 있다. 프로세스를 관리하고 스케줄링하며 프로세스 내부의 통신과 동기화에 관여하며 자원을 할당하는 것도 OS의 몫이다.

 

프로세스를 한 마디로 정리하면 다음과 같다.

실행 중인 프로그램의 dynamic execution context

여러 개의 프로세스동일한 프로그램을 실행할 수 있지만, 각각은 개별적인 다른 프로세스이며 개별적인 state를 가진다. 예를 들어 Word 프로그램을 동작시킨다고 가정해보면, 여러 개의 문서를 작성할 수 있지만 각각이 다른 state를 가지는 것을 알 수 있다.

 

그렇다면 프로세스의 state에는 어떤 것들을 포함할 수 있는지 알아보자.

프로세스의 state에는 최소한 다음과 같은 정보가 포함되어야 한다.

  • 실행 중인 프로그램의 코드
  • 실행 중인 프로그램의 static data
  • 동적 데이터를 위한 공간(heap)과 heap pointer
  • 프로그램 카운터 (PC) (다음 instruction을 가르킴)
  • 프로그램의 call chain을 가진 execution stack과 stack pointer
  • CPU 레지스터 값
  • 사용 중인 OS resource set
  • 프로세스 execution state

 

다른 것들보다 프로세스 execution state는 잘 와닿지 않을 것이다.

프로세스는 다음과 같은 state를 가진다.

 

process execution state

 

각각의 state에 대한 자세한 설명은 아래와 같다.

  1. new : OS가 프로세스의 state를 settting up한다.
  2. running : instruction을 실행한다.
  3. ready : 실행할 준비가 되었지만 CPU를 기다린다.
  4. waiting : event가 완료될 때까지 기다린다.
  5. terminated : 프로세스를 종료시킨다.

실행된 프로그램은 프로그램 action(system call 등), OS action(scheduling) 또는 external action(interrupt)의 결과로 state와 state 사이를 이동하게 된다. 또한 여러 프로세스를 제어할 때는 state queue를 활용하여 제어한다.

 

또한 프로세서를 제어하기 위해서 사용되는 OS의 자료 구조를 Process Control Block이라고 한다.

PCB는 프로세스의 현재 execution state를 추적한다.

OS는 프로세스가 생성될 때 PCB를 할당하고, 프로세스가 종료될 때 PCB를 해제한다. PCB에 반드시 포함되어야하는 데이터는 다음과 같다.

  • 프로세스 state
  • 프로세스 번호
  • PC
  • Stack Pointer
  • Memory Magagement Information
  • State queue의 Queue pointers
  • ...

 

프로세스를 시작하고 종료하는 것을 Context Switch라고 한다. 즉 새로운 프로세스를 시작하기 위해서 현재 진행 중인 상태를 저장하고, 새로운 프로세스를 적재하는 것을 말한다.

OS는 PCB에서 하드웨어 레지스터를 로드하여 프로세스를 준비하고 시작한다. 프로세스가 진행될 때 CPU는 SP, PC, 레지스터 등을 변경하고, 프로세스가 종료될 때 현재 상태를 다시 해당 프로세스의 PCB에 저장한다.

이러한 프로세스의 switching이 바로 Context Switch이다.

 

또한 프로세스는 새로운 프로세스가 동작하도록 만들 수도 있다. 이러한 관계를 Parents와 Child라고 한다. 또한 Parents는 Child 프로세스를 종료시킬 수 있고, 공유 메모리를 통해 통신이 가능하다.

'study > CS377 (2014)' 카테고리의 다른 글

CS377: Threads  (0) 2020.03.11
CS377: Scheduling Algorithms  (0) 2020.03.11
CS377: Operating System Structures  (0) 2020.03.11
CS377: OS and Architecture  (0) 2020.03.10
CS 377: Introduction  (0) 2020.02.17

+ Recent posts