CS/운영체제

2. 프로세스 기술과 제어 (1)

안정민 2024. 1. 16. 09:12

[2-1] 프로세스란

 

1. 배경지식

-컴퓨터 플랫폼은 처리기, 주기억장치, 입출력 모듈, 입출력 모듈, 타이머, 디스크 드라이브 등과 같은 하드웨어 자원들의 집합으로 구성된다

-컴퓨터 응용들은 어떤 업무를 수행하기 위하여 개발되며 전형적으로 응용들은 외부 세계로부터 입력을 받아들여 처리한 다음 출력한다

-주어진 하드웨어 플랫폼 상에 직접 응용들을 작성하는 것은 비효율적이다.

-운영체제는 응용들에게 편리한 기능, 풍부하고 안전하고 일관성 있는 인터페이스를 제공하기 위해 개발되었다. 운영체제는 응용과 컴퓨터 하드웨어 사이에 존재하는 소프트웨어 계층으로 응용과 유틸리티를 지원한다.

-운영체제는 응용들에 의해 요청되고 접근될 수 있는 자원(주기억장치, 네트워크 인터페이스, 파일 시스템 등) 들에 대한 단일화된 추상적 표현을 제공한다고 볼 수 있다, 운영체제가 응용들이 사용하도록 자원 추상체를 생성하게 되면, 그 사용도 관리해야한다.

 

2. 운영체제가 응용 수행을 위해 지원하는 것

-여러 응용들이 자원들을 이용할 수 있게 한다.

-여러 응용들 사이에 물리적인 처리기를 교체할당하여 모든 응용들이 병행 진행되는 것처럼 보이게 한다

-처리기와 입출력 장치들이 효율적으로 사용될 수 있게 한다.

-모든 현대 운영체제에서는 한 응용의 수행이 하나 이상의 프로세스들의 존재에 대응하는 모델에 의존한다.

 

3. 프로세스 및 프로세스 블록

-프로세스의 여러 정의 (프로세스 = 프로그램 코드 + 데이터 집합)

(1) 수행 중인 프로그램

(2)컴퓨터 상에 수행 중인 프로그램의 인스턴스

(3) 처리기에 할당되어 수행될 수 있는 개체

(4)명령들의 순차 수행, 현재 상태, 연계된 시스템 자원들의 집합 등에 의해 특징지어지는 활성화 단위

 

프로세스는 식별자, 상태, 우선순위, PC, 메모리 포인터, 문맥데이터, 입출력 상태 정보, 어카운팅 정보 등에 의해 유일하게 식별이 될 수 있다.

식별 정보들은 전형적으로 프로세스 제어블록이라는 자료구조에 저장되며 프로세스 제어블록은 운영체제에 의해 생성되어 관리된다.

 

 

 

[2-2] 프로세스 상태

 

1. 궤적

-프로그램을 수행하기 위해 그 프로그램에 대한 프로세스 또는 태스크가 생성 -> 처리기 관점에서는 처리기는 PC 레지스터 값에 의해 결정된 순서에 따라 명령어들을 수행한다.

-프로그램 계수기는 시간이 흐름에 따라 다른 프로세스들을 표현하는 다른 프로그램 내의 코드를 가리킬 수 있다.

-개별 프로그램 관점에서 프로그램의 수행은 자신에 속한 일련의 명령어들을 수행한다.

 

-궤적 : 개별 프로세스 행위의 특성을 표현하는 일련의 명령어 리스트 (trace)

-디스패처 : 처리기를 한 프로세스로부터 다른 프로레스로 교체해주는 작은 프로그램 (dispatcher)

 

2. 2-상태 프로세스 모델 (two-state)

-운영체제의 주업무는 프로세스의 수행을 제어하는 것

-프로세스의 수행을 제어하는 것이란 프로세스의 수행을 인터리빙하는 패턴 결정, 일과 자원을 프로세스에게 할당 등

 

[프로세스 제어를 위한 운영체제 설계]

