본문 바로가기

CS BASIC/운영체제(Operation System)

[운영체제] 프로세스와 상태 전이

개요

프로세스의 정의는 실행중인 프로그램, 비동기적인 행위 등 여러가지로 정의할 수 있습니다.

그러나 일반적으로 “프로세스”라고 부르는 것은 “실행중인 프로그램”을 의미합니다.

 

하나의 프로세스가 컴퓨터 시스템 내에서 존재할 동안 그 프로세스는 계속해서 일련의 서로 구분되는 상태를 거치게 됩니다.

 

만일 프로세스가 CPU를 사용중이라면 실행중(running)에 있다고 말하고,

CP를 사용하지 않으나 언제든지 사용할 준비를 마쳤다면 준비(ready) 상태라고 말하며

어떠한 사건이 일어나기를 기다리며 멈춰서 대기하는 상태를 보류(block) 상태에 있다고 합니다.

 

컴퓨터 시스템에서 CPU는 유한한 자원이므로 다양한 실행중인 프로그램

즉 프로세스들은 CPU라는 자원을 받기 위해 운영체제로부터 CPU를 쓸 수 있도록 “할당” 받아야 합니다.

 

운영체제는 앞서 설명한 프로세스의 상태에 따라 분류를 한 뒤, 각각의 상태별로 리스트를 만들어 프로세스를 보관해두었다가

프로세스에게 CPU를 빌려주거나 다시 회수하는 역할을 수행하게 됩니다.

 

물론 이 과정은 자세히 살펴보면 정교하고 복잡한 절차를 통하여 이루어지게 됩니다.

 

이 때 CPU라는 컴퓨터 시스템의 자원을 프로세스에게 줄 때에는

‘우선순위’라는 것을 정하여 어떤 프로세스에게 먼저 CPU를 빌려줄지 판단해야하는데, 

앞에서 설명한 세 가지 상태 중에서 보류(block) 상태는 프로세스가 어떤 사건이 일어나길 기다리고 있는 중이므로

가장 낮은 우선순위를 부여 받고 따라서 가장 나중에 CPU를 할당 받게 됩니다.


프로세스 상태전이

컴퓨터 프로그램이 수행하는 작업(job)이 컴퓨터 시스템에 입력되게 되면  이에 대응하는 프로세스가 생성되어 준비 리스트의 끝에서 배치하게 됩니다.

그리고 이러한 준비 리스트에 놓인 프로세스들은 선입선출(FIFO, First In First Out)의 원칙에 따라

들어온 순서대로 CPU와 같은 컴퓨터 자원을 할당 받게 됩니다.

 

이때 준비 리스트의 가장 앞에 위치한 프로세스가 자신의 차례가 되어 CPU를 할당받게 되면

해당 프로세스는 준비(ready) 상태에서 실행(running) 상태로 바뀌게 되는데,

이러한 과정을 “프로세스의 전이”라고 합니다.

 

그리고 준비 리스트에 맨 앞에 있던 프로세스가 CPU를 할당 받게 되는 것을 구체적으로 “디스패칭(dispatching)”이라고 부릅니다.

dispatch (process name) : ready → running

 

프로세스의 상태 전이의 과정을 그림으로 표현하면 아래와 같습니다.

 

fig 1.0 프로세스의 상태 전이

 

 

 

프로세스가 CPU를 점유하고 있는 상태를 프로세스가 실행(running)상태에 있다고 말합니다.

하지만, 프로세스가 실행중인 시간이 길어지면 이는 곧 하나의 프로세스가 CPU를 독점하는 상황을 초래할 수 있으므로 이를 방지하기 위해 인터럽트 클럭(interrupt clock)이라는 기술을 적용하여 지정된 시간 동안에만 CPU를 점유할 수 있도록 합니다.

 

즉, 운영체제는 준비리스트에 있던 프로세스가 디스패칭 될 때,

하나의 프로세스가 오랜 시간 CPU를 독점하지 않도록 타이머를 설정합니다.

 

인터럽트 클럭은 정해진 시간 이상 프로세스가 CPU를 점유하면

인터럽트(Interrupt)를 발생시켜서 프로세스가 가지고 있던 CPU의 제어권을 회수해 옵니다.

 

그리고 이 과정을 표현하자면 아래와 같습니다.

timerrunout (processname) : running → ready
dispatch (processname) : ready → running

 

하지만,  실행 상태인 프로세스가 지정된 시간 전에 CPU의 사용을 끝 마칠 수도 있는데,

이 때에는 프로세스가 스스로  CPU를 운영체제로 양도하게 됩니다.

 

그리고 이러한 사건은 아래와 같이 표현할 수 있습니다.

