본문 바로가기
리눅스

(번역) Process (computing)

by 다움위키 2024. 12. 25.

원문 보기: https://dawoum.duckdns.org/wiki/Process_(computing)

 

Original article: w:Process (computing)

컴퓨팅에서, 프로세스는 하나 이상의 쓰레드에 의해 실행되는 컴퓨터 프로그램인스턴스입니다. 많은 다른 프로세스 모델이 있으며, 그 중 일부는 가볍지만, 거의 모든 프로세스 (심지어 전체 가상 기계)는 프로그램 코드, 할당된 시스템 자원, 물리적 및 논리적 접근 권한, 및 실행 활동을 시작, 제어 및 조정하기 위한 데이터 구조로 구성된 운영 시스템 (OS) 프로세스에 기반을 두고 있습니다. OS에 따라, 프로세스는 동시에 명령을 실행하는 여러 실행 쓰레드로 구성될 수 있습니다.

컴퓨터 프로그램은 전형적으로 디스크의 파일에 저장된 수동적인 명령어의 모음이고, 반면에 프로세스는 디스크에서 메모리로 적재된 후 그것들의 명령어를 실행하는 것입니다. 여러 프로세스가 같은 프로그램과 결합될 수 있습니다; 예를 들어, 같은 프로그램의 여러 인스턴스를 열면 종종 두 개 이상의 프로세스가 실행됩니다.

멀티태스킹은 여러 프로세스가 프로세서 (CPU)와 다른 시스템 자원을 공유할 수 있도록 하는 방법입니다. 각 CPU (코어)는 한 번에 하나의 프로세스를 실행합니다. 어쨌든, 멀티태스킹을 사용하면 각 프로세서가 각 임무가 완료될 때까지 기다리지 않고도 실행 중인 작업 사이에 전환할 수 있습니다 (선점). 운영 시스템 구현에 따라, 임무가 시작되어 입력/출력 연산이 완료될 때까지 기다릴 때, 임무가 자발적으로 CPU를 양보할 때, 하드웨어 인터럽트 시, 운영 시스템 스케줄러가 프로세스가 공정한 CPU 시간 공유를 만료했다고 판단할 때 (예를 들어, 리눅스 커널완전 공정 스케줄러) 전환이 수행될 수 있습니다.

멀티태스킹의 공통적인 형태는 CPU의 시간-분할에 의해 제공되는데, 이는 사용자 프로세스와 쓰레드, 및 심지어 독립적인 커널 임무의 실행을 인터리브하는 방법입니다 – 후자의 기능은 리눅스와 같은 선점형 커널에서만 실행 가능합니다. 선점은 CPU 바운드 프로세스에 비해 더 높은 우선순위가 부여되는 대화형 프로세스에 중요한 부작용이 있고, 따라서 사용자는 키를 누르거나 마우스를 움직일 때 컴퓨팅 자원을 즉시 할당받습니다. 게다가, 비디오 재생과 음악 재생과 같은 응용 프로그램은 일종의 실시간 우선순위가 부여되어 다른 낮은 우선순위 프로세스를 선점합니다. 시간-분할 시스템에서, 컨텍스트 전환은 빠르게 수행되며, 이는 여러 프로세스가 같은 프로세서에서 동시에 실행되는 것처럼 보입니다. 여러 프로세스의 이러한 동시 실행을 동시성이라고 합니다.

보안과 안정성을 위해, 대부분의 현대 운영 시스템은 독립된 프로세스 사이의 직접적인 통신을 방지하고, 엄격하게 중재되고 제어되는 프로세스-사이 통신을 제공합니다.

Representation

일반적으로, 컴퓨터 시스템 프로세스는 다음과 같은 자원으로 구성됩니다 (또는 이를 소유한다고 합니다):

  • 프로그램과 결합된 실행 가능한 기계 코드이미지.
  • 메모리 (전형적으로 가상 메모리의 일부 영역); 이는 실행 코드, 프로세스-별 데이터 (입력 및 출력), 호출 스택 (활성 서브루틴 및/또는 기타 이벤트의 추적을 유지하기 위해), 및 런타임 동안 생성된 중간 계산 데이터를 보관하는 을 포함합니다.
  • 파일 설명자 (유닉스 용어)나 핸들 (Windows)과 같은 프로세스에 할당된 자원의 운영 시스템 설명자, 및 데이터 소스와 싱크.
  • 프로세스 소유자와 프로세스의 권한의 집합 (허용-가능 연산)과 같은 보안 속성.
  • 레지스터의 컨텐츠와 물리적 메모리 주소 지정과 같은 프로세서 상태 (컨텍스트). 상태는 전형적으로 프로세스가 실행 중일 때는 컴퓨터 레지스터에 저장되고 그렇지 않을 때는 메모리에 저장됩니다.

