
프로그램, 프로세서, 프로세스, 스레드 차이를 정리하고자 학습 용도로 작성한 글이다.
프로그램 (Program)
정의
프로그램은 특정 작업을 수행하기 위해 작성된 명령어들의 집합이다. 주로 소스 코드 형태로 작성되며, 컴파일 과정을 거쳐 실행 파일로 변환된다.
특징
- 정적인 객체로, 실행되지 않은 상태의 코드와 데이터이다.
- 디스크에 저장되며, 실행되지 않는 한 메모리에 로드되지 않는다.
- 텍스트 편집기, 웹 브라우저, 게임 등이 프로그램의 예시이다.
구성 요소
- 소스 코드: 프로그래머가 작성한 명령어들로, 특정 작업을 수행하기 위한 로직과 알고리즘이 포함된다.
- 데이터 파일: 프로그램 실행에 필요한 외부 데이터 파일이다. 예를 들어, 텍스트 파일, 이미지, 데이터베이스 등이 있다.
- 라이브러리: 프로그램이 사용하는 재사용 가능한 코드 묶음이다. 예: Java의 JAR 파일, Python의 패키지 등.
- 실행 파일: 소스 코드가 컴파일 또는 인터프리팅된 형태로, 운영체제에서 실행 가능한 파일이다. (예: .exe, .apk)
사용 시점
사용자가 특정 작업을 수행하고자 할 때 실행된다. 예를 들어, 문서 작성을 위해 워드 프로세서를 실행하는 경우이다.
프로세서 (Processor)
정의
프로세서는 프로그램의 명령어를 실제로 실행하는 하드웨어 장치이다. 흔히 CPU라고 부르며, 컴퓨터의 핵심 구성 요소다.
특징
- 물리적인 하드웨어 장치이다.
- 명령어를 해석하고 산술 연산, 논리 연산, 데이터 전송을 수행한다.
- Intel Core i7, AMD Ryzen과 같은 CPU가 프로세서의 대표적인 예시다.
구성 요소
- 산술 논리 연산 장치(ALU): 산술 연산(덧셈, 뺄셈) 및 논리 연산(AND, OR 등)을 수행한다.
- 제어 장치(CU): 명령어를 해석하고, 실행 순서를 제어한다.
- 레지스터(Register): 데이터를 임시로 저장하는 초고속 메모리이다. 예: 명령어 레지스터(IR), 프로그램 카운터(PC).
- 캐시(Cache): 프로세서와 메모리 간 데이터 전송을 빠르게 하기 위한 고속 메모리이다.
- 코어(Core): 명령어를 독립적으로 실행할 수 있는 프로세서의 기본 단위이다. 멀티코어 프로세서에는 여러 코어가 있다.
- 클록(Clock): 명령어 실행 속도를 결정하는 신호로, GHz 단위로 측정된다.
참고: 버스(Bus)
: 프로세서와 메모리 또는 다른 장치 간의 데이터를 전달하는 통신 경로이다.
- 데이터 버스: 데이터를 전송.
- 주소 버스: 메모리 주소를 지정.
- 제어 버스: 데이터 흐름을 제어.
사용 시점
컴퓨터가 켜져 있는 동안 항상 동작하며, 운영체제와 사용자 프로그램의 명령어를 처리한다.
프로세스 (Process)
정의
프로세스는 실행 중인 프로그램의 인스턴스다. 프로그램이 실행되면 운영체제에 의해 메모리에 로드되며, 실행 단위인 프로세스로 관리된다.
특징
- 동적인 객체로, 실행 중인 프로그램을 의미한다.
- 코드, 데이터, 스택, 힙, 프로세스 제어 블록(PCB) 등으로 구성된다.
- 각 프로세스는 독립적인 주소 공간을 가지며, 다른 프로세스와 데이터를 공유하지 않는다.
구성 요소
- 코드 섹션(Code): 실행될 명령어 집합이다. 프로그램의 소스 코드에서 컴파일된 결과물이 여기에 포함된다.
- 데이터 섹션(Data): 전역 변수 및 정적 변수 데이터가 저장된다.
- 힙(Heap): 실행 중 동적으로 할당된 메모리 영역이다.
- 스택(Stack): 함수 호출과 지역 변수를 저장하는 메모리 영역이다.
- 프로세스 제어 블록(PCB):
- 프로세스 ID: 각 프로세스를 식별하기 위한 고유 ID.
- 프로세스 상태: 준비 상태, 실행 상태, 대기 상태 등.
- 프로세스 우선순위: CPU 스케줄링에 사용되는 우선순위 정보.
- 레지스터 정보: 현재 명령어와 관련된 레지스터 상태.
- 메모리 관리 정보: 페이지 테이블, 메모리 경계 정보.
- I/O 상태: 프로세스가 사용하는 입출력 장치 및 파일 정보.
사용 시점
사용자가 프로그램을 실행할 때 생성된다. 예를 들어, 웹 브라우저를 실행하면 해당 브라우저의 프로세스가 생성된다.
스레드 (Thread)
정의
스레드는 프로세스 내에서 실행되는 작업의 단위이다. 하나의 프로세스는 여러 스레드를 가질 수 있으며, 각 스레드는 병렬 처리가 가능하다.
특징
- 프로세스의 실행 단위이다.
- 프로세스 내에서 코드, 데이터, 힙을 공유하지만, 스택과 레지스터는 각 스레드가 개별적으로 가진다.
- 멀티태스킹과 병렬 처리가 가능하다.
구성 요소
- 스레드 ID: 스레드를 구별하기 위한 고유 식별자이다.
- 프로그램 카운터(PC): 스레드가 실행 중인 명령어의 위치를 저장한다.
- 레지스터(Register): 스레드의 상태를 유지하기 위해 사용된다.
- 스택(Stack): 스레드별로 독립적인 함수 호출 기록과 지역 변수를 저장한다.
- 공유 자원:
- 코드 섹션(Code): 모든 스레드가 동일한 코드 섹션을 공유한다.
- 데이터 섹션(Data): 전역 변수 및 정적 변수를 공유한다.
- 힙(Heap): 스레드 간 동적으로 할당된 메모리를 공유한다.
사용 시점
멀티태스킹이 필요할 때 사용된다. 예를 들어, 웹 브라우저에서 여러 탭을 동시에 로드할 때 각 탭이 별도의 스레드로 실행될 수 있다.
표로 정리한 주요 차이점
| 항목 | 정의 | 특징 | 저장 위치 | 사용 시점 |
| 프로그램 | 특정 작업을 수행하기 위해 작성된 명령어들의 집합 | 정적 객체, 실행되지 않은 상태 | 디스크 | 특정 작업을 수행하고자 할 때 |
| 프로세서 | 프로그램의 명령어를 실제로 실행하는 하드웨어 | 하드웨어, 명령어 해석 및 실행 | CPU 소켓 | 컴퓨터가 켜져 있는 동안 |
| 프로세스 | 실행 중인 프로그램의 인스턴스 | 동적 객체, 독립적인 주소 공간 | 메모리(RAM) | 프로그램이 실행될 때 |
| 스레드 | 프로세스 내에서 실행되는 작업의 단위 | 경량 프로세스, 메모리 공유 가능 | 메모리(RAM) | 멀티태스킹이 필요할 때 |
표로 정리한 구성 요소 요약
| 항목 | 구성 요소 |
| 프로그램 | 소스 코드, 데이터 파일, 라이브러리, 실행 파일 |
| 프로세서 | ALU, 제어 장치(CU), 레지스터, 캐시, 코어, 클록 |
| 프로세스 | 코드 섹션, 데이터 섹션, 힙, 스택, 프로세스 제어 블록(PCB) |
| 스레드 | 스레드 ID, 프로그램 카운터, 레지스터, 스택, 공유 자원(코드 섹션, 데이터 섹션, 힙) |
다이어그램으로 보는 관계
프로그램 (정적) ──> 실행 (운영체제) ──> 프로세스 (동적)
└─> 코드 섹션 ─┐
├─> 힙
├─> 데이터 섹션
└─> 스택 ─┐
├─> 스레드 1
└─> 스레드 2
프로세서(Processor)는 명령어를 처리하며 프로그램 실행을 담당
결론
프로그램은 실행되지 않은 상태의 명령어 집합이고, 프로세서는 이를 실제로 처리하는 하드웨어 장치이다. 프로그램이 실행되면 프로세스가 되며, 프로세스는 독립적인 주소 공간을 가진다. 스레드는 프로세스 내에서 병렬적으로 실행되는 작업 단위이다.
'CS' 카테고리의 다른 글
| [CS/OS] 운영체제의 구성 요소와 역할 그리고 커널만 메모리에 상주하는 이유 (0) | 2025.01.14 |
|---|---|
| [CS/컴퓨터구조] 컴퓨터 구조와 동작 과정: 전원 공급에서 프로그램 실행까지 (0) | 2025.01.14 |