'우선순위 전도'에 해당되는 글 1건

  1. 2012.01.07 우선순위 전도 & 우선순위 상속 (Priority Inversion & Priority Inheritance) (4)

RTOS 가 갖을 수 있는 취약점이 또 하나 나오는군요.
이번 개념 굉장히 중요합니다.

일단 이 문장은 기억하세요~

"우선순위 전도"를 해결 할수 있는 해결책은 "우선순위 상속"이고,
"우선순위 상속"을 하기 위해서는 커널이 "동적 우선순위"를 구현 할 수 있어야 한다.


오케이??

자! 다시 각하와 국무총리, 필자와 화장실을 들고 와 봅시다.

각하와 필자가 갑자기 큰일이 마려워졌어요 ㅋ 화장실은 1칸밖에 없고 열쇠도 1개밖에 없습니다.
이 열쇠는 다른 이름으로 "세마포어" 라고 부르고, 이 열쇠관리는 화장실 관리인인 커널의 "스케쥴러" 가 합니다.

필자는 비록 우선순위가 가장 낮지만, 재빠르기때문에 각하와 국무총리님이 화장실을 가고 싶어하기 전에 관리자에게 "열쇠점 주세요" 해서 화장실에 가서 일을 보기 시작했습니당 ㅋㅋ

신나게 일을 보고 있는데 각하가 급하게 나타나서리 "나도 화장실이 급하다. 열쇠 점 줘" 이랬습니다 ㅋㅋ 그랬더니
관리자가 "열쇠 없는댑쇼?? 기둘리셔야 할듯 ㅋㅋ" 이러는 거에요 ㅋㅋ
아무리 각하라지만, 민주주의 사회에서 이미 일보고있는 저를 끌어낼수는 없는 노릇이지요 ㅋㅋㅋ
그래서 각하는 "흠.. 그럼 열쇠가 다시 나올때 까지 기다리도록 하지. 어쩔수 없으니까... " 이러면서 대기를 타기 시작합니다 ㅋㅋ

제가 빠르게 일을 보고 나온다면야 문제가 커지지는 않겠지요 ㅋㅋ 그래서 빠르게 일을 보려고 하고있는데 갑자기 국무총리님이 " 아 커널. 나 급하게 미팅이 잡혔어. 씨피유좀 부여해조 나 일좀 하게" 라는거에요 ㅋ

아나 얼척이 없어서 ㅋㅋ 커널은 국무총리님이 일을 보신다니까 씨피유 점유율을 저보다 우선순위가 높은 국무총리님에게 줘버리는거지요 ( 대통령이 우선순위가 가장 높지만, 화장실(공유자원) 이라는 자원을 요청하는데 쓰고 있어서 씨피유 점유율을 부득이 하게 못 주는것입니다. 국무 총리는 화장실을 요청한게 아니니까 씨피유 자원을 주는 것이지요)

국무총리님이 한창 일을 열심히 합니다. 쭈욱, 오랜기간 ㅋㅋㅋ 일을 다 마치고 커널에게 "나 일 다 끝났다" 이러니까 커널은 누구에게 이제 씨피유를 서비스 해줄까~~~ 하고 둘러봅니다. 각하와 제가 레디 상태인데 둘다 화장실을 요구하는데 키는 저한테 있었지요 ㅋㅋ 제가 반납을 한적이 없으니까 ㅋㅋ 그래서 저한테 씨피유을 부여해줘요 ㅋㅋ

저는 이제 신나게 일을 보고 난 후 " 다 썼어요 키 반납할께요 " 라고 말하죠 ㅋ 그제서야 관리자는 최고 우선순위였던 각하에게 " 각하 키가 왔습니다 이용하시지요~" 라면서 키를 주죠 ㅋ

자 여기서 생각해 볼까요??

각하는 1순위였는데 실질적인 우선순위는 어떻게 되어버렸습니까? 3순위였던 저보다도 낮아져 버렸죠??

이렇게 되는 현상을 "우선순위 전도 (Priority Inversion)" 이라고 부릅니다

공유자원의 한정성 때문에 어쩔 수 없이 최고 우선순위를 대기 태우는 일이 발생하더라고, 빨리 공유자원을 풀어서 최 우선순위 테스크에게 서비스를 해줘야 커널의 본질에 맞는데 이것은 뭐 2순위 3순위 애들까지 다 서비스 해주고나서야 맨 꼴지로 최 우선순위 테스크를 서비스 해주는 상황이 벌어져버리니 황당할 노릇이지요 ㅋ

위의 비유는 여러분의 이해를 돕기 위한것이고, Task 실행도를 살펴보지요~ 제가 햇던 이야기들이 고스란히 들어있습니다.


자 이해 되세여? ㅋㅋ 테스크 1이 꼴등으로 실행되어 버리네요 ㅋㅋㅋ

이런 문제를 해결하기위한 방법으로 어떤 것이 있을까요???

화장실을 이용하고 있던 저의 우선순위를 잠시동안 각하와 동급이나 그 이상으로 만들어 주는것입니다.

즉, 각하의 우선순위를 "상속" 해 주는것이지요 ㅋㅋ

그럼 , 제가 일보고 있을때 국무총리가 자기 일 있다고 CPU 서비스좀 해달라고 했을때 스케쥴러는 " 그럴수 없습니다 후달수 님아~~ " 이러면서 저는 꾸준히 화장실을 재빠르게 이용하겠죠 ㅋㅋ

다 이용한 후에 다시 제 우선순위를 원래의 양민 레벨로 돌려주고 나면 바로 최고 우선순위인 "각하" 께서 화장실을 이용하게 되시고~ 다 이용하신 후에 국무 총리 님이 업무를 보시게 되는것입니다 ㅋㅋ

이제 커널이 좀 제대로 돌아가는것 같지요?? ㅋ

요로코롬 돌아가게 됩니다 ㅋㅋㅋ

이제 맨처음에 꼭 기억하셔야 한다던 한문장이 이해가 되시지요?? ㅋㅋ

이렇게 공유자원을 이용할때 최고 우선순위를 일시적으로 부여 하는 행위를

우선순위 상속 (Priority Inheritance) 라고 부르고, 이 행동을 할 수 있으려면,

어플리케이션이 실행중일때 우선 순위를 바꿀 수 있는 동적 우선순위(Dynamic Priority) 를 커널이 구현할수 있어야 한답니다 ㅋㅋ

이해가 되셨기를 바랍니다

Posted by J.Bear