특권 레벨 변동 시의 스택의 변화에 대하여. (IA-32)
글쓴이: superdma / 작성시간: 일, 2009/09/06 - 10:36오후
만들면서 배우는 os커널의 구조와 원리 책 p204의 특권 레벨 변동 시의 스택의 변화라는 단원에서
"태스크가 실행 중인 동안 인터럽트나 예외가 발생하거나 콜게이트를 거칠떄 특권 레벨의 변화가 이루어집니다.
인터럽트 핸들러나 예외 처리루틴, 콜게이트에 지시된 커널 루틴은 커널모드에서 실행이 되어야 하므로 현재 태스크가 유저 모드로 동작하고 있는 도중에 특권 레벨을 바꾸어 핸들러로 제어가 넘어가게 되는 것입니다.
이러한 스택 스위칭은 높은 특권 레벨의 루틴이 스택 공간의 부족 떄문에 크래쉬되지 않게 하기 위한 것과 낮은 특권 레벨의 루틴이 스택을 통해 높은 특권 레벨의 루틴에 간섭하기 못하도록 하려는 이유가 있습니다."
유저 모드의 태스크에서 커널루틴으로 제어가 넘어가게 되면, 당연히 스택에 대한 스위칭이 생기는데,
이것이 어떻게 스택 공간의 부족과 크래쉬를 방지하게 되는지 이해가 되지 않습니다.
또 "높은 특권 레벨의 루틴이 스택 공간의 부족 떄문에 크래쉬되지 않게 하기 위한 것과" 라는 글에서
낮은 특권 레벨의 루틴이 적합하지 않습니까?
낮은 특권 레벨(유저모드)의 스택을 커널루틴에서 사용하기만 한다면 ( 물론 펌웨어나 로직 상에서 체킹을 하여 폴트를 일으키겠지만) 낮은 특권 레벨의 스택은 크래쉬 될 확률이 높을 꺼라 생각됩니다만...
Forums:
제가 볼때는 맞는말
제가 볼때는 맞는말 같습니다.
높은 특권레벨 코드가(커널) 낮은 특권레벨 영역(유저영역)의 스택을 그대로 사용하면 스택공간이 부족하거나 크래시 될 가능성이 있습니다.
즉.. 코드는 커널레벨이지만 스택이 위치한 곳을 유저영역을 사용할 때 문제가 생긴다는 말이구요.
그래서 코드도 커널레벨, 스택도 커널레벨에 위치한 곳을 사용한다는 이야기 입니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기