프로세스(컴퓨팅)

Process (computing)

컴퓨팅에서 프로세스는 하나 이상의 스레드에 의해 실행되는 컴퓨터 프로그램인스턴스입니다.프로그램 코드와 액티비티가 포함되어 있습니다.운영체제(OS)에 따라서는 명령어를 [1][2]동시에 실행하는 여러 실행 스레드로 프로세스가 구성될 수 있습니다.

컴퓨터 프로그램은 일반적으로 디스크의 파일에 저장된 수동적인 명령 모음이지만 프로세스는 디스크에서 메모리로 로드된 후 이러한 명령을 실행하는 것입니다.예를 들어, 같은 프로그램의 여러 인스턴스를 열면 여러 프로세스가 실행되는 경우가 많습니다.

멀티태스킹은 여러 프로세스가 프로세서(CPU) 및 기타 시스템 리소스를 공유할 수 있도록 하는 방법입니다.각 CPU(코어)는 한 번에1개의 태스크를 실행합니다.단, 멀티태스킹에서는 각 프로세서가 각 태스크가 완료될 때까지 기다리지 않고 실행 중인 태스크 간에 전환할 수 있습니다(프리엠프션).운영체제 구현에 따라서는 태스크가 시작되어 입출력 조작의 완료를 기다릴 때, 태스크가 CPU를 자발적으로 산출할 때, 하드웨어 인터럽트 시 및 운영체제 스케줄러가 프로세스의 CPU 시간 중 공정 점유율이 만료되었다고 판단했을 때(예를 들어 완전히 공정한 Sche에 의해) 스위치를 실행할 수 있습니다.Linux 커널의 duler).

멀티태스킹의 일반적인 형태는 CPU의 시분할에 의해 제공되며, 이는 사용자의 프로세스와 스레드, 심지어 독립된 커널 태스크의 실행을 인터리빙하는 방법입니다.단, 후자의 기능은 Linux 등의 프리엠프티브 커널에서만 가능합니다.프리엠프션은 CPU 바인딩 프로세스에 대해 높은 우선순위가 주어지는 인터랙티브 프로세스에 중요한 부작용이 있기 때문에 사용자는 키를 누르기만 하면 또는 마우스를 이동해도 컴퓨팅 리소스가 즉시 할당됩니다.게다가 비디오나 음악 재생과 같은 애플리케이션에는, 어느 정도의 리얼 타임 우선 순위가 주어져, 우선 순위가 낮은 다른 프로세스보다 우선합니다.시분할 시스템에서는 컨텍스트스위치가 빠르게 실행되므로 여러 프로세스가 동일한 프로세서 상에서 동시에 실행되는 것처럼 보입니다.이러한 여러 프로세스의 동시 실행을 동시성이라고 합니다.

보안과 신뢰성을 위해 대부분의 최신 운영체제는 독립 프로세스 간의 직접 통신을 방지하고 프로세스 간 통신 기능을 엄격하게 조정 및 제어합니다.

표현

htop에 표시되는 프로세스 목록
A process table as displayed by KDE System Guard
KDE 시스템 가드에 표시되는 프로세스 테이블

일반적으로 컴퓨터 시스템 프로세스는 다음 리소스로 구성됩니다(또는 소유한다고 합니다).

  • 프로그램과 관련된 실행 가능한 기계 코드의 이미지.
  • 메모리(일반적으로 가상 메모리의 일부 영역).실행 가능한 코드, 프로세스 고유의 데이터(입출력), 콜스택(액티브서브루틴 및/또는 기타 이벤트를 추적하는 것) 및 런타임 중에 생성된 중간 계산 데이터를 유지하는 을 포함합니다.
  • 프로세스에 할당된 리소스(파일 기술자(유닉스 용어) 또는 핸들(윈도우즈)과 데이터 원본 및 싱크 등)의 운영 체제 기술자.
  • 프로세스 소유자 및 프로세스의 권한 세트(허용 가능한 작업)와 같은 보안 속성.
  • 레지스터내용이나 물리 메모리 어드레싱등의 프로세서 상태(콘텍스트).일반적으로 이 상태는 프로세스가 실행될 때 컴퓨터 레지스터에 저장되고 그렇지 않을 [1]경우 메모리에 저장됩니다.

운영체제는 프로세스 제어 블록이라고 불리는 데이터 구조에서 활성 프로세스에 대한 대부분의 정보를 보유하고 있습니다.리소스의 서브셋(통상은 적어도 프로세서 상태)은 스레드 또는 하위 프로세스를 지원하는 운영 체제의 각 프로세스 스레드에 관련지을 수 있습니다.