운영 시스템은 프로세스 제어 블록이라는 데이터 구조에서 활성 프로세스에 대한 이 정보의 대부분을 보관합니다. 전형적으로 적어도 프로세서 상태인 자원의 임의의 부분집합은 쓰레드나 자식 프로세스를 지원하는 운영 시스템에서 각 프로세스의 쓰레드와 결합될 수 있습니다.

운영 시스템은 프로세스를 분리하게 유지하고 그것들이 필요한 자원을 할당하므로, 그것들은 서로 간섭하고 시스템 장애 (예를 들어, 교착 상태 또는 쓰래싱)를 일으킬 가능성이 줄어듭니다. 운영 시스템은 프로세스-사이 통신을 위한 메커니즘을 제공하여 프로세스가 안전하고 예측 가능한 방식으로 상호 작용할 수 있도록 할 수도 있습니다.

Multitasking and process management

Main article: Process management (computing)

멀티태스킹 운영 시스템은 여러 프로세스가 동시에 (즉, 병렬로) 실행되는 것처럼 보이도록 프로세스 사이를 전환할 수 있지만, 실제로는 단일 CPU에서 한 번에 하나의 프로세스만 실행할 수 있습니다 (CPU에 여러 개의 코어가 있는 한, 멀티스레딩이나 다른 유사한 기술을 사용할 수 있습니다).

단일 프로세스를 주요 프로그램과 결합시키고, 자식 프로세스를 비동기 서브루틴처럼 동작하는 임의의 스핀오프, 병렬 프로세스와 결합시키는 것이 알반적입니다. 프로세스는 자원을 소유한다고 하며, 그 중 프로그램 이미지 (메모리에 있음)가 그러한 리소스 중 하나입니다. 어쨌든, 멀티프로세싱 시스템에서, 많은 프로세스가 메모리의 같은 위치에서 같은 재진입 프로그램에서 실행되거나 공유할 수 있지만, 각 프로세스는 그 프로그램의 이미지를 소유한다고 합니다.

프로세스는 종종 임베디드 운영 시스템에서 "임무"라고 불립니다. "프로세스" (또는 임무)의 의미는 "공간을 차지하는 것"인 "메모리"와 대조적으로 "시간을 차지하는 것"입니다.

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

만약 프로세스가 기다려야 하는 어떤 것을 요청하면, 그것은 차단될 것입니다. 프로세스가 차단된 상태에 있을 때, 디스크로 스와핑할 수 있지만, 이는 가상 메모리 시스템에서 투명하며, 여기서 프로세서의 메모리의 영역은 실제로 디스크에 있고 언제든지 주요 메모리에 없을 수 있습니다. 활성 프로세스/임무 (실행 중인 프로그램)의 일부도 만약 그 부분이 최근에 사용되지 않았으면 디스크로 스와핑될 수 있습니다. 결합된 프로세스가 활성화되려면 실행 중인 프로그램의 모든 부분과 해당 데이터가 물리적 메모리에 있어야 하는 것은 아닙니다.

Process states

Main article: Process state

멀티태스킹을 허용하는 운영 시스템 커널은 프로세스에 특정 상태가 필요합니다. 이들 상태에 대한 이름은 표준화되지 않았지만, 그것들은 유사한 기능을 가지고 있습니다.

  • 먼저, 프로세스는 보조 저장 장치 (하드 디스크 드라이브, CD-ROM, 등)에서 주요 메모리로 적재되어 "생성"됩니다. 그 후 프로세스 스케줄러는 프로세스에 "대기" 상태를 할당합니다.
  • 프로세스가 "대기"하는 동안, 그것은 스케줄러가 소위 컨텍스트 전환을 수행할 때까지 기다립니다. 컨텍스트 전환은 프로세스를 프로세서에 적재하고 상태를 "실행 중"으로 변경하고, 반면에 이전에 "실행 중"이었던 프로세스는 "대기 중" 상태에 저장됩니다.
  • 만약 "실행 중" 상태의 프로세스가 자원을 기다려야 하면 (예를 들어, 사용자 입력이나 파일이 열리는 것을 기다리면), 그것은 "차단됨" 상태가 지정됩니다. 프로세스가 더 이상 기다릴 필요가 없을 때 (차단된 상태) 프로세스 상태는 "대기 중"으로 다시 변경됩니다.
  • 일단 프로세스가 실행을 완료하거나, 운영 시스템에 의해 종료되면, 그것은 더 이상 필요하지 않습니다. 프로세스는 즉시 제거되거나 "종료됨" 상태로 이동합니다. 제거될 때, 그것은 주요 메모리에서 제거될 때까지 기다립니다.

