[완료] 사용자 스택과 커널 스택 간에 값 넘겨주는 법이 궁금
글쓴이: yohan83 / 작성시간: 수, 2010/08/18 - 4:40오후
사용자 모드에서 어떤 사용자 함수가 실행되면 사용자 스택에 엑티베이션 레코드들이 생길텐데..
이 때 예를 들어 어떤 함수에서 open() 시스템 콜을 호출했다면 이 open함수의 매개변수가 어떻게 커널 스택에 전달되는지 궁금합니다.
반대로 커널 수행이 끝나고 예를 들어 파일 디스크립터를 사용자 함수에 넘겨줄때는 커널 스택에서 사용자 스택으로 값을 넘겨줘야 할텐데..
이게 어떤 식으로 이루어지는지 알고 싶습니다.
단순히 전달하고자 하는 값을 다른 스택에 넣어주는 식인가요?
Forums:
그렇지는 않고요.
매개변수를 레지스터에 넣어 전달합니다... 시스텝 콜에 대한 인자는요. 따라서 레지스터를 저장하고 복수하는 것들이 시스텝 콜 함수 구현에 들어갑니다. 그리고 커널모드에서는 유저의 메모리를 접근 할 수 있기 때문에 딱히 커널스택으로 전달 할 필요는 없습니다.
그렇군요ㅎ
그렇군요ㅎ 답변감사합니다!ㅎ
운영체제마다
운영체제마다 다르지만 사용자의 메모리는 Paged 메모리에 존재 할 수 있기 때문에 Buffer를 이용하여 커널모드로 카피를 하여 작업을 하는 경우와 해당 메모리의 존재 여부나 기록 가능 여부를 파악하여 기록하거나 아니면 메모리가 페이지 아웃 되지 않게 만든 후 작업을 하죠
댓글 달기