프로세스

프로세스는 컴퓨터에서 실행 중인 프로그램을 의미한다. 운영체제는 프로세스를 생성하고 관리하여 CPU, 메모리, 입출력 등의 자원을 할당하고 작업을 수행한다.

프로세스는 실행 중인 프로그램에 대한 모든 정보를 가지고 있으며, 다음과 같은 구성 요소로 구성된다.

  • 프로세스 ID (PID)
  • 프로세스 상태 (실행, 대기, 중지)
  • 프로세스 우선 순위
  • 메모리 주소 공간
  • 스레드
  • 입출력 정보

운영체제는 이러한 프로세스 정보를 기반으로 각 프로세스에게 적절한 자원을 할당하고 작업을 조율한다.

프로세스는 기본적으로 프로세스간의 메모리 공유가 불가능한데 특수한 IPC를 이용해 메모리를 공유할 수 있다.

IPC?

IPC는 Inter-Process Communication의 약자로, 프로세스 간 데이터를 주고받는 기술을 의마한다. 이를 통해 프로세스들끼리 데이터를 주고받을 수 있으며, 메시지 전달, 공유 메모리, 소켓 통신 등 다양한 방법을 사용할 수 있다. IPC는 분산 시스템에서 여러 기기 간의 통신에도 사용된다. 따라서 IPC는 현대 컴퓨팅 환경에서 중요한 역할을 한다.

IPC에는 메시지 전달, 공유 메모리, 소켓 통신 등 다양한 방법이 있다. 메시지 전달 방식은 프로세스들이 서로 메시지를 주고받는 방식이다. 공유 메모리 방식은 프로세스들이 데이터를 교환하기 위해 특정 메모리 영역을 공유하는 방식이다. 소켓 통신 방식은 네트워크를 통해 프로세스들이 데이터를 교환하는 방식이다.

하지만 IPC는 메모리 공유를 통해 프로세스 간 통신을 가능케 하지만, 동기화 문제를 발생시킬 수 있다. 따라서 IPC를 사용할 때는 시스템의 특정 요구 사항과 제약 사항을 고려하여 적절하게 사용해야 한다.

스레드

스레드는 프로세스 내에서 실행되는 여러 실행 흐름 중 하나이다. 프로세스는 기본적으로 하나 이상의 스레드를 가지며, 스레드는 프로세스 내에서 서로 다른 작업을 수행할 수 있다. 스레드는 메모리 공간을 공유하므로, 프로세스 내에서 각 스레드는 동일한 자원에 액세스할 수 있다. 스레드는 특히 멀티코어 CPU에서 효과적으로 작동하여, 하나의 프로세스를 병렬로 실행할 수 있다. 하나의 프로세스 내에서 여러 개의 스레드를 사용하면, 각 스레드는 서로 다른 작업을 수행하면서 프로세스의 성능을 향상시킬 수 있다.

프로세스는 실행 중인 프로그램에 대한 모든 정보를 저장하는 메모리 공간을 가지고 있다. 이 메모리 공간에는 코드, 데이터, 스택 등이 포함된다.

메모리 공간

  • 코드
    • 프로그램 코드를 저장
  • 데이터
    • 전역 변수, 정적 변수를 저장
  • 스택
    • 함수 호출과 관련된 정보를 저장
    • 동적으로 할당되는 메모리 저장 공간(배열, 구조체, 객체 등)

프로세스와 스레드의 차이점

  • 프로세스는 다른 프로세스의 메모리 영역에 접근할 수 없지만 스레드는 스레드끼리 같은 힙과 같은 자원을 공유한다.
  • 프로세스는 코드, 데이터, 스택, 힙을 모두 할당 받지만 스레드는 스택만 따로 할당 받고 나머지는 공유해서 사용한다.

.

멀티프로세스

  • 각 프로세스는 독립적인 메모리 공간을 가지며, 다른 프로세스의 메모리에 직접적으로 접근할 수 없다.
  • 각 프로세스는 운영체제로부터 독립적으로 자원을 할당받아 사용하며, 각각의 프로세스는 독립적인 운영체제 자원을 가지고 작업한다.
  • 프로세스 간 통신을 위해서는 IPC 기술을 사용해야 하며, 이로 인해 오버헤드가 발생한다.
  • 멀티프로세스는 안정성이 높으며, 하나의 프로세스가 비정상적으로 종료되어도 다른 프로세스에 영향을 미치지 않는다.

멀티스레드

  • 하나의 프로세스 내에서 여러 개의 스레드가 동작하며, 각 스레드는 서로 같은 메모리 공간을 공유한다.
  • 각 스레드는 병렬적으로 동작할 수 있으며, 이로 인해 멀티프로세스보다 빠른 처리 속도를 보인다.
  • 하나의 스레드가 비정상적으로 종료되면, 전체 프로세스가 영향을 받게 된다.
  • 스레드 간의 공유 자원에 대한 동기화 문제가 발생할 수 있다.
서브목차