본문 바로가기

KAIST PINTOS

PROJECT 1 - Alarm Clock, Priority Scheduling

 

사실 2번 과제 초반까지는 아이패드에 필기를 하면서 공부를 했었다.
다시 정리하기 귀찮으니까 그냥 필기 파일을 업로드해놓겠다. 

PINTOS를 시작하기 전에.pdf
0.64MB



 

Donation - Priority Scheduling

나는 donation 개념이 이해가 잘 안돼서 케이스를 하나씩 그림을 그려가며 공부했었다. 그리고 나서 코딩을 하면서도, 막히는 테스트 케이스를 하나씩 분석해서 해결했다. 그래서 사실 1번을 다 짠 시점에서 정리를 하자니 두서 없이 될 것 같아 프로젝트 1은 패스할까 한다. 

 

1. donation

donation 공부.pdf
0.85MB

 

 

 

대충 테케 분석은 이런 식으로 무식하게 접근했다.
테케가 하나씩 통과해갈 때는 뿌듯했던 것 같은데 막상 다 하고 나니 조금 부끄러웠다. 

 

 

공부하면서 혼자 궁금했던 것들

 

Q > 기존의 timer_sleep 함수가 ticks 정도의 시간이 지날 때까지 thread_yield를 해주고 있는데 그럼 busy waiting이 아닌거 아닐까?

A > ticks만큼 반복해서 thread_yield를 해주고 있기 때문에 busy-waiting이다. 알람이 한 번만 울리면 되는데 ticks번만큼 울리는 것.

Q > thread_yield가 이해가 안되는데 current가 돌리고있던 애를 ready_list에 있던 애한테 넘기라는건지 아니면 다른 애를 current한테 넘기라는건지?

A. current와 ready list에서 제일 priority가 높은 애를 비교해서 current가 높으면 current가 갖고있게 놔두고 ready list에 있던 애가 높으면 current한테서 cpu를 뺏어서 해당 스레드에게 주라는 것. 내 코드 상에서 ready list에 삽입할 때 list_insert_ordered를 사용했으니까 제일 앞에 있는 애가 priority가 제일 높을 것이기 때문에, ready_list의 제일 앞 원소와 비교하면 됨. 

'KAIST PINTOS' 카테고리의 다른 글

argument passing  (0) 2022.02.13
Process.c  (0) 2022.02.13
Project 2 디버깅  (0) 2022.02.07
system call  (0) 2022.01.21
fork()  (0) 2022.01.20