[OS] 프로세스(Process)란?

Austin·2025년 4월 5일

OS

목록 보기
2/4
post-thumbnail

프로세스란?

운영체제에서 프로세스(Process) 는 실행 중인 프로그램을 의미한다. 프로세스는 단순한 코드 덩어리가 아니라, 프로그램 실행을 위한 여러 정보와 자원을 포함한다.

프로세스의 정의

프로세스(Process): 실행 중인 프로그램의 인스턴스
프로세스는 운영체제에 의해 관리되며, 각 프로세스는 독립적인 실행 단위로서 시스템 자원을 할당받아 사용한다.

프로그램? 프로세스?

프로그램은 일반적으로 하드디스크 등과 같은 저장장치에 저장되어 있는 실행코드를 뜻한다.
프로세스는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업 단위를 지칭한다.
예를 들어, 하나의 프로그램을 여러 번 구동하면 여러 개의 프로세스가 메모리 상에서 실행된다.

프로세스 메모리 구조

일반적으로 프로세스는 다음과 같은 네 가지 주요 부분으로 구성 된다.

구조설명
코드 (Code)실행할 프로그램의 명령어가 저장되는 영역
데이터 (Data)초기화된 전역 변수와 정적 변수가 저장되는 영역
스택 (Stack)함수 호출 시 사용되는 지역 변수, 매개변수, 반환 주소 등이 저장되는 영역
힙 (Heap)동적으로 할당된 메모리가 저장되는 영역 (malloc, new 등)

프로세스의 상태

프로세스는 실행 중 여러 상태를 가진다.
상태 전환은 운영체제의 스케줄러에 의해 관리 된다.

  • 생성 (New): 프로세스가 생성된 상태
  • 준비 (Ready): CPU를 할당받기 위해 대기 중인 상태
  • 실행 (Running): CPU에서 실행 중인 상태
  • 대기 (Waiting): I/O 작업 등으로 인해 대기 중인 상태
  • 종료 (Terminated): 실행이 완료된 상태

프로세스 제어 블록 (PCB)

프로세스 제어 블록은 운영 체제가 모든 프로세스에 대해 유지 관리하는 데이터 구조다.
PCB는 정수 프로세스 ID(PID)로 식별된다.
PCB는 프로세스의 수명 동안 유지되며 프로세스가 종료되면 삭제된다.
PCB는 아래 표에 나열된 대로 프로세스를 추적하는 데 필요한 모든 정보를 보관한다.

구조설명
프로세스 상태 (Process State)프로세스의 현재 상태. 예: 준비(Ready), 실행(Running), 대기(Waiting) 등
프로세스 권한 (Process privileges)시스템 자원 접근을 허용하거나 거부하기 위한 권한 정보
프로세스 ID (Process ID)운영체제 내에서 각 프로세스를 고유하게 식별하기 위한 ID
포인터 (Pointer)부모 프로세스를 가리키는 포인터
프로그램 카운터 (Program Counter)다음에 실행될 명령어의 주소를 가리키는 포인터
CPU 레지스터 (CPU registers)실행 상태를 유지하기 위해 프로세스가 사용하는 다양한 CPU 레지스터
CPU 스케줄링 정보 (CPU Scheduling Information)프로세스 우선순위 및 스케줄링을 위한 기타 정보
메모리 관리 정보 (Memory management information)페이지 테이블, 메모리 한계, 세그먼트 테이블 등 메모리 관련 정보
회계 정보 (Accounting information)CPU 사용량, 실행 시간 제한, 실행 ID 등 실행에 대한 통계 정보
입출력 상태 정보 (IO status information)프로세스에 할당된 입출력 장치 목록

프로세스 스케줄링

프로세스 스케줄링은 제한된 CPU 자원을 여러 프로세스에 효율적으로 분배하는 메커니즘이다.
운영 체제는 한 번에 여러 프로세스를 실행 가능한 메모리에 로드할 수 있으며 로드된 프로세스는 시간 멀티플렉싱을 사용하여 CPU를 공유한다.

스케줄러 종류

장기 스케줄러 (Long-Term Scheduler)단기 스케줄러 (Short-Term Scheduler)중기 스케줄러 (Medium-Term Scheduler)
작업 스케줄러CPU 스케줄러프로세스 교체 스케줄러
속도는 단기 스케줄러보다 낮다속도는 다른 두 가지 중에서 가장 빠르다속도는 단기 스케줄러와 장기 스케줄러 사이에 있다
멀티프로그래밍의 정도를 제어한다멀티프로그래밍의 정도에 대한 제어력이 약하다멀티프로그래밍의 정도를 줄인다
타임쉐어링 시스템에서는 거의 없거나 최소한으로 존재한다타임쉐어링 시스템에서도 최소화된다시간 공유 시스템의 일부다
풀에서 프로세스를 선택하여 실행을 위해 메모리에 로드한다실행할 준비가 된 프로세스를 선택한다프로세스를 메모리에 다시 등록하고 실행을 계속할 수 있도록 한다

프로세스 스케줄링 대기열

  • 작업 대기열(Job queue) − 이 대기열은 시스템의 모든 프로세스를 보관
  • 준비 큐(Ready queue) − 이 큐는 메인 메모리에 상주하는 모든 프로세스 집합을 준비하고 실행을 기다립니다. 새 프로세스는 항상 이 큐에 배치
  • 장치 대기열(Device queues) − I/O 장치를 사용할 수 없어 차단된 프로세스가 이 대기열을 구성

OS는 각 대기열을 관리하기 위해 다양한 알고리즘(FIFO, 라운드 로빈, 우선순위 등)을 사용할 수 있다.

스케줄링 알고리즘

운영 체제는 다음과 같은 알고리즘으로 CPU를 효율적으로 분배한다.

알고리즘특징장점단점
FCFS (First Come First Serve)먼저 도착한 프로세스를 먼저 처리구현이 간단긴 작업이 먼저 실행되면 대기 시간이
길어질 수 있음
Round Robin모든 프로세스에 동일한 시간 할당
(시간 퀀텀 사용)
공정한 분배,
멀티태스킹에 적합
시간 퀀텀 선택이 어려움,
컨텍스트 스위칭 오버헤드 발생
Priority Scheduling우선순위가 높은 프로세스를 먼저 처리
중요한 작업을 빠르게 처리 가능
낮은 우선순위작업이 기아(starvation)에 빠질 수 있음
SJF (Shortest Job First)가장 짧은 작업부터 처리평균 대기 시간 감소작업의 실행 시간을 미리 알아야 함
SRTF (Shortest
Remaining Time First)
남은 실행 시간이 가장 짧은 작업부터 처리
(SJF의 선점형 버전)
효율적 자원
활용 가능
잦은 컨텍스트 스위칭으로 오버헤드 증가

컨텍스트 전환 (Context Switching)

컨텍스트 전환(Context Switching) 은 운영체제가 CPU를 하나의 프로세스에서 다른 프로세스로 전환할 때, 현재 프로세스의 상태(컨텍스트)를 저장하고, 새로운 프로세스의 상태를 복원하는 메커니즘이다.
이 기능은 멀티태스킹 운영체제의 핵심 요소로, 단일 CPU가 여러 프로세스를 마치 동시에 실행하는 것처럼 보이게 만드는 기반 기술이다.

작동 방식

  • 현재 실행 중인 프로세스(P1)가 CPU를 사용 중
  • 스케줄러가 새로운 프로세스(P2)를 실행할 차례라고 판단
  • 운영체제는 다음을 수행:
    • P1의 컨텍스트를 PCB(Process Control Block)에 저장
    • P2의 컨텍스트를 PCB에서 복원
    • CPU 레지스터, 프로그램 카운터(PC), 상태 레지스터 등을 업데이트
    • 이제 P2가 CPU에서 실행을 시작함
  • 이 과정을 통해 P1은 “멈췄던 지점”에서 언제든지 다시 실행될 수 있다.

저장 및 복원되는 컨텍스트 정보

항목설명
프로그램 카운터 (PC)프로세스가 다음에 실행할 명령어 주소
CPU 레지스터일반 목적 및 특수 목적 레지스터 (예: RAX, RBX 등)
스택 포인터 & 베이스 포인터함수 호출/복귀와 관련된 스택 메모리 위치
스케줄링 정보우선순위, 스케줄링 큐 정보 등
메모리 관리 정보페이지 테이블, 세그먼트 테이블, 기준/한계 레지스터 등
I/O 상태 정보열린 파일, 장치 상태, 대기 중인 I/O 요청 등
회계 정보 (Accounting Info)CPU 사용 시간, 프로세스 ID, 사용자 ID, 메모리 사용량 등
프로세스 상태실행 중(Running), 대기(Waiting), 준비(Ready) 등

참고자료
tutorialspoint

0개의 댓글