컴퓨터 과학

[운영체제] 프로세스와 스레드 - 사용자 영역

Data Jun 2025. 11. 25. 21:57

운영체제를 공부할 때 가장 핵심적인 개념 중 하나가 바로 **프로세스(process)**와 **스레드(thread)**입니다. 이번 글에서는 프로세스의 종류, 메모리 구조, 그리고 코드·데이터·힙·스택 영역까지  정리해보겠습니다.

 

1. 포그라운드 프로세스와 백그라운드 프로세스

운영체제는 실행 중인 프로그램을 ‘프로세스’라고 부르며, 이 프로세스는 실행 방식에 따라 크게 두 가지로 나뉩니다.

 

1️⃣ 포그라운드 프로세스 (foreground process)

 

  • 사용자가 보는 화면에서 동작하는 프로세스
  • 예: 브라우저, 엑셀, 게임 등
  • 사용자와 적극적으로 상호작용하며 실행됨

2️⃣ 백그라운드 프로세스 (background process)

  • 화면에 보이지 않는 곳에서 실행
  • 예: 업데이트 에이전트, 로그 수집기 등

3️⃣ 데몬

 

백그라운드 프로세스 중에서도 사용자와 상호작용 없이 특정 작업만 수행하는 특별한 프로세스입니다.

 

  • 리눅스/유닉스: 데몬(daemon)
  • 윈도우: 서비스(service)

 

2. 프로세스의 메모리 구조 - PCB부터 사용자 영역까지

 

 

프로세스가 실행되면 운영체제는 프로세스 실행을 위해 메모리 공간을 할당합니다. 일반적으로 다음과 같이 두 영역으로 나뉩니다.

 

1️⃣ 커널 영역

운영체제가 관리하는 영역으로, 프로세스는 직접 접근할 수 없습니다.

 

🔹 PCB (Process Control Block)

  • 프로세스 관리에 필요한 정보가 저장됨
  • 예: 프로세스 ID, 상태, 레지스터 정보, 우선순위 등

2️⃣ 사용자 영역(User Space)

프로세스가 실제 명령을 실행하는 영역이며, 다음 4가지로 구성됩니다:

  1. 코드 영역 (text/code segment)
  2. 데이터 영역 (data segment)
  3. 힙 영역 (heap segment)
  4. 스택 영역 (stack segment)

 

3.  메모리의 정적/동적 할당 영역 상세 설명

 

프로세스의 사용자 영역은 정적 영역과 동적 영역으로 나뉩니다.

 

1️⃣ 코드 영역 (정적 할당 영역)

 

  • 실행 가능한 명령어가 저장되는 영역
  • 읽기 전용(read-only)
  • CPU가 직접 가져가 실행하는 기계어가 포함됨
  • 예: 컴파일된 프로그램의 바이너리 코드

2️⃣ 데이터 영역 (정적 할당 영역)

 

  • 프로그램 실행 중 유지되는 전역 변수, static 변수가 저장
  • 프로그램 시작 시 할당되고 종료 시 해제됨

3️⃣ 힙 영역 (동적 할당 영역)

  • 개발자가 직접 메모리를 할당/해제하는 공간
  • malloc(), new 등으로 할당
  • 반환을 해주지 않으면 메모리 누수(memory leak) 발생
  • Java, Python 같은 언어는 가비지 컬렉션(GC)이 자동 관리

4️⃣ 스택 영역 (동적 할당 영역)

  • 함수 호출 시 생성되는 지역 변수, 매개 변수, 리턴 주소 저장
  • 함수 종료 시 자동으로 소멸
  • LIFO 방식

 

4. 스택 트레이스(Stack Trace) - 오류가 발생한 지점을 보여주는 정보

 

스택 영역은 함수 호출 정보를 저장하는데, 만약 프로그램에서 오류가 발생하면 운영체제는 **스택 트레이스(stack trace)**를 출력합니다.

 

✔ 스택 트레이스란?

  • 특정 시점의 함수 호출 정보를 보여주는 로그
  • 오류가 발생한 지점을 역추적할 수 있음
  • 디버깅에 매우 유용

 

 

정리하면

 

  • 프로세스는 화면에서 동작하는 포그라운드와 뒤에서 조용히 실행되는 백그라운드로 나뉜다.
  • 프로세스는 메모리에서 커널 영역 + 사용자 영역으로 구성된다.
  • 사용자 영역은 코드 / 데이터 / 힙 / 스택이라는 4대 구역으로 구성된다.
  • 오류 분석 시 스택 트레이스가 문제 발생 지점을 알려준다.