-
[SW 정글 60일차] Pintos Project 1. Priority Inversion 해결하기기타/SW 사관학교 정글 2021. 10. 1. 21:38
오늘은 어제 목표로 한 conditional variable쪽을 수정하고 priority inversion을 해결해주는 방법인 priority donation을 구현하는 것을 했다.
1. 내가 해야할 것은?
conditional variable 쪽 수정을 하는 것은 어제 설명과 똑같다.
기존의 코드에서 wait_list에서 스레드가 기다리는 구조인데 wait_list에 무조건 tail쪽으로 push가 되므로 priority scheduling이 이루어지지 않는다.
이를 수정하는 것이 내가 할 일이다.
그리고 오늘의 main 과제는 priority scheduling에 의한 priority inversion 문제 해결하기이다.
priority inversion이란 다음과 같은 현상을 말한다.
우선순위가 가장 높은 스레드 H, 중간 M, 가장 낮은 L이 존재한다고 가정해보자.
초기 상황은 스레드 L이 공유자원에 대한 lock()을 걸고 공유자원을 사용있어 다른 스레드는 이 공유자원에 접근을 할 수 없게 된다.
이 후, 공유 자원을 필요로 하는 H가 작업을 수행하려고 했지만 L이 lock을 걸고 공유자원을 사용하고 있으므로 H는 작업을 수행하지 못하고 READY 상태가 된다.
이 후, 공유자원을 필요로 하지 않는 M가 ready_list에 있고 M은 L보다 우선순위가 더 높은 스레드이고 공유자원을 필요로 하지 않는 스레드이기 때문에 L은 하던 작업을 멈추고 M에게 CPU를 내어주게 된다.
M이 작업을 모두 완료한 후 다시 L이 작업을 진행하고 unlock 후에 최종적으로 H가 작업을 진행할 수 있는 구조가 된다.
상대적으로 우선순위가 가장 높은 스레드인 H가 마치 우선순위가 가장 낮은 프로세스처럼 실행이 되는 현상이다.
위 설명을 도식화한 것은 아래와 같다.
priority 문제를 해결하기 위해 priority donation을 구현해야 한다.
priority donation은 위의 상황에서 H 가 자신이 가진 priority 를 L 에게 일시적으로 양도하여서 H 자신의 실행을 위해 L이 자신과 동일한 우선순위(H)를 가져서 우선적으로 실행될 수 있도록 만드는 방법이다.
priority donation이 구현되면 아래와 같이 동작할 수 있다.
2. 과제 구현
작성 대기중
[오늘의 나는 어땠을까?]
오늘은 집중이 정말 안되는 날이였다.
요즘은 4시간도 안되게 자는데 나에게 주어진 시간을 제대로 사용을 못한다..
알고 싶은 것도 많고 해야할 구현과제도 많고.. 빨리 끝내고 내가 알고 싶었던 것을 알고 싶다는 생각에 조급해서 더 집중을 흐트리는 것일까
개발자로서의 커리어를 시작한다면 조금 더 내게 주어진 시간을 효율적으로 사용할 수 있을지 의문이다.
그래도 경제적으로 수입이 생기고 회사에서 주 언어로 사용하는 것을 main으로 공부하면서 정글에서 공부하지 못한 부분을 채워나가면 시간 상 제한적이지도 않을 것 같고
개발자로서 성공하고 싶다.
나의 성공기준은 누구나 나의 전문성을 인정하고 내 주위 사람들이 모두 나의 성장성, 꾸준함을 인정하는 것이다.
이러한 외적인 기준말고 내적인, 내가 나를 인정할 기준은 많이 높다.
내가 전문가라고 생각하는 그러한 사람들과 나란한 선에 서는 것이다.
'기타 > SW 사관학교 정글' 카테고리의 다른 글
[SW 정글 62일차] 스케쥴링을 더 알고싶다. (0) 2021.10.04 [SW 정글 61일차] Scheduling (스케쥴링) (0) 2021.10.03 [SW 정글 58일차] Pintos Project 1. Alarm clock (0) 2021.09.30 [SW 정글 57일차] 프로세스 상태 (0) 2021.09.29 [SW 정글 56일차] Pintos 입문하면서 용어 정리하기 (0) 2021.09.28