(1) 프로세스가 보여주어야 할 행태를 기술

-프로세스는 수행 중이거나 비수행 중 한 상태에 있게 된다

-운영체제는 새로운 프로세스를 생성할 때 그 프로세스에 대한 프로세스 제어블록을 생성하고 그 프로세스를 시스템 내에 비수행 상태로 초기화 시킨다

-이제 프로세스는 존재하게 되며 운영체제에 알려져 자신이 수행될 기회를 기다린다.

-때때로 현재 수행 중인 프로세스가 인터럽트 당하며 운영체제의 디스패처가 수행할 새로운 프로세스를 선택

-인터럽트 당한 이전 프로세스는 수행 상태에서 비수행 상태로 전이되며 다른 프로세스들 중 이어서 처리되기로 정해진 하나의 프로세스의 수행상태가 변화되게 된다 (비수행 -> 수행)

 

-각 프로세스는 운영체제가 자신의 상태를 추적할 수 있도록 어떤식이로든 표현되어야 한다.

-즉, 프로세싀의 현재상태와 메모리 내에서의 위치 등 여러 정보 필요 -> 프로세스 제어블록

 

**큐잉 다이어그램 (<-> 연결리스트로 구성 가능, 각 블록은 프로세스를 나타냄)

: 현재 수행되지 않는 프로세스들을 일종의 큐에 저장, 큐의 각 항목은 특정 프로세스의 제어블록을 가리키는 포인터 저장

: 이를 이용하여 디스패처가 동작하는 방식 설명 가능

: 수행 중 인터럽트 당한 프로세스는 대기 프로세스들의 큐로 옮겨짐

: 프로세스가 수행 완료되었거나 수행 도중 취소되었다면 프로세스는 폐기 (discard)되어 시스템을 떠난다

: 어떤 경우든 디스패처는 다음에 수행할 프로세스를 큐에서 선택한다.

 

-모든 프로세스들이 항상 수행할 준비가 되어있다면 큐잉 규칙이 효과적일 것

-큐는 선입선출 리스트이고, 처리기는 라운드로빈 형식으로 처리한다 (큐에 있는 각 프로세스는 일정한 시간 동안 수행이 된 후 블록되지 않는 한 그 큐로 복귀한다)

** 라운드 로빈 ) 스케줄링(scheduling)의 한 방법이며, 멀티태스킹에서 태스크 실행 순서를 사이클릭(cyclic)으로 실행하는 방법 등에 사용되고 있다. 예를 들면 A, B, C의 3개의 태스크가 있을 경우 A→B →C→A→B→C→A→ 와 같이 전환된다. 태스크에 우선도가 주어졌을 경우에는 태스크를 우선도에 의해서 그룹 분할하고, 각 그룹 내에서 라운드 로빈이 실행된다. 이것에 의해 그룹 내의 각 태스크는 평등하게 CPU 시간이 할당된다.

 

 

3. 프로세스의 생성과 종료 (creation and termination)

(1) 프로세스 생성

-프로세스 생성을 위한 필요 요건 : 프로세스 관리를 위한 자료구조 제작, 프로세스에게 주기억장치 내부의 주소공간 할당 

 

-프로세스 생성 이유

: 새로운 일괄처리 작업 ) 보통 테이프나 디스크를 통해 운영체제에게 일괄처리 작업 제어 스트리이 제공

: 대화형 로그온 ) 사용자가 터미널에서 시스템을 로그온한다

: 서비스를 제공하기 위해 운영체제가 생성 ) 사용자 대기를 최소화하기 위한 기능

: 기존 프로세스에 의한 생성, spawn ) 모듈화를 위해서나 병렬성 활용을 위해

-처음 두 개의 이유에 대해서는 운영체제가 새로운 프로세스 생성을 책임진다

-운영체제가 생성한 프로세스는 그 작업이 완려되는 시간과 상관없이 진행이 가능하다

