250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- JVM
- 점근적 표기법
- AVL트리
- 알고리즘
- 자료구조
- 이분탐색이란
- 최대 힙
- MSA
- 강화학습
- 최소힙
- SpringSecurity
- python
- jpa n+1 문제
- 완전이진트리
- JPA
- 힙트리
- spring
- 프로세스
- 백준 장학금
- 백준장학금
- 엔티티 그래프
- Kruskal
- 멀티프로세서
- 연결리스트 종류
- 스케줄링
- posix
- 연결리스트
- HTTP
- 운영체제
- heapq
Archives
- Today
- Total
KKanging
[운영체제] MULTI-LEVEL FEEDBACK QUEUE 본문
MLFQ가 해결하고자 하는 기본적인 문제는 두 가지이다.
1. 짧은 작업을 먼저 실행시켜 반환 시간을 최적화하고자 한다.
2. 빠른 응답 시간
그리고 추가로 프로세스에 대한 정보가 없다면 어떻게 스케줄링을 할 것인가
MLFQ
Basic Rules
멀티 레밸 큐란 우선순위별로 큐를 분리한 큐의 집합을 의미한다.
주요한 규칙은 다음과 같다
1. 우선순위가 높은 큐가 최우선으로 실행한다!
2. 우선순위가 같다면 RR 로 실행한다.
그러면 생각이 들 것이다.
우선순위는 무엇을 기준으로 나타내어지는가
보통 IO intensive한 작업을 높은 우선순위로 ( CPU를 자주 포기하는)
CPU intensive 한 작업을 낮은 우선순위로 한다( CPU를 잘 포기하지 않는)
하지만 만약 우선순위의 변동이 없다면
우선순위가 높은 작업이 끝나지 않는 한 우선순위가 낮은 작업은 실행되지 않을 것이다.
우선순위 변경
기본적인 MLFQ는 다음과 같은 룰로 우선순위를 변경한다.
1. 시스템에 들어올 때 가장 높은 우선 순위 큐에 배치한다.
2. 할당 받은 타임 슬라이스를 모두 소모하면 우선 순위 감소
3. 시간이 되기 전에 CPU를 포기하면 동일한 우선 순위 유지
(작업 단위가 짧은 즉 io intensive한 작업은 높은 순위 유지)
이렇게 하는 이유는 MLFQ 가 SJF 와 근사하게 하기 위해서이다.
예제 1 : 한 개의 긴 작업을 가진 작업
TMI)
위와 같은 상황이면 Context switch 가 일어나지 않는다.
예 1 + 짧은 작업
SJF 에 근접한 알고리즘이 될 수 있다!!
입출력이 있다면
대화형 작업이 항상 가장 높은 우선 순위를 차지한다!
기본 MLFQ 의 문제점
1. 기아 상태
-> 대화형 작업이 굉장히 많다면... 아무고토 못함
2. 스케줄러 갖고 놀기
-> 타임 슬라이스 끝나기 전에 cpu를 반환하면 높은 우선순위를 가진다는 점 악용
3. 만약 작업의 특성이 cpu intensive -> io intensive 하다면 대처 불가능
기본 MLFQ 개선
S 지나면 최상위 큐로(Priority Boost)
1. 기근 문제와
3. 특성 변화 문제를 대비
일정 시간 S 가 지나면 모든 작업ㅇ르 최상위 큐로 이동하게 한다.
S는 어떤 값으로 하는가
S가 커질수록 cpu intensive 프로세스의 굶는 일이 많아지고
S가 작아질수록: cpu intensive 가 높은 우선순위를 차지하게 될 것
Gaming 방지 ( 갖고 놀기 방지)
현재 단계에서 시간을 모두 소모하면 무조건 우선 순위 감소
MLFQ 튜닝
MLFQ의 변수를 조정할 수 있는 것들은
큐의 수
큐당 타임 슬라이스의 크기
우선 순위 상향 조정 주기가 있다
큐 마다 다른 타임 슬라이스
큐마다 다른 타임 슬라이스를 사용한다.
'cs > 운영체제' 카테고리의 다른 글
[운영체제] 멀티프로세서 스케줄링(고급) (0) | 2024.05.03 |
---|---|
[운영체제] 스케줄링 : 비례 배분 (0) | 2024.05.02 |
[운영체제] 스케줄링과 Basic Algorithms (0) | 2024.04.30 |
[운영체제] 제한적 직접 실행 원리 (0) | 2024.04.29 |
[운영체제] Process API in POSIX (기초) (0) | 2024.04.29 |