프로세스(Process)
실행되고 있지 않은 프로그램은 그저 하드디스크와 같은 보조기억장치에 저장된 데이터 덩어리에 불과하다. 그러나 프로그램을 실행하는 순간 해당 프로그램은 메인 메모리에 올라가고 CPU 입출력 장치 등 다양한 시스템 자원을 사용하는 프로세스가 된다.
즉 프로세스란 "실행 중인 프로그램"을 의미하며 실행 상태에서 각종 리소스를 점유하고 활동하는 객체를 말한다.
프로세스 생성(Process Creation)
프로세스 생성은 보조기억장치에 있는 프로그램을 메인 메모리로 불러와 실행 가능한 상태로 만드는 과정이다.
- 로드 및 초기화:
프로그램의 실행 파일을 메인 메모리에 로드하면서 코드, 데이터, 스택, 힙 영역이 할당된다. - 프로세스 제어 블록(PCB)의 생성:
운영체제는 새 프로세스를 식별하고 관리하기 위해 PCB를 생성하여 프로세스 ID, 레지스터 상태, 스케줄링 정보, 프로세스 상태 등을 기록한다. - 부모-자식 관계:
대부분의 운영체제에서는 프로세스가 다른 프로세스를 생성할 수 있다. 이 경우 생성한 프로세스는 자식 프로세스가 되고 생성한 프로세스는 부모 프로세스가 된다.
UNIX 계열 시스템에서는 fork()와 exec() 시스템 호출을 통해 새로운 프로세스가 생성되는 과정을 살펴볼 수 있다.
프로세스 구조
프로세스는 운영체제가 관리하는 하나의 객체이며 내부적으로 다음과 같은 영역들로 구성된다.
- 코드 영역:
실행할 명령어(프로그램 코드)가 저장된 영역이다. - 데이터 영역:
전역 변수, 정적 변수 등이 저장되며 프로그램 실행 중 지속적으로 사용할 데이터를 보관한다. - 스택 영역:
함수 호출 시 생성되는 지역 변수, 매개변수, 리턴 주소 등이 저장되는 휘발성 메모리 영역이다. - 힙 영역:
동적 메모리 할당에 사용되는 영역으로 프로그램 실행 중 필요에 따라 크기가 변할 수 있다.
스레드(Thread)의 이해
- 스레드란?
스레드는 프로세스 내에서 실제 작업을 수행하는 실행 단위로 하나의 프로세스는 여러 개의 스레드를 포함할 수 있다. - 프로세스와의 차이점:
- 프로세스는 독립적인 메모리 공간과 리소스를 가지지만 같은 프로세스 내의 스레드는 메모리를 공유한다.
- 스레드 간의 컨텍스트 스위칭은 프로세스 간 전환보다 오버헤드가 적은 편이다.
- 멀티스레딩의 장점:
- 응답성 향상: 한 스레드가 I/O 작업으로 대기하는 동안 다른 스레드가 실행될 수 있다.
- 자원 공유: 프로세스 내부에서 데이터를 공유함으로써 효율적인 협업이 가능하다.
레지스터(Register)의 역할
비록 레지스터는 프로세스의 메모리 영역은 아니지만 CPU가 명령어를 실행할 때 사용되는 임시 저장소로서 매우 중요한 역할을 한다.
- 실행 상태 저장:
현재 실행 중인 프로세스의 레지스터 값(예: 프로그램 카운터, 스택 포인터, 플래그 등)은 프로세스의 실행 상태를 나타내며 컨텍스트 스위칭 시 반드시 저장되고 복원되어야 한다.
Process Control Block (PCB)
PCB는 운영체제가 각 프로세스에 대해 관리하는 핵심 자료구조이다.
- 구성 요소:
- 프로세스 ID
- 프로세스 상태 (예: 준비, 실행, 대기 등)
- CPU 레지스터 값
- 스케줄링 정보 (우선순위, 시간 할당량 등)
- 메모리 관리 정보
- 역할:
PCB는 프로세스 간의 전환, 자원 배분, 프로세스 제어 등의 작업에서 필수적인 정보로 활용된다.
프로세스 상태
운영체제는 CPU가 여러 프로세스를 번갈아 실행할 수 있도록 하기 위해 각 프로세스의 상태를 관리한다.
- 생성(New):
프로세스가 메모리에 로드되어 초기화되는 상태 - 준비(Ready):
CPU 할당을 기다리며 실행 준비가 된 상태 - 실행(Running):
현재 CPU에서 명령어를 실행 중인 상태 - 대기(Blocked/Waiting):
입출력 요청 등 특정 이벤트를 기다리느라 실행이 중단된 상태 - 종료(Terminated):
프로세스의 실행이 완료되어 시스템에서 제거되는 상태
프로세스 계층
프로세스는 실행 도중 다른 프로세스를 생성할 수 있으며 이때 부모-자식 관계가 형성된다.
- 부모 프로세스:
다른 프로세스를 생성한 원천 프로세스 - 자식 프로세스:
부모에 의해 생성된 프로세스로 독립적인 프로세스 ID를 가지며 자신의 작업을 수행합니다. - 계층 구조:
이러한 부모-자식 관계는 트리 형태의 계층 구조로 관리되며 운영체제는 이를 기반으로 프로세스의 자원 배분, 권한 관리 등을 수행한다.
컨텍스트 스위칭 (Context Switching)
컨텍스트 스위칭은 CPU가 한 프로세스(또는 스레드)에서 다른 프로세스로 전환될 때 현재 작업 상태(컨텍스트)를 저장하고 새 작업의 상태를 복원하는 과정이다.
- 과정:
- 현재 프로세스 상태 저장:
CPU는 실행 중인 프로세스의 레지스터, 프로그램 카운터, 플래그 등 현재 상태를 PCB에 저장 - 새로운 프로세스 선택:
스케줄러가 준비 상태에 있는 프로세스 중 하나를 선택 - 새 프로세스 상태 복원:
선택된 프로세스의 PCB에서 저장된 상태를 CPU의 레지스터 등에 복원 - 실행 재개:
CPU는 새롭게 로드된 프로세스의 명령어 실행을 시작
- 현재 프로세스 상태 저장:
- 추가 고려 사항:
- 오버헤드:
컨텍스트 스위칭은 상태 저장과 복원, 캐시 초기화 등의 작업으로 인해 CPU 사이클과 시간이 소요되어 빈번할 경우 성능 저하 요인이 될 수 있다. - 스레드 vs. 프로세스 스위칭:
같은 프로세스 내 스레드 간의 전환은 메모리 공간을 공유하므로 오버헤드가 상대적으로 적다. - 스케줄링과의 연관성:
효율적인 컨텍스트 스위칭은 운영체제의 스케줄링 정책과 밀접하게 연관되며 스케줄링 알고리즘이 컨텍스트 스위칭의 빈도와 오버헤드를 결정하는 중요한 요소다.
- 오버헤드:
CPU 스케줄링 (CPU Scheduling)
CPU 스케줄링은 운영체제가 어떤 프로세스나 스레드가 언제 CPU를 사용할지를 결정하는 메커니즘이다.
- 목적:
- 여러 프로세스 간의 효율적인 CPU 사용
- 응답 시간 최소화 및 전체 시스템 성능 향상
- 주요 스케줄링 알고리즘:
- Round Robin (라운드 로빈):
모든 프로세스에 동일한 시간 할당량(time slice)을 주고 순환하며 실행 - Priority Scheduling (우선순위 스케줄링):
프로세스의 우선순위에 따라 실행 순서를 결정 - Shortest Job First (SJF):
예상 실행 시간이 짧은 프로세스를 우선 실행 - Multi-Level Queue Scheduling (다단계 큐 스케줄링):
프로세스들을 여러 큐에 분류하고 각 큐에 다른 스케줄링 정책을 적용
- Round Robin (라운드 로빈):
- 스케줄링과 컨텍스트 스위칭:
- 스케줄링 결정 시 컨텍스트 스위칭이 자주 발생하면 그에 따른 오버헤드가 증가할 수 있으므로 효율적인 스케줄링은 컨텍스트 스위칭의 빈도를 최적화하는 것이 중요하다.
- 실시간 스케줄링:
- 특정 시간 내에 작업을 완료해야 하는 실시간 시스템에서는 보다 정교한 스케줄링 전략이 필요하다.
'컴퓨터 과학' 카테고리의 다른 글
Protocol이란? (0) | 2025.04.15 |
---|---|
파일과 디렉터리의 이해 (0) | 2025.04.15 |
메모리와 페이지 교체 이해하기 (0) | 2025.04.14 |
현대 컴퓨터 시스템의 자원 관리 및 데드락 해결 전략 (2) | 2025.04.07 |
운영체제와 컴퓨터 하드웨어 구조 이해하기 (0) | 2025.01.16 |