-세네번째의 경우 -> 운영체제가 어떤 프로세스의 명시적인 요청에 의해 새로운 프로세스를 형성하는 경우

-하나의 프로레스가 다른 프로세스 생성 시 전자는 부모 프로세스, 후자는 자식 프로세스라고 함

-일반적으로 관련 프로세스들은 서로 통신하며 협력할 필요가 있음

 

(2) 프로세스 종료

정상 완료 프로세스가 수행 완료를 알리는 운영체제 서비스 호출 수행
시간 한도 초과 프로세스가 명시된 전체 시간 한도보다 더 오래 수행이 된 경우
메모리 부족 프로세스가 시스템이 제공할 수 있는 메모리보다 더 많은 용량 요청
경계범위 위반 프로세스가 접근이 허용되지 않는 메모리 위치에 접근을 시도
보호 오류 파일을 잘못 사용하려는 경우
프로세스가 사용 금지된 자원이나 파일 이용 혹은 읽기 전용 파일에 쓰기를 시도
산술 오류 프로세스가 0으로 나누기와 같은 금지된 계산을 하거나, 하드웨어가 수용할 수 있는 것보다 큰 숫자의 저장을 시도한다
시간초과 프로세스가 어떤 이벤트 발생을 명시된 최대 시간을 초과하여 기다림
입출력 실패 명시된 최대 횟수 만큼의 시도 후에도 읽기 또는 쓰기가 실패한 경우  
원하는 파일을 찾을 수 없거나 테이프에서 결함이 있는 부분을 만났을 때
혹은
유효하지 않는 연산을 시도한 경우
라인 프린터로부터의 읽기

-> 입출력 실패가 발생하게 된다
무효 명령어 프로세스가 존재하지 않는 명령어의 수행을 시도하는 경우
특권 명령어 프로세스가 운영체제만 사용하도록 예약된 명령어를 사용하려고 시도한다
데이터 오용 데이터 일부의 타입이 잘못되었거나 초기화 하지 않음
오퍼레이터나 운영체제 간섭 어떤 이유로 인하여 오퍼레이터 또는 운영체제가 프로세스 종료
부모 종료 부모 프로세스가 종료될 때 운영체제는 그 프로세스가 생성한 모든 자식 프로세스를 자동으로 종료시킬 수 있다
부모 요청 부모 프로세스는 일반적으로 자신이 생성한 임의의 자식 프로세스를 종료시킬 수 있는 권한을 가진다

 

-어떤 컴퓨터 시스템은 프로세스가 수행 완료를 표시할 수 있는 수간을 제공해야함 -> halt 중지 명령이나 명시적으로 운영체제 서비스 호출

-halt 명령어 : 프로세스가 완료되었다는 사실을 운영체제에게 통보하기 위해 인터럽트 발생 시킴

-대화식 응용의 경우 사용자 행동에 의해 수행 완료 표시 -> 사용자의 로그 오프 혹은 터미널 오프

 

4. 5-상태 모델 ( A five-state model

큐의 맨 끝에서부터 프로세스를 선택하지 않아야 하고, 리스트를 살펴보고

(블록되지 않았음 ) && (큐에 가장 오래 머문 프로세스) 의 조건을 만족하는 프로세스를 찾아야 한다.

-따라서 이를 위해서는 비수행 상태를 준비(Ready) 상태와 블록 (Blocked) 상태로 분할하는 것이 좋다

 

-5-상태 모델의 다섯 가지 상태 (state)

(1)수행 (Running)

:현재 수행 중인 프로세스

(2)준비 (Ready)

:기회가 주어지면 수행될 준비가 되어있는 프로세스

(3)블록 / 대기 (Block/Waiting)

:입출력 연산 완료 등과 같은 어떤 이벤트가 발생할 때까지 수행될 수 없는 프로세스

(4)생성(New)

:지금 막 생성되었지만 운영체제에 의해 수행 가능한 프로세스 풀로의 진입이 아직 허용되지 않은 프로세스

:전형적으로, 새로운 프로세스는 자신의 프로레스 제어 블록이 생성되었다 할지라도 그 당시까지 주기억장치에 적재되지 않는다

(5)종료(Exit)

:프로세스 수행이 중지(halt)되거나, 어떤 이유로 중단(abort)되었기 때문에 운영체제에 의해 수행가능 프로세스 풀에서 방출된 프로세스

 

-운영체제의 새 프로세스 정의

(1) 시스템 관리에 필요한 몇 가지 처리 (housekeeping chores)

: 해당 프로세스의 식별자 부여, 프로세스 관리에 필요한 테이블들이 할당 및 구축된다

: 이는 운영체제가 프로세스 생성에 필요한 조치는 하였으나 프로세스 수행에 필요한 조치는 취하지 않았음을 의미

: ex) 성능 상의 이유나 주기억장치의 제약으로 인해 시스템 내에 존재할 수 있는 프로세스의 수를 운영체제가 제한하는 경우

