프로세스와 스레드, 그리고 프로그램이 실행되는 전체 과정
운영체제는 컴퓨터에서 실행되는 프로그램을 관리하고, 한정된 메모리를 효율적으로 분배하기 위해 다양한 기술을 사용합니다.
프로세스와 스레드의 개념, 프로그램이 컴파일되어 실행 파일로 변환되는 과정, 프로세스가 실행될 때 거치는 여러 상태, 그리고 프로세스가 메모리에 할당되는 구조에 대해 공부해 보았습니다.
프로세스와 스레드란?
프로세스(Process)
프로세스는 현재 컴퓨터에서 실행 중인 프로그램의 인스턴스를 말합니다.
쉽게 말해, 실행 파일(예: chrome.exe)을 두 번 클릭하면 해당 프로그램이 메모리에 올라와 실행되며, 이때 만들어지는 각 실행 단위가 바로 프로세스입니다.
- 특징
- CPU 스케줄링 대상: 운영체제는 실행 중인 프로세스들을 CPU 스케줄러를 통해 순서대로 실행합니다. 이때 프로세스는 '작업(Task)'과 같은 의미로 사용됩니다.
- 자원 할당: 프로세스는 메모리, CPU 시간, I/O 자원 등 여러 시스템 자원을 할당받아 실행됩니다.
영화 상영관에서 한 편의 영화가 상영되는 것과 비슷합니다.
상영관(메모리)과 스크린(CPU)이 할당되어야 영화(프로세스)가 재생됩니다.
스레드(Thread)
스레드는 프로세스 내에서 실행되는 작업의 흐름을 의미합니다.
하나의 프로세스는 여러 스레드를 가질 수 있으며, 각 스레드는 독립적으로 실행되지만 같은 프로세스의 자원을 공유합니다.
- 특징
- 경량화: 스레드는 프로세스보다 생성 비용이 낮고, 자원을 공유하기 때문에 통신이 빠릅니다.
- 동시 실행: 하나의 프로세스 내에서 여러 작업을 동시에 처리할 수 있습니다.
프로세스가 하나의 영화라면, 스레드는 그 영화 속 여러 장면이나 동시에 진행되는 여러 캐릭터의 행동과 비슷합니다. 각 스레드가 개별적으로 동작하지만, 모두 같은 영화(프로세스)를 구성합니다.
프로그램의 컴파일 과정
프로그램은 보통 소스 코드 형태로 작성된 후, 컴파일 과정을 거쳐 기계어로 번역되어 실행 파일이 됩니다.
이 과정은 여러 단계를 거치며, 각 단계는 프로그램을 올바르게 실행하기 위한 중요한 역할을 합니다.

1) 전처리 (Preprocessing)
소스 코드에 있는 주석을 제거하고, #include 지시문을 통해 헤더 파일을 병합하며, 매크로를 치환하는 단계입니다.
요리를 시작하기 전에 재료를 손질하고 정리하는 과정과 같습니다.
2) 컴파일 (Compilation)
전처리된 소스 코드를 분석하여 문법 오류를 검출하고, 코드 최적화 작업을 한 후, 어셈블리어(Assembly Language)로 변환합니다.
손질된 재료를 바탕으로 요리법에 따라 조리하는 과정이라고 볼 수 있습니다.
3) 어셈블 (Assembly)
어셈블리어로 작성된 코드를 기계어(목적 코드)로 번역하는 단계입니다.
조리된 요리를 접시에 담아 완성하는 단계와 비슷합니다.
4) 링커 (Linking)
여러 목적 코드와 라이브러리 코드를 결합하여 하나의 실행 파일(.exe 또는 .out)을 생성합니다.
- 라이브러리 종류
- 정적 라이브러리: 컴파일 시 라이브러리의 모든 코드를 실행 파일에 포함시킵니다. 외부 의존도가 낮지만, 실행 파일의 크기가 커질 수 있습니다.
- 동적 라이브러리: 프로그램 실행 시 필요할 때만 DLL(동적 연결 라이브러리)을 참조하여 메모리 사용의 효율성을 높입니다.
여러 요리 재료와 조리법을 한데 모아 완성된 요리를 만드는 것과 같습니다.
Ex
구글 크롬 실행 파일 chrome.exe를 두 번 클릭하면, 소스 코드가 전처리, 컴파일, 어셈블, 링킹 과정을 거쳐 메모리에 로드되고, 프로세스로 인스턴스화되어 실행됩니다.
프로세스 상태
프로세스는 실행되는 동안 다양한 상태를 거칩니다.
운영체제는 이러한 상태를 관리하여 프로세스에 적절한 자원(CPU, 메모리 등)을 할당합니다.
생성 상태 (New)
프로세스가 새롭게 생성된 상태입니다. fork()나 exec() 함수 등을 통해 생성되며, 프로세스 제어 블록(PCB)이 할당됩니다.
- Ex
부모 프로세스가 새로운 자식 프로세스를 만들 때, 자식 프로세스는 생성 상태에 들어갑니다.
대기 상태 (Ready)
프로세스가 실행될 준비가 되었지만, 아직 CPU 스케줄러로부터 CPU를 할당받지 못한 상태입니다.
상영관에 입장 대기 중인 관객과 같습니다.
실행 상태 (Running)
프로세스가 CPU를 할당받아 실제 명령어를 실행하는 상태를 의미합니다. 이때 CPU burst(짧은 실행 시간)가 발생합니다.
영화가 실제로 상영되고 있는 상태입니다.
일시 중단(차단) 상태 (Blocked/Waiting)
프로세스가 I/O 작업(예: 파일 읽기, 네트워크 통신)이나 다른 이벤트를 기다리느라 실행을 잠시 멈춘 상태입니다.
영화 상영 중 잠시 광고가 삽입되어 관객이 잠시 대기하는 것과 같습니다.
종료 상태 (Terminated)
프로세스가 모든 작업을 완료하거나, 오류 혹은 부모 프로세스에 의해 강제로 종료되어, CPU와 메모리 자원을 해제한 상태입니다.
영화 상영이 끝나고 관객이 퇴장하는 상태와 같습니다.
프로세스 메모리 구조
운영체제는 프로세스에 메모리를 할당할 때 여러 영역으로 나누어 관리합니다.
주요 영역은 스택(Stack), 힙(Heap), 데이터 영역(Data Segment), 그리고 코드 영역(Code/Text Segment) 입니다.

