프로세스 관리(컴퓨팅)

Process management (computing)

과정은 실행 중인 프로그램이다.현대 운영 체제(OS)의 필수 구성 요소.OS는 프로세스에 자원을 할당하고, 프로세스를 통해 정보를 공유하고 교환하며, 각 프로세스의 자원을 다른 프로세스로부터 보호하고, 프로세스 간의 동기화를 가능하게 해야 한다.이러한 요건을 충족시키기 위해 OS는 각 프로세스에 대한 데이터 구조를 유지해야 하며, 이는 해당 프로세스의 상태와 리소스 소유권을 기술하고 OS가 각 프로세스에 대한 제어권을 행사할 수 있도록 한다.

멀티프로그래밍

어떤 현대의 운영체제에서나 동시에 메모리에 로드된 프로그램의 인스턴스 하나 이상이 있을 수 있다.예를 들어, 둘 이상의 사용자가 동일한 프로그램을 실행할 수 있으며, 각 사용자는 메모리에 로드된 프로그램의 개별 복사본을 가질 수 있다.일부 프로그램에서는 하나의 복사본을 메모리에 로드하는 것이 가능한 반면, 여러 명의 사용자들은 각각 동일한 프로그램 코드를 실행할 수 있도록 그것에 대한 공유 액세스를 가지고 있다.이런 프로그램은 재입고라고 한다.프로세서는 어느 순간에 한 프로그램에서 한 가지 명령만 실행할 수 있지만, 각 프로세스를 프로세서에 할당하여 일정 기간 동안 여러 프로세스를 지속할 수 있으며, 나머지는 일시적으로 비활성 상태가 된다.동시에 실행하는 대신 일정 기간 동안 실행되는 여러 프로세스를 동시 실행이라고 한다.

멀티프로그래밍 또는 멀티태스킹 OS는 많은 프로세스를 동시에 실행하는 시스템이다.멀티프로그래밍을 하려면 프로세서를 각 프로세스에 일정 기간 할당하고 적절한 순간에 할당을 해제해야 한다.프로세스 실행 중에 프로세서가 할당 해제된 경우 가능한 한 나중에 쉽게 재시작할 수 있도록 해야 한다.

OS가 할당 해제 또는 할당을 수행하기 위해 프로그램을 실행하는 동안 OS가 프로세서에 대한 제어권을 되찾을 수 있는 두 가지 방법이 있다.

  1. 이 프로세스는 시스템 호출(소프트웨어 인터럽트라고도 함)을 발생시킨다. 예를 들어 하드 디스크의 파일에 대한 액세스를 요청하는 I/O 요청이 발생한다.
  2. 예를 들어 키보드의 키를 눌렀거나 타이머가 소진(사전멀티태스킹에서 사용)되는 등 하드웨어 인터럽트가 발생한다.

한 프로세스를 중지하고 다른 프로세스를 시작(또는 재시작)하는 것을 컨텍스트 스위치 또는 컨텍스트 변경이라고 한다.많은 현대 운영 체제에서 프로세스는 많은 하위 프로세스로 구성될 수 있다.이것은 실의 개념을 소개한다.스레드는 하위 프로세스, 즉 하나의 프로세스 코드 내에서 독립된 실행 시퀀스로 볼 수 있다.쓰레드는 분산형 및 클라이언트-서버 시스템의 설계와 다중 프로세서 시스템에서 실행되는 소프트웨어에서 점점 더 중요해지고 있다.

멀티프로그래밍이 효율성을 높이는 방법

