logo

프로세스란?

Computer Science · 2월 16일 · 26 min read
poster

컴퓨팅에서 프로세스는 하나 이상의 스레드에 의해 실행되는 컴퓨터 프로그램의 인스턴스이다. 다양한 프로세스 모델이 존재하며, 일부는 경량화되어 있지만, 거의 모든 프로세스(전체 가상 머신 포함)는 프로그램 코드, 할당된 시스템 자원, 물리적 및 논리적 액세스 권한, 실행 활동을 시작, 제어 및 조정하기 위한 데이터 구조로 구성된다. 운영 체제(OS) 프로세스에 뿌리를 두고 있으며, OS에 따라 프로세스는 명령을 동시에 실행하는 여러 실행 스레드로 구성될 수도 있다.

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

멀티태스킹은 여러 프로세스가 프로세서(CPU) 및 기타 시스템 자원을 공유하는 방법이다. 각 CPU(코어)는 한 번에 하나의 프로세스를 실행한다. 그러나 멀티태스킹에서는 각 프로세서가 각 작업이 끝날 때까지 기다릴 필요 없이 실행 중인 작업을 전환할 수 있다(선점). 운영체제의 구현에 따라, 작업이 입출력 작업을 시작하고 완료를 기다릴 때, 작업이 자발적으로 CPU를 비울 때, 하드웨어 인터럽트, 운영체제의 스케줄러가 특정 프로세스가 CPU 시간의 공평한 할당량을 모두 사용했다고 판단할 때, 운영체제의 스케줄러가 (리눅스 커널의 Completely Fair Scheduler 등)에 의해 전환이 실행될 수 있다.

멀티태스킹의 일반적인 형태는 사용자 프로세스, 스레드, 심지어 독립적인 커널 작업의 실행을 인터리빙하는 방법인 CPU 시간 공유에 의해 제공된다. 프리앰핑은 CPU 바운드 프로세스에 높은 우선순위를 부여하는 인터랙티브 프로세스에 중요한 부수적인 효과를 가져와 사용자가 키를 누르거나 마우스를 움직이기만 하면 즉시 컴퓨팅 리소스를 할당받을 수 있다. 또한, 비디오나 음악 재생과 같은 애플리케이션은 다른 우선순위가 낮은 프로세스보다 우선순위가 높은 실시간 우선순위를 부여받게 된다. 타임셰어링 시스템에서는 컨텍스트 스위치가 빠르게 실행되기 때문에 여러 프로세스가 동일한 프로세서에서 동시에 실행되는 것처럼 보인다. 이렇게 여러 프로세스가 동시에 실행되는 것처럼 보이는 것을 동시 실행이라고 한다.

보안과 신뢰성을 위해 대부분의 최신 운영체제는 독립된 프로세스 간의 직접 통신을 방지하고 엄격하게 중재되고 제어된 프로세스 간 통신을 제공한다.

프로세스의 정의

일반적으로 컴퓨터 시스템의 프로세스는 다음과 같은 자원으로 구성된다(또는 그 자원을 소유하고 있다고 한다):

프로그램과 관련된 실행 가능한 기계 코드의 이미지. 실행 가능한 코드, 프로세스별 데이터(입력 및 출력), 호출 스택(활성 서브 루틴 및 기타 이벤트를 추적), 실행 시 생성되는 중간 계산 데이터를 저장하는 힙. 파일 기술자(유닉스 용어), 핸들(Windows), 데이터 소스 및 데이터 싱크와 같이 프로세스에 할당되는 리소스에 대한 운영 체제 기술자. 프로세스의 소유자, 프로세스의 권한(허용되는 작업) 세트와 같은 보안 속성. 프로세서의 상태(컨텍스트). 레지스터의 내용이나 물리적 메모리의 주소 지정 등. 상태는 일반적으로 프로세스가 실행 중일 때는 컴퓨터의 레지스터에, 그렇지 않을 때는 메모리에 저장된다. 운영체제는 활성 프로세스에 대한 이 정보의 대부분을 프로세스 제어 블록이라는 데이터 구조에 저장한다. 스레드 또는 자식 프로세스를 지원하는 운영 체제에서는 리소스의 임의의 하위 집합(일반적으로 적어도 프로세서 상태)이 프로세스의 각 스레드와 연관될 수 있다.

운영체제는 프로세스를 분리하고 필요한 자원을 할당함으로써 프로세스가 서로 간섭하여 시스템 장애(교착 상태, 슬래싱 등)를 유발할 가능성을 낮춘다. 운영체제는 프로세스가 안전하고 예측 가능한 방식으로 상호 작용할 수 있도록 프로세스 간 통신 메커니즘을 제공할 수도 있다.

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

