프로세스(Process)란?
실행파일(프로그램)이 메모리에 적재되어 CPU 자원을 할당 받아 실행되는 것.
프로그램(Program)
실행 가능한 파일 형태로 디스크와 같은 보조 기억 장치에 저장되어 있는 명령어와 데이터의 집합.
프로그램의 명령어와 정적 데이터가 메모리에 적재되면 프로세스가 된다.
프로세스 특징
○ 각각 독립된 메모리 영역(code, data, stack, heap 영역)을 할당받음.
→ 이는 프로세스 간의 간섭을 방지하고 안정적인 시스템 운영을 보장
Code 영역(정적) | 실행한 프로그램의 코드가 저장되는 메모리 영역 |
Data 영역(정적) | 프로그램의 전역 변수, static 변수가 저장되는 메모리 영역 |
Heap 영역(동적) | 프로그래머가 직접 공간은 할당(malloc)/해제(free)하는 메모리 영역 |
Stack 영역(동적) | 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 임시 메모리 영역 |
○ 프로세스 당 하나 이상의 스레드를 가짐.
○ 각 프로세스는 별도의 주소 공간에서 실행됨.
→ 따라서 다른 프로세스의 메모리에 직접 접근 불가
○ IPC (Inter Process Communication)
→ 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘 (공유 메모리, 파일, 소켓, 메시지 큐, 파이프 등을 이용한 통신 방법)
프로세스 상태
프로세스 상태 전환은 CPU 스케줄링에 따라 변화한다.
- Created (생성)
- 작업(job)이 커널에 등록
- 프로세스 생성 및 PCB 할당
- 커널이 가용 메모리 공간 체크 및 프로세스 상태 전이 (ready / suspended ready)
- Ready (대기)
- CPU를 제외한 모든 자원을 할당받은 상태
- 즉시 실행 가능 상태
- Dispatch : ready → running
- Running (실행)
- 현재 CPU를 점유하고 실행중인 상태
- Preemption (선점)
- 현재 실행중인 프로세스를 중단시키고 다른 프로세스에게 CPU를 할당하는 것
- running → ready
- CPU 스케줄링 (time-out, priority changes..)
- Block / sleep
- running → asleep
- I/O 등 자원 할당 요청
- Blocked / Asleep (블록/대기)
- 프로세스가 어떤 이벤트를 기다리며 일시적으로 실행을 중단한 상태
- wake-up
- asleep → ready
- Suspended (중단)
- 메모리를 할당 받지 못한(빼앗긴) 상태
- 메모리 부족 시 발생
- Terminated / Zombie (종료/좀비)
- 프로세스 수행이 끝난 상태
- 모든 자원 반납 후, 커널 내에 일부 PCB 정보만 남아 있는 상태 (이후 프로세스 관리를 위해 정보 수집)
- 좀비상태 : 시스템으로부터 완전히 제거되지 않고, 부모 프로세스가 종료 상태를 확인할 때까지 존재하는 상태
PCB (Process Control Block)
운영체제가 프로세스를 관리하기 위해 사용하는 자료 구조
프로세스에 대한 메타데이터를 저장한 데이터
운영체제는 프로세스 생성과 동시에 고유한 PCB 생성
PCB 구조
- PID
- 스케줄링 정보
- 프로세스 상태
- 메모리 관리 정보
- 문맥(context) 저장 영역
프로세스의 context란?
프로세스가 현재 어떤 상태로 수행되고 있는지에 대한 정보로, 해당 정보는 PCB에 저장.
Context Switching (컨텍스트 스위칭)
CPU가 현재 실행 중인 프로세스의 실행을 중단하고, 다른 프로세스로 전환하는 과정
이 과정에서 현재 실행 중인 프로세스의 상태(컨텍스트)를 저장하고, 이전에 중단되었던 다른 프로세스의 상태를 복원하는 작업이 이루어진다.
Context Switching 과정
1. 현재 프로세스의 컨텍스트를 저장 : CPU는 현재 실행 중인 프로세스의 컨텍스트를 PCB에 저장
2. 새로운 프로세스 컨텍스트 로드 : CPU는 다음에 실행할 프로세스의 컨텍스트를 PCB에서 읽어와 레지스터에 적재
3. 프로그램 카운터 업데이트 : 새로운 프로세스의 프로그램 카운터를 설정하여 실행할 명령어의 위치를 지정
4. 제어권 이전 : CPU는 새로운 프로세스로 제어권을 넘겨줌
왜 Context Switching이 필요할까?
- 멀티태스킹 : 여러 프로세스가 동시에 실행되는 것처럼 보이게 하기 위해서
- 응답성 향상 : 사용자의 입력에 빠르게 응답하기 위해서
- 자원 효율성 : CPU를 효율적으로 활용하기 위해서
스레드에서의 Context Switching
컨텍스트 스위칭은 스레드에서도 일어난다.
스레드는 스택 영역을 제외한 모든 메모리를 공유하기 때문에, 스레드 컨텍스트 스위칭의 경우 비용이 더 적고 시간도 더 적게 걸린다.
질문 List >
Q. 프로그램과 프로세스의 차이점
프로그램은 정적인 파일이고, 프로세스는 실행 중인 프로그램의 인스턴스이다.
Q. 힙 영역과 스택 영역 차이
두 영역은 같은 물리 메모리 공간을 공유하는데, 스택은 높은 주소에서 낮은 주소로, 힙은 낮은 주소에서 높은 주소로 채워지기 때문에 서로의 영역을 누가 침범하느냐에 따라 heap overflow, stack overflow가 발생
(메모리의 위쪽에 위치할 수록 낮은 주소, 아래쪽에 위치할 수록 높은 주소)
'CS > 운영체제' 카테고리의 다른 글
스레드와 멀티스레드 (0) | 2025.01.16 |
---|---|
멀티프로세스 (0) | 2025.01.16 |
메모리(Memory) (0) | 2025.01.14 |
컴퓨터의 요소 (0) | 2025.01.10 |
운영체제 (0) | 2025.01.10 |