[Computer Science] Operating System(Scheduling & Context Switching)

Arkiee·2022년 10월 22일
0

Computer Science

목록 보기
2/9
post-thumbnail

스케줄링이란?

  • 스케줄링은 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업을 의미합니다. 스케쥴링은 CPU에서 자원을 효율적으로 사용하기 위한 목적으로 사용됩니다.

  • 스케줄러의 종류에는 장기 스케줄러, 중기 스케줄러, 단기 스케줄러가 있습니다.

    • 장기 스케줄러는 실행 중인 프로세스의 수를 제어
    • 중기 스케줄러는 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절
    • 단기 스케줄러는 CPU에 프로세스를 적재하는 역할

Context Switching이란?

왜 필요한가?

IF. 컴퓨터가 매번 하나의 Task만 처리할 수 있다면?

  • 해당 Task가 끝날때까지 다음 Task는 기다릴 수 밖에 없음
  • 또한, 반응속도가 매우 느리고 사용하기 불편

So. 다양한 사람들이 동시에 사용하는 것처럼 하기 위해선?

  • Computer multitasking을 통해 빠른 반응속도로 응답할 수 있음
  • 빠른 속도로 Task를 바꿔가며 실행하기 때문에 사람의 눈으론 실시간처럼 보이게 되는 장점이 있음
  • CPU가 Task를 바꿔가며 실행하기 위해 Context Switching이 필요하게 됨

개념

  • 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정
  • Task의 대부분 정보는 Register에 저장되고 PCB로 관리되어 짐
    • PCB: 프로세스의 상태 정보를 저장하는 구조체
  • 현재 실행하고 있는 Task의 PCB정보를 저장하게 됨(Process Stack, Ready Queue)
  • 다음 실행할 Task의 PCB정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할수 있음

PCB(Process Control Block) 구조

  • Process State: 프로세스 상태(Create, Ready, Running, Waiting, Terminated)
  • Process Counter: 다음 실행 명령어의 주소값
  • CPU Registers: accumulator, index register, stack pointers, general purpose registers

Cost

Context Switching 발생 시 많은 Cost가 소요됨

  • Cache 초기화
  • Memory Mapping 초기화
  • Kernel은 항상 실행되어야 함(메모리 접근을 위해)
  • Process가 Thread보다 비용이 많이 듬
    • Thread는 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 Context Switching 발생 시 Stack 영역만 변경을 진행하면 됨

프로세서 스케줄링 기법

  • 프로세서 스케줄링 기법은 크게 선점과 비선점 형태가 있음

    • 비선점 스케줄링

      • 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법.
      • FCFS(First-Come-First-Served), SJF(Shortest-Job-First, SPN)이 대표적인 비선점 스케줄링 기법.
    • 선점 스케줄링

      • 특정 요건에 따라 각 프로세스의 요청이 있을 때 프로세스에게 분배하는 기법
      • Round-Robin, SRT(Shortest-Remaining-Time)이 대표적인 선점 스케줄링 기법

[개념정리]

⭐️ PCB(Process Control Block)

  • 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.
  • PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.
  • 프로세스들이 교체되어 수행되고 나면 다시 다른 프로세스를 불러와야 함. 이 말은 이전 작업에 대한 내용을 기억하고 있어야 하며, 이를 위해 프로세스 단위로 정보를 저장해주는 BLOCK이 있음. 이게 바로 PCB.

⭐️ Context Switching(문맥교환)

  • CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정
  • 프로세스가 [준비 → 실행] or [실행 -> 준비] or [실행 -> 대기] 등으로 상태 변경될 때 발생

