프로세스

컴퓨터에서 실행 중인 프로그램의 인스턴스, 프로그램이 메모리에 올라가면 프로세스가 된다.

프로세스의 상태

운영체제마다 세부 상태는 다르지만, 기본적인 5상태 모델은 다음과 같다.

  1. 생성(New): 프로세스가 만들어지는 중인 상태
  2. 준비(Ready): 실행에 필요한 자원을 갖추고 CPU 할당을 기다리는 상태
  3. 실행(Running): CPU에서 명령을 실행하고 있는 상태
  4. 대기(Waiting, Blocked): I/O 완료나 이벤트 발생을 기다리는 상태
  5. 종료(Terminated): 실행이 끝난 상태

CPU 스케줄러가 준비 상태의 프로세스를 선택하면 실행 상태로 이동한다. 할당 시간이 끝나거나 선점되면 다시 준비 상태가 되고, I/O를 요청하면 대기 상태로 이동한다. 기다리던 작업이 완료되면 다시 준비 상태로 돌아간다.

프로세스 메모리 구조

프로세스는 자체 메모리 공간을 가지고 있으며, 여러 섹션으로 나뉨

실행 파일과 프로세스의 주요 영역

실제 배치 방식은 운영체제, 실행 파일 형식, 컴파일러 최적화에 따라 달라질 수 있지만 일반적으로 다음과 같은 영역으로 설명한다.

코드 영역

컴퓨터 명령 읽기 및 읽기 전용 데이터를 포함한 프로그램 실행 코드가 있는 영역

BSS 영역

초기화 되지 않은 데이터 or 0으로 초기화 된 데이터

데이터 영역

전역 변수, 0이 아닌 값으로 초기화 된 변수

동적 할당(런타임 단계에서 메모리 할당)

힙 영역

동적으로 할당된 메모리가 포함됨(malloc(), free()등을 이용하여 관리), 프로그램 실행 중에 동적으로 증가함

스택 영역

지역 변수, 매개 변수, 실행되는 함수에 의해 늘어들거나 줄어드는 메모리 영역, 함수가 호출될 때마다 호출될 때의 환경등 특정 정보가 스택에 저장됨

스레드

프로세스의 실행 가능한 가장 작은 단위, 프로세스는 여러 스레드를 가질 수 있어 프로그램이 여러 작업을 동시에 실행하고 여러 CPU코어를 활용하여 전체 성능을 향상시키는 방법을 제공한다.

프로세스는 독립적인 코드, 데이터, 힙, 스택을 가진다. 같은 프로세스에 속한 스레드들은 코드, 데이터, 힙을 공유하고, 각 스레드는 자신만의 스택과 CPU 레지스터(프로그램 카운터 포함)를 가진다.

프로세스와 스레드의 차이

프로세스는 실행 중인 프로그램의 단위이며, 서로 독립적인 메모리 공간을 가진다. 반면 스레드는 프로세스 내부에서 실행되는 작업의 단위로, 같은 프로세스에 속한 스레드끼리는 대부분의 메모리를 공유한다.

구분프로세스(Process)스레드(Thread)
정의실행 중인 프로그램의 인스턴스프로세스 내부에서 실행되는 작업의 단위
메모리독립적인 메모리 공간을 가짐같은 프로세스의 메모리를 공유
공유 자원기본 주소 공간은 분리되며, 공유 메모리 같은 IPC를 통해 일부 자원을 공유할 수 있음코드, 데이터, 힙과 프로세스 자원을 공유
독립 자원코드, 데이터, 힙, 스택 모두 독립스택과 CPU 레지스터만 독립
생성 비용비교적 큼비교적 작음
컨텍스트 스위칭비용이 큼비용이 상대적으로 작음
통신 방식IPC(파이프, 소켓, 공유 메모리 등) 필요공유 메모리를 통해 비교적 쉽게 통신 가능
장애 영향한 프로세스의 오류가 다른 프로세스에 영향을 주지 않음하나의 스레드 오류가 프로세스 전체에 영향을 줄 수 있음

프로세스는 서로 메모리를 공유하지 않기 때문에 안정성이 높지만, 생성 비용과 프로세스 간 통신 비용이 크다.

반면 스레드는 같은 메모리 공간을 공유하기 때문에 생성 비용이 적고 데이터 공유가 쉽지만, 레이스 컨디션이 발생할 수 있다.