핀토스 1주차 - Priority_Scheduling
Priority Scheduling
Part 1 : Threads
1주차의 과제는 총 3개인데
- Alarm Clock
- Priority Scheduling
- Advanced Scheduler
이며,
현재 진행하는 과제는 Priority Scheduling이다
Priority Scheduling은
해당 thread에 ‘우선순위’를 부여하여,
현재 작업 중인 스레드보다 새로 들어온 스레드의 우선순위가
더 높은 경우, 현재의 스레드를 ready_list에 밀어넣고
새로운 스레드를 작업하는 방식이다
말 그대로, ‘우선순위’가 더 높은 작업을 먼저 처리하는 방식이다
구현 방식은 thread의 priority 필드를
실제로 사용하게 만들며,
이에 따라 ready_list에 삽입될 때, 우선순위가 높은 것이
앞에 오도록 하는 ‘내림차순’ 방식을 이용하였다
이에 따라,
thread_create, thread_yield, thread_unblock,
thread_set_priority 함수를 수정하였다
또한, list의 compare 용 함수인
cmp_priority 함수를 만들어
첫번째 인자가 두번째 인자보다 높은 경우 true를 반환하도록 하였다
(내림차순을 위함)
구현시 깜빡한 점
- set_priority 함수에서 처음에는
ready_list를 sort하는 방식이었는데
생각해보니 thread_current의 값을 수정하는데
ready_list만 sort하는 방식은 별로 좋지 못한것 같았다
이에 따라 바뀐 값과 list의 첫번째 값(내림차순이기에 이녀석이 제일 큼)
과 비교하여 그에 따라 수정
(애초에 insert 할 때, orderer 를 호출하고 있었기에
굳이 sort를 호출할 필요는 없었다) - 자꾸 에러가 나기에 확인했더니,
cmp 함수에서 a->priority 와 b 자체를 비교하고 있었다…
b->priority로 수정 (항상 오타 조심…) - 특정 test case를 통과하지 못하여 확인하였는데,
list_front 같은 함수는 list_empty인 상황을 따로 검사하지 않았다
(null return이 아니라 그냥 assert 해버렸다)
해당 함수를 호출 시, list_empty를 따로 호출해서 예외처리를 하였다
다만 priority 부분 중, 현재는
thread의 ready_list 부분만 처리한 것이며,
동기화 도구에 따른 문제가 아직 남아있는 상황이다
댓글남기기