: 프로세스가 생성 상태에 있을 때 운영체제에 의해 필요한 프로세스 관련 정보는 주기억장치의 제어 테이블들에 유지, 프로세스 자체는 주기억장치에 존재하지 않게 된다 

:즉, 수행할 프로그램 코드는 주기억장치에 없으며 프로그램 관련 데이터를 위한 공간도 할당되지 않았음 -> 디스크 저장장치에 남아있음

 

 

-운영체제의 프로세스 퇴장 단계

(1) 완료지점에 도달하거나 회복 불능 오류로 인해 수행 중단, 적정 권한을 가진 다른 프로세스가 프로세스의 수행을 중단 -> 프로세스 종료

:프로세스가 종료되면 종료 상태가 된다

:이 시점에서 종료된 프로세스는 더이상 수행될 수 없지만 그 작업과 관련된 테이블과 다른 정보들은 운영체제에 의해 잠시 보존

: 이렇게 함으로써 보조 또는 지원 프로그램이 제공된 어떤 필요 정보를 가지고 갈 수 있는 시간을 제공한다

:ex) 프로세스 이력 (history) 기록

 

-프로세스 상태 전이를 일으키는 이벤트 종류

널 (NULL)  -> 생성 어떤 프로그램을 수행하기 위해 새로운 프로세스가 생성된다
이러한 사건들은 위에 나열되어있는 생성 이유들 중 하나에 의해 발생된다.
생성 -> 준비 운영체제가 새로 생성된 프로세스를 받아들일 준비가 되었을 때 그 프로세스를 생성 상태에서 준비상태로 전이

대부분의 시스템은 존재하는 프로세스의 수에 제한을 두거나 프로세스에게 할당되는 가상메모리의 양을 제한
이렇게 제한하는 이유-> 활성화된 프로세스가 너무 많아져 시스템의 성능을 떨어지는 것을 방지하기 위해서
준비 -> 수행  수행할 프로세스를 선택할 때가 되면 운영체제는 준비상태에 있는 프로세스 중 하나를 선택
이는 스케줄러 또는 디스페처의 임무
수행 -> 종료 현재 수행 중인 프로세스가 작업을 완료하거나 수행이 중단되면, 운영체제는 그 프로세스를 종료시킴
종료 원인 표 참고
수행 -> 준비 이 전이 발생 가장 일반적인 이유 : 수행 중이던 프로세스가 자신에게 허용된 최대 처리기 시간을 모두 사용

모든 멀티 프로그래밍 운영체제는 가상적으로 이런 종류의 시간 정책을 적용
이 전이를 유발하는 몇몇 다른 요인들도 있으나 그것들이 모두 운영체제에 구현이 되지는 않는다

이는 운영체제가 서로 다른 프로세스에 서로 다른 수준의 우선순위를 부여하는 경우 특히 중요하다

