면접관이 '광대승천'하는 프로세스&스레드 지식!

코모도왕도마뱀·2025년 3월 20일
9

프로세스와 스레드 개념은 개발자한테 밀접하게 닿아있고, 많은 기업들의 기술면접에도 자주 언급되는 주제이기도 하다.
그러면 프로세스와 스레드에 대해 알아보자.

프로세스

프로세스는 현재 실행 중이거나 곧 실행 가능한 PCB를 가진 프로그램이다.
PCB에 대해 알아보기 앞서, 프로그램과 프로세스의 차이점에 대해 알아보자.
프로그램은 디스크에 저장된 수동적 실체이다. 잘 와닿지 않을 수 있는데 그냥 정적인 코드 덩어리라고 생각하면 된다.
프로세스는 프로그램 카운터와 프로세스 제어 블록(PCB)을 가지며, 실행 흐름을 제어하는 능동적 실체이다.
쉽게 생각하면 메모리에 적재되기 전에는 프로그램이고, 적재된 후에는 프로세스가 되는 것이다.
프로세스는 프로세서에 의해 수행되는 프로그램 단위로, 다음과 같은 특징을 가진다.

  • 실행 중인 프로그램
  • 비동기적 프로그램
  • 살아 있는 프로그램
  • 프로세스 제어 블럭(PCB)를 가지는 프로그램
  • 언제든지 실행 가능한 프로그램

프로세스의 메모리 구조

프로세스의 메모리는 정적(코드, 데이터), 동적(힙, 스택) 영역으로 구성되었다.
1. 코드(Code)영역 : 실행 가능한 프로그램 코드 영역, CPU가 프로세스 실행 시 해당 내역 참조
2. 데이터 (Data)영역 : 전역변수, 정적 변수, 작업 공간 등을 담음
3. 힙(Heap)영역 : 동적 메모리(malloc(), free()) 등에 사용되는 변수를 담는 영역
4. 스택(Stack)영역 : 지역변수, 인자 리스트, 복귀 주소, 스택 프레임 등을 담음

프로세스 제어 블록 (PCB)

PCB는 운영체제가 프로세스를 관리하기 위한 정보가 담긴 자료구조이다.

PCB의 주요정보

  • 프로세스 상태
  • 프로세스 ID
  • 프로그램 카운터
  • 레지스터 정보
  • 메모리 관리 정보
  • 계정 정보
  • 입출력 정보

PCB의 역할

  • 프로세스 상태 저장
  • 문맥 교환

프로세스 상태

  • 생성 상태 (new)
    -- PCB가 생성되는 상태
  • 준비 상태 (ready)
    -- 프로세서(CPU) 할당을 기다리는 상태
  • 실행 상태 (run)
    -- 프로세스가 CPU를 할당 받아 실행 중인 상태
  • 대기 상태 (wait)
    -- 특정 자원이 필요하며 대기 중인 상태
  • 지연 준비 상태 (Suspend ready)
    -- 준비 상태에 있던 프로세스가 메모리 부족으로 인해 하드디스크로 스왑됨.
    -- 메모리가 확보되면 다시 준비 상태로 전이됨.
  • 지연 대기 상태 (Suspend ready)
    -- 대기 상태에서 메모리 부족으로 인해 스왑된 상태
    -- 요청한 자원이 할당되면 지연 준비 상태로 전이됨

프로세스 상태 전이

디스패치(dispatch) : 준비 상태 -> 실행 상태
할당 시간 초과(time runout) : 실행 상태 -> 준비 상태
블록(block) : 실행 상태 -> 대기 상태
웨이크업(wake up) : 대기 상태 -> 준비 상태

프로세스와 스레드

프로세스

  • 실행 중인 프로그램을 의미하며, 독립적인 메모리 공간을 가진다.
  • 운영체제에 의해 관리되며, 서로 다른 프로세스 간에는 메모리르 공유하지 않는다.
  • 하나 이상의 스레드를 포함할 수 있으며, 각각의 프로세스는 별도의 실행 흐름을 가진다.

스레드

  • 프로세스 내에서 실행되는 작은 실행 단위
  • 같은 프로세스 내에서 메모리와 자원을 공유하며, 다중 작업을 수행할 수 있다.

커널 스레드

  • 운영체제 커널이 직접 관리하는 스레드
  • 시스템 호출을 통해 커널에서 스레드를 생성하고 관리한다.

사용자 스레드

  • 사용자 공간에서 관리되는 스레드
  • 커널에 직접적인 개입없이 사용자 수준에서 생성 및 관리 가능

느낀점

내가 아는 스레드는 운영체제와 밀접한 스레드 보다는 자바 문법상으로 배우는 스레드의 느낌이 강했는데, 스레드에 대해 공부하고 나니 사고가 확장되는 것 같다.

profile
생각은 깊게, 실행은 단순하게.

2개의 댓글

comment-user-thumbnail
2025년 3월 31일

와우ㅜ 스레드가 완벽하게 이해되는 매우 좋은 글이네요~

1개의 답글