{{위키데이터 속성 추적}}
{{OS}}
'''프로세스 관리'''는 현대의 [[운영 체제]] 가운데 중요한 부분이다. 운영 체제는 자원을 [[프로세스]]에 할당하고, 프로세스가 정보를 공유하고 교환할 수 있게 하며, 각 프로세스 자원을 다른 프로세스로부터 보호하며, 프로세스 간 동기화를 가능하게 해야 한다. 이러한 요구를 충족하기 위하여 운영 체제는 각 프로세스를 위한 [[자료 구조]]를 관리하며, 이로써 프로세스의 상태와 자원 소유권을 기술하고 운영 체제가 각 프로세스를 제어할 수 있다.

== 다중 프로그래밍 ==
현대의 수많은 운영 체제에서 하나 이상의 [[컴퓨터 프로그램|프로그램]]이 동시에 메모리에 적재된다. 이를테면 한 명 이상의 사용자가 같은 프로그램을 실행할 수도 있으며 여기서 각 사용자는 메모리에 적재된 프로그램의 개별 복사본을 점유한다. 어떠한 프로그램의 경우 메모리에 적재된 복사본 하나만을 생성할 수 있지만 여러 명의 사용자들이 이에 대한 공유 접근을 하여 각 사용자가 동일한 프로그램 코드를 실행할 수 있다. 이러한 프로그램을 [[재진입성]]이 있다고 한다. [[중앙 처리 장치|프로세서]]는 즉시 한 프로그램으로부터 하나의 명령만을 수행할 수 있지만, 여러 개의 프로세스들은 나머지 프로세스들이 일시적으로 유휴 상태에 있는 동안 각 프로세스를 프로세서에 할당함으로써 한 동안 보유할 수 있다. 한꺼번에가 아닌 한 동안 수행하는 수많은 프로세스들은 동시 실행(concurrent execution, 여러 개의 프로그램을 하나의 컴퓨터에 실행하는 것을 뜻함)이라고 부른다.[http://www.thefreedictionary.com/concurrent+execution]

[[다중 프로그래밍]] 또는 [[멀티태스킹]] 운영 체제는 동시에 여러 프로세스를 실행하는 시스템을 말한다. 다중 프로그래밍의 요구 사항은 프로세서가 특정 기간 동안 각 프로세스에 할당되고 적절한 순간에 할당이 해제되는 것이다. 프로세서가 프로세스 실행 도중 할당이 해제되면 가능한 쉽게 나중에라도 다시 시작할 수 있도록 다음과 같은 방식을 수행한다.
# 프로세스는 [[시스템 호출]]을 일으킨다. (소프트웨어 [[인터럽트]]라고도 한다) 이를테면 입출력 요청은 하드 디스크의 파일 접근을 요청한다.
# 하드웨어 [[인터럽트]]를 일으킨다. 이를테면 컴퓨터 자판에 키를 누르거나 타이머가 소진된다. ([[선점 스케줄링]]에 이용)

프로세스 하나를 멈추고 다른 프로세스를 시작 및 다시 시작하는 것을 [[문맥 교환]]이라고 한다. 현대의 수많은 운영 체제에서 프로세스는 수많은 하위 프로세스를 포함할 수 있는데 이를 [[스레드]]라고 한다. 스레드는 하부 프로세스라고 생각할 수 있는데, 이는 하나의 프로세스 코드 안에 있는 개별적이고도 독립적인 실행 시퀀스이다. 스레드는 분산 및 [[클라이언트 서버 시스템|클라이언트-서버]] 시스템 설계에서, 또 [[병렬 컴퓨팅|다중 프로세서]] 시스템에서 실행하는 소프트웨어에서 중요성이 커지고 있다.

== 프로세스 작성 ==
운영 체제는 프로세스를 만들기 위하여 몇 가지 일을 한다. 하나의 응용 프로그램만 실행하는 매우 단순한 시스템(이를테면 전자레인지의 제어부)은 시스템이 구동할 때 필요한 모든 프로세스가 있을 것이다. 그러나 일반 목적의 시스템에서는 동작 중에 필요하면 프로세스를 만들고 끝내야 하는데, 이러한 방법이 몇 가지 있다. 프로세스를 만들게 하는 네 개의 주된 이벤트가 있다.
* 시스템 초기화
* 프로세스를 실행함으로써 프로세스 작성 시스템 호출 실행
* 새로운 프로세스를 만들어달라는 사용자의 요청
* 일괄 처리 시작
운영 체제가 시동될 때 일반적으로 몇 개의 프로세스가 만들어진다. 이 가운데 포그라운드 프로세스<ref>다중 프로그래밍 및 프로세서 등과 같이 동시에 몇 개의 프로그램이 실행될 때 우선 순위가 높은 프로그램이 실행되는 상태</ref>는 사용자와 서로 소통하며 사용자를 위해 일을 수행한다. 백그라운드 프로세스는 특정 사용자와 연계하지 않지만 일부 특정한 기능을 수행한다.

== 프로세스 끝내기 ==
프로세스를 끝내는 데에는 몇 가지 까닭이 있다.
* 일괄 처리의 중단 명령 수행
* 사용자 로그 오프
* [[프로세스]]의 서비스 끝내기 요청 실행
* 오류 및 실패 조건
* 정상적인 완료
* 시간 제한 초과
* 메모리 사용 불가
* 바운드 위반
* 보호 오류 (이를테면 읽기 전용 파일에 쓰기를 할 경우)
* [[산술]] 오류 (이를테면 0으로 나눌 때)
* 시간 실행 초과
* [[입출력]] 실패
* 유효하지 않은 명령
* 특별한 권한이 있는 명령
* [[데이터]] 오용
* [[운영 체제]] 중재
* 부모 프로세스 종료
* 부모 프로세스의 요청

== 프로세스 서술 및 제어 ==
각 시스템 [[프로세스]]는 [[프로세스 제어 블록]](PCB, [[리눅스]]에서는 프로세스 서술자)로 불리는 자료 구조로 표현하며 이 PCB는 여행자의 여권과 같은 역할을 수행한다. PCB는 다음과 같은 기본 정보를 포함하고 있다:
* 프로세스의 위치
* 프로세스의 이동 경로
* 프로세스의 수행 정도
* 프로세스의 저장 위치
* 프로세스의 자원 점유량
: '''프로세스 동일성''': 각 프로세스는 서술자에 연계된 포인터와 사용자의 동일성을 그대로 고유하게 부여받는다.
: '''프로세스 상황''': READY, RUNNING, BLOCKED, READY SUSPEND, BLOCKED SUSPEND 가운데 프로세스의 현재 상황을 인지한다. (자세한 정보는 [[프로세스]]에 있음)
: '''프로세스 상태''': 작업의 현재 상태를 알려 주는 모든 정보를 포함한다.
: '''측정''': 성능 측정과 소요 목적에 주로 쓰이는 정보를 포함한다. 어떠한 종류의 자원이 프로세스가 사용하고 있는지, 또 얼마나 오래 사용하고 있는지를 알려 준다.

== 같이 보기 ==
* [[프로세스]]

== 각주 ==
<references />

== 출처 ==
* Operating System incorporating Windows and UNIX, Colin Ritchie. {{ISBN|0826464165}}
* Operating Systems, William Stallings, Prentice Hall, (4th Edition, 2000)
* Multiprogramming, Process Description and Control
* Operating Systems – A Modern Perspective, Gary Nutt, Addison Wesley, (2nd Edition, 2001).
* Process Management Models, Scheduling, UNIX System V Release 4:
* Modern Operating Systems, Andrew Tannenbaum, Prentice Hall, (2nd Edition, 2001).
* Operating System Concepts, Silberschatz, Galvin & Gagne, John Wiley & Sons, (6th Edition, 2003).

{{운영 체제}}

{{전거 통제}}

[[분류:운영체제 기술]]