선점 (preemptive) : 특정 프로세스가 중앙 처리장치를 효율적으로 사용할 수 없는 시점에 이를 때마다 중앙 처리 장치의 사용권이 다른 프로세스로 옮겨지는 방식으로, 높은 우선순위의 프로세스들이 급하게 실행되어야 하는 경우에 유용하다

-> 선점 예시
프로세스 A는 현재 수행 중인 프로세스, 프로세스 B는 A보다 높은 우선순위 프로세스나 블록된 상태
프로세스 B가 원하는 이벤트가 발생하여 블록상태에서 해제가 된 경우, 운영체제는 프로세스 A를 인터럽트하여 B를 수행시킬 수 있다
이 경우 운영체제가 프로세스 A를 선점하였다고 한다.

-> 선점 예시 2
어떤 프로세서 처리기의 제어를 자발적으로 양도 및 해제할 수 있는 경우는 주기적으로 어떤 과금 및 관리 합수를 수행하는 백그라운드 프로세스가 그 예시이다.
수행 -> 블록 프로세스가 자원을 요구했는데 기다려야 한다면, 블록 상태로 전이된다.

프로세스는 보통 시스템 서비스 호출 (수행 중인 프로그램이 운영체제 코드의 일부인 프로시저 호출)을 통해 운영체제에게 어떤 서비스 요청한다
프로세스는 운영체제가 즉시 수행할 수 없는 서비스를 요청할 수 있다.
또는 프로세스가 입출력 동작과 같이 프로세스가 수행을 재개하기 전에 완료되어야 하는 행동을 시작할 수 있다

프로세스들이 서로 통신하는 경우 한 프로세스가 다른 프로세스에 의해 제공된 데이터를 기다릴 때, 또는 다른 프로세스로부터 메시지를 기다릴 때 블록될 수도 있다.
블록 -> 준비 블록 상태에 있는 프로세스는 자신이 기다리고 있던 이벤트가 발생하게 되면 준비 상태로 전이된다
준비 -> 종료 이 전이는 상태 다이어그램에 확실하게 나타나 있지 않음
몇몇 시스템에서는 부모 프로세스가 자식 프로세스를 언제라도 종료시킬 수 있음
또한 부모 프로세스가 종료되면, 그 부모 프로세스와 관련된 모든 자식 프로세스들이 종료될 수 있음
블록 -> 종료 준비 -> 종료와 같은 맥락임

 

- 5-상태 모델의 경우에는 두 개의 큐, 즉 준비큐(Ready Queue) 및  블록큐(Blocked Queue)를 이용하여 큐잉 규칙을 구현

: 시스템이 한 프로세스를 받아들이면 그 프로세스는 준비큐에 놓여짐

: 다른 프로세스를 수행할 시간이 되면 운영체제는 준비큐에 있는 프로세스들 중 하나를 선택

: 우선순위 정책을 사용하지 않는다면 큐는 단순한 선입선출 큐, 사용한다면 우선순위큐?

 

** 프로세스의 기본상태 ) 준비, 수행, 블록

 

5. 보류된 프로세스 (Suspended Process)

(1) 스와핑(Swapping)의 필요성

- 기본 상태 이외의 다른 새로운 상태들을 추가시켜야 할 필요가 있을 때가 존재

- (가상 메모리를 사용하지 않는 시스템) 수행될 프로세스들은 주기억장치에 완전히 적재되어야 하기 때문에 모든 큐에 있는 모든 프로세스들이 주기억장치에 상주해야한다

-입출력 동작 시간이 계산 시간보다 느려서, 단일 프로그래밍 시스템에서는 처리기는 대부분의 시간동안 유휴

-처리기는 한 프로세스가 대기 상태가 되면 다른 프로세스로 이동할 수 있다

-하지만 처리기가 입출력 장치보다는 훨씬 빠르기 때문에 일반적으로 메모리에 있는 모든 프로세스들은 입출력이 완료되기를 기다링 것

-멀티프로그래밍 환경이어도 사정은 비슷함 -> 처리기는 대부분의 시간동안 유휴 (문제제기)

 

