OS/Pintos 개발일지

[Pintos 개발일지] Priority scheduling 17/27 tests passed.

Binceline 2014. 6. 1. 05:32



후... 10 of 27 tests failed로 줄였다.

자세한 코드는 내 github의 terapintos의 pass priority-donate-one으로 시작하는 곳을 참고하자.

https://github.com/hsb0818/terapintos/commit/4790d3967a7a7e4b9a0735ab1bdc463208b141e9


nested donation에선 문제 없었지만 multiple에선 문제 생겼던 것인데,

reset donation을 진행할 때 

    
struct thread* pHighThread = list_entry (list_front (&lock->semaphore.waiters)
, struct thread, elem);
 if (pCurThread->priority < pHighThread->priority)
{
     pCurThread->priority = pCurThread->priority_origin;
     return;
}
이 부분..을 지워버리니까 잘 된다.

당연히.. waitlist에 있는 가장 최상위 스레드의 우선 순위와 현재 스레드의 우선 순위를 비교했을 때, 

같다면 - 대기 리스트 중 최상위 스레드로부터 donation된 것이기 때문에 다음 태스크를 진행하고,

현재 스레드의 우선 순위가 더 크다면 - 다른 스레드의 간섭을 받을 필요가 없어지기 때문에 그 다음 태스크(현재 스레드가 잡은 가장 최신의 락의 priority로 rollback -> 이전 상태로 롤백이란 뜻이다)를 진행하고,

현재 스레드의 우선 순위가 더 작다면 - > 이런 경우는 있을 수가 없다. waitlist에 대기하고 있는데, 게다가 현재 스레드의 우선 순위가 더 작은데도 donation이 안 됬다면 그건 그냥 잘못된 것이다.

반응형