Inter-process communication

프로세스가 서로 통신해야 할 때는 주소 공간의 일부를 공유하거나 다른 형태의 프로세스-사이 통신 (IPC)을 사용해야 합니다. 예를 들어, 파이프라인에서, 첫 번째 프로세스의 출력은 두 번째 프로세스로 전달되어야 하며, 이런 식으로 계속됩니다. 또 다른 예제는 동시에 실행할 수 있는 협력적이지만 부분적으로 독립적인 프로세스로 분해된 임무입니다 (즉, 동시성 또는 진정한 병렬성을 사용합니다 – 후자의 모델은 동시 실행의 특정 사례이고 실행할 준비가 된 프로세스에 여러 CPU 코어가 사용 가능한 경우 항상 실행 가능합니다).

두 개 이상의 프로세스가 서로 다른 운영 시스템 (OS)을 실행하는 서로 다른 기계에서 실행되는 경우도 있습니다. 따라서 통신과 동기화를 위한 몇 가지 메커니즘 (분산 컴퓨팅을 위한 통신 프로토콜이라고 함)이 필요합니다 (예를 들어, 메시지 전달 인터페이스 {MPI}).

History

1960년대 초에, 컴퓨터 제어 소프트웨어는 모니터 제어 소프트웨어 (예를 들어, IBSYS)에서 실행 제어 소프트웨어로 진화했습니다. 시간이 지나면서, 컴퓨터는 더 빨라졌지만 컴퓨터 시간은 여전히 ​​저렴하지도 않고 완전히 활용되지도 않았습니다; 그러한 환경은 멀티프로그래밍을 가능하게 하고 필요하게 만들었습니다. 멀티프로그래밍은 여러 프로그램이 동시에 실행된다는 것을 의미합니다. 처음에는, 놓여있는 단일-프로세서 컴퓨터 아키텍처의 결과로 여러 프로그램이 단일 프로세서에서 실행되었고, 그것들은 희소하고 제한된 하드웨어 자원을 공유했습니다; 결과적으로, 동시성은 직렬적이었습니다. 여러 프로세서를 갖는 이후 시스템에서, 여러 프로그램이 병렬로 동시에 실행할 수 있습니다.

프로그램은 프로세서에 대한 일련의 명령어로 구성됩니다. 단일 프로세서는 한 번에 하나의 명령어만 실행할 수 있습니다; 동시에 여러 프로그램을 실행하는 것은 불가능합니다. 프로그램에는 지연이 큰 입력 장치와 같은 일부 자원이 필요할 수 있으며, 이는 프린터로 출력을 보내는 것과 같은 느린 연산을 시작할 수 있습니다. 이로 인해 프로세서가 "유휴" (사용되지 않음) 상태로 이어집니다. 프로세서를 항상 바쁘게 유지하기 위해, 그러한 프로그램의 실행이 중단되고 운영 시스템은 프로세서를 전환하여 또 다른 프로그램을 실행합니다. 사용자에게, 그것은 프로그램이 동시에 실행되는 것처럼 보일 것입니다 (따라서 "병렬"이라는 용어가 붙었습니다).

얼마 지나지 않아 "프로그램"이라는 개념이 "실행하는 프로그램과 그 컨텍스트"라는 개념으로 확장되었습니다. 프로세스라는 개념이 탄생했고, 이는 재진입 코드의 발명으로 필요해지게 되었습니다. 쓰레드는 다소 나중에 등장했습니다. 어쨌든, 시간-공유, 컴퓨터 네트워크, 및 다중-CPU 공유 메모리 컴퓨터와 같은 개념이 등장하면서 이전의 "멀티프로그래밍"은 진정한 멀티태스킹, 멀티프로세싱, 그리고 나중에는 멀티쓰레딩으로 자리를 옮겼습니다.

Further reading