강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급 : 프로세스 관리의 이해

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 프로세스 관리의 이해

 





프로세스 상태

 

프로세스의 상태는 직관적으로 프로세스가 현재 어떤 상황에 있는지 또는 어떤 일을 하고 있는 지에 따라 구분된다고 볼 수 있으나, 공식적으로는 프로세스가 현재 소유하고 있는 자원들의 종류 및 현재 요청하고 있는 자원들의 종류에 따라 구분된다.

 

 

 

 

 

상태

특성

활동 상태

(active, swapped-in)

실행 상태(running)

프로세서를 할당받은 상태

기억 장치를 할당받은 상태

준비 상태(ready)

필요한 자원을 모두 소유하고 프로세서를 요청하고 있는 상태

대기 상태

(blocked, asleep)

프로세서 외 다른 자원 없는 상태

지연 상태

(suspended, swapped-out)

지연 준비 상태

(suspended ready)

프로세서를 요청하고 있는 상태

기억 장치를 잃은 상태

지연 대기 상태

(suspended blocked)

프로세서와 다른 자원 없는 상태

 

 

 

 

위의 내용은 일반적인 프로세스의 상태들과 각 상태의 특성을 요약하여 보여주고 있으며 아래 그림은 이러한 각 상태들 간에 프로세스가 어떻게 이동하는지를 나타낸 프로세스 상태 전이도(process state transition diagram)를 보여주고 있다.

 

 

 

 

cd748e8935a013f3cf536af9b9b6806b_1683618234_44.png
 

 

 

 

 

프로세스는 실행되기 위하여 우선적으로 기억 장치를 할당받아야 하고 할당받은 기억 장치에 자신의 프로그램과 데이터 등을 일부라도 적재시켜야 한다.

 

 

 

 

이러한 관점에서 프로세스의 상태는 크게 활동 상태(active state)와 지연 상태(suspended state)로 나누어지는데, 활동 상태란 프로세스가 기억 장치를 할당받은 상태를 말하며 지연 상태란 프로세스가 기억 장치를 할당받지 못한 상태를 의미한다.

 

 

 

 

 

다음은 이 두 상태를 나누어 각각 설명한다.

 

 

 

1) 생성 상태



사용자가 요청한 작업이 커널에 등록되어 커널 공간에 PCB 등이 만들어지고 프로세스가 처음 생성되는 상태를 생성 상태(created state)라 하는데 이는 프로세스가 만들어지면서 준비 상태(ready state) 또는 지연 준비 상태(suspended ready state)로 전이되기 전에 임시로 거치는 상태로 볼 수 있다.

 

 

 

 

커널은 기억 장치 공간을 검사하여 생성된 프로세스에게 할당할 충분한 공간이 있으면 이를 할당하여 프로세스를 준비 상태로 전이시키고, 그렇지 않으면 기억 장치를 할당하지 못하고 프로세스를 지연 준비 상태로 전이시킨다.

 

 

 

2) 준비 상태

 

 

준비 상태란 프로세스가 기억 장치를 비롯한 모든 필요한 자원들을 할당받은 상태에서 프로세서를 할당받기 위해 기다리고 있는 상태를 의미한다.

 

 

 

 

다시 말해서, 어느 프로세스가 준비 상태에 있다는 것은 프로세서가 주어질 경우 그 프로세스가 즉시 실행할 수 있음을 의미하는 것이다.

 

 

 

 

준비 상태로 전이된 프로세스는 프로세서를 할당받을 때까지 기다리게 되며 언젠가 프로세서를 할당받으면 실행 상태(running state)로 전이되어 자신의 프로그램을 실행시키게 된다.

 

 

 

 

이와 같이 준비 상태에서 실행 상태로 전이되는 것을 디스패치(dispatch) 또는 스케줄(schedule)이라 한다.

 

 

3) 실행 상태

 

 

실행 상태란 프로세스의 프로그램 코드가 기억 장치로부터 읽혀지면서 프로세서에 의해 실행되고 있는 상태를 의미한다.

 

 

 

 

, 실행 상태란 기억 장치나 프로세서를 포함하여 프로세스가 원하는 모든 자원을 할당받고 있는 상태라 할 수 있다.

 

 

 

 