멀티태스킹 운영체제는 프로세스 간 전환만으로 많은 프로세스가 동시에(즉, 병렬로) 실행되는 것처럼 보이게 할 수 있지만, 실제로는 하나의 CPU에서 한 번에 하나의 프로세스만 실행할 수 있다(CPU에 멀티코어가 없는 경우, 멀티스레딩이나 기타 유사한 기술을 사용할 수 있다).

일반적으로 단일 프로세스를 메인 프로그램, 자식 프로세스를 비동기 서브 루틴처럼 동작하는 스핀오프 병렬 프로세스와 연결한다. 프로세스는 리소스를 소유한다고 하며, (메모리 상의) 프로그램 이미지는 그러한 리소스 중 하나이다. 그러나 멀티프로세싱 시스템에서는 많은 프로세스가 메모리의 동일한 위치에 있는 동일한 재진입 프로그램으로부터 실행되거나 공유될 수 있다.

임베디드 운영 체제에서 프로세스는 종종 "작업"이라고 불린다. '프로세스'(또는 작업)의 의미는 '공간을 점유하는 것'인 '메모리'와 달리 '시간을 점유하는 것'이다.

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

프로세스가 무언가를 요구하고 그것을 기다려야 하는 경우, 그 프로세스는 차단된다. 프로세스가 차단된 상태인 경우 디스크에 스왑이 가능하지만, 이는 가상 메모리 시스템에서는 투명하며, 프로세스의 메모리 영역은 언제든지 메인 메모리가 아닌 디스크에 있을 수 있다. 활성 프로세스/태스크(실행 중인 프로그램)의 일부라도 그 부분이 최근에 사용되지 않았다면 디스크 스왑 대상이 된다. 관련 프로세스가 활성화되기 위해 실행 중인 프로그램의 모든 부분과 데이터가 반드시 물리적 메모리에 있어야 하는 것은 아니다.

프로세스 간 커뮤니케이션

프로세스가 서로 통신해야 하는 경우 주소 공간의 일부를 공유하거나 다른 형태의 프로세스 간 통신(IPC)을 사용해야 한다. 예를 들어, 쉘 파이프라인에서는 첫 번째 프로세스의 출력을 두 번째 프로세스로 전달해야 하며, 이를 반복해야 한다. 또 다른 예로는 한 번에 실행할 수 있는 작업을 협력적이지만 부분적으로 독립적인 프로세스로 분해할 수 있는 작업이 있다(즉, 동시 실행 또는 진정한 병렬 실행을 사용한다).

따라서 통신과 동기화를 위한 메커니즘(분산 컴퓨팅을 위한 통신 프로토콜이라고 함)이 필요하다(예를 들어, 메시지 전달 인터페이스, 종종 단순히 MPI라고도 함).

역사

1960년대 초까지 컴퓨터 제어 소프트웨어는 IBSYS와 같은 모니터 제어 소프트웨어에서 임원 제어 소프트웨어로 진화했다. 시간이 지남에 따라 컴퓨터의 속도는 빨라졌지만, 한편으로는 컴퓨터의 사용 시간은 아직 저렴하지도 않았고, 충분히 활용되지도 않았다. 이러한 환경이 멀티프로그래밍을 가능케 했고, 필요로 했다. 멀티프로그래밍은 여러 개의 프로그램을 동시에 실행하는 것을 말한다. 초기에는 유니프로세서 컴퓨터 아키텍처가 기반이 되었기 때문에 하나의 프로세서에서 여러 프로그램이 실행되어 희소하고 한정된 하드웨어 자원을 공유했다. 이후 여러 프로세서를 탑재한 시스템에서는 여러 프로그램이 동시에 병렬로 실행된다.

프로그램은 프로세서의 명령어 시퀀스로 구성되며, 하나의 프로세서는 한 번에 하나의 명령어만 실행할 수 있기 때문에 여러 프로그램을 동시에 실행하는 것은 불가능하다. 프로그램은 입력 장치와 같이 지연이 큰 리소스를 필요로 하거나 프린터로 출력을 보내는 것과 같이 느린 처리를 시작하기도 한다. 이런 경우, 프로세서는 '유휴'(미사용) 상태가 된다. 프로세서를 항상 사용 중으로 유지하기 위해 이러한 프로그램의 실행을 중지하고, 운영체제는 프로세서를 다른 프로그램 실행으로 전환한다. 사용자에게는 프로그램이 동시에 실행되는 것처럼 보인다(이것이 '병렬'이라는 단어의 유래이다).