스택 (Stack)
함수 호출 시 생성되는 지역 변수, 매개변수, 리턴 주소 등을 저장하는 메모리 영역입니다.
- 특징
- LIFO (Last-In, First-Out): 가장 마지막에 들어간 데이터가 가장 먼저 제거됩니다.
- 자동으로 할당되고 해제되므로 관리가 용이합니다.
- Ex
재귀 함수 호출 시마다 새로운 스택 프레임이 생성되어, 각 함수 호출이 독립적으로 변수들을 관리할 수 있습니다.
접시를 쌓는 것과 같아서, 가장 위에 쌓인 접시부터 먼저 꺼내는 방식입니다.
힙 (Heap)
동적 메모리 할당을 위해 사용되는 영역으로, 프로그래머가 필요에 따라 메모리를 할당(malloc, new)하고 해제(free, delete)합니다.
- 특징
- 유연성: 프로그램이 필요로 하는 만큼의 메모리를 할당할 수 있지만, 관리가 복잡할 수 있습니다.
- 힙 영역을 사용하면 동적 자료구조(vector, linked list 등)를 구현할 수 있습니다.
마치 창고처럼, 필요할 때마다 원하는 만큼 공간을 빌려 쓰는 곳입니다.
데이터 영역과 코드 영역
이 영역들은 프로그램이 컴파일 될 때 정적으로 할당되는 부분입니다.
- 데이터 영역 (Data Segment)
전역 변수나 static 변수 등이 저장되며, 두 부분으로 나뉩니다.- BSS Segment: 초기화되지 않은 전역 변수나 static 변수가 저장되며, 보통 0으로 초기화됩니다.
- Data Segment: 초기화된 전역 변수나 static 변수가 저장됩니다.
- 코드 영역 (Code/Text Segment)
프로그램의 기계어 코드(실행 명령어)가 저장되는 영역입니다.
데이터 영역은 프로그램의 ‘설명서’처럼, 프로그램 실행에 필요한 고정 데이터를 보관하고, 코드 영역은 프로그램의 ‘요리법’처럼, 실행할 명령어가 기록되어 있습니다.
정리
운영체제는 프로그램이 실행되는 동안 프로세스와 스레드를 관리하고, 메모리를 여러 계층과 영역으로 나누어 효율적으로 사용할 수 있도록 합니다.
- 프로세스는 실행 중인 프로그램의 인스턴스이며, 스레드는 프로세스 내에서 실제로 작업을 수행하는 실행 흐름입니다.
- 프로그램은 전처리, 컴파일, 어셈블, 링커 과정을 거쳐 실행 파일로 만들어지고, 이 파일이 메모리에 로드되어 프로세스로 인스턴스화됩니다.
- 프로세스는 생성, 대기, 실행, 차단, 종료와 같은 여러 상태를 거치며, 운영체제는 CPU 스케줄러를 통해 각 프로세스에 CPU 시간을 할당합니다.
- 메모리 구조는 스택과 힙, 그리고 정적 할당 영역(데이터 영역, 코드 영역)으로 구분되어, 각각 다른 용도와 관리 방식을 갖습니다.
'CS_운영체제' 카테고리의 다른 글
[CS_운영체제] 스레드와 멀티스레딩, 공유 자원, 임계 영역 그리고 교착 상태 (2) | 2025.03.21 |
---|---|
[CS_운영체제] 프로세스 관리와 통신 (PCB, 컨텍스트 스위칭, 멀티 프로세싱, IPC) (2) | 2025.03.20 |
[CS_운영체제] 메모리 관리 (1) | 2025.03.05 |
[CS_운영체제] 메모리와 캐시 (0) | 2025.03.04 |
[CS_운영체제] 컴퓨터 요소 (2) | 2025.01.22 |