-(해결방법 1)주기억 장치를 확장하여 문제를 해결하게 되면 발생하게 되는 문제점

: 주기억장치의 바이트 당 가격은 낮을지라도 기가바이트의 용량을 추가하려 한다면 비용 문제 발생 

: 메모리 가격이 하락하는 속도만큼 프로그램 메모리 요구량이 증가하고 있기 때문에, 대용량 메모리를 사용하더라도 프로세스 수가 증가하는 것이 아니라 프로세스 크기가 늘어날 뿐이다.

 

-(해결방법 2) 스와핑 Swapping

: 프로세스의 일부나 전체를 주기억장치로부터 디스크로 옮겨놓는 방법이다.

: 주기억장치에 있는 프로세스들 중에서 하나를 디스크로 내보내고 보류큐(suspended queue)에 넣는다.

: 이 큐에는 주기억장치로부터 잠시 내쫓겨진 또는 보류된 프로세스들이 존재한다.

: 그 다음, 운영체제는 보류큐에 있는 다른 프로세스를 주기억장치로 들여오거나 새로운 프로세스 요청을 받아들인 뒤, 새로이 도착한 프로세스를 가지고 수행을 계속한다.

 

:스와핑은 입출력 연산이기 때문에 문제 해결에 도움을 주기는 커녕 문제를 더 악화시킬 수 있음

:그러나 디스크 입출력은 시스템에서 (테이프나 프린터 입출력에 비해) 가장 빠른 입출력 작업이기 때문에 일반적으로 스와핑은 성능 향상

 

-스와핑을 사용하려면 또 다른 한 상태인 보류상태 (Suspended state)가 프로세스 행위 모델에 추가되어야 한다.

-주기억장치에 있는 모든 프로세스들이 블록 상태라면 운영 체제는 한 프로세스를 보류상태로 만들고 디스크를 전송하여 주기억장치에 여유공간을 만들어 다른 블록상태가 아닌 프로세스를 불러들이는 데 사용될 수 있다. 

 

-운영체제가 스와핑 아웃(Swapping-out) 연산을 수행 시 주기억장치로 가져올 프로세스 선택 방법

-(선택방법 1) 새로이 생성된 프로세스를 받아들이거나

-(선택방법 2) 이전에 보류되었던 프로세스를 가지고 옴

-시스템 전체 부하를 증가시키지 않고서 프로세스에게 서비스를 제공해 주기 위해서는 이전에 보류되었던 프로세스를 가지고 오는 것이 더 낫다.

 

- 보류되어 보조기억장치에 적재된 모든 프로세스는 블록이 된 상태로 적재, 따라서 적재 이후 상태 변화 가능성이 있음

- 따라서 프로세스가 보조기억장치에 있지만 다시 주기억장치로 호출되었을 때 즉시 수행될 수 있는지 없는지의 여부에 따라 보조기억장치에 적재된 보류 프로세스들도 두 가지 상태로 나뉠 수 있다.

 

-준비 : 프로세스가 주 기억장치에 있고 수행될 수 있다

-블록 : 프로세스가 주기억장치에 있고 사건을 기다리고 있음

-준비/보류 : 프로세스가 보조기억장치에 있고 사건을 기다리고 있다

-블록/보류 : 프로세스가 보조기억장치에 있지만, 주기억장치에 적재되면 즉시 수행될 수 있다

 

블록 -> 블록/보류 준비된 프로세스가 하나도 없다면, 적어도 하나의 블록된 프로세스를 스왑아웃 시켜, 블록되지 않은 다른 프로세스를 불러들일 공간을 마련해야한다.

