운영체제에서 프로세스는 무지막지하게 중요하다. 그래서 익히고 배워야 한다.


- 프로세스는 무엇인가?

프로세스란 CPU가 현재 수행하고 있는 사용자 프로그램과 시스템 프로그램으로, 시스템의 작업단위를 말한다. 따라 컴퓨터 시스템은 운영체제 프로세스와 사용자 프로세스로 구성된다. 운영체제 프로세스는 시스템 코드를 실행하고, 사용자 프로세스들은 사용자 프로그램 코드를 실행한다. 


프로세스는 하나의 기본 스레드를 가지고 있다.



- 프로세스에 대한 여러 정의

  • 현재 실행 중이거나 곧 실행될 수 있는 PCB(Process Control Block)를 가진 프로그램

  • 실행 중인 프로시저

  • 실행 중인 프로그램

  • 비동기적인 행위(Asynchronous activity)로 이는 앞에서 어떤 명령의 동작이 끝났음을 가리키는 신호가 오는 것으로서 다음 명령의 수행을 시작한다는 의미

  • 프로세서에 할당되어 실행되는 개체(Entity)로 디스패치(Dispatch, 준비상태 → 실행상태)를 할 수 있는 대상을 의미


누구는 프로세스와 프로그램에 대한 차이를 궁금할 것이다.

Process : Active Entity
Program : Passive Entity

- 위의 의미는 프로세스는 프로그램 카운터가 지정한 다음에 실행할 명령어와 함께 관련된 리소스가 저장된 활성 엔티티라는 의미이고, 프로그램은 디스크에 저장된 파일로서 수동 엔티티라는 의미이다.



Process context, 즉 프로세스 문맥은 하나의 프로그램이 포함하는 내용들을 실행함으로써 얻어지는 내용이며, 프로세스가 포함하는 내용은 아래와 같다.

  • 프로세서 문맥(processor context) : 상태 워드나 레지스터들을 가리킨다.
  • 기억 장치 문맥(memory context) : 코드 세그먼트, 데이터 세그먼트, 실행 스택을 가리킨다.
  • 프로세스와 연관된 속성들
    • 프로세스 이름 : 프로세스가 생성될 때 할당된 내부적인 번호이다.
    • 프로세스 우선순위 : CPU를 할당하는 스케줄링에 사용한다.
    • 프로세스 권한 : 정보의 보호 목적 및 수행할 연산을 지정하고 있다.


- 프로세스 상태

하나의 프로세스가 시스템에 존재하는 동안 여러 상태들을 가지게 된다. 그러한 상태들은 아래와 같다.

  • 보류(Pendding) 상태 : 일시중지 혹은 디스크에 수록된 상태(Job 형태로 디스크에 수록된 상태인데, 메모리에 적재되면 생성상태로 전환된다)
  • 준비(Ready) 상태 : CPU가 사용할 수 있는 상태, 즉 CPU를 할당받을 수 있는 상태로 CPU가 프로세스 자신을 처리해 주기를 기다리고 있는 것을 의미한다. CPU 스케줄링 정책에 의해 준비 큐에 있는 프로세스들은 CPU를 할당받는다.
  • 실행(Running) 상태 : 프로세스가 CPU를 차지하고 있는 상태를 의미한다. CPU로 프로세스를 수행하고 있으며 스케줄링 정책에 따라서 선점 혹은 비선점될 수 있다.
  • 대기(Blocked) 상태 : 프로세스가 CPU를 차지하고 실행되다가 CPU를 양도하고 입출력 처리가 완료될 때까지 대기 큐에서 대기하고 있는 상태를 의미한다
  • 교착(DeadLock) 상태 : 프로세스가 결코 일어날 수 없는 사건의 발생을 기다리는 상태를 의미하며 이후 무한연기 & Starvation & Aging 기법과 연관있다.
  • 완료(Terminated) 상태 : 프로세스가 CPU를 할당받아 주어진 시간 내에 완전히 수행을 종료한 상태이다. 종료된 프로세스는 시스템에서 제거되며 그 프로세스와 관련한 PCB도 삭제된다.
운영체제는 준비상태와 대기상태에 있는 프로세스들에 각각 준비리스트(Ready Queue)와 대기리스트(Block Queue)를 작성하여 이들을 관리한다.


위의 그림을 보면, 


프로세스의 상태가 new 에서 ready 상태로 넘어가고 이후에 스케줄러에 의해서 디스패치되어서 우선순위가 높은 프로세스에게 CPU를 할당하여 running 상태로 변한다. 하지만 이후 I/O 혹은 이벤트 처리가 생기게 되면 waiting 상태로 넘어간다. 이후에 I/O 혹은 이벤트 처리가 완료되면 다시 ready 상태로 넘어가고 다시 스케줄러에 의해서 running 되길 기다리고 있다.


Posted by doubler
,