1. 프로세스란?
프로세스(Process) = 실행 중인 프로그램

- 우리가 작성한 코드(sample.c)를 컴파일하면 **실행 파일(.exe 등)**이 생성됨
- 이 실행 파일이 실행되면 운영체제가 이를 메모리에 **적재(load)**하고, 프로세스로 생성
- 프로세스는 단순히 코드 덩어리가 아닌, 실행을 위한 정보와 상태가 모두 포함
2. 실행 파일의 구조

실행 파일의 구조
| 구성 요소 | 설명 |
| Header | 코드/데이터 크기 등 메타 정보 |
| Code (Text) 섹션 | 실행 명령어 |
| Data 섹션 | 초기화된 전역 변수 |
| 기타 | 심볼 테이블, 디버깅 정보 등 |
실행 후 메모리 구조 (프로세스 주소 공간)
sample.c를 컴파일하면 sample.exe의 실행 파일이 생성됨!!
sample.exe를 실행하면 메모리에 만들어지는 프로세스가 생성됨.

3. 프로세스의 구성 요소

프로세스의 구성 요소
| 구성 요소 | 설명 |
| 코드(Code) | 실행할 명령어 |
| 데이터(Data) | 전역 변수 |
| 스택(Stack) | 지역 변수, 함수 호출 시 정보 (함수가 호출되기 전에는 만들어지지 않고, 함수 호출 시에 생성되고, 함수가 사리질 때 같이 사라짐) |
| 힙(Heap) | 실행 중 동적 할당 공간(malloc(n)의 형태로 n바이트의 메모리를 할당해서 할당된 메모리의 주소 값을 반환!) |
| CPU 레지스터 | PC, CS, DS, SS 등 (프로세스 실행 상태 저장) |
메모리의 RAM 부분에 프로세스가 저장됨. CS, PC, DS, SS 등의 레지스터에 프로세스의 각각에 해당되는 주소가 저장!!
스택은 프로세스의 끝 주소를 시작 위치 값으로 가져, 높은 번지에서 낮은 번지 쪽으로 쌓임.
힙은 데이터(전역 변수) 저장 위치의 끝에서 부터 시작해서 스택과 반대로 쌓임.
4. PCB(Process Control Block)란?
운영체제가 프로세스를 관리하기 위해 유지하는 데이터 구조
각 프로세스가 만들어질 때 운영체제는 PCB를 생성하고, 프로세스가 종료되면 PCB를 제거
PCB의 내용
| 정보 | 종류 설명 |
| 프로세스 ID (PID) | 고유 식별자 |
| 프로세스 상태(state) | Ready, Running, Waiting 등 |
| CPU 레지스터 | 프로그램 카운터, 스택 포인터 등 |
| CPU 스케줄 정보 | 우선순위, 큐 포인터 등 |
| 메모리(기억 장치) 관리 정보 | 페이지 테이블, 세그먼트 정보 등 |
| I/O(입출력) 상태 정보 | 열린 파일, 입출력 요청 등 |
| 계정 정보 | CPU 사용량, 소유자 정보 등 |
PCB 구조 예시 (C 구조체 형태)

위 그림과 같은 식으로 PCB에 정보가 저장되어 있음.
이전에 인터럽트 처리 과정에서 상태 레지스터 값, PC 값 등의 정보를 저장해놨다가 복원시에 사용한다고 했는데, 프로세스 PCB의 CPU registers에서 이러한 정보들을 저장함!!
'OS' 카테고리의 다른 글
| [운영체제] 프로세스의 스케줄링(Scheduling) 이란? (0) | 2025.03.31 |
|---|---|
| [운영체제] 프로세스의 상태(Process State) 란? (0) | 2025.03.26 |
| [운영체제] 사용자 인터페이스와 운영체제 (0) | 2025.03.24 |
| [운영체제] 시스템 호출(System Call)과 운영체제 (0) | 2025.03.19 |
| [운영체제] 저장장치(Storage) 란? 캐싱(Cashng) 이란? 인터럽트(Interrupt) 란? (0) | 2025.03.17 |