2025-09-17 23:53
Tags: 소프트웨어 공학
프로세스
-
실행 중인 프로그램으로, 운영체제에서 작업의 기본 단위다.
-
프로세스는 독립된 메모리 공간(코드, 데이터, 힙, 스택)을 가지며, 그 상태는 PCB(프로세스 제어 블록)를 통해 관리된다.
-
운영체제는 문맥 교환을 통해 여러 프로세스를 빠르게 번갈아 실행하며 다중 작업을 구현한다.
-
CPU가 일하다가 한 프로그램에서 대기 상태 → 그동안 다른걸로 전환해서 작업 (멀티태스킹)
- 이때 각 프로그램이 어디까지 실행되었는지, 어떤 메모리를 사용하고 있는지, 어떤 파일을 열고 있는지 등
- 모든 상태 정보를 독립적으로 추적하고 관리할 수 있는 새로운 단위가 필요
- → 각 프로그램을 독립적인 프로세스로 만들어 관리하기 시작.
- 여러 개의 프로세스가 짧은 시간 간격으로 번갈아 가며 CPU를 점유하는 ‘시분할 시스템(Time-sharing System)‘이 가능해졌고,
- 사용자는 마치 여러 프로그램이 동시에 실행되는 것처럼 느끼게 되었다.
- 이때 각 프로그램이 어디까지 실행되었는지, 어떤 메모리를 사용하고 있는지, 어떤 파일을 열고 있는지 등
-
프로그램(Program): 레시피
- 특정 작업을 수행하기 위해 작성된 코드의 묶음.
- 하드 디스크나 SSD에 저장된, 실행 가능한 파일 상태다.
- 그 자체로는 생명이 없는 정적인 코드 덩어리다.
-
프로세스(Process): 요리
- 프로그램이 실행되어 메모리에 올라온 동적인 상태.
- 즉, ‘실행 중인 프로그램’이다.
- 프로세스는 자신만의 메모리 공간, 자원, 그리고 실행 상태를 가진다.
프로세스의 구조: 메모리 들여다보기
- 프로세스가 생성되면 운영체제는 해당 프로세스만을 위한 독립적인 메모리 공간을 할당한다.
- 코드(Code) 또는 텍스트(Text) 영역
- 실행할 프로그램의 기계어 코드가 저장되는 공간이다
- 이 영역은 읽기 전용(Read-Only)으로 설정되어, 프로세스가 실행 중에 자신의 코드를 수정하는 것을 방지한다.
- 여러 프로세스가 같은 프로그램을 실행할 경우, 이 코드 영역은 메모리에서 공유될 수 있다.
- 데이터(Data) 영역
- 프로그램의 전역 변수(Global variables)와 정적 변수(Static variables)가 저장되는 공간이다.
- 이 변수들은 프로그램이 시작될 때 할당되어 프로그램이 종료될 때까지 유지된다.
- 초기화된 데이터는 BSS(Block Started by Symbol) 세그먼트와 구분되어 관리되기도 한다.
- 힙] 영역
- 스택] 영역
프로세스의 생애 주기: 태어나고, 일하고, 잠들고, 사라지다
- 생성(New):
- 프로세스가 막 생성된 상태.
- 운영체제가 해당 프로세스를 위한 각종 자료구조(예: PCB)를 만들고 있지만, 아직 메모리에 완전히 올라오지는 않았다.
- 준비(Ready):
- 프로세스가 메모리에 적재되어 CPU를 할당받기를 기다리는 상태.
- CPU만 있으면 언제든 실행될 수 있는 상태의 프로세스들이 준비 큐(Ready Queue)에서 대기한다.
- 실행(Running):
- 프로세스가 CPU를 할당받아 명령어를 실제로 실행하고 있는 상태.
- 시스템에는 CPU 코어의 수만큼만 실행 상태의 프로세스가 존재할 수 있다.
- 대기(Waiting 또는 Blocked):
- 프로세스가 실행 도중 입출력(I/O) 작업이나 특정 이벤트(예: 파일 읽기 완료, 다른 프로세스의 응답)를 기다려야 할 때 들어가는 상태.
- 이 상태의 프로세스는 CPU를 할당해 줘도 당장 작업을 수행할 수 없다.
- 종료(Terminated):
- 프로세스가 실행을 완료하고 메모리에서 정리되는 상태.
- 운영체제는 해당 프로세스가 사용하던 모든 자원을 회수한다.
구분 | 프로세스 (Process) | 스레드 (Thread) |
---|---|---|
정의 | 실행 중인 프로그램, 자원 할당의 단위 | 프로세스 내의 실행 흐름, CPU 할당의 단위 |
메모리 구조 | 독립적인 메모리 공간 (코드, 데이터, 힙, 스택) | 스택 영역을 제외한 코드, 데이터, 힙 영역을 같은 프로세스 내 다른 스레드와 공유 |
자원 공유 | 원칙적으로 공유하지 않음 (IPC를 통해 통신) | 같은 프로세스 내 자원을 쉽게 공유 가능 |
생성/전환 비용 | 생성 및 문맥 교환 비용이 크다. | 생성 및 문맥 교환 비용이 작다. |
안정성 | 한 프로세스의 오류가 다른 프로세스에 영향을 주지 않음. | 한 스레드의 오류(예: 메모리 침범)가 전체 프로세스에 영향을 미쳐 종료될 수 있음. |