대부분의 컴퓨터 프로그램과 관련된 프로세스에서 공통적으로 관찰되는 특징은 CPU 사이클과 I/O 사이클을 번갈아 사용한다는 것이다.CPU 사이클에 필요한 시간 중 일부에 대해 프로세스가 실행 중임. 즉, CPU를 점유하고 있음. I/O 사이클에 필요한 시간 동안 프로세스는 프로세서를 사용하지 않음.대신 입출력 수행을 기다리거나 실제로 입출력 수행을 하고 있다.이것의 예로는 디스크의 파일을 읽거나 쓰는 것이 있다.멀티프로그래밍이 등장하기 전에는 컴퓨터가 단일 사용자 시스템으로 운영되었다.그러한 시스템의 사용자들은 컴퓨터가 단일 사용자에게 할당되는 대부분의 시간 동안 프로세서가 유휴 상태라는 것을 빠르게 인식하게 되었다. 예를 들어 사용자가 정보를 입력하거나 프로그램을 디버깅할 때 말이다.컴퓨터 과학자들은 한 프로세스가 입출력 대기 중일 때마다 다른 프로세스가 프로세서를 사용하게 함으로써 기계의 전반적인 성능이 향상될 수 있다고 보았다.비프로그래밍 시스템에서, N 사용자개별1 실행 시간 t, t2, ..., tN 프로그램을 실행한다면, 모든 N 사용자의 N 프로세스(일관적으로)를 서비스하는 총 시간 tuni 다음과 같을 것이다.

tuni = t1 + t2 + t + ... + tN.

그러나 각 프로세스는 CPU 사이클과 I/O 사이클을 모두 소비하기 때문에 각 프로세스가 CPU를 실제로 사용하는 시간은 프로세스의 전체 실행 시간의 극히 일부분이다.프로세스 I:

ti (processor)ti (execution)

어디에

ti (processor) CPU를 사용하는 데 걸리는 시간 과정이다.
ti (execution) 프로세스의 총 실행 시간이며, 즉, 프로세스가 완료될 때까지 CPU 사이클과 I/O 사이클이 수행(실행)되는 시간이다.

실제로, 일반적으로 N 프로세스가 사용하는 모든 프로세서 시간의 합은 프로세스 중 하나를 실행하는 데 걸리는 시간의 작은 부분을 거의 초과하지 않는다.

따라서, 프로그래밍되지 않은 시스템에서 프로세서는 상당 시간 동안 유휴 상태로 있었다.이러한 비효율성을 극복하기 위해 현재 Linux, UNIX, Microsoft Windows와 같은 현대적인 운영 체제에서 멀티프로그래밍이 구현되고 있다.이를 통해 프로세서는 X가 실행의 I/O 단계에 관여할 때마다 한 프로세스 X에서 다른 프로세스 Y로 전환할 수 있다.처리 시간이 단일 작업의 런타임보다 훨씬 짧기 때문에, 멀티프로그래밍 시스템으로 모든 N 사용자를 서비스하는 총 시간을 대략 다음과 같이 줄일 수 있다.

tmulti = max(t1, t2, ..., tN)

프로세스 생성

운영체제는 프로세스를 만드는 몇 가지 방법이 필요하다.단일 애플리케이션(예: 전자레인지의 컨트롤러)만 실행하도록 설계된 매우 간단한 시스템에서는 시스템이 등장할 때 필요한 모든 프로세스가 존재할 수 있다.그러나 범용 시스템에서는 운용 중 필요에 따라 프로세스를 생성·종료하는 어떤 방법이 필요하다.
프로세스가 생성되는 주요 이벤트는 다음과 같은 네 가지다.

  • 시스템 초기화.
  • 실행 중인 프로세스에 의한 프로세스 생성 시스템 호출의 실행.
  • 새 프로세스를 생성하기 위한 사용자 요청.
  • 배치 작업의 시작.

운영 체제를 부팅하면 일반적으로 몇 가지 프로세스가 생성된다.이 중 일부는 (인간) 사용자와 상호 작용하여 작업을 수행하는 전경 과정이다.다른 것은 백그라운드 프로세스로서, 특정 사용자와 연관되지 않고, 그 대신 특정한 기능을 가진다.예를 들어, 한 가지 배경 과정은 들어오는 이메일을 받아들이도록 설계될 수 있다. 하루의 대부분을 자다가 들어오는 이메일이 도착할 때 갑자기 활기를 띠게 된다.다른 백그라운드 프로세스는 기계에 호스팅된 웹 페이지에 대한 수신 요청을 수락하도록 설계될 수 있으며, 요청이 해당 요청을 처리하기 위해 도착할 때 깨어난다.

