Project 1 : Threads - Priority Scheduling (수정중)

Priority Scheduling

핀토스에서 priority scheduling 과 priority donation을 구현하세요. 

 

현재 실행 중인 스레드보다 우선순위가 높은 스레드가 준비 목록에 추가되면 현재 스레드는 즉시 프로세서를 새 스레드에 양보해야 합니다. 마찬가지로 스레드가 lock, semaphore, or condition variable를 기다리는 경우 우선순위가 가장 높은 대기 스레드가 먼저 깨어나야 합니다. 스레드는 언제든지 자신의 우선순위를 높이거나 낮출 수 있지만, 우선순위를 낮추어 더 이상 가장 높은 우선순위를 갖지 않게 되면 즉시 CPU를 양보해야 합니다.

 

스레드 우선 순위의 범위는 PRI_MIN(0)에서 PRI_MAX(63)까지입니다. 숫자가 낮을수록 우선순위가 낮으므로 우선순위 0은 가장 낮은 우선순위이고 우선순위 63은 가장 높은 우선순위입니다. 초기 스레드 우선순위는 thread_create()에 인수로 전달됩니다. 다른 우선순위를 선택해야 할 이유가 없는 경우 PRI_DEFAULT(31)를 사용합니다. PRI_ 매크로는 threads/thread.h에 정의되어 있으므로 값을 변경해서는 안 됩니다.

 

우선순위 스케줄링의 한 가지 문제는 "우선순위 반전"입니다. 우선순위가 각각 높은 스레드, 중간 스레드, 낮은 스레드인 H, M, L을 생각해 봅시다. H가 L을 기다려야 하는데(예: L이 보유한 잠금(lock)을 위해) M이 준비 목록에 있는 경우, 우선순위가 낮은 스레드는 CPU 시간을 전혀 얻지 못하므로 H는 CPU를 절대 얻지 못합니다. 이 문제를 부분적으로 해결할 수 있는 방법은 L이 잠금(lock)을 보유하는 동안 H가 자신의 우선순위를 L에게 "기부"한 다음, L이 잠금(lock)을 해제하면(따라서 H가 잠금(lock)을 획득하면) 기부한 것을 회수하는 것입니다.

 

priority donation를 구현합니다. 우선순위 기부(priority donation)가 필요한 다양한 상황을 모두 고려해야 합니다. 단일 스레드에 여러 우선순위가 기부되는 다중 기부(multiple donations) 를 처리해야 합니다. 또한 중첩된 기부(nested donation)를 처리해야 합니다. H가 M이 보유한 잠금(lock)에 대해 대기 중이고 M이 L이 보유한 잠금(lock)에 대해 대기 중인 경우, M과 L 모두 H의 우선순위로 부스트되어야 합니다(should be boosted). 필요한 경우 8단계와 같이 nested priority donation의 깊이(depth)에 합리적인 제한을 둘 수 있습니다.

 

잠금(lock)에 대한 우선순위 기부(priority donation)를 구현해야 합니다. 다른 핀토스 동기화 구성에 대해서는 우선순위 기부(priority donation)를 구현할 필요가 없습니다. 모든 경우에 우선순위 스케줄링(priority scheduling)을 구현해야 합니다.

 

마지막으로 스레드가 자체 우선순위를 검사하고 수정할 수 있게 만드는 아래의 함수들(thread_set_priority(), thread_get_priority().)을 구현합니다. 이러한 함수에 대한 스켈레톤(뼈대)은 threads/thread.c에 제공됩니다.

 

void thread_set_priority (int new_priority);

-현재 스레드의 우선순위를 새 우선순위로 설정합니다. 현재 스레드의 우선순위가 더 이상 가장 높지(highest priority) 않으면 양보합니다.

 

int thread_get_priority (void);

-현재 스레드의 우선순위를 반환합니다. 우선순위 기부( priority donation )가 있는 경우, 더 높은(기부된) 우선순위를 반환합니다.

 

스레드가 다른 스레드의 우선순위를 직접 수정할 수 있도록 인터페이스를 제공할 필요는 없습니다.

우선순위 스케줄러(The priority scheduler)는 이후 프로젝트에서 사용되지 않습니다.

  Comments,     Trackbacks