-
Project1 : Thread - Priority Scheduling(3)OS/Pintos 2021. 12. 30. 11:19
Priority inversion Problem 개요
과제 목표
- Priority donation 구현
- Multiple donation 구현
- Nested donation 구현
개념
1. Priority donation : 우선순위가 높은 쓰레드가 우선순위가 낮은 쓰레드를 기다리는 현상

해결방법

수정 함수
- void lock_acquire (struct lock *lock)
- lock을 점유하고 있는 스레드와 요청 하는 스레드의 우선순위를 비교하여 Priority donation을 수행하도록 수정
- lock_release(struct lock *lock)
- donation list에서 스레드를 제거하고, 우선순위를 다시 계산하도록 remove_with_lock(), refresh_priority() 함수를 호출
- void thread_set_priority(int new_priority)
- 스레드 우선순위 변경시 donation의 발생을 확인하고 우선순위 변경을 위해 donation_priority()함수 추가
추가 함수
- void donate_priority(void)
- priority donation을 수행
- void remove_with_lock(struct lock lock)*
- donation list에서 스레드 엔트리를 제거
- void refresh_priority(void)
- 우선순위를 다시 계산
수정 자료구조
struct thread
2. Multiple donation
스레드가 두 개 이상의 lock 보유 시, 각 lock에 의해 도네이션 발생 가능 → 이전 상태의 우선순위 기억하고 있어야함!

3. Nested donation

구현 (작성중)
'OS > Pintos' 카테고리의 다른 글
Project2 : Argument Passing (0) 2022.01.10 Project2: User Programs(introduction) (0) 2022.01.10 Project1 : Thread - Priority Scheduling(2) (0) 2021.12.30 Project1 : Thread - Priority Scheduling (1) (0) 2021.12.30 Project1 : Thread - introduction (0) 2021.12.30