block(processname) : running → blocked

 

프로세스는 입출력 작업과 같이 프로세스를 오래 기다리게 하는 사건이 끝났을 때,

해당 프로세스는 보류 상태에서 준비 상태로 전이될 수 있는데 이 과정은 아래와 같이 표현할 수 있습니다.

wakeup (processname) : blocked → ready

 

정리하자면 프로세스의 상태 전이의 과정은 아래와 같이 총 4가지 입니다.

프로세스 상태 설명
디스패치
(dispatch)
준비(ready) 상태인 프로세스가 실행(running)중인 상태가 되는 것  
 할당 시간 종료
(timer run out)
실행(running)중인 프로세스가 주어진 시간 이상 CPU를 점유하면 인터럽트에 의하여 운영체제로 다시 CPU 제어권을 양도하고, 준비(ready)상태가 되는 것.
보류
(block) 
실행중인 프로세스가 운영체제가 허용한 CPU 사용 시간 내에 작업을 마치고 스스로 운영체제에게 CPU 제어권을 양도하고 보류(block) 상태가 되는 것.
조건 만족
(wake up)
입출력 작업과 같이 오랜 대기 시간을 야기시키는 작업을 수행하는 프로세스가 해당 작업을 모두 마치고 준비(ready) 상태로 전환하는 것.

 

위의 4가지 프로세스 상태 중에서 block 과정을 제외하고는

모두 프로세스가 아닌 외부의 조건에 의해서 상태 전이가 발생한다는 특징이 있습니다.


프로세스 제어 블록(PCB, Process Control Block)

운영체제가 프로세스를 관리하는 데 필요로하는 중요한 정보의 저장소를 프로세스 제어 블록(PCB)이라고 부릅니다.

PCB는 프로세스를 관리하기 위해 아래와 같은 중요한 정보를 포함합니다.

 

  • 프로세스의 현 상태
  • 프로세스의 고유한 식별자
  • 프로세스의 우선순위
  • 프로세스가 적재된 부분을 가리키는 포인트
  • 프로세스에 할당된 자원을 가리키는 포인트
  • 레지스터 내용을 저장하는 장소

 

컴퓨터 시스템은 현재 실행중인 프로세스의 PCB를 가리키고 있는 하드웨어 레지스터 정보를 가지고 있는데,

따라서 PCB에는 이러한 정보도 함께 관리됩니다.


프로세스에 대한 작업

컴퓨터 시스템은 프로세스에 대해서 다음과 같은 작업을 수행할 수 있어야 합니다

 

  • 프로세스의 생성
  • 프로세스의 파괴
  • 프로세스의 서스펜드(suspend)
  • 프로세의 재시작(resume)
  • 프로세스의 우선순위 변경
  • 프로세스의 보류(block)
  • 프로세스의 깨움(wakeup)
  • 프로세스의 디스패치(dispatch)

 

프로세스의 생성

컴퓨터 시스템에 프로세스를 생성하는 데에는 다음과 같은 작업이 필요합니다.

 

  • 프로세스의 이름 결정
  • 프로세스의 초기 우선순위 부여
  • 프로세스 제어 블록(PCB) 생성
  • 프로세스에 초기 자원을 할당

 

하나의 프로세스는 다른 프로세스와 부모-자식 관계를 맺고

위에서 아래로 계층 구조를 그리며 자식 프로세스를 생성할 수 있습니다.

 

fig 1.1. 프로세스 생성의 계층 구조

 

이때, 부모 프로세스는 여러개의 자식 프로세스를 가질 수 있지만

자식 프로세스는 하나의 부모 프로세스만을 가진다는 특징을 가집니다.

 

 

프로세스의 파괴

컴퓨터 시스템에서 프로세스를 파괴한다는 것은 시스템으로부터 프로세스를 제거한다는 것을 의미합니다. 

그러면 프로세스에 속하던 자원을 다시 시스템으로 회수하고 프로세스는 운영체제가 관리하던 테이블에서 사라지며 프로세스를 식별하는데 사용하던 PCB도 사라집니다.

 

프로세스의 서스펜드(Suspend)

프로세스의 서스펜드는 프로세스의 파괴처럼 프로세스가 가지고 있던 자원을 반환합니다.

하지만, 파괴 과정과 다른 것은 서스펜드 상태에 놓인 프로세스는 다른 프로세스에 의해 재시작(resume)될 수 있다는 것입니다.

 

즉, 프로세스의 파괴 직전의 상태까지 두었다가 다시 복원되기 위해 기다리는 상태로

서스펜드 상태에 놓인 프로세스는 스스로 재시작(resume)할 수 없습니다.

 