운영체제는 프로세스를 분리하여 필요한 리소스를 할당하므로 서로 간섭하거나 시스템 장애(예: 교착 상태 또는 스레싱)를 일으킬 가능성이 낮아집니다.운영체제는 프로세스가 안전하고 예측 가능한 방식으로 상호작용할 수 있도록 프로세스 간 통신 메커니즘을 제공할 수도 있습니다.

멀티태스킹 및 프로세스 관리

멀티태스킹 운영체제는 여러 프로세스가 동시에 실행되는 것처럼 보이기 위해 프로세스 간에 전환될 수 있습니다(즉 병렬로 실행됨). 실제로는 한 번에 하나의 프로세스만 실행할 수 있습니다(CPU에 여러 개의 코어가 없는 한 멀티스레딩 또는 기타 유사한 기술을 사용할 [a]수 있습니다).

일반적으로 단일 프로세스를 메인 프로그램과 연결하고 하위 프로세스를 비동기 서브루틴처럼 작동하는 스핀오프 병렬 프로세스와 연결합니다.프로세스는 자원을 소유한다고 불리며, 그 중 하나의 자원(메모리 내)이 그 프로그램의 이미지이다.단, 멀티프로세서 시스템에서는 많은 프로세스가 메모리 내의 동일한 위치에서 동일한 재진입 프로그램을 실행하거나 공유할 수 있지만 각 프로세스는 프로그램 자체의 이미지를 소유하는 것으로 알려져 있습니다.

임베디드 운영체제에서는 프로세스를 "태스크"라고 부릅니다."프로세스"(또는 작업)의 의미는 "시간을 소비하는 것"이며 [b]"공간을 소비하는 것"인 "메모리"가 아닙니다.

위의 설명은 운영체제에 의해 관리되는 프로세스와 프로세스 계산에 의해 정의된 프로세스 모두에 적용됩니다.

프로세스가 대기해야 하는 것을 요구하면 차단됩니다.프로세스가 차단 상태일 경우 디스크로 스왑할 수 있지만 프로세스 메모리 영역이 항상 메인 메모리에 있지 않고 실제로 디스크에 있을 수 있는 가상 메모리 시스템에서는 이 작업이 투명합니다.액티브한 프로세스/태스크(실행 프로그램)의 일부라도 최근 사용되지 않은 경우에는 디스크로 스왑할 수 있습니다.실행 중인 프로그램의 모든 부분과 그 데이터는 관련 프로세스가 활성화되기 위해 물리 메모리에 있을 필요는 없습니다.

프로세스 상태

상태 다이어그램에 표시되는 다양한 프로세스 상태. 상태 간 전환 가능성을 나타내는 화살표가 표시됩니다.

멀티태스킹 요구 프로세스를 특정 상태로 만들 수 있는 운영 체제 커널입니다.이러한 상태의 이름은 표준화되어 있지 않지만 기능은 [1]비슷합니다.

  • 우선, 2차 기억 장치(하드 디스크 드라이브, CD-ROM 등)로부터 메인 메모리에 로드하는 것으로, 프로세스를 「작성」한다.그 후 프로세스 스케줄러는 "대기" 상태를 할당합니다.
  • 프로세스가 「대기중」인 동안, 스케줄러이른바 콘텍스트스위치를 실행할 때까지 대기합니다.콘텍스트 스위치는 프로세스를 프로세서에 로드하고 상태를 "실행 중"으로 변경합니다.이전에 "실행 중"이었던 프로세스는 "대기 중" 상태로 저장됩니다.
  • "실행 중" 상태의 프로세스가 리소스를 기다려야 하는 경우(예: 사용자 입력 또는 파일이 열릴 때까지 대기)에는 "차단됨" 상태가 할당됩니다.프로세스가 더 이상 대기할 필요가 없어지면 프로세스 상태는 다시 "대기 중"으로 변경됩니다.
  • 프로세스가 실행이 완료되거나 운영 체제에 의해 종료되면 프로세스가 더 이상 필요하지 않습니다.프로세스가 즉시 삭제되거나 "종료" 상태로 이동합니다.떼어내면, 메인 [1][3]메모리로부터 떼어낼 때까지 대기합니다.

프로세스 간 커뮤니케이션

프로세스가 서로 통신할 필요가 있는 경우 주소 공간의 일부를 공유하거나 다른 형태의 프로세스 간 통신(IPC)을 사용해야 합니다.예를 들어 셸 파이프라인에서는 첫 번째 프로세스의 출력이 두 번째 프로세스에 전달될 필요가 있습니다.또 다른 예는 동시에 실행할 수 있는 협력적이지만 부분적으로 독립된 프로세스로 분해할 수 있는 태스크입니다(즉, 동시성 또는 진정한 병렬성을 사용).후자 모델은 동시 실행의 특정 케이스이며, 다음과 같습니다.실행 준비가 된 모든 프로세스에 충분한 CPU 코어를 사용할 수 있는 경우 언제든지 실현 가능)