실행 상태의 프로세스는 자신에게 할당된 프로세서 시간 할당량(time quantum, time slice)이 끝나거나 자신보다 높은 우선 순위의 프로세스가 들어오는 등의 상황에서 프로세서를 반납해야 하는 경우가 있을 수 있는데 이때에는 다시 준비 상태로 전이되며 이러한 전이를 선점(preemption)이라 하고, 특히 시간 할당량의 종료로 선점되는 경우를 시간 종료(time runout)라 한다.

 

 

 

 

이와 같이 선점당한 프로세스는 준비 상태에서 다시 프로세서를 할당받을 때까지 기다리게 된다.

 

 

 

프로세스가 실행 중에 입출력 요구 등을 위한 시스템 호출(system call)을 할 수도 있다.

 

 

시스템 호출이란 커널의 서비스를 받아야 하는 경우 프로세스 자신의 프로그램 코드가 아닌 커널의 코드를 실행하기 위해 커널의 특정 루틴을 호출하는 경우를 말하며 이를 관리자 호출(SVC ; Supervisor Call)이라고도 한다.

 

 

 

 

모든 운영체제들은 일반 프로세스들이 사용할 수 있는 시스템 호출들을 미리 정하여 제공하고 있으며 이를 시스템 호출 인터페이스(system call interface)라 한다.

 

 

 

 

프로세스가 실행중 시스템 호출을 하면 이에 필요한 커널의 루틴이 실행되며 이때에는 프로세스가 요청한 입출력 등의 작업을 수행하기 위하여 버퍼(buffer) 등의 각종 자원을 요청하게 되는데 이 과정에서 필요한 자원을 얻을 때까지 기다리게 될 수가 있다.

 

 

 

 

이때 프로세스는 실행 상태에서 대기 상태(blocked state)로 전이되어 프로세서를 반납하고 요청한 자원을 얻을 때까지 기다리게 되는 것이다.

 

 

 

 

이와 같이 실행 상태에서 대기 상태로 전이되는 것을 블록(block)이라 한다.

 

 

 

4) 대기 상태

 

대기 상태란 프로세스가 임의의 자원을 요청한 후 이를 즉시 할당받을 수 없어 이를 할당받을 때까지 기다리고 있는 상태를 말한다.

 

 

 

 

이와 같이 대기중이던 프로세스에게 필요한 자원이 할당되면 이 프로세스는 다시 준비 상태로 전이되는데 이러한 전이를 wakeup이라 한다.

 

 

 

 

이와 같이 wakeup되어 준비 상태로 전이된 프로세스는 언젠가 다시 실행 상태로 전이될 것이며, 이때 직전에 실행하던 프로그램 코드를 중단되었던 지점 이후부터 이어서 계속하게 된다.

 

 

 

 

대부분의 운영체제에서는 대기 상태로부터 실행 상태로 직접 전이되지 않는다는 점을 기억해 두고 그 이유를 생각해 보도록 하자.

 

 

 

 

 

 

 

대기 상태에 대한 참고 사항

일반적으로 대기 상태에 대해 설명할 때 프로세스가 자신이 요청한 입출력이 끝나기를 기다리는 상태라고 정의하는 경우가 많다.

 

 

 

 

그러나 좀 더 정확히 말하자면 대기 상태란 프로세스가 기억 장치나 프로세서를 제외한 어떤 자원을 요청한 상태에서 이 자원이 할당될 때까지 기다리는 상태를 의미한다.

 

 

 

 

프로세스가 컴퓨터 시스템의 자원을 요청하기 위해서는(그것이 하드웨어 자원이든 소프트웨어 자원이든) 항상 시스템 호출을 하게 된다.

 

 

 

 

이는 다중 사용자, 다중 프로그래밍 시스템에서 여러 프로세스들에 의해 공유되고 있는 자원을 운영체제가 통제하고 관리해야 하기 때문이다.

 

 

 

 

또한 운영체제에 따라서는 실행 상태를 사용자 실행 상태(User Running State)와 커널 실행 상태(Kernel Running State)로 구분하기도 한다(예를 들어 UNIX 운영체제도 그렇다). 사용자의 프로그램 코드가 프로세서에 의해 실행되고 있는 상태를 사용자 실행 상태라 하며 시스템 호출 등으로 인하여 커널의 코드가 실행되고 있는 상태를 커널 실행 상태라 한다.

 

 

 

 

, 프로세스는 사용자 실행 상태에서 실행하다가 시스템 호출을 하는 경우 커널 실행 상태로 가게 되고, 커널 실행 상태에서 대기 상태로 전이되는 것이다.

 

 

 

 