서스펜드 과정은 컴퓨터 시스템에서 부하가 많이 발생할 경우

운영체제가 자원을 효율적으로 관리하기 위한 방책으로 사용되기도 하는데,

의도된 서스펜드는 컴퓨터 시스템이 부하를 처리할 수 있는 여유를 만들어 줄 수 있으므로 많이 선택하는 방식입니다.

 

이처럼 서스팬드는 시급한 원인 때문에 생기는 상황이므로 가능한 빠르게 서스펜드 처리 될수록 좋습니다.

 

프로세스의 서스펜드는 프로세스를 점검하는 데에도 사용할 수 있습니다.

만일 사용자가 프로세서의 어느 부분이 의심스럽다고 판단된다면,

실행중인 프로세스를 완전히 정지(abort)시키지 않고도 잠시 동안 서스펜드 시켜두어

재시작 할 것인지 정지시킬 것인지 결정할 수 있습니다.

 

fig 1.3. 서스펜드가 적용된 프로세스의 상태 전이도

 

 

단일 프로세서 시스템에서는 실행중인 프로세스를 서스펜드 시켜줄

다른 프로세스가 부재하기 때문에 스스로 서스펜드를 시켜야만 합니다.

하지만, 다중 처리 시스템에서는 실행중인 프로세스가 실행중인 다른 프로세스에 의해 서스펜드될 수 있습니다.

 

준비 상태에 있는 프로세스는 반드시 다른 프로세스에 의해 서스펜드되야 하는데,

이러한 과정은 다음과 같이 표현할 수 있습니다.

suspend(processname) : ready → suspendready

 

서스펜드된 준비 상태에 있는 프로세스는 타 프로세스에 의해 준비상태로 상태전이를 일으킬 수도 있는데 이는 다음과 같이 표현할 수 있습니다.

 

resume(processname) : suspendready → ready

 

보류 상태에 있는 프로세스 역시 다른 프로세스에 의해 서스펜드될 수 있는데, 다음과 같이 표현할 수 있습니다.

 

suspend(processname) : blocked → suspendblocked

 

서스펜드 된 보류 상태의 프로세스가 타 프로세스에 의해 재시작(resume)되는 과정은 다음과 같이 표현할 수 있습니다

 resume(processname) : suspendblocked → blocked

 

입출력이 끝났을 때 상태의 전이는 다음과 같이 표현할 수 있습니다.

completion(processname) : suspendblocked → suspendready

 


인터럽트의 처리(Interrupt processing)

어떤 프로세서(processor)가 명령문을 실행시키고 있을 때, 그 순서를 바꾸는 사건을 ‘인터럽트(interrupt)’라고 합니다.

이 과정은 하드웨어에 의해 처리되는데, 인터럽트가 발생하면 다음과 같은 작업이 수행됩니다.

 

  • 운영체제가 프로세스가 보유했던 제어권을 회수합니다.
  • 인터럽트 받은 프로세스의 상태를 PCB에 저장됩니다.
  • 발생한 인터럽트를 분석하고 인터럽트를 처리할 수 있는 적절한 인터럽트 루틴(routine)으로 제어권을 보내줍니다.

 

인터럽트는 실행중인 프로세스에 의해 발생될 수도 있고,  그것과 관계 없는 다른 사건에 의해 발생할 수도 있습니다.

 

인터럽트의 종류

인터럽트는 다음과 같이 총 6가지가 있습니다.

인터럽트(Interrupt) 설명
SVC 인터럽트
(Supervisor Call Interrupt)
- 일반 사용자 프로그램이 생성하는 인터럽트로, 보통 입출력 수행, 기억장치의 할당 또는 오퍼레이터와의 대화 등을 위해 프로세스가 수행하여 생성합니다.
-  SVC는 시스템 안정성 및 보안적인 측면에서 이점이 한 가지 존재하는데, 사용자가 함부로 운영체제 내로 들어올 수 없도록 보호하는 역할을 수행합니다.
-  프로세스가 작업을 수행하기 위해 운영체제에 위치한 자원을 작업 접근하도록 허용하는 것이 아니라. SVC를 통해 서비스를 받도록 하여 인가되지 않은 접근 및 사용을 제한합니다.
-  SVC 인터럽트는 사용자가 권한이 없다면 요구를 거절할 수도 있습니다.
입출력 인터럽트
(I/O Interrupt)
-  입출력 하드웨어가 발생시키는 인터럽트입니다.
-  입출력 하드웨어가 CPU에게 채널이나 입출력 기기의 상태 변화를 알려줄 때 사용합니다.
-  입출력이 완료되었거나, 에러가 발생하거나, 또는 기기가 대기상태일 때 발생됩니다.
외부 인터럽트
(External Interrupt)
-  인터럽트 시계에서 일정한 시간이 만기된 경우 
-  오퍼레이터가 콘솔에서 인터럽트 키를 입력하는 경우
-  다중 처리 시스템에서 다른 CPU로부터 신호를 받았을 경우 발생합니다.
재시작 인터럽트
(Restart Interrupt)
-  오퍼레이터가 콘솔(console)에서 재시작 단추를 누를때
-  다중처리 시스템에서 다른 CPU로부터 재시작 SIGP(Signal processor) 명령문이 도착되면 발생됩니다.
프로세스 검사 인터럽트
(Program check Interrupt)
-  수행중인 프로세스가 0으로 나누거나,
-  허용되지 않은 명령문을 실행하거나,

