일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 알고리즘
- 크래프톤정글
- CSS
- 백준
- 티스토리챌린지
- 나만무
- JavaScript
- TiL
- 코드트리
- corou
- 리액트
- Java
- 자바스크립트
- 4기
- 시스템콜
- pintos
- 오블완
- userprog
- 소켓
- HTML
- 큐
- 모션비트
- 핀토스
- Flutter
- 자바
- 스택
- 사이드프로젝트
- Vue.js
- defee
- 크래프톤 정글
- Today
- Total
미새문지
24.07.10 day22 스케줄링 알고리즘 학습 본문
1. 스케줄링 알고리즘에는 어떤 것들이 있나요?
스케줄링에는 비선점/선점 스케줄링 두 가지의 종류가 있다.
- 비선점 스케줄링은 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법이며, 프로세스가 CPU를 할당 받으면 해당 프로세스가 완료될 때까지 CPU를 사용하지 않는다.
- 선점 스케줄링은 하나의 프로세스가 CPU를 차지하고 있을 때, 우선 순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 스케줄링 방식이다.
비선점 스케줄링 종류
선입선출 스케줄링(First-Come, First-Served Scheduling - FCFS)
- CPU를 먼저 요청한 프로세스가 먼저 CPU를 배정 받는 스케줄링 방식
- 프로세스가 대기 큐에 도착한 순서에 따라 CPU를 할당한다.
- 긴 작업이 먼저 들어오면 뒤에서 기다리는 짧은 작업들이 오래 기다리게 되는 호흡성 문제가 발생한다.
최단 작업 우선 스케줄링(Shortest Job Next Scheduling- SJN) 혹은 (Shortest Job First Scheduling - SJF)
- 준비 큐에서 가장 짧은 작업부터 CPU를 배정받는 스케줄링 방식
- 가장 짧은 작업부터 수행하기에 평균 대기시간이 최소화 된다.
- CPU 요구시간이 긴 작업과 짧은 작업 간의 차이가 심해 CPU 요구시간이 긴 프로세스는 기아 현상이 발생한다.
우선순위 스케줄링(Priority Scheduling)
- 각 프로세스에 우선순위를 부여하여, 우선순위가 높은 작업을 CPU에 배정하는 스케줄링 방식
- 우선순위는 중요도, 요청 시간 등의 다양한 기준에 따라 결정될 수 있으며, 이 방식은 선점형 스케줄링이 되기도 한다.
- 우선순위 스케줄링도 우선순위가 낮은 프로세스들이 무한정 대기하는 기아 현상이 발생한다.
최상 응답률 순서 스케줄링(Highest Response Ratio Next - HRRN)
- 대기시간과 실행시간을 고려한 응답 비율을 계산해 우선순위를 정하는 스케줄링 방식
- 응답률은 "(대기시간 + CPU요구랑) / CPU요구랑" 으로 계산되며, 대기시간이 올라갈수록 응답률이 높아진다.
- 이 방식은 프로세스가 기다리는 시간이 길어질수록 우선순위가 높아지기 때문에 기아 현상을 완화할 수 있다.
선점 스케줄링 종류
라운드 로빈 스케줄링(Round Robin - RR)
- 각 프로세스에 동일한 시간 할당량(time quantum)을 부여해 할당된 시간이 지나면 프로세스를 중단하고 대기열의 마지막으로 넘어간 후 다음 프로세스가 실행된다.
- 공정성을 보장하며, 응답 시간을 예측할 수 있다.
- 시간 할당량의 크기에 따라 스케줄링의 성능이 영향을 받을 수 있다.
우선순위 스케줄링(Priority Scheduling)
- 비선점 방식의 우선순위 스케줄링과 동일해 기아현상이 발생할 수 있으나 우선순위를 동적으로 조정하는 에이징(aging)이라는 방식이 사용될 수 있다.
최소 잔여 시간 우선 스케줄링(Shortest Remaining Time First - SRTF)
- 현재 남아있는 실행 시간이 가장 짧은 프로세스를 선택하여 실행하는 스케줄링 방식
- 새로운 프로세스가 도착할 때마다 남은 실행 시간을 비교하여 더 짧은 프로세스로 교체할 수 있다.
- 평균 대기 시간을 최소화하는 데는 효과적이지만, 작업의 실행 시간을 미리 알아야 하는 단점이 있다.
멀티레벨 큐 스케줄링(Multilevel Queue - MLQ)
- 프로세스를 여러 개의 큐로 나누어 처리하는 스케줄링 방식
- 각 큐는 서로 다른 우선순위를 가질 수 있으며, 각 큐 내에서는 FCFS 또는 RR 등의 스케줄링 알고리즘을 사용할 수 있다.
- 작업의 종류나 우선순위에 따라 적절한 큐로 분류하여 처리하기 때문에 효율이 좋다.
멀티레벨 피드백 큐 스케줄링(Multilevel Feedback Queue - MLFQ)
- 여러 개의 큐를 사용하며, 프로세스의 행동에 따라 큐를 이동할 수 있는 스케줄링 방식
- 새로운 프로세스는 높은 우선순위의 큐에서 시작하며, 시간이 지남에 따라 낮은 우선순위의 큐로 이동한다.
- 우선순위가 높은 큐는 작은 시간 할당량을 가지며, 낮은 우선순위의 큐는 큰 시간 할당량을 가질 수 있기 때문에, 동적으로 작업의 우선순위를 조정하여 공정성을 유지할 수 있다.
2. RR을 사용할 때, Time Slice에 따른 trade-off를 설명해 주세요.
라운드로빈 스케줄링에서 Time Slice는 각 프로세스가 CPU를 점유하는 시간 단위를 의미한다.
짧은 Time Slice
- 장점:
- 응답 시간 단축: 짧은 Time Slice는 각 프로세스가 빠르게 CPU를 할당받을 수 있게 하여, 응답 시간이 짧아진다.
- 공정성 증가: 프로세스들이 공평하게 CPU 시간을 할당받으므로 공정성이 높아진다.
- 단점:
- 문맥 교환 오버헤드 증가: 짧은 Time Slice는 문맥 교환을 자주 발생시켜 오버헤드가 증가하는데, 이는 시스템의 전체 성능을 저하시키는 원인이 될 수 있다.
- 처리 효율 저하: 문맥 교환에 소요되는 시간이 증가하여 실제 프로세스에 할당되는 시간이 줄어들게 된다.
긴 Time Slice
- 장점:
- 문맥 교환 오버헤드 감소: 긴 Time Slice는 문맥 교환의 빈도를 줄여 오버헤드를 감소시키는데, 이는 시스템의 처리 효율을 높이는 데 도움이 된다.
- 효율적인 작업 처리: CPU 자원을 많이 사용하는 프로세스들은 더 긴 시간 동안 실행되므로, 프로세스 완료 시간이 단축될 수 있다.
- 단점:
- 응답 시간 증가: 긴 Time Slice는 대화형 작업의 응답 시간을 증가시킬 수 있기 때문에, 사용자 응답 시간이 많은 시스템에서는 비효율적일 수 있다.
- 공정성 저하: 긴 Time Slice로 인해 낮은 우선순위의 작업이나 짧은 작업들이 CPU를 할당받기까지 오래 걸릴 수 있다.
적절한 Time Slice의 선택은 시스템의 특성과 요구사항에 따라 다른데, 대화형 시스템에서는 사용자 응답성이 중요하기 때문에 짧은 Time Slick가 유리하고, 배치처리 시스템에서는 문맥교환 오버헤드를 줄이고 CPU 자원을 효율적으로 사용할 수 있어야 하기 때문에 긴 Time Slice가 유리하다.
결론적으로, Time Slice 크기는 시스템의 응답 시간, 공정성, 처리 효율성 등에 큰 영향을 미치기 때문에, 이를 적절히 조정하여 시스템의 성능을 최적화하는 것이 중요하다.
3. 싱글 스레드 CPU 에서 상시로 돌아가야 하는 프로세스가 있다면, 어떤 스케쥴링 알고리즘을 사용하는 것이 좋을까요? 또 왜 그럴까요?
싱글 스레드 CPU에서 상시로 돌아가야 하는 프로세스를 선택할 때 주로 고려해야 할 요소는 우선순위, 공정성, 중요도 등의 요소가 있다.
해당 요소를 고려했을 때 우선순위 스케줄링과 멀티 피드백 큐 스케줄링을 사용할 수 있다.
우선순위 스케줄링(Priority Scheduling)
- 상시로 돌아가야 하는 프로세스에 가장 높은 우선순위를 부여하여, 항상 CPU 시간을 할당받을 수 있다. 이를 통해 실시간 처리가 보장된다.
- 각 프로세스에 적절한 우선순위를 부여하여, 중요도에 따라 CPU 시간을 배분할 수 있다. 이를 통해 공정성을 유지할 수 있다.
- 상시로 돌아가야 하는 프로세스에 가장 높은 우선순위를 부여하여, 빠른 응답 시간을 보장할 수 있다.
하지만 우선순위 스케줄링은 낮은 우선순위의 프로세스가 CPU를 할당받지 못하는 기아현상이 발생할 수 있으며 프로세스의 중요도를 결정하는데 어려움이 있을 수 있다.
멀티레벨 피드백 큐 스케줄링(Multilevel Feedback Queue - MLFQ)
- 우선순위 기반 스케줄링의 단점인 기아 현상을 해결하기 위한 스케줄링이며, 여러 개의 준비 큐를 사용해 프로세스의 우선순위를 동적으로 조정한다.
- 낮은 우선순위의 프로세스도 일정 시간 동안 CPU 시간을 할당받을 수 있어, 기아 현상을 방지할 수 있다.
전체적인 시스템 성능으로 봤을 땐 멀티레벨 피드백 큐 스케줄링을 고려할 수 있지만, 상시로 돌아가야 하는 중요한 프로세스가 있을 땐 우선순위 스케줄링이 더 적합할 수 있다.
4. 타 스케쥴러와 비교하여, Multi-level Feedback Queue는 어떤 문제점들을 해결한다고 볼 수 있을까요?
멀티레벨 피드백 큐 스케줄링의 장점
- 기아 현상 해결:
- 기존 우선순위 스케줄링은 높은 우선순위 프로세스에 CPU 시간을 독점당할 수 있어, 낮은 우선순위 프로세스가 CPU 시간을 받지 못하는 기아 현상이 발생할 수 있지만, MLFQ는 프로세스의 우선순위를 동적으로 변경하여, 낮은 우선순위 프로세스도 일정 시간 동안 CPU 시간을 할당받을 수 있어 기아 현상을 방지할 수 있다.
- 프로세스 특성 반영:
- 기존 스케줄링 알고리즘은 프로세스의 특성을 고려하지 않고 고정된 우선순위를 사용했으나, MLFQ는 프로세스의 특성(CPU 집중도, I/O 집중도 등)을 반영하여 동적으로 우선순위를 변경할 수 있어, 프로세스의 특성에 맞는 스케줄링이 가능하다.
- 응답 시간 향상:
- 기존 스케줄링 알고리즘은 프로세스의 특성을 고려하지 않아, 대화형 프로세스의 응답 시간이 느릴 수 있었지만, MLFQ는 대화형 프로세스의 우선순위를 높게 유지하여, 응답 시간을 향상시킬 수 있다.
- 공정성 향상:
- 기존 스케줄링 알고리즘은 프로세스의 중요도에 따른 공정성이 부족할 수 있었지만, MLFQ는 프로세스의 특성을 반영하여 동적으로 우선순위를 변경함으로써, 전체적인 시스템 성능과 공정성을 향상시킬 수 있습니다.
MLFQ는 기존 스케줄링 방식의 문제점들을 해결하여, 프로세스의 특성을 반영하고 공정성을 향상시킬 수 있는 스케줄링 기법이라고 볼 수 있다.
5. 유저 스레드와 커널 스레드의 스케쥴링 알고리즘은 똑같을까요?
유저 스레드와 커널 스레드 스케줄링의 차이점
1. 주체
- 커널 스레드의 스케줄링은 운영체제 커널에 의해 관리된다.
- 유저 스레드의 스케줄링은 사용자 수준 스레드 라이브러리에 의해 관리된다.
2. 방식
- 커널 스레드는 운영체제의 프로세스 스케줄러에 의해 직접 스케줄링된다.
- 유저 스레드는 사용자 수준 스레드 라이브러리에 의해 간접적으로 스케줄링되는데, 이 라이브러리는 커널 스레드에 유저 스레드를 매핑하여 스케줄링한다.
3. 정책
- 커널 스레드의 스케줄링 정책은 운영체제마다 다를 수 있다
- 예) 라운드로빈, 선입선출, 우선순위 스케줄링 등
- 유저 스레드의 스케줄링 정책은 사용자 수준 스레드 라이브러리에 따라 다를 수 있다.
4. 오버헤드
- 커널 스레드의 스케줄링은 운영체제 내부에서 이루어지므로 오버헤드가 상대적으로 낮다.
- 유저 스레드의 스케줄링은 사용자 수준 라이브러리에서 이루어지므로 오버헤드가 상대적으로 높다.
따라서 유저 스레드와 커널 스레드의 스케줄링 알고리즘은 서로 다르며, 이에 따른 성능 차이가 있기 때문에 중요하다.
사용자 수준 스레드 라이브러리
- 사용자 수준 스레드는 운영체제가 직접 관리하는 커널 스레드와 달리, 사용자 프로그램 수준에서 구현되는 스레드이며 해당 스레드를 생성, 관리, 스케줄링 해주는 기능을 제공하는 라이브러리이다.
- 대표적인 사용자 수준 스레드 라이브러리는 POSIX Threads(Pthreads), Windows 스레드 라이브러리, Java 스레드 라이브러리 등이 있다.
특징
- 운영체제 커널의 개입 없이 사용자 공간에서 스레드를 관리하므로 오버헤드가 적다.
- 커널 스레드와 달리 시스템 전반의 스케줄링 우선순위를 지원하지 않는다.
- I/O 작업으로 인한 블록 문제, CPU 코어 사용률 저하, 보안 취약성 등의 단점이 있다.
활용
- 운영체제가 멀티스레드를 지원하지 않을 때 사용자 수준 스레드 라이브러리를 활용하여 멀티스레딩을 구현할 수 있다.
- 사용자 수준 스레드 라이브러리는 프로그래밍 언어 수준에서 스레드 기능을 제공하는 데 활용된다.
따라서 사용자 수준 스레드 라이브러리는 운영체제 수준의 스레드 관리 기능을 사용자 공간에서 구현하여 멀티스레딩을 지원하는 소프트웨어 라이브러리라고 할 수 있다.
'개발 TIL' 카테고리의 다른 글
24.07.12 day24 남추문 스터디 회고 (0) | 2024.07.12 |
---|---|
24.07.11 day23 뮤텍스와 세마포어, 데드락(Deadlock), 프로그램 컴파일 (0) | 2024.07.11 |
24.07.09 day21 html과 Xhtml의 차이점, Promise와 async/await의 차이점 (0) | 2024.07.09 |
24.07.08 day20 Flexbox vs Grid, 포트폴리오 배경화면 (1) | 2024.07.08 |
24.07.05 day19 코드트리 문제 풀기, mounted() ,vue.js 컴포넌트 주요 기능 (0) | 2024.07.05 |