일반적으로는 사용자 실행 상태와 커널 실행 상태를 묶어서 실행 상태라 한다.

 

 

 

 

 

 

 

 

 

 

 

 

5) 지연 상태

 

지연 상태란 프로세스가 기억 장치를 할당받지 못하고 있는 상태를 의미한다.

 

 

 

 

프로세스가 처음 생성되었을 당시에 프로세스를 위한 기억 장치의 양이 충분하지 않은 경우에는 지연 준비 상태로 전이된다.

 

 

 

 

 

이 상태의 프로세스는 기억 장치를 할당받지 못하고 있는 것으로 기억 장치를 할당받을 때까지는 디스패치될 자격이 없다.

 

 



6) 지연 준비 상태

 

위에서 언급한 바와 같이 프로세스가 생성된 후 기억 장치의 양이 부족하여 지연 준비 상태로 전이될 수도 있으며, 이미 기억 장치를 할당받고 준비 상태에 있던 프로세스가 기억 장치를 빼앗기고 지연 준비 상태로 전이될 수도 있다.

 

 

 

 

또한 실행 상태에 있던 프로세스가 선점당하는 경우 프로세서뿐만 아니라 기억 장치까지도 잃고 지연 준비 상태로 전이될 수도 있다.

 

 

 

 

이 상태의 프로세스는 다른 모든 필요한 자원들을 보유하고 있으나 기억 장치와 프로세서를 잃고 있는 것이다.

 

 

 

 

준비 상태에서 지연 준비 상태로 전이되는 것을 지연(suspend) 또는 swap-out이라 하며, 거꾸로 지연 준비 상태에서 준비 상태로 전이되는 것을 재활동(resume) 또는 Swap-in 이라 한다.

 

 

 

 

 

 

7) 지연 대기 상태

 

 

어떤 자원을 얻고자 대기 상태에 있던 프로세스도 커널에 의하여 기억 장치를 빼앗길 수 있다.

 

 

 

 

이와 같이 대기 상태에서 기억 장치를 잃은 프로세스는 지연 대기 상태로 전이된다.

 

 

 

 

지연 대기 상태의 프로세스에게 다시 기억 장치가 할당될 경우 이 프로세스는 원래의 대기 상태로 전이되며, 지연 대기 상태의 프로세스가 요청하고 기다리던 자원이 할당될 경우에는 지연 준비 상태로 전이된다.

 

 

 

 

 

이와 관련된 전이는 이미 위의 몇 부분에서 설명한 바와 같다.

 

 

활동 상태에 있던 프로세스가 기억 장치를 잃게 되는 이유는 운영체제에 따라 몇 가지 있을 수 있다.

 

 

 

 

우선 시스템 자원들을 관리하는 커널의 입장에서 기억 장치 공간을 다른 목적으로 이용하고자 할 때 필요한 공간이 부족하면 기존에 기억 장치를 할당받고 있던 프로세스들의 공간을 빼앗을 수 있다.

 

 

 

 

이 경우에 커널에 의해 선택된 프로세스는 자신의 의지와 관계없이 기억 장치 공간을 잃게 되는 것이다.

 

 

 

 

물론 커널은 기존에 사용 중인 기억 장치 공간을 빼앗을 때 이의 대상 프로세스를 선정하는 일정한 원칙을 가지고 있을 것이며 이는 운영체제에 따라 차이가 있을 수 있다.

 

 

 

 

다음으로는 프로세스(이의 프로그램을 실행시킨 사용자)가 자의에 의하여 기억 장치 공간을 반납할 수도 있다.

 

 

 

 

사용자는 자신이 실행시킨 프로그램의 실행 도중 이의 중간 결과를 보고 이의 실행을 중지시킬 수도 있는데, 이런 경우 프로세스는 기억 장치를 반납하고 지연 상태로 전이되는 것이다.

 

 

 

 

마지막으로 종료 상태는 프로세스의 실행이 완료되어 모든 자원들이 반납되고 다만 커널 공간 내에 PCB 등의 프로세스 관리 정보만이 남아 있는 상태를 의미한다.

 

 

 

 

이 상태에서는 커널이 마지막 정리 업무만 처리하면 프로세스의 존재가 시스템에서 사라지게 된다.

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,291 명
  • 현재 강좌수 :  36,952 개
  • 현재 접속자 :  488 명