2개 이상의 프로세스가 다른 운영체제(OS)를 실행하는 서로 다른 머신에서 실행될 수도 있습니다.따라서 통신과 동기화를 위한 메커니즘(분산 컴퓨팅을 위한 통신 프로토콜이라고 함)이 필요합니다(예를 들어 메시지 패싱 인터페이스(MPI라고도 함).

역사

1960년대 초까지 컴퓨터 제어 소프트웨어는 모니터 제어 소프트웨어(예: IBSYS)에서 이그제큐티브 제어 소프트웨어로 발전했습니다.시간이 지남에 따라 컴퓨터 속도는 빨라졌지만 컴퓨터 시간은 여전히 저렴하지도 않고 충분히 활용되지도 않았습니다. 이러한 환경에서는 멀티프로그래밍이 가능하고 필요하게 되었습니다.멀티프로그래밍은 여러 프로그램이 동시에 실행된다는 것을 의미합니다.처음에는 단일 프로세서 컴퓨터 아키텍처의 결과로 여러 개의 프로그램이 단일 프로세서 상에서 실행되었으며, 이들은 희박하고 제한된 하드웨어 리소스를 공유했습니다. 결과적으로 동시 실행은 직렬화되었습니다.복수의 프로세서를 탑재한 이후의 시스템에서는, 복수의 프로그램이 동시에 실행되는 일이 있습니다.

프로그램은 프로세서의 일련의 명령으로 구성됩니다.1개의 프로세서에서 실행할 수 있는 명령어는 1개뿐입니다.한 번에 여러 프로그램을 실행하는 것은 불가능합니다.프로그램에 지연이 큰 입력 장치 등의 리소스가 필요하거나 프린터에 출력을 보내는 등의 느린 작업이 시작될 수 있습니다.이로 인해, CPU가 「아이돌」(미사용)이 됩니다.프로세서를 항상 비지 상태로 유지하기 위해 이러한 프로그램의 실행은 중지되고 운영체제는 다른 프로그램을 실행하도록 프로세서를 전환합니다.사용자에게 프로그램은 동시에 실행되는 것으로 보입니다(따라서 "병렬"이라는 용어).

그 직후, "프로그램"의 개념은 "실행 프로그램과 그 맥락"의 개념으로 확장되었다.프로세스의 개념이 생겨났고, 이것은 재진입 코드의 발명으로 필요하게 되었다.스레드는 조금 늦게 왔습니다.그러나 시분할, 컴퓨터 네트워크, 다중 CPU 공유 메모리 컴퓨터와 같은 개념이 등장하면서 기존의 "멀티프로그래밍"은 진정한 멀티태스킹, 멀티프로세싱, 나중에는 멀티스레딩으로 대체되었습니다.

「 」를 참조해 주세요.

메모들

  1. ^ 일부 최신 CPU는 멀티코어 구성에서 두 개 이상의 독립 프로세서를 결합하여 여러 프로세스를 동시에 실행할 수 있습니다.동시 멀티스레딩(인텔의 하이퍼스레딩 테크놀로지에 사용)이라고 불리는 또 다른 기술은 여러 프로세스 또는 스레드의 동시 실행을 시뮬레이트할 수 있습니다.
  2. ^ 태스크와 프로세스는 기본적으로 동일한 엔티티를 참조합니다.그리고 용어의 역사는 조금 다르지만 동의어로 쓰이게 되었습니다.오늘날 프로세스라는 용어는 "멀티태스킹"을 지칭하는 경우를 제외하고 일반적으로 태스크보다 선호됩니다. 왜냐하면 "멀티프로세서"라는 대체 용어는 멀티프로세서(CPU가 2개 이상 있는 컴퓨터)와 혼동하기 쉽기 때문입니다.

레퍼런스

  1. ^ a b c d Silberschatz, Abraham; Cagne, Greg; Galvin, Peter Baer (2004). "Chapter 4. Processes". Operating system concepts with Java (Sixth ed.). John Wiley & Sons. ISBN 0-471-48905-0.
  2. ^ Vahalia, Uresh (1996). "Chapter 2. The Process and the Kernel". UNIX Internals: The New Frontiers. Prentice-Hall Inc. ISBN 0-13-101908-2.
  3. ^ Stallings, William (2005). Operating Systems: internals and design principles (5th ed.). Prentice Hall. ISBN 0-13-127837-1. (특히 제3장 제3.2절 "공정 상태" (그림 3.9 "정지 상태에서의 프로세스 상태 전이" 포함)

추가 정보

외부 링크