커널 스택과 task struct에 관한 질문..
글쓴이: iamcan / 작성시간: 수, 2006/09/20 - 12:21오후
학교에서 시스템 프로그래밍 수업을 듣고 있는 한 학생입니다.
task struct를 분석하다가 saved_kernel_stack, kernel_stack_page 라는 것이 있더라구요.
여기에서 찾아보니까 커널 스택이라는 것이 프로세스마다 하나씩 가지고 있는것이고, 유저모드와 커널모드 스택을 한개씩 갖고 있다고 하고,
유저모드에서 커널모드로 진입시 context switch 와 비슷하게 스택 등의 필요한 정보를 백업하고 들어간다고 뭐 그러더라구요..
근데 그럼 user_stack 같은 구조체도 선언이 되어 있어야 하는데, 전혀 찾아봐도 없더라구요..
그리고 정확하게 saved_kernel_stack 이 어떤 데이터를 담는 녀석인지도 궁금합니다..
Forums:
유저모드는 Virtual
유저모드는 Virtual memory입니다.
VM위에서 자신만이 가지는 공간에서
1~1000까지는 Data영역, 1001~2000은 Code영역, 2001~3000은 BSS영역, 0xBFFF7000~0xC0000000은 스택영역(유저) 과 같이 VM에 나열됩니다.
즉 유저모드에서의 스택은 커널이 관여할바는 아니죠. 다만 context switching할때 유저모드에서의 ss, sp값만 지정위치에 위치시켜주기만 하면됩니다.
커널모드에서의 스택은 한 process(task)가 system_call에 의해서 커널의 관련 함수를 실행하고자 할때(커널에 대한 함수를 이용하고자), 함수call자체가 스택이 필요하므로 존재하는겁니다. 그런이유로 커널모드에서의 스택이 필요한거고, 특별한설정이 없는한 8k로 되어있을겁니다.(커널함수가 재규호출없고, depth도 깊지 않아 8k를 넘지않는다고 커널개발자들은 장담(?)합니다.)
댓글 달기