우봉수
2023. 4. 18. 19:16
2023. 4. 18. 19:16
- 사용자 스레드와 커널 스레드를 구분
- 스레드가 지원될 경우 스케줄링 대상은 프로세스가 아닌 스레드
- LWP에서 실행되는 사용자 스레드 스케줄링.
- 카널 스레드 스케줄링
Pthread 스케줄링
- API를 사용하여 스레드를 생성시 PCS, SCS를 지정해야함
다중 처리기 스케줄
- 동일한 처리기: CPU가 기능상 거의 동일한 경우
- 비대칭 다충처리: CPU 하나만 하나의 자료구조에 접근 가능 한 것
- 대칭 다중처리(SMP): 모든 CPU가 자료구조에 자유롭게 접근이 가능 한 것
- 처리기 친화성: 프로세스가 현재 실행 중인 처리기에 친화성을 가지는 것
- 연성 친화성: cpu를 바꾸어도 별 문제 없이 작동하는 것
- 경성: 프로세스가 작동하기 적합한 하드웨어(cpu)가 따로있다.
- 처리기 집합등의 변형
- Non Uniform Memory Acessece(NUMA): CPU의 Local 메모리는 빠르게 접근 할 수 있지만 다른 CPU의 Local 메모리에는 빠르게 접근하기 힘들다.
부하 균등(Load Balancing)
- SMP의 경우 효율적으로 작동하기 위해서는 모든 CPU에 작업이 공급되어야 한다.
- 부하 균등: 부하를 균등하게 분배
- 푸시 이주: 부하가 많이 걸린 CPU의 태스크를 부하가 적게 걸린 CPU로 이동 시킨다.
- 풀 이주: 일이 없는 처리기에서 대기 중인 태스크를 가져다 실행한다.
다중코어 처리기
- 동일한 물리적인 칩 안에 여러 개의 처리기 코어를 배치한다.
- 단일 코어 방식의 CPU 보다 빠르고 더 적은 전력을 소모한다.
- 코어 마다 여러 스레드를 지원하는 방식이 증가하는 추세
다중스레드 다중코어 시스템
- 한 CPU에 하드웨어 스레드가 하나라면 연산하고(C) 쉬고(M)를 반복한다.
- 세밀한 다중 스레딩
- 한 CPU에 여러 하드웨어 스레드가 존재한다면 연산하고(C) 쉬고(M)를 서로 반복하며 일을 시킨다.
- 위에 사례에서는 cpu가 쉬는 구간이 존재하지만 해당 사례에서는 cpu가 항상 일을 한다.
실시간 CPU 스케줄링
- 연성 실시간 시스템(소프트): 아주 중요한 실시간 프로세스가 언제 완료될지 보장하지 않음, 태스크의 마감시간이 정해져 있지만 조금 지체됨을 허용한다.
- 경성 실시간 시스템(하드): 일정 시간 내에 태스크가 반드시 완료가 되어야 함
- 발생할 수 있는 지연
- 인터럽트 지연: 인터럽트가 도착해서 인터럽트를 서비스 하기 시작할 때까지의 시간 (하드웨어 또는 소프트웨어가 발생하는 이벤트에 대한 지연이며)
- 디스패치 지연: 현재 프로세스를 중단시키고 새로운 프로세스로 전환하는데 걸리는 시간 (운영 체제가 프로세스를 중지하고 다른 프로세스를 실행하는 데 필요한 지연)
- 조건
- 커널 모드에서 실행 중인 프로세스의 선점
- 낮은 우선순위의 프로세스가 높은 우선순위의 프로세스가 요구하는 자원을 방출
우선순위 기반 스케줄링
- 처리시간 t, 마감시간 d, 주기 p로 이루어
- 주기적인 프로세스는 일정 간격으로 CPU를 요구한다.
가상화와 스케줄링
- 여러 게스트를 CPU에 스케줄 하는 기법
- 각 게스트는 자신이 직접 스케줄 한다.
- 자기가 가진 CPU가 없다는 것 조차 모름
- 응답시간이 나빠질 수 있음
- 게스트의 현재 시각에 영향을 줄 수 있음
- 게스트의 스케줄링 알고리즘의 좋은 결과를 되돌릴 수 있음
Rate Montonic 스케줄링
- 우선순위는 주기의 역순에 기반을 두고 부여된다.
- 단순히 주기가 짧을 경우 우선순위를 높게 두고 스케줄링 하는 방식
- 주기와 우선순위 반비례 P1(50) P2(100)
- CPU 이용률: 20(P1)/50 + 35(P2)/100
- N 개의 프로세스: 최악의 경우 CPU 이용률 N(2^1/N -1) 해당 보다 이용률이 커진다면 cpu 데드라인을 지키지 못 한 경우가 된다. N-> 무한대로 간다면 값은 자연로그 2 (ln 2) -> 0.693147 이 된다.
- h = 1/N 일때 N(2^1/N -1) -> (2^h-1)/h 로 변환되고 n->무한대 -> h->0 으로 변환된다.
- 이때 우리는 수학적 정의를 통해 ln2값이 나온다.