우선순위 스케줄링
비효율적인 쓰레드 스케쥴링 기법을 보다 효율적인 우선순위 스케줄링으로 변경하는 과제가 주어졌다.
https://youtu.be/myO2bs5LMak?si=-XCZqOKd_C-SffJo
좋은 동영상 강의가 있지만 이해한 내용을 정리하고 보다 쉬운 이해를 돕기 위해 미약하게나마 시각화를 해봤다.
만약 쓰레드에 5틱의 작업을 허용하는 OS가 있다고 치자. 작업들이 ready queue에서 순차적으로 수행될것이다.
여기서 우리는 Sleep list에 작업을 마치지 못한 쓰레드를 추가할 것인데, 추가하며 해당 쓰레드는 자신이 작업하는데 걸리는 시간 + 현재 시간을 더한 값을 feild값으로 설정한 뒤 Sleep list에 추가한다.
여기서 만약 내가 가지고 있는 feild값이 sleep list에서 가장 작으면 global tick이라는 값을 현재값으로 갱신해준다.
해당 작업을 반복하면 아마 이런 모습일것이다.
그렇게 sleep list에 값을 추가하다 global tick에 설정된 값과 일치하는 순간이 오게 되는데 이땐 Sleep list에 있는 값을 탐색하며 현재 시간보다 작은 값을 가지고 있는 쓰레드를 다시 Ready list에 추가해준다.
만약 Sleep list에서 Ready list의 tail로 스레드를 추가해주고 sleep list의 최소값을 global tick으로 갱신해준다.
이렇게 모든 쓰레드가 종료될때까지 해당 스케줄링 기법을 사용해서 작업을 진행한다.
이 방법을 사용하면 우선순위 스케줄링의 문제점인 봉쇄 문제를 해결할 수 있다.
절대 이해 못할것같은 개념을 이해했을 때의 쾌감은 그 어느때보다 더 High 해진다..
'Krafton_Jungle > pintOS' 카테고리의 다른 글
Project 2 User program - argument_stack (0) | 2024.05.30 |
---|---|
Project 2 User program - argument_stack (0) | 2024.05.23 |
Project 1 Advanced Scheduler (2) | 2024.05.19 |
Project 1 Priority donation (0) | 2024.05.17 |
ERROR - mac 핀토스 환경설정 에러 27 of 27 tests failed. (5) | 2024.05.10 |