[OS] 프로세스 개념, 프로세스 스케줄링

2026. 4. 6. 21:43·CS/운영체제

1. 프로세스 개요

1) 프로세스란?

프로세스란 실행 중인 프로그램입니다.

여기서 실행 중인 프로그램이란 디스크에 저장된 파일과 같은 수동적인 존재가 아닌,

실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 능동적인 존재를 나타냅니다.

즉, 정확히 말하면 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됩니다.

프로세스(process): 실행 중인 프로그램. 운영체제로부터 CPU, 메모리, 파일 등의 자원을 할당받아 작업을 실행


프로세스의 활동 상태는 프로그램 카운터 값과 프로세서 레지스터의 내용으로 나타냅니다.

프로세스의 메모리 배치는 다음과 같습니다.

 

함수가 호출될 때마다 함수 매개변수, 지역 변수 및 복귀 주소를 포함하는 활성화 레코드(activation record)가 스택에 push됩니다.

함수에서 제어가 되돌아오면 스택에서 활성화 레코드가 pop 됩니다.


 

2) 프로세스 상태

프로세스는 실행되면서 상태가 변합니다.

  • new: 프로세스 생성 중
  • running: 명령어들이 실행되고 있는 상태
  • waiting: 프로세스가 어떤 이벤트(입출력 or 신호 수신)가 일어나기를 기다리는중
  • ready: processor에 할당되기를 기다리는 중
  • terminated: 프로세스 실행 종료

이름은 임의적이고 운영체제 마다 다를 수 있지만, 이들이 나타내는 상태들은 모든 시스템에서 찾아볼 수 있습니다.



3) 프로세스 제어 블록(PCB, Process Control Block)

각 프로세스는 프로세스 제어 블록(process control block)에 의해 표현 됩니다.

프로세스 제어 블록은 특정 프로세스와 연관된 여러 정보를 가지고 있습니다.
예시는 다음과 같습니다.

  • 프로세스 상태: new, ready, running, waiting 등등의 프로세스 상태
  • 프로그램 카운터: 프로세스가 다음에 실행할 명령어의 주소를 가리킴
  • CPU 레지스터: 누산기, 인덱스 레지스터, 스택 레지스터, 상태코드 정보 등
  • CPU 스케줄링 정보: 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수 정보
  • 메모리 관리 정보: 기준 레지스터와 한계 레지스터의 값, 페이지 테이블, 세그먼트 테이블
  • Accounting 정보: CPU 사용시간, 경과된 실시간, 시간 제한, 계정 정보, 프로세스 번호
  • 입출력 상태 정보: 입출력 장치와 열린 파일 목록



2. 프로세스 스케줄링

다중 프로그래밍은 CPU 이용을 최대화하기 위해 항상 어떤 프로세스를 실행하고 있도록 합니다.

이를 위해 각 프로그램이 실행되는 동안 사용자가 상호작용할 수 있도록 프로세스들 사이에서 CPU 코어를 계속 교체합니다.


단일 CPU 코어는 한 번에 하나의 프로세스만을 실행할 수 있지만, 다중 코어 시스템은 여러 프로세스를 실행할 수 있습니다.

코어보다 많은 프로세스가 있는 초과 프로세스는 코어가 사용 가능해지고 다시 스케줄 될 떄까지 기다려야합니다.

현재 메모리에 있는 프로세스 수를 다중 프로그래밍 정도라고 합니다.


다중 프로그래밍을 균등하게 하기 위해서는 각 프로세스의 특성을 고려햐애합니다.

I/O 바운드 프로세스는 계산에 소비하는 것보다 I/O에 더 많은 시간을 소비하는 프로세스이고,

CPU 바운드 프로세스는 계산에 더 많은 시간을 사용하는 프로세스로 I/O 요청을 자주 생성하지 않습니다.

 

1) CPU 스케줄링

프로세스가 시스템에 들어가면 준비 큐(Ready Queue)에 들어가서 실행되기를 기다립니다.

이 큐는 일반적으로 연결리스트로 저장되며, 헤더에는 첫 번째 PCB에 대한 포인터가 저장되고, 각 PCB에는 준비 큐의 다음 PCB를 기다리는 포인터 필드가 포함됩니다.


프로세스에 CPU 코어가 할당되면 프로세스는 잠시 동안 실행되고 종료, 인터럽트, I/O 요청의 완료와 같은 특정 이벤트가 발생할 떄까지 기다립니다. I/O 완료와 같은 특정 이벤트가 발생하기를 기다리는 프로세스는 대기 큐(Wait Queue)에 삽입됩니다.


프로세스 스케줄링은 다음과 같은 큐잉 다이어그램으로 표현할 수 있습니다.

 

프로세스는 수명주기 동안 준비큐와 다양한 대기 큐를 이주합니다.

CPU 스케줄러의 역할은 준비 큐에 있는 프로세스 중에서 하나의 프로세스를 선택해 CPU 코어를 할당하는 것 입니다.


2)문맥 교환(Context Switch)

인터럽트는 운영체제가 현재 작업에서 CPU 코어를 뺏어 커널 루틴을 실행할 수 있게 합니다.

시스템은 인터럽트 처리가 끝난 후에 문맥을 복구할 수 있도록 현재 실행중인 프로세스의 문맥을 저장합니다.

결국 프로세스를 중단했다가 재개하는 작업입니다. 문맥은 프로세스의 PCB에 표현됩니다. 


CPU 코어를 다른 프로세스로 교환하려면 이전의 프로세스 상태를 보관하고 새로운 프로세스의 보관된 상태를 복구하는 작업이 필요합니다.

이를 문맥 교환(Context Switch)라고 합니다.

문맥 교환(Context Switch): 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업

문맥교환이 일어나면, 커널은 과거 프로세스의 문맥을 PCB에 저장하고, 실행이 스케줄된 새로운 프로세스의 문맥을 복구합니다.


문맥 교환 동안 시스템은 아무런 일도 못하기 때문에 이는 순수한 오버헤드 입니다.

문맥 교환 시간은 하드웨어 지원에 크게 좌우됩니다.

'CS > 운영체제' 카테고리의 다른 글

[OS] 블로킹(Blocking)/논블로킹(Non-Blocking), 동기(Syncronous)/비동기(ASyncronous)  (0) 2026.03.09
[OS] 운영체제의 개념, 역할 및 구조  (0) 2026.03.07
'CS/운영체제' 카테고리의 다른 글
  • [OS] 블로킹(Blocking)/논블로킹(Non-Blocking), 동기(Syncronous)/비동기(ASyncronous)
  • [OS] 운영체제의 개념, 역할 및 구조
단군왕건영
단군왕건영
널리 세상을 이롭게 하고 싶은 개발자
  • 단군왕건영
    홍익인간 개발자
    단군왕건영
  • 전체
    오늘
    어제
    • 분류 전체보기 (90)
      • TroubleShooting (16)
      • Backend (13)
        • Java (2)
        • Spring (9)
        • JPA (2)
      • DB (1)
      • Algorithm (7)
        • 백준 (4)
      • Infra (3)
      • CS (40)
        • 컴퓨터구조 (25)
        • 네트워크 (12)
        • 운영체제 (3)
      • Git (3)
      • Mac (2)
      • 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    컴퓨터 구조
    spring
    docker
    네트워크
    springboot
    Jenkins
    MariaDB
    백준
    컴퓨터구조
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
단군왕건영
[OS] 프로세스 개념, 프로세스 스케줄링
상단으로

티스토리툴바