준비상태의 프로세스가 있더라고 이러한 전이가 발생될 수 있음.
특히 현재 수행 중인 프로세스나 디스패치될 준비가 된 프로세스가 적절한 성능을 유지하기 위해서 더 많은 기억장치를 요구하는 경우 블록된 프로세스는 보류될 것이다.
블록/보류 -> 준비/보류 블록/보류 상태에 있는 프로세스의 경우 기다리고 있던 이벤트가 발생하면 준비/보류상태로 전이
이를 위해 운영체제는 보류된 프로세스의 상태 정보에 접근할 수 있어야 한다.
준비/보류 -> 준비 준비된 프로세스들이 주기억장치에 없으면, 운영체제는 수행을 계속하기 위해서 다른 프로세스들을 반입
준비/보류 상태에 있는 프로세스가 준비 상태에 있는 프로세스들보다 더 높은 우선순위를 가지고 있을 수 있다
그러한 경우 운영체제 설계자는 스와핑을 최소화하기보다는 높은 우선순위를 가진 프로세스를 가져오는 것이 더 중요하다고 지시할 가능성이 있다.
준비 -> 준비/보류 일반적으로 운영체제는 준비된 프로세스보다는 블록된 프로세스를 보류하려고 함
준비된 프로세스는 이제 곧 수행될 수 있지만 블록된 프로세스는 주기억장치를 차지하고 있더라도 바로 수행될 수 없기 때문

하지만 주기억장치에 충분히 큰 공간을 만들 수 있는 유일한 방법이라면 준비 상태의 프로세스를 보류할 필요가 있다
또한 블록된 프로세스가 곧 준비상태로 될 경우, 운영체제는 높은 우선순위의 블록된 프로세스보다는 낮은 우선순위의 준비상태의 프로세스를 보류할 수도 있다.
생성 -> 준비/보류
생성 -> 준비
새로운 프로세스가 생성될 때 이 프로세스는 준비큐나 준비/보류 큐에 추가될 수 있다
어떤 경우든 운영체제는 프로세스 제어 블록을 생성하고 그 프로세스에게 주소 공간을 할당해야만 한다
운영체제는 이와 같은 프로세스 관련 작업들을 초기에 수행하여, 블록되지 않은 많은 프로세스들의 풀 (pool)을 유지하려 할 것이다
   
   
   

 

 

6. 보류의 다른 용도

-보류 상태 = 주기억장치에 있지 않은 프로세스

-주기억장치에 존재하지 않는 프로세스는 사건을 기다리고 있건, 또는 그렇지 않건 간에 즉시 수행될 수 없다

 

-보류된 프로세스의 특성 정리

(1) 즉시 수행될 수 없음

(2) 사건을 기다리고 있을 수도 있고 그렇지 않을 수도 있음

: 사건을 기다리고 있을 경우 해당 블록 상태의 조건은 보류 상태의 조건과는 독립적이므로, 그 블록 상태를 해제시킬 사건이 발생하더라도 수행될 수 없다

(3) 어떤 에이전트 (프로세스 자체나 부모 프로세스, 운영체제)가 프로세스의 수행을 막기 위해 그 상태를 보류 상태로 바꾸었다

(4) 에이전트가 명시적으로 해제 명령을 내릴 때까지 보류 상태에서 벗어날 수 없다.

 

-프로세스가 보류되는 이유

스와핑 수행할 주비가 된 프로세스를 불러 들여오기 위해 운영체제는 충분한 주기억장치를 해제할 필요가 있다
운영체제의 다른 이유 운영체제는 후면 프로세스, 유틸리티 프로세스, 또는 문제를 야기한다고 의심되는 프로세스를 보류시킬 수 있다
대화식 사용자의 요청 사용자는 디버깅을 위해서 또는 자원 사용과 관련해서 프로그램의 수행을 보류시킬 수 있다
타이밍 주기적으로 수행되는 프로세스 (과금 프로세스나 시스템 모니터링 프로세스)가 다음주기까지 대기할 때 사용될 수 있다
부모 프로세스 요청 부모 프로세스는 보류된 자식 프로세스를 검사하거나 수정하기 위해, 또는 다양한 자손들의 활동을 조정하기 위해 자식 프로세스의 수행을 보류시킬 수 있다.