관리 메뉴

kisoo

커널 스텍 사이즈 12kb 인한 고려 사항 본문

01.About Programming /2.Kernel Lab

커널 스텍 사이즈 12kb 인한 고려 사항

JamesK78 2009. 2. 4. 10:17

 커널 스택 사이즈가 12KB로 인해서 커널 모드 (드라이버)개발 할때 주의할 사항에 대해서 알아보겠습니다.

 

[커널 스택 (Kernel Stack)]

 커널 모드 루틴은 유저 모드 스택과 동일한 방식으로 동작하는 스택을 가지고 있다. 그러나 커널 스택의 최대 사이즈는 매우 작고 커지지 않기 때문에 아껴서 사용해야 한다. (User Mode Stack : 1MB->부족할 경우 자동으로 사이즈가 커진다. Kernel Mode Stack : 12KB->부족해도 커지지 않는다.) 아래 3가지 TIP은 커널 스택사용할때 주의 사항이다.

 

1) 재귀 루틴은 커널 스택 사용에 있어 특히 주의를 해야 한다. 보통 드라이버는 재귀적 루틴을 사용하면 안된다.

 

2) 디스크 I/O 경로는 깊은 계층적 경로를 가지고 하나 이상의 페이지 폴트 처리가 가끔 필요하기 때문에 스택 사용에 매우 민감하다.

 

3) 큰 데이터 오브젝트를 여기저기 사용하는 드라이버는 보통 이 오브젝트를 스택상에 두지 않는다. 대신 드라이버는 오브젝트를 위한 넌페이지드(Non Paged Pool) 메모리를 할당하고 이 메모리의 포인터를 전달한다. 이것은 커널 모드 프로세스가 같은 주소 공간을 공유하기 때문에 가능하다.

 

[커널 스택 딜레마]

 메모리 관리에 있어서 커널 스택은 개발자의 가장 친한 벗인 동시에 가장 나쁜적이다. 풀(Pool)에 데이터 구조체를 두는 것보다 스택에 배치하는 것이 드라이버 단순화에 매우 도움이 되는 경우가 많다. 그러나 커널 스택이 매우 작기 때문에 많은 데이터를 스택에 위치시키는 것은 주의가 필요하다. 매우 깊은 콜스택을 가진 가장 아래쪽의 드라이버(예를 들어 Service Storage Device)는 특별한 주의가 필요하다. 메모리 매니저와 파일 시스템 드라이버가 그들의 위에 있고 스택 공간의 아주 큰 부분을 독차지 하고 있을 수가 있기 때문이다.

Comments