커널 모드에서의 페이지 폴트...?

kkojiband의 이미지

그냥 시험 삼아 디바이스 드라이버 작성시에 strcpy 를 이용해서 접근할수없는 메모리 영역에 쓰기를 해봤는데요,

그냥 세그멘테이션 폴트 메세지만 뿌려주고 마네요...

커널 코드(fault.c)에 보니까 가상메모리영역내에 없는 메모리 접근시 유저 모드일때는 위의 메세지를 뿌려주고, 커널 모드일때는 다른 예외처리를 하던데 이건 왜 일까요?

커널 코드를 완벽히 분석해보는게 제일 좋은 방법이겠지만, 어렵네요...--;

고수님들 조언을 부탁드립니다~

Necromancer의 이미지

제가 알기론 리눅스 커널이 먹은 메모리 영역은 스와핑이 안됩니다.

다른 예외처리라는 거는 아마도 커널 패닉시 나는 메시지를 뿌리는거 같네요.

Written By the Black Knight of Destruction

kkojiband의 이미지

먼저 답변 감사드립니다~!

근데 제가 질문을 잘못했습니다...--;;

커널 모드에서 다른 예외처리를 하는데 이건 왜 일까요? 가 아니구요...--;

커널 모드에서 쓰기 금지된 영역에 쓰기를 하거나 유저 공간의 가상 메모리 영역으로 잡혀있지않은 영역에 대해 접근을 할때, strcpy 로 접근을 하면 copy_to_user 등과 같이 먼저 검사를 안하기 때문에 페이지 폴트가 일어날텐데요,

여기서 이상한건 fault.c 에 보면 유저 모드에서 페이지 폴트가 일어나면 그 메세지가 나오고, 커널 모드라면 패닉이 일어나는거같은데,

디바이스 드라이버에서 그렇게 해보니 패닉이 안 일어나고, 일반 유저 모드에서처럼 메세지가 뜨더라구요...

왜 이럴까요? 제가 뭔가 잘못 생각하고 있는걸까요??

이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~

kkojiband의 이미지

어설프게나마 해결을 했습니다...

페이지 폴트처리시,

커널 모드에서 발생한 문제이면 먼저 오류를 처리하기 위해 준비된게 있는지 찾고, 있으면 거기로 점프를 해서 해결을 하고, 그게 없으면 '웁스' --; 패닉이 되는군요...

커널에서 웁스 라는 단어를 보니...하하...--;

이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.