프로세스란?
- 프로그램을 실행시킨 인스턴스
- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 (스케줄링의 대상이 되는 작업과 같은 용어로 쓰임)\
- 프로그램 = 보조 기억 장치에 저장된 실행 코드
- 프로세스 = 프로그램을 가동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위
- 같은 시간에 여러 개의 프로그램을 실행하는 것을 멀티태스킹 이라고 한다.
프로세스의 구성 요소
코드 섹션 (Code Section)
- 실행할 프로그램의 명령어(코드)가 저장된 메모리 영역
- CPU는 이 영역의 명령어를 읽고 실행한다.
데이터 섹션 (Data Section)
- 전역 변수 및 초기화된 데이터가 저장되는 영역
- 프로그램이 실행되면서 공유되거나 수정될 수 있는 데이터가 포함됨.
힙 (Heap)
- 동적으로 메모리를 할당받는 영역
- 런타임에 필요한 메모리를 동적으로 할당 및 해제할 수 있다.
스택 (Stack)
- 함수 호출, 로컬 변수, 매개변수 등이 저장되는 영역
- 함수 호출 시 새로운 프레임이 생성되고 반환되면 메모리가 해제된다.
프로세스 제어 블록 (Process Control Block, PCB)
- 운영체제가 각 프로세스를 관리하기 위해 사용하는 데이터 구조
- 프로세스 상태 (실행 중, 준비 상태, 대기 상태 등)
- 프로세스 ID (PID)
- CPU 레지스터 값
- 메모리 관리 정보
- 입출력 상태 및 자원 정보
프로세스 스케줄링 방식
Non - preemptive (비선점형)
- 프로세스가 스스로 다음 프로세스에게 자리를 넘겨주는 방식
- 실시간 처리가 필요한 RTOS (Real-Time OS, RTOS)
- 실시간 제어가 필요한 산업 분야에서 많이 사용된다.
- FreeRTOS, VxWorks, QNX 등
Preemptive (선점형)
- 운영체제가 강제로 프로세스의 사용권을 통제하는 방식
- 대부분의 범용 운영체제
- 자원의 독점을 방지하여 다양한 프로그램이 동시에 실행되어야 하는 환경에 적합
- Windows, Linux, MacOS 등
프로세스 스케줄링 알고리즘
FCFS (First Come First Serve)
스케줄러에 먼저 도착하는 프로세스 순서대로 CPU를 할당하는 방식으로, 각 작업이 종료될 때 까지 CPU를 빼앗지 않으므로 Non-Preemptive 방식이며, FIFO 방식의 Queue와 동일하게 동작
SJF (Short Job First)
프로세스의 수행 시간이 짧은 순서대로 프로세스를 할당하는 방식으로, 주어진 프로세스에 대해 최소의 평균 대기 시간 보장.
수행 시간이 긴 프로세스는 계속 뒤로 밀려 기아(Starvation) 현상이 발생 가능, 각 프로세스가 얼마나 CPU를 사용할지 모르는 경우 사용하기 어려움
Round Robin
각 프로세스가 동일한 크기의 할당 시간을 갖고 할당 시간이 끝나면 자동으로 선점(Preemptive) 당하고, Ready Queue의 제일 뒤로 할당된다. 기아 현상이 발생하지 않는다.
Priority Processing
프로세스에 우선순위를 부여해 우선순위가 제일 높은 프로세스에 CPU를 할당하는 방식
우선순위가 낮은 프로세스는 기아 현상이 발생할 수 있지만, 우선순위를 높이는 방식으로 부터 해결 가능
프로세스 상태
New (생성)
- 새로운 프로세스가 생성되는 단계
- 프로세스가 생성되었지만, 아직 메모리에 완전히 로드되지 않거나, CPU에서 실행할 준비가 되지 않은 상태
Ready (준비)
- 프로세스가 실행될 준비가 완료된 상태
- Ready Queue에 포함되어 있으며, CPU 스케줄러가 스케줄링할 때까지 대기한다.
Running (실행)
- 프로세스가 실제로 CPU에서 실행되고 있는 상태
- 실행 중 인터럽트가 발생하거나, 타이머가 만료되면 준비(Ready) 또는 대기(Blocked) 상태로 전환된다.
- 프로세스가 실행을 완료하면 종료(Terminate) 상태로 전환된다.
- 프로세스가 실행 도중 특정 이벤트(예: I/O 작업 완료, 자원 할당 등)를 기다리는 상태입니다.
- 프로세스는 Blocked Queue에서 대기합니다.
- 필요한 자원이 사용 가능해지거나 I/O 작업이 완료되면 준비(Ready) 상태로 전환됩니다.
- 예: 디스크 읽기/쓰기 요청, 네트워크 작업 대기.
- 프로세스의 실행이 완료되거나 강제 종료된 상태입니다.
- 운영 체제는 프로세스를 더 이상 처리하지 않습니다.
- PCB가 제거되고, 할당된 메모리와 시스템 자원이 반환됩니다.
- 정상 종료(프로세스가 모든 작업을 완료함) 또는 비정상 종료(에러나 강제 종료로 인해 발생)로 인해 이 상태에 도달할 수 있습니다.
프로세스 상태 변화
Block
- 실행 상태의 프로세스가 허가된 시간을 다 쓰기 전에 입출력 동작이 필요한 경우 프로세스는 CPU를 스스로 반납하고 보류 상태로 넘어갑니다.
- 운영체제는 프로세스가 프로세서를 계속 독점해서 사용하지 못하게 하기 위해 clock interrupt를 두어서 프로세스가 일정 시간 동안만 (시분할 시스템의 time slice) 프로세서를 점유할 수 있게 합니다.
생각해 보기
일반적으로 많이 사용되고 있는 Windows, MacOS, Linux는 어떠한 스케쥴링 알고리즘을 사용하고 있나요?
프로세스는 대기, 실행, 차단을 반복하고 있는데, 우리가 인식하지 못하는 이유는 무엇일까요?
- 높은 전환 속도: 현대 CPU는 초당 수천~수만 번의 컨텍스트 스위칭을 수행합니다
- 선점형 스케줄링: 운영체제가 자동으로 프로세스들을 관리하므로 사용자 개입이 필요 없습니다
- 동시성 착시: 빠른 전환으로 인해 모든 프로세스가 동시에 실행되는 것처럼 보입니다
프로세스가 대기, 실행, 차단을 반복함으로써 발생할 수 있는 문제점 및 이를 위한 해결 방법은?
문제점:
- 컨텍스트 스위칭 오버헤드: 잦은 전환으로 인한 성능 저하
- 우선순위 역전: 높은 우선순위 프로세스가 낮은 우선순위 프로세스를 기다리는 현상
- 기아 상태: 낮은 우선순위 프로세스가 계속 실행되지 못하는 현상
해결방안:
- 프로세스 그룹화: 연관된 프로세스들을 그룹으로 관리하여 컨텍스트 스위칭 최소화
- 우선순위 상속: 낮은 우선순위 프로세스가 높은 우선순위 프로세스가 필요한 자원을 점유할 때 일시적으로 우선순위 상승
- 에이징(Aging): 오래 대기한 프로세스의 우선순위를 점진적으로 높여 기아 상태 방지
- 타임 슬라이스 조정: 프로세스 특성에 따라 적절한 시간 할당량 부여
'🚣활동 > NHN Academy' 카테고리의 다른 글
Main Thread, Single Thread, Multi Thread, Daemon Thread (1) | 2025.02.03 |
---|---|
Thread (스레드) (0) | 2025.02.03 |
Stream (1) | 2025.01.24 |
Lambda Expression (0) | 2025.01.20 |
객체 생성과 제거 (0) | 2025.01.16 |