UNIX와 리눅스의 프로세스 생성은 포크()나 클론() 시스템 호출을 통해 이루어진다.프로세스 생성에 관련된 몇 가지 단계가 있다.첫 번째 단계는 상위 프로세스가 프로세스를 만들 수 있는 충분한 권한을 가지고 있는지 여부를 확인하는 것이다.유효성 검사에 성공하면 상위 프로세스가 거의 완전히 복사되고 고유한 프로세스 ID, 상위 프로세스 및 사용자 공간에 대한 변경 사항만 변경된다.각각의 새로운 프로세스에는 고유의 사용자 공간이 있다.[1]

Windows에서 프로세스 생성은 CreateProcessA() 시스템 호출을 통해 이루어진다.새로운 프로세스는 호출 프로세스의 보안 컨텍스트에서 실행되지만, 그렇지 않으면 호출 프로세스와 독립적으로 실행된다.새로운 프로세스가 실행되는 보안 컨텍스트를 변경하는 방법이 존재한다.새로운 프로세스에는 에 액세스할 수 있는 식별자가 할당된다.호출 스레드를 새로 생성된 프로세스와 동기화하는 기능이 제공된다.[2][3]

공정종료

프로세스 종료에는 여러 가지 이유가 있다.

  • 배치 작업 문제 중지 명령
  • 사용자 로그오프
  • 프로세스가 서비스 요청을 실행하여 종료
  • 오류 및 고장 상태
  • 정상완료
  • 제한 시간 초과
  • 사용할 수 없는 메모리
  • 경계 위반(예: 10-Element 어레이의 (존재하지 않음) 11번째 요소에 대한 액세스 시도
  • 보호 오류(예: 읽기 전용 파일에 쓰기 시도)
  • 산술 오차(예: 0으로 나누기 시도)
  • 오버런 시간(예: 프로세스에 대해 지정된 최대 대기 시간)
  • I/O 실패
  • 잘못된 명령(예: 프로세스가 데이터(텍스트)를 실행하려고 할 때)
  • 특권적 지시
  • 데이터 오용
  • 운영 체제 개입(예: 교착 상태 해결)
  • 부모가 종료되어 자식 프로세스가 종료됨(캐스캐딩 종료)
  • 상위 요청

2-상태 프로세스 관리 모델

운영체제의 주된 책임은 프로세스의 실행을 제어하는 것이다.여기에는 프로세스에 대한 리소스의 실행 및 할당을 위한 인터리빙 패턴을 결정하는 것이 포함된다.OS 설계의 한 부분은 우리가 각 프로세스가 보여주기를 원하는 행동을 설명하는 것이다.가장 단순한 모델은 프로세스가 프로세서에 의해 실행되거나 실행되지 않는다는 사실에 기초한다.따라서 공정이 RUNING 또는 NOT RUNDING의 두 상태 중 하나로 간주될 수 있다.운영 체제가 새로운 프로세스를 만들 때, 이 프로세스는 처음에 실행 중이 아님으로 레이블이 지정되고 실행 중이 아님 상태로 시스템의 대기열에 배치된다.그러면 프로세스(또는 프로세스의 일부)는 메인 메모리에 존재하며, 대기열에서 실행될 기회를 기다린다.일정 시간이 지나면 현재 RUNING 프로세스가 중단되고 RUNING 상태에서 NOT RUNING 상태로 이동하여 프로세서를 다른 프로세스에 사용할 수 있게 된다.그런 다음 OS의 디스패치 부분은 NOT RUNDING 프로세스의 대기열에서 프로세서로 전송할 대기 프로세스 중 하나를 선택한다.선택한 프로세스는 NOT RUNING 상태에서 RUNING 상태로 다시 라벨링되며, 새로운 프로세스인 경우 실행이 시작되거나, 더 일찍 중단된 프로세스인 경우 실행이 재개된다.

이 모델에서 OS의 몇 가지 설계 요소를 식별할 수 있다.

  • 각 프로세스를 대표하고 추적해야 하는 필요성.
  • 프로세스의 상태.
  • 비실행 프로세스의 대기열

3국 프로세스 관리 모델

2-상태 프로세스 관리 모델은 운영 체제에 대해 완벽하게 유효한 설계지만, BLOCKED 상태가 없다는 것은 활성 프로세스가 CPU 사이클에서 I/O 사이클로 변경될 때 프로세서가 유휴 상태로 있다는 것을 의미한다.이 설계는 프로세서를 효율적으로 사용하지 않는다.3국 프로세스 관리 모델은 BLOCKED state라는 새로운 상태를 도입함으로써 이러한 문제를 극복하기 위해 고안되었다.이 상태는 I/O 이벤트가 발생하기를 기다리는 모든 프로세스를 설명한다.이 경우 I/O 이벤트는 일부 장치의 사용이나 다른 프로세스의 신호를 의미할 수 있다.이 모델의 세 가지 상태는 다음과 같다.

  • 실행: 현재 실행 중인 프로세스.
  • 준비: 대기열에 있으며 기회가 주어졌을 때 실행할 준비가 된 프로세스.
  • 차단됨: I/O 작업 완료와 같은 일부 이벤트가 발생할 때까지 실행할 수 없는 프로세스.

어느 순간, 과정은 세 개의 주 중 한 곳에만 있다.단일 프로세서 컴퓨터의 경우, 한 번에 하나의 프로세스만 실행 상태에 있을 수 있다.READY 상태와 BLOCKED 상태에는 많은 프로세스가 있을 수 있으며, 이러한 각 상태는 프로세스를 위한 관련 대기열을 가질 것이다.

시스템에 진입하는 프로세스는 초기에 READY 상태로 들어가야 하며, 프로세스는 READY 상태를 통해서만 RUNING 상태로 들어갈 수 있다.프로세스는 일반적으로 시스템을 RUNING 상태에서 유지한다.세 상태 각각에 대해 이 과정은 메인 메모리의 공간을 차지한다.한 상태에서 다른 상태로 전환되는 이유는 대부분 명백할 수 있지만, 일부는 그렇게 명확하지 않을 수도 있다.

  • RUNING READY 이 전환의 가장 일반적인 이유는 실행 프로세스가 중단 없는 실행을 위한 최대 허용 시간에 도달했기 때문이다. 즉, 시간 초과가 발생한다.다른 이유로는 Low Level Scheduler에 사용되는 스케줄링 정책에 의해 결정된 우선순위 수준의 부과와 높은 우선순위 프로세스가 READY 상태로 도달하는 것이 있다.
  • RUNGING BLOCKED 프로세스가 대기해야 할 사항을 요청하면 BLOCKED 상태로 전환된다.OS에 대한 요청은 대개 시스템 호출의 형태(즉, 실행 중인 프로세스에서 OS 코드의 일부인 함수로의 호출)로 이루어진다.예를 들어 디스크의 파일 요청 또는 메모리의 코드 또는 데이터 섹션을 디스크의 파일로 저장.

프로세스 설명 및 제어

시스템의 각 프로세스는 여행자의 여권과 동일한 기능을 수행하는 리눅스에서의 프로세스 제어 블록(PCB) 또는 프로세스 설명자(Process Descriptor)라는 데이터 구조로 표현된다.PCB에는 다음과 같은 작업에 대한 기본 정보가 포함되어 있다.

  • 뭐야?
  • 어디로 가는가
  • 처리 완료량
  • 저장된 위치
  • 리소스 사용 시 "스팬트"가 있는 양

프로세스 식별:각 프로세스는 사용자의 식별과 이를 설명자에 연결하는 포인터로 고유하게 식별된다.

프로세스 상태:이것은 프로세스의 현재 상태를 나타낸다. 준비, 실행, 차단, 차단, 준비 일시 중단, 차단됨.

프로세스 상태:여기에는 작업의 현재 상태를 나타내는 데 필요한 모든 정보가 수록되어 있다.

회계:이것은 주로 과금 목적과 성능 측정에 사용되는 정보를 포함한다.이것은 프로세스가 사용한 자원의 종류와 기간을 나타낸다.

프로세서 모드

현대 프로세서는 프로세서에 있는 프로그램의 실행 능력을 정의하기 위해 모드 비트를 통합한다.이 비트는 커널 모드 또는 사용자 모드로 설정할 수 있다.커널 모드는 일반적으로 감독자 모드, 모니터 모드 또는 링 0이라고도 한다.

커널 모드에서는 프로세서가 하드웨어 레퍼토리의 모든 명령을 실행할 수 있지만 사용자 모드에서는 명령의 일부만 실행할 수 있다.커널 모드에서만 실행할 수 있는 명령을 커널, 권한 있는 명령 또는 보호되는 명령이라고 하여 사용자 모드 명령과 구별한다.를 들어, I/O 명령은 특권이 있다.따라서 애플리케이션 프로그램이 사용자 모드에서 실행되면 자체 I/O를 수행할 수 없다.대신 OS에 대신 I/O 수행을 요청해야 한다.

컴퓨터 아키텍처는 프로세서가 커널 모드 대 사용자 모드에 있을 때 사용할 메모리 영역을 정의하기 위해 모드 비트를 논리적으로 확장할 수 있다.모드 비트가 커널 모드로 설정된 경우 프로세서에서 실행되는 프로세스는 메모리의 커널 또는 사용자 파티션에 액세스할 수 있다.그러나 사용자 모드가 설정된 경우 프로세스는 사용자 메모리 공간만 참조할 수 있다.우리는 종종 두 종류의 메모리 사용자 공간과 시스템 공간(또는 커널, 감독자 또는 보호된 공간)을 언급한다.일반적으로 모드 비트는 운영 체제의 보호 권한을 확장한다.모드 비트는 사용자 모드 트랩 지침에 의해 설정되며, 감독자 호출 명령이라고도 한다.이 지침은 모드 비트를 설정하고 시스템 공간의 고정된 위치로 분기한다.시스템 공간에 시스템 코드만 로드되므로 트랩을 통해 시스템 코드만 호출할 수 있다.OS가 감독자 호출을 완료하면, 모드 비트를 반환 전에 사용자 모드로 재설정한다.

커널 시스템 개념

OS의 정확한 작동에 중요한 부분은 커널 모드에서 실행되는 반면, 다른 소프트웨어(일반적인 시스템 소프트웨어 등)와 모든 응용 프로그램은 사용자 모드에서 실행된다.이러한 근본적인 구별은 대개 운영 체제와 다른 시스템 소프트웨어 사이의 반박할 수 없는 구별이다.커널 감시자 상태에서 실행되는 시스템의 일부를 운영체제커널, 즉 핵이라고 한다.커널은 신뢰할 수 있는 소프트웨어로 작동하는데, 즉, 커널이 설계되고 구현되었을 때, 사용자 공간에서 실행되는 신뢰할 수 없는 소프트웨어의 조치를 통해 은밀히 변경할 수 없는 보호 메커니즘을 구현하기 위한 것이었다.OS에 대한 확장은 사용자 모드에서 실행되므로 OS는 OS의 정확한 작동을 위해 시스템 소프트웨어의 해당 부분의 정확성에 의존하지 않는다.따라서 OS에 통합될 모든 기능에 대한 기본적인 설계 결정은 커널에서 구현될 필요가 있느냐 하는 것이다.커널에서 구현되면 커널(감독자) 공간에서 실행되며 커널의 다른 부분에 접근할 수 있다.그것은 또한 커널의 다른 부분에 의해 신뢰할 수 있는 소프트웨어가 될 것이다. 기능이 사용자 모드에서 실행되도록 구현되면 커널 데이터 구조에 대한 액세스가 없게 된다.그러나, 이 기능을 실행하기 위해서는 일반적으로 매우 제한적인 노력이 필요하다는 것이 장점이다.커널이 구현된 기능은 구현하기 쉬울 수 있지만, 통화 시 트랩 메커니즘과 인증은 대개 상대적으로 비용이 많이 든다.커널 코드는 빠르게 실행되지만 실제 통화에서는 큰 성능 오버헤드가 발생한다.이것은 미묘하지만 중요한 점이다.

시스템 서비스 요청 중

사용자 모드에서 실행되는 프로그램이 커널의 서비스를 요청할 수 있는 두 가지 기법이 있다.

운영 체제는 이 두 시설 중 하나 또는 다른 시설로 설계되지만 둘 다 설계되지는 않는다.첫째, 사용자 프로세스가 특정 대상 시스템 기능을 실행하기를 원한다고 가정한다.시스템 호출 접근방식의 경우 사용자 프로세스는 트랩 명령을 사용한다.OS는 각 실제 시스템 호출에 해당하는 이름을 가진 사용자 기능의 라이브러리를 제공한다.이러한 각각의 스텁 기능에는 OS 기능에 대한 트랩이 포함되어 있다.애플리케이션 프로그램이 스텁을 호출하면 CPU커널 모드로 전환한 다음(OS 테이블을 통해 간접적으로) 호출할 기능의 진입점으로 분기하는 트랩 명령을 실행한다.기능이 완료되면 프로세서를 사용자 모드로 전환한 다음 사용자 프로세스에 제어 권한을 반환하여 정상적인 절차 복귀를 시뮬레이션한다.

메시지 전달 접근방식에서 사용자 프로세스는 원하는 서비스를 설명하는 메시지를 구성한다.그런 다음 신뢰할 수 있는 OS 프로세스에 메시지를 전달하기 위해 신뢰할 수 있는 전송 기능을 사용한다.송신함수는 트랩과 같은 목적을 제공한다. 즉, 메시지를 주의 깊게 체크하고 프로세서를 커널 모드로 전환한 다음, 대상 함수를 구현하는 프로세스로 메시지를 전달한다.한편, 사용자 프로세스는 메시지 수신 작업과 함께 서비스 요청의 결과를 기다린다.OS 프로세스가 작업을 완료하면 사용자 프로세스에 메시지를 다시 전송한다.

두 접근방식의 구별은 애플리케이션 프로세스 동작으로부터 OS 동작의 상대적 독립성 및 그에 따른 성능에 관한 중요한 결과를 가져온다.경험의 법칙으로서, 시스템 호출 인터페이스에 기반한 운영 체제는 구별되는 프로세스 간에 메시지를 교환해야 하는 것보다 더 효율적으로 만들어질 수 있다.시스템 호출을 트랩 명령으로 실행해야 함에도 불구하고, 즉, 트랩을 수행하는 데 상대적으로 비용이 많이 들더라도 프로세스 멀티플렉싱, 메시지 형성 및 메시지 복사 관련 비용이 일반적으로 높은 메시지 전달 접근법보다 효율적이다.시스템 호출 접근방식은 OS 프로세스가 반드시 있을 필요는 없다는 흥미로운 속성을 가지고 있다.대신 커널 코드를 실행할 때 사용자 모드에서 실행 중인 프로세스가 커널 모드로 변경되고 OS 호출에서 돌아오면 사용자 모드로 다시 전환된다.반면에 OS가 별도의 프로세스의 집합으로 설계되어 있다면, 커널이 단순히 커널모드에서 사용자 프로세스에 의해 실행되는 기능의 집합인 경우보다 특수한 상황에서 기계를 제어하도록 설계하는 것이 보통 더 쉽다.심지어 절차 기반의 운영 체제도 일반적으로 기계의 스케줄링 및 네트워크 처리와 같은 다른 방법으로 유휴 상태인 상황을 처리하기 위해 최소한 몇 개의 시스템 프로세스(유닉스에서는 데몬이라고 함)를 포함할 필요가 있다고 생각한다.

참고 항목

참조

원천

  • Windows와 UNIX를 통합한 운영 체제, Colin Ritchie. ISBN0-8264-6416-5
  • 운영 체제, William Stallings, 프렌티스 홀, (제4판, 2000년)
  • 다중 프로그래밍, 프로세스 설명 및 제어
  • 운영 체제 – A Modern Perspective, Gary Nutt, Addison Wesley, 2001년 2월호
  • 프로세스 관리 모델, 스케줄링, UNIX 시스템 V 릴리스 4:
  • 모던 오퍼레이팅 시스템, 프렌티스 홀의 앤드류 타넨바움(2판, 2001년)
  • 운영 체제 개념, Silverschatz & Galvin & Gagne (http://codex.cs.yale.edu/avi/os-book/OS9/slide-dir/), John Wiley & Sons, (6th Edition, 2003년)