얼마 지나지 않아 '프로그램'이라는 개념은 '실행 중인 프로그램과 그 맥락'이라는 개념으로 확장되었다. 프로세스라는 개념이 생겨났고, 이는 재진입 코드의 발명과 함께 필요하게 되었다. 스레드의 등장은 다소 늦었다. 그러나 시간 공유, 컴퓨터 네트워크, 다중 CPU 공유 메모리 컴퓨터 등의 개념이 등장하면서 기존의 '멀티 프로그래밍'은 진정한 멀티태스킹, 멀티 프로세싱, 그리고 이후 멀티 스레딩으로 전환되었다.

관련 포스트
post image
머신 코드
컴퓨터 프로그래밍에서 기계어 명령어로 구성된 컴퓨터 코드를 말하며, 컴퓨터의 중앙처리장치(CPU)를 제어하는 데 사용된다. 과거에는 10진법 컴퓨터가 일반적이었지만, 현대 시장에서는 2진법 컴퓨터가 주류다. 이러한 컴퓨터에서 기계 코드는 '컴퓨터가 실제로 읽고 해석하
Computer Science·12월 26일·22 min read
post image
책 디자인 패턴 후기
디자인 패턴: Elements of Reusable Object-Oriented Software(디자인 패턴: 재사용 가능한 객체지향 소프트웨어의 요소)(1994)는 소프트웨어 디자인 패턴을 설명한 소프트웨어 공학 서적이다. 에리히 감마, 리처드 헬름, 랄프 존슨,
Computer Science·12월 16일·16 min read
post image
브라우저 엔진, blink
블링크는 크롬 프로젝트의 일환으로 개발된 브라우저 엔진으로 애플, 구글, 메타, 마이크로소프트, 오페라 소프트웨어, 비발디 테크놀로지스, 어도비, 인텔, IBM, 삼성 등이 참여하고 있으며, 2013년 4월에 처음 발표되었다. 되었다. # 네이밍 블링크의 네이밍은
Computer Science·9월 14일·13 min read
post image
웹프레임워크란?
웹 프레임워크(WF) 또는 웹 애플리케이션 프레임워크(WAF)는 웹 서비스, 웹 리소스, 웹 API를 포함한 웹 애플리케이션 개발을 지원하도록 설계된 소프트웨어 프레임워크이다. 웹 프레임워크는 월드와이드웹에서 웹 애플리케이션을 구축하고 배포하기 위한 표준적인 방법을
Computer Science·7월 24일·11 min read
post image
nextjs의 탄생배경
Next.js는 민간기업 베르셀(Vercel)이 개발한 오픈소스 웹 개발 프레임워크로, 서버 측 렌더링과 정적 웹사이트 생성 기능을 갖춘 리액트 기반 웹 애플리케이션을 제공한다. 리액트 문서에서는 'Node.js로 서버 렌더링된 웹사이트를 구축할 때' 개발자에게 조
Computer Science·7월 14일·16 min read
post image
알고리즘의 정의
수학 및 컴퓨터 과학에서 알고리즘은 일반적으로 특정 문제 클래스를 해결하거나 계산을 수행하는 데 사용되는 엄격한 명령의 유한한 시퀀스이다. 알고리즘은 계산이나 데이터 처리를 수행하기 위한 사양으로 사용된다. 고급 알고리즘은 조건식을 사용하여 코드 실행을 다양한 경로(
Computer Science·7월 4일·29 min read
post image
운영체제 톺아보기
운영체제(OS)는 컴퓨터의 하드웨어 및 소프트웨어 자원을 관리하고 컴퓨터 프로그램에 공통된 서비스를 제공하는 시스템 소프트웨어이다. 시간 공유 운영 체제는 시스템을 효율적으로 사용하기 위해 작업을 예약하고 프로세서 시간, 대용량 저장 장치, 주변 장치 및 기타 자원
Computer Science·5월 21일·17 min read
post image
백그라운드-프로세스에-대해-알아보기
백그라운드 프로세스는 사용자의 개입 없이 무대 뒤에서(즉, 백그라운드에서) 실행되는 컴퓨터 프로세스를 말한다. 이러한 프로세스의 일반적인 작업에는 로깅, 시스템 모니터링, 스케줄링, , 사용자 알림 등이 있다. Windows 시스템에서 백그라운드 프로세스는 사용자
Computer Science·3월 1일·15 min read