프로세스(Process)

프로세스(Processs)란?

프로세스(Process)

“실행 중인 프로그램”을 뜻해.

  • 프로그램은 단지 디스크에 저장된 정적인 파일이야. (.exe, .out, .py 같은 것들)

  • 이 프로그램을 실행하면, 운영체제(OS)가 이 프로그램을 메모리(RAM)에 올리고, CPU가 실행할 수 있도록 준비하는데, 이 상태를 프로세스라고 불러.

즉,

  • 프로그램 ≠ 프로세스

  • “프로그램”을 실행 중인 것이 “프로세스”야.

프로세스의 주요 특징

구분설명
고유한 메모리 공간코드, 데이터, 스택, 힙 등의 독립적인 메모리 구조를 가짐
고유한 PIDOS는 각 프로세스를 식별하기 위해 Process ID(PID)를 부여함
자원(Resource) 소유파일 디스크립터, 메모리, CPU 시간 등을 소유함
독립성프로세스끼리는 기본적으로 메모리를 공유하지 않고 독립적으로 동작함
생명주기생성(Create) → 준비(Ready) → 실행(Running) → 대기(Waiting) → 종료(Terminated) 흐름을 가짐

프로세스의 메모리 구조 (4영역)

프로세스가 메모리 위에 올라오면 이렇게 4개의 영역으로 나뉘어.

  ┌───────────────┐
      Stack         함수 호출  지역변수, 매개변수 저장
  ├───────────────┤
       Heap         동적 메모리 할당 영역 (malloc, new)
  ├───────────────┤
     Data 영역      전역변수, static 변수 저장
  ├───────────────┤
      Code 영역     실행할 프로그램 코드 (명령어) 저장
  └───────────────┘
  • Stack : 함수 호출마다 자동으로 push/pop되는 메모리 (ex. 지역 변수)

  • Heap : 개발자가 직접 malloc, new로 할당하고 free, delete로 해제해야 하는 메모리

  • Data : 전역변수나 static 변수 저장

  • Code : 컴파일된 명령어(machine code)

프로세스의 상태 (State)

프로세스는 CPU에서 실행되면서 다양한 상태를 가진다.

상태의미
New프로그램이 메모리에 적재되는 중
ReadyCPU를 받을 준비가 된 상태
RunningCPU를 점유해서 실제 실행 중인 상태
Waiting어떤 이벤트(I/O 등)를 기다리는 상태
Terminated실행이 끝나서 종료된 상태

(※ 프로세스는 보통 Ready ↔ Running ↔ Waiting 을 반복하다가 종료돼.)

프로세스와 스레드

  • 프로세스 : 완전히 독립된 실행 단위

  • 스레드 : 프로세스 안에 있는 작업 단위(같은 메모리 공간을 공유)

“프로세스는 집이고, 스레드는 집안에 있는 가족”이라고 비유할 수 있어.

  • 프로세스끼리는 서로 독립적이지만,

  • 같은 프로세스 안의 스레드들은 메모리를 공유해.

프로세스 간 통신 (IPC)

서로 독립적인 프로세스끼리 정보를 주고받기 위해 여러 방법을 사용해.

주요 방법들

  • Pipe(파이프)

  • Message Queue(메시지 큐)

  • Shared Memory(공유 메모리)

  • Socket(소켓 통신)

  • Signal(시그널)

왜냐하면, 기본적으로 프로세스끼리는 서로 메모리를 공유하지 않기 때문이야.

요약

프로세스는 실행 중인 프로그램이고, 고유한 메모리 공간과 자원을 소유하며, 여러 상태를 가지면서 실행된다.


© 2022 JeongHwan Yun.