⭐️ 스케줄러

  • Ready Queue에 존재하는 프로세스들을 특정한 우선순위를 기반으로 CPU를 할당받게 하는 역할

  • 프로세스가 생성되어 완료될 때까지 프로세스는 여러 종류의 스케줄링 과정을 거침

  • 프로세스를 스케줄링하기 위한 큐의 종류

    • Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합
    • Ready Queue: 현재 메모리 내에 있으면서 CPU를 할당 받기를 기다리는 프로세스의 집합
    • Device Queue: I/O 작업을 대기하고 있는 프로세스 집합
  • 각각의 Queue에 프로세스들을 넣고 빼는 스케줄러 종류 3가지
    • 장기 스케줄러
      • 메모리와 디스크 사이의 스케줄 담당
      • 어떤 프로세스에 각종 리소스를 할당할 지 결정
      • 실행중인 프로세스의 수 제어
    • 중기 스케줄러
      • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄(swapping)
      • 메모리를 deallocate
      • 실행중인 프로세스의 수 제어
      • 메모리에 너무 많은 프로그램이 동시에 올라가는 것 조절
    • 단기 스케줄러
      • CPU와 메모리 사이의 스케줄 담당
      • Ready Queue에 있는 프로세스 중 어떤 프로세스를 Running 시킬지 결정
      • CPU에 프로세스 할당(dispatch)
  • 프로세스의 5가지 상태
    • 생성(create): 프로세스가 생성되는 중
    • 실행(running): 프로세서를 차지해 명령어들이 실행되는 중
    • 준비(ready): CPU가 할당되기를 기다리는 중
    • 대기(waiting): I/O 완료, 시그널 수신 등 어떤 사건을 기다리는 중
    • 종료(terminated): 실행이 종료

⭐️ 프로세서 스케줄링 기법

  • 선점(preemptive)와 비선점(non-preemptive) 형태가 있음

비선점 스케줄링

  • FCFS(First Come First Served)
    • 대기 큐에 도착한 순서에 따라 CPU를 할당
    • 일단 프로세스가 CPU를 차지하면 완료될 때까지 수행
    • 긴 작업이 짧은 작업을 오랫동안 기다릴 수도 있으며, 중요하지 않은 작업이 중요한 작업을 기다리게 할 가능성이 존재
    • 대화식 Real time 시스템에는 부적합 함
  • SJF(Shortest Job First) or SPN(Shortest Process Next)
    • 준비 큐에서 기다리고 있는 프로세스 중에서 가장 CPU 요구량이 적은 것을 먼저 실행시켜 주는 방식
    • 평균 응답 시간을 최소화할 수 있으나, 실행 시간이 긴 프로세스가 CPU를 할당받지 못하고 계속해서 대기하는 무한 대기 현상이 발생할 수 있음

선점 스케줄링

CPU 사용권을 선점한다고 생각하면 됨. 특정 요건에 따라 각 프로세스의 요청이 있을 때 프로세스에게 분배하는 방식

  • 라운드 로빈(Round-Robin/RR)
    • FCFS 스케줄링 기반으로 CPU를 할당하되, 각 프로세스는 한 번에 쓸 수 있는 CPU 시간 할당량이 지나면 시간 종료 인터럽트에 의해 CPU를 뺏기게 됨
    • 주로 우선순위 스케줄링(Priority scheduling)과 결합해 프로세스의 시간 할당량을 조절하는 방식으로 활용
    • FCFS에서 프로세스 하나가 CPU를 독점하는 단점을 방지하지만, 문맥교환의 오버헤드를 감수해야 함
  • SRT(Shortest Remaining Time)
    • 준비 큐에서 완료까지 남은 CPU 요구량이 가장 짧은 것을 먼저 실행시켜주는 방식
    • 실행 도중 남은 실행 시간이 더 적은 프로세스가 Ready Queue에 들어올 경우, 현재 실행 중인 것을 중단하고 새 프로세스에게 CPU를 할당함

[참고]
https://nesoy.github.io/articles/2018-11/Context-Switching
https://byeongmoo.tistory.com/4
https://velog.io/@hax0r/%EC%84%A0%EC%A0%90%EB%B9%84%EC%84%A0%EC%A0%90-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81

profile
꿈을 꾸는 개발자

0개의 댓글