-  오퍼레이션 코드를 잘못 사용할 경우 발생합니다.
기계 검사 인터럽트
(Machine Check Interrupt)
-  컴퓨터 하드웨어와 관련된 문제가 감지될 때 발생하는 일종의 컴퓨터 오류입니다.
-  개인용 컴퓨터에서 결함이 있거나 잘못 구성된 하드웨어를 나타낼때 발생합니다.

 


문맥교환(Context Switching)

운영체제는 IH(Interrupt Handler)라고 불리는 루틴(routine)이 있어서 여러 종류의 인터럽트가 발생할 때 처리할 수 있습니다.

 

인터럽트가 발생하면 운영체제는 프로세스의 상태를 기억해두었다가 제어권을 IH에게 넘깁니다.

 

이러한 작업을 문맥 교환(Context switching)이라고 부릅니다.

 

문맥 교환(Context Switching)은 PSW(Program Status Word)를 통해서 처리되는데,

이 과정을 그림으로 표현하면 아래와 같습니다.

 

fig 1.3.인터럽트 처리 중에서의 PSW 처리



PSW(Program Status Word)는 명령문의 수행 순서를 조절하며 프로세스의 상태에 대한 여러가지 정보를 보관합니다.

 PSW에는 3가지 종류가 있는데 현재 PWS, 새로운 PSW, 과거 PSW가 있습니다.



인터럽트 처리 중에서의 PSW 교환

현재 PSW에는 다음에 수행할 명령문의 주소와 현재 일어날 수 있는 인터럽트의 종류,

일어날 수 없게 된 인터럽트의 종류를 나타냅니다.

 CPU에서는 이를 참조하여 어떤 종류의 인터럽트는 발생시키고,  어떤 종류는 보류 하거나 무시하게 할 수 있습니다.

 

단일 프로세서 시스템에서는 < fig 1.3 >와 같이 6:1:6의 구조로 PSW를 관리하고 있습니다.

그림과 같이 문맥 교환(Context Switching)이 발생하면 하드웨어는 아래와 깉이 자동적으로  PSW를 교환합니다.

 

  • 현재 PSW에 있는 내용을 그 인터럽트에 대응하는 과거 PSW로 옮깁니다.
  • 인터럽트에 대응하는 새로운 PSW로 부터 그 내용을 현재 PSW로 옮깁니다.

 

현재 PSW는 수행할 인터럽트 처리 루틴의 주소를 지정하고, 이에 따라 인터럽트 처리 루틴을 처리합니다.

인터럽트의 처리 후에 운영체제는 다시 프로세스에게 CPU를 할당해주어야 하므로,

인터럽트의 처리가 모두 완료되면 프로세스의 우선순위를 참조하여

높은 우선순위를 가진 준비 상태의 프로세스에게 CPU 제어권을 할당합니다.

 

그리고 이 때, 프로세스가 선점적(preemptive) 또는 비선점적(nonpreemptive)인지에 따라

최종적으로 CPU를 할당받는 결과가 달라질 수 있습니다.

 

프로세스가 선점적(preemptive)이라면 운영체제에서 CPU를 할당하면 다시 제어권을 차지하게 되지만,

비선점적인(nonpreemptive) 경우에는 준비(ready) 상태에 놓인 프로세스가 하나도 없을 때에만 CPU를 차지할 수 있습니다


참고자료 

김완규, 고정국, 진광윤, 최신형, 하성권, 허덕행 | 핵심 운영 체제론 | 두양사

https://en.wikipedia.org/wiki/Machine-check_exception

 

Machine-check exception - Wikipedia

From Wikipedia, the free encyclopedia Type of computer hardware error A machine check exception (MCE) is a type of computer error that occurs when a problem involving the computer's hardware is detected. With most mass-market personal computers, an MCE ind

en.wikipedia.org