프로세스 생명주기

허선준·2024년 10월 6일

본캠프

목록 보기
22/25

프로세스 생명주기는 프로세스의 상태 변화 과정을 나타냅니다. 프로세스는 신규 상태에서 시작해 준비(Ready), 수행(Running), 대기(Waiting), 종료(Terminated) 등 여러 단계를 거칩니다. 상태 변화는 스케줄러에 의해 이루어지며, 각 상태는 CPU나 I/O 작업, 메모리의 사용 여부에 따라 결정됩니다.

  1. 신규(New): 프로세스가 막 생성되어 메모리에 올라간 상태.
  • 메모리에 올라온 후, 프로세스는 준비 상태로 넘어가지만 아직 CPU에서 실행되지 않습니다.
  1. 준비(Ready): 프로세스가 실행될 준비를 마친 상태로, CPU가 언제든지 이 프로세스를 처리할 수 있는 상태입니다.
  • 프로세스가 신규 상태에서 준비 상태로 넘어갈 수 있습니다. 이는 프로세스가 메모리로 올라와 기초 준비 작업(변수 초기화 등)을 마친 후 가능합니다.
  • 대기 중이던 프로세스가 I/O 작업을 완료하고 다시 준비 상태로 돌아올 수 있습니다.
  • 실행 중인 프로세스가 중단되어 준비 상태로 돌아갈 수도 있습니다.
  1. 수행(Running): 프로세스가 CPU를 할당받아 실제로 실행되는 상태입니다.
  • 이 상태에서는 CPU가 프로세스의 명령어를 처리하고 있습니다.
  • 프로세스가 준비 상태에서 스케줄러를 통해 CPU를 할당받으면 수행 상태로 진입합니다.
  • 수행 상태에서 다른 상태로의 전환은 다음과 같습니다:
    - 중단(Interrupted): CPU 과부하나 스케줄링 정책에 의해 중단되어 다시 준비 상태로 돌아갑니다.
    - 대기(Waiting): I/O나 이벤트 대기를 위해 일시 중지되어 대기 상태로 전환됩니다.
    - 종료(Terminated): 작업이 완료되면 프로세스는 종료됩니다.
  1. 대기(Waiting): 프로세스가 I/O 작업이나 특정 이벤트를 기다리는 상태입니다.
  • 예를 들어, 프로세스가 디스크에서 파일을 읽거나 네트워크 데이터를 기다리는 동안 CPU는 다른 프로세스를 처리하고, 이 프로세스는 대기 상태에 머무릅니다.
  • 대기 상태가 끝나면 다시 준비 상태로 돌아가며, CPU가 사용할 수 있을 때 수행 상태로 전환됩니다.
  1. 종료(Terminated): 프로세스가 모든 작업을 마치고 종료된 상태입니다.
  • 이 상태에서는 프로세스가 사용하던 메모리와 자원이 운영체제에 의해 회수됩니다.

대기 큐 (Waiting Queue)

대기 큐는 프로세스들이 CPU나 특정 자원을 기다리는 상태에서 관리되는 큐입니다. 주요 대기 큐는 다음과 같습니다:

  1. Job Queue: 메모리에 올라가기 전에 HDD에서 대기 중인 프로세스들이 모여 있는 큐입니다. 메모리가 가득 찼거나 CPU가 다른 작업을 처리 중일 때 HDD에서 기다리게 됩니다.
  2. Ready Queue: 메모리에 올라왔으나 CPU가 처리 중이기 때문에 실행되지 못한 프로세스들이 모여 있는 큐입니다.
  3. Device Queue: I/O 장치를 기다리는 프로세스들이 모여 있는 큐로, 각각의 I/O 장치마다 큐가 따로 있습니다(프린터, 키보드, 디스크 등).

Terminated 상태는 프로세스가 종료되면 더 이상 대기할 필요가 없기 때문에 대기 큐가 없습니다.

스케줄링(Scheduling)

스케줄링은 CPU나 I/O 등의 자원을 여러 프로세스가 적절히 나누어 사용할 수 있게 해주는 과정입니다. 주요 스케줄러에는 다음 세 가지가 있습니다:

  1. Job 스케줄러 (Long-Term Scheduler): Job Queue에 있는 프로세스들을 어떤 순서로 메모리에 올릴지를 결정합니다. 이 스케줄링은 자주 일어나지 않으며, 프로그램이 새로 시작되거나 메모리가 가득 찼을 때만 발생합니다.
  2. CPU 스케줄러 (Short-Term Scheduler): Ready Queue에 있는 프로세스들을 어떤 순서로 CPU를 할당받을지 결정합니다. 시공유 시스템에서는 1초에도 수십 번에서 수백 번 발생하는 빠른 스케줄링이 필요합니다.
  3. Device 스케줄러: I/O 장치나 보조 기억 장치들을 사용할 프로세스의 순서를 결정합니다. 이는 각 장치별로 다르게 적용됩니다(프린터, 디스크, 네트워크 등)

Swapping (주-보조 교환)

Swapping은 여러 사용자가 메모리를 공유하는 시스템에서 오래 사용되지 않는 프로세스를 임시로 HDD로 내리고 다른 프로세스를 위해 메모리를 확보하는 과정입니다. 이 과정에는 두 가지가 포함됩니다

  • Swap Out: 메모리에서 HDD로 프로세스를 이동시키는 작업.
  • Swap In: HDD에 있던 프로세스를 다시 메모리로 불러오는 작업.

Swapping을 관리하는 스케줄러는 Midium-Term Scheduler라고 부르며, 이는 CPU 스케줄러보다 적게, Job 스케줄러보다는 자주 동작합니다.

문맥 교환 (Context Switching)

문맥 교환은 실행 중이던 프로세스가 중단되고, 새로운 프로세스가 실행될 때 프로세스 상태를 저장하고 복구하는 과정입니다. 운영체제는 프로세스 A를 중단하고 프로세스 B를 실행할 때, A의 작업 상태(PC, 레지스터 등)를 저장한 후, B의 상태를 복구합니다. Dispatcher는 이러한 저장 및 복구 작업을 담당합니다.

문맥 교환은 운영체제가 CPU 자원을 효율적으로 사용하게 만들어 여러 프로세스가 동시에 실행되는 것처럼 보이게 해주는 중요한 기술입니다.

profile
코딩 초보

0개의 댓글