-
Notifications
You must be signed in to change notification settings - Fork 2
Proj1 discussion
-
thread_init()
"main" 스레드 생성
init_thread()
를 통해서 만드는데, 이 때는 THREAD_BLOCKED
나중에 thread_init() 함수에서 다시 (THREAD_RUNNING)로 바꿔줌 -
thread_start()
"idle" 스레드 생성thread_create()
를 통해 생성 -> 쭉쭉 하다가init_thread()
호출(THREAD_BLOCKED) ->thread_unblock(t)
할 때 THREAD_READY로 바꿈 여기서idle(void *idle_started_ UNUSED)
함수 실행할 때,thread_block()
함수 실행됨 -> "main" 스레드가 THREAD_BLOCK으로 바뀜
init_thraed()
통해서 생성 -> THREAD_BLOCKED인 thread가 생성이 됨
이후 thread_unblock(t)
할 때 THREAD_READY로 들어감(ready_list에도 들어감)
얘는 RUNNING인 thread를 THREAD_BLOCKED로 바꿈
이때, schedule()
함수 실행
ready_list에 있는 애를 가져옴(ready_list 비어있으면 idle 스레드, 아니면 ready_list의 제일 앞에 있는 애)
얘를 THREAD_RUNNING으로 바꿈
https://cdn.discordapp.com/attachments/884468527564722177/884838544382779442/unknown.png
https://chayan-memorias.tistory.com/87?category=842655
- normal
- multiple - stack
- nested - ??
https://oslab.kaist.ac.kr/wp-content/uploads/esos_files/courseware/undergraduate/PINTOS/09_Priority_Inversion_Problem.pdf
기본적으로는 트리
우리는 list로 짜볼거에요
list 안에 list가 있는. (list는 donation)
child node 중에서 최댓값인 애가 subtree root node의 값으로 mimic
보면 생각나겠지:)
lock_acquire -> donate_prioroity
lock_release -> remove_with_lock -> refresh_priority
donate_priority -> donations list 만들고 priority donate
remove_with_lock(struct lock *lock) -> donations list에서 lock이 풀린 thread 삭제
refresh_priority -> lock의 holder에서 thread 삭제하고 priority 새로고침(thread_set_priority)