리눅스 구조 (프로세스 스케줄러)

문린이·2024년 3월 12일
1

하나의 CPU 코어는 실제로 한 시점에 하나의 프로세스만 처리할 수 있다. 그러나, 현대의 운영 체제들은 프로세스 스케줄러를 사용하여 여러 프로세스가 CPU를 공유할 수 있도록 한다. 프로세스 스케줄러는 운영 체제의 일부로, 실행할 프로세스를 결정하고, CPU 시간을 어떻게 분배할지 관리한다. 이를 통해, 사용자와 시스템은 동시에 여러 프로그램이나 작업을 실행하는 것처럼 느낄 수 있다.

프로세스 스케줄러의 작동 방식

  • 프로세스 선택(Dispatching): 실행할 준비가 된 프로세스 목록(Ready Queue)에서 다음에 실행될 프로세스를 선택한다.

  • 문맥 교환(Context Switching): CPU가 현재 실행 중인 프로세스에서 다른 프로세스로 전환할 때, 현재 프로세스의 상태를 저장하고 새 프로세스의 상태를 불러오는 과정이다.

  • 멀티태스킹(Multitasking): 여러 프로세스를 빠르게 전환하며 실행함으로써, 동시에 여러 작업을 처리하는 것처럼 만든다. 이는 사용자에게 동시성(Concurrency)을 제공한다.

스케줄링 알고리즘

프로세스 스케줄러는 다양한 스케줄링 알고리즘을 사용할 수 있으며, 각 알고리즘은 특정 목표나 시스템의 요구 사항에 맞춰 설계된다.

  • First-Come, First-Served (FCFS): 가장 간단한 형태의 스케줄링으로, 먼저 도착한 프로세스를 먼저 처리한다.

  • Round-Robin (RR): 모든 프로세스에게 동일한 시간 할당량(Time Quantum)을 주고, 이 시간을 초과하면 다음 프로세스로 전환한다. 이는 타임 슬라이스라고도 불린다.

  • Priority Scheduling: 각 프로세스에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스를 먼저 실행한다.

  • Shortest Job First (SJF): 실행 시간이 가장 짧은 프로세스를 먼저 실행한다. 이는 평균 대기 시간을 최소화하는 데 도움이 된다.

멀티코어 및 멀티프로세서 시스템

현대의 컴퓨터 시스템에서는 하나 이상의 CPU 코어를 가지고 있으며, 각 코어는 동시에 별개의 프로세스를 처리할 수 있다. 멀티코어나 멀티프로세서 시스템에서는 스케줄러가 더 복잡한 로직을 사용하여, 여러 코어에 걸쳐 프로세스를 효율적으로 분배하고 관리한다.

프로세스의 상태

  • 실행 상태 : 현재 CPU를 사용하고 있는 상태
  • 실행 대기 상태 : CPU 시간이 할당되기를 기다리고 있는 상태
  • 슬립 상태 : 이벤트가 발생하기를 기다리고 있으며 이벤트 발생까지는 CPU 시간을 사용하지 않는다.
  • 좀비 상태 : 프로세스가 종료한 뒤 부모 프로세스가 종료 상태를 인식할 때까지 기다리고 있는 상태

상태 변환

  1. 실행 대기 → 실행: 스케줄러에 의해 프로세스가 CPU를 할당받으면 실행 대기 상태에서 실행 상태로 전환된다.

  2. 실행 → 슬립: 프로세스가 파일 읽기 요청과 같은 입출력 작업을 요청하면, 작업이 완료될 때까지 실행 상태에서 슬립 상태로 전환된다.

  3. 슬립 → 실행 대기: 입출력 작업이 완료되면, 프로세스는 다시 실행 대기 상태로 전환되어 CPU 할당을 기다린다.

  4. 실행 → 좀비: 프로세스가 작업을 완료하고 종료할 때, 모든 자원을 해제하고 종료 상태 정보만 남겨둔 채 좀비 상태로 전환된다. 이후 부모 프로세스가 종료 상태를 회수하면 시스템에서 완전히 제거된다.

스루풋과 레이턴시

  • 스루풋 (Throughput)
    스루풋은 단위 시간당 시스템이 처리할 수 있는 작업의 양을 나타낸다다. 예를 들어, 초당 처리할 수 있는 요청의 수, 시간당 데이터베이스 트랜잭션의 수 등으로 측정된다. 스루풋이 높다는 것은 시스템이 더 많은 작업을 빠르게 처리할 수 있다는 것을 의미하며, 일반적으로 높은 성능을 나타낸다. 스케줄러가 효율적으로 작동할수록, 시스템의 스루풋은 증가하게 된다.

  • 레이턴시 (Latency)
    레이턴시는 작업이나 요청이 시작되고 완료될 때까지 걸리는 시간을 나타낸다. 이는 시스템이 요청을 받아서 처리하고 응답하기까지의 지연 시간으로 측정된다. 레이턴시가 낮을수록 사용자나 시스템에게 더 빠른 반응 속도를 제공한다는 것을 의미하며, 일반적으로 사용자 경험에 긍정적인 영향을 미친다.

  • 스루풋과 레이턴시의 관계
    스루풋과 레이턴시는 서로 독립적인 지표이지만, 시스템의 성능을 평가할 때 함께 고려되어야 한다. 높은 스루풋을 달성하면서도 낮은 레이턴시를 유지하는 것이 이상적이지만, 실제로는 두 지표 사이에 트레이드오프가 존재할 수 있다.

profile
Software Developer

1개의 댓글

comment-user-thumbnail
2024년 3월 12일

오랜만에 스케줄링 봐서 재미있었어요!

답글 달기