[TIL] 프로세스 스케줄링

krkorklo·2022년 8월 22일
0

TIL

목록 보기
8/29
post-thumbnail

프로세스 스케줄링

프로세스(실행중인 프로그램)은 디스크에 저장되어있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제가 관리하는 상태

프로세스 상태

생성(create) → 준비(ready) → 실행(running) → 대기(입출력 waiting) → 준비(ready) → 실행(running) → 종료(terminated)로 크게 5가지 상태

  • runninng process가 너무 오래 선점하고 있거나 I/O 작업을 하는 경우 context switch
  • 운영체제가 준비 큐(Ready Queue), 대기 큐 (Waiting Queue) 등의 자료구조를 두고 프로세스를 관리

PCB

  • Process Control Block
  • 스케줄링 정보 ready, running, waiting 등의 정보를 관리
  • 하나의 프로세스 - 하나의 PCB

CPU 스케줄링

프로세스 스케줄링 조건

  1. 프로세스가 실행 상태(running)에서 대기 상태(waiting)으로 전환될 때 - 비선점(non-preemptive)
  2. 프로세스가 실행 상태(running)에서 준비 상태(ready)로 전환될 때 - 선점(preemptive)
  3. 프로세스가 대기 상태(waiting)에서 준비 상태(ready)로 전환될 때 - 선점(preemptive)
  4. 프로세스가 종료되었을 때(terminated) - 비선점(non-preemptive)

CPU 스케줄링 알고리즘

스케줄링 척도 : 이용률, 처리율, 반환시간, 대기시간, 응답시간

  1. 기한부 스케줄링 (deadline scheduling)
  • 작업들이 주어진 마감시간까지 완성하도록 계획한 스케줄링
  1. 우선순위 스케줄링
  • 프로세스 실행 중 우선순위가 높은 프로세스를 먼저 실행하는 방식으로 우선순위가 계속 밀릴 수 있다
  • 우선순위가 동적으로 바뀔 수도 있고 고정적으로 운영되기도 한다
  1. FCFS 스케줄링
  • 비선점 스케줄링으로 프로세스가 생성된 순서대로 대기큐에 넣고 순서대로 스케줄링한다
  1. SJF 스케줄링
  • 비선점 스케줄링으로 작업이 끝날때 실행 시간이 가장 작은 것부터 먼저 스케줄링하는 방식
  • SRTF 스케줄링(Shortest Remaining Time First Scheduling)은 선점 SJF 스케줄링으로 프로세스가 들어오는 경우 스케줄링 발생
  1. Round Robin 스케줄링
  • 선점 스케줄링 방식으로 FIFO처럼 순차적이지만 CPU에서 제어하는 시간을 나눈다
  • CPU 시간이 마무리될때까지 작업이 끝나지 않으면 다음 프로세스로 넘어간다

멀티 스레드

  • 일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행
  • 하나의 프로세스에 2가지 이상의 작업을 처리할 수 있는 것
  • CPU 스케줄링의 기본 단위로 프로세스는 적어도 하나의 스레드를 가진다
  • 멀티 스레드(multi thread)
    • 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행
    • 각 스레드가 자신이 속한 프로세스의 메모리를 공유하기 때문에 시스템 자원의 낭비가 적음
    • 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋음
  • 멀티 프로세스(multi process) : 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행

Context Switch

  • 스레드가 서로 교체될 때 스레드 간의 문맥 교환(context switch)이 발생
  • 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업

멀티 스레드 스케줄링

동시성(Concurrency) : 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행할 수 있는 성질
병렬성(Parallelism) : 멀티 작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행할 수 있는 성질

  1. 우선순위 방식
  • 우선순위가 높은 스레드가 실행 상태를 더 많이가지도록 스케줄링
  1. 순환 할당 방식
  • 시간 할당량을 정해서 하나의 스레드를 정해진 시간만큼 실행하고 다른 스레드를 실행

스레드 모델

  • Kernel Thread : 운영체제가 제공하고 직접 관리하는 스레드
  • User Thread : user level의 Thread 라이브러리를 통해 관리되는 스레드
  1. Many-To-One model
  • 하나의 Kernel Thread가 다수의 User Thread를 처리하는 구조
  • User Thread 처리 중 시스템 콜에 의해 블록상태가 되면 전체 프로세스가 막히는 병목 현상 발생
  1. One-To-One model
  • User Thread 한 개 당 Kernel Thread를 대응 시켜 작업을 진행
  • Kernel Thread가 과도하게 생성되는 문제
  1. Many-To-Many model
  • 다수의 User Thread를 다수의 Kernel Thread가 처리하는 구조
  • Kernel Thread의 수는 User Thread의 수보다 같거나 적게 할당
  1. Two-Level model
  • Many-To-Many model과 One-To-One model을 합친 구조
  • 중요한 작업은 One-to-One으로, 나머지는 Many-to-Many로 처리
  • 중요한 작업에서의 기다림 현상을 줄일 수 있다

공용 리소스 접근

Mutex

  • 화장실이 하나밖에 없는 식당과 비슷
  • 카운터에 키가 있으면 화장실에 사람이 없는 것이고 화장실에 들어갈 수 있다
  • 다른 사람이 오더라도 카운터에 키가 없기때문에 기다리게 된다

key에 해당하는 오브젝트가 있으며 이 오브젝트를 소유한 스레드/프로세스만이 공유자원에 접근할 수 있다

Semaphore

  • 화장실 입구에는 화장실의 빈 칸 개수를 보여주는 판이 있다
  • 화장실이 가득 찼으면 기다리게 된다
  • 사람이 나오면 숫자가 늘어나고 기다리던 사람이 들어가게된다

공통으로 관리하는 하나의 값을 통해 상호배제를 달성


참고자료
http://www.tcpschool.com/java/java_thread_multi
https://seamless.tistory.com/42
https://worthpreading.tistory.com/90

0개의 댓글