[OS] 프로세스

Euiyeon Park·2025년 6월 18일

Operating System

목록 보기
4/4
post-thumbnail

프로세스의 개념

프로세스(Process)란 컴퓨터에서 연속적으로 실행되고 있는 프로그램이다.
종종 스케줄링의 대상이 되는 작업(Task)이라는 용어와 거의 같은 의미로 쓰인다.
- 위키백과

프로세스의 문맥(Context)

  • CPU 수행 상태를 나타내는 하드웨어 문맥
  • 프로세스의 현재 상태를 의미 - 뭘 해서 지금의 상태까지 왔는가?
  • 특정 시점에서 어디까지 수행을 했는지 규명하는데 필요한 요소
  • 프로세스의 문맥을 나타내기 위해서는 PC(Program Counter)가 가리키는 부분을 참조
    • PC는 CPU가 다음에 실행할 명령어의 주소를 저장하고 있는 레지스터
    • 현재 프로세스의 실행 위치(명령어)를 추적
  • 프로세스의 문맥은 code, data, stack 의 상태를 저장함
    • 코드는 어디까지 수행? 어떤 데이터를 저장? 어떤 메서드를 호출?
  • 프로세스는 실행 시 독립적인 주소 공간을 생성한 뒤
    CPU를 할당받으면 PC가 프로세스의 code 영역의 어느 한 부분을 가리키고,
    매 순간 명령어를 읽어 실행(레지스터에 값을 넣고 연산하고 저장하고 등)

프로세스 문맥의 구성요소

1. 하드웨어 문맥(Hardware Context)

프로세스가 CPU를 사용하던 상태를 저장한 정보

  • PC(Program Counter) : 다음에 실행할 명령어의 주소
  • Register : 현재 작업 중인 값들이 저장되어 있음

2. 주소 공간 문맥(Memory Context)

프로세스의 독립적인 메모리 공간 상태를 나타냄

  • Code 영역 : 실행할 명령어
  • Date 영역 : 전역 변수, 정적 변수
  • Stack 영역 : 함수 호출, 지역 변수 등 실행 흐름과 관련된 정보

3. 커널 문맥(Kernel Context)

운영체제가 프로세스를 관리하기 위해 유지하는 정보

  • PCB(Process Control Block) : 프로세스 ID, 상태, 우선순위 등 관리 정보
  • Kernel Stack : 시스템 콜 처리 중에 사용하는 커널 스택
    • 프로세스마다 별도의 커널 스택이 존재
    • 시스템 콜 진입 시, PC는 사용자 영역이 아닌 커널 코드 영역을 가리킴

프로세스의 상태

  • Running : CPU를 잡고 명령어를 수행 중인 상태
    • 운영체제의 상태를 Running으로 표현하지 않음
  • Ready : (다른 조건을 모두 만족하고) CPU 할당을 기다리는 상태
  • Blocked(wait, sleep) : CPU를 줘도 당장 명령어를 실행할 수 없는 상태
    • 자신이 요청한 이벤트(I/O 요청 등)가 즉시 만족되지 않아 대기 중인 상태
    • Ex. 디스크에서 파일을 읽어와야 하는 경우, 메모리에 로드되지 않은 경우
    • 자신이 요청한 이벤트가 만족되면 Ready 상태
  • Suspended(Stopped) : 외부적인 이유로 프로세스 수행이 정지된 상태, 강제 종료
    • 프로세스는 통째로 디스크에 Swap Out
    • 메모리에 너무 많은 프로세스가 올라와있을 때
    • 외부에서 resume 해줘야 Active 상태로 변화
  • New : 프로세스가 생성 중인 상ㅌ애
  • Terminated : 수행(execution)이 끝난 상태

PCB(Process Control Block)

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스마다 유지하는 정보
  • 프로세스마다 하나씩 1:1 매핑
  • 구조체로 유지

PCB 구성 요소

이미지 출처

1. OS가 관리상 사용하는 정보

  • Process State(Ready, Blocked .. ), Process Id
  • Scheduling Information, Priority

2. CPU 수행 관련 하드웨어 값 - 프로세스 문맥

  • Program Counter(PC), Register

3. 메모리 관련

  • code, data, stack 위치 정보

4. 파일 관련

  • Open File Descriptors, ..

Context Switch(문맥 교환)

이미지 출처

  • CPU한 프로세스에서 다른 프로세스를 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 :
      1. CPU를 뺏기는 프로세스의 상태를 그 프로세스의 PCB에 저장
      1. CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
  • ⚠️ 시스템 콜이나 인터럽트 발생 시 반드시 문맥 교환이 일어나는 것은 아님
    • CPU제어권이 사용자 프로세스 → OS로 넘어가는 과정이 문맥교환❌
    • 문맥교환은 사용자 프로세스A ↔ 사용자 프로세스B

프로세스를 스케줄링하기 위한 큐

운영체제가 프로세를 효율적으로 관리하고 스케줄링하기 위해 사용하는 대기열

  • Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready Queue : CPU를 기다리는 모든 프로세스들의 대기열, 실행 가능한 상태
  • Deviced Queue : I/O 장치의 사용을 기다리는 프로세스들의 대기열

큐 간 전이

  • 프로그램 시작 → Job Queue에 등록
  • 메모리에 올라오면 → Ready Queue로 이동
  • CPU 할당 → 실행 (Running 상태)
  • I/O 요청 → Device Queue로 이동
  • I/O 완료 → 다시 Ready Queue로 이동

스케줄러

Long-term (장기 스케줄러, Job 스케줄러)

  • 시작 프로세스 중 어떤 것들을 Ready queue에 보낼지 결정
    • NewReady
  • 프로세스에 메모리를 주는 문제 - 멀티 프로그래밍을 제어
    • 메모리에 몇 개 올릴래?
  • ✨ 시분할 시스템(Time Sharing System)에는 보통 장기 스케줄러가 없고 무조건 ready 상태
    • 그래서 Medium-term 스케줄러가 필요

Short-term scheduler(단기 스케줄러, CPU 스케줄러)**

  • 어떤 프로세스를 다음번에 Running 시킬지 결정
  • 프로세스에 CPU를 주는 문제
  • 충분히 빨라야 함

Medium-term scheduler(중기 스케줄러, Swapper)

  • 여유 공간 마련을 위해 프로세스 통째로 메모리에서 디스크로 쫓아냄 - Swap Out
  • 프로세스에게서 메모리를 뺏는 문제 - 멀티 프로그래밍을 제어
  • 중기 스케줄러로 인해 Suspended(stopped)상태가 추가
profile
"개발자는 해결사이자 발견자이다✨" - Michael C. Feathers

0개의 댓글