copy_to_user, copy_from_user

declspec의 이미지

리눅스 커널모듈을 만들때 응용프로그램와 데이터를 주고받기 위해서
copy_to_user 와 copy_from_user, get_user, put_user 등을 사용하잔아요?
그런데 copy_to_user 의 경우 응용 프로그램의 가상메모리주소에 쓰기작업을 수행하고
copy_from_user 의 경우는 응용프로그램의 가상메모리주소에서 읽기작업을 하는것이데
그것은 즉 커널모듈은 커널, 유저 모두의 메모리 영역을 접근할수 있다는 것인가요?

즉 유저는 커널메모리에 접근 못하지만
커널은 유저메모리에 접근가능한가요?

또한 커널모듈이 유저프로그램의 메모리에 접근할때
그 주소는 가상주소 아닌가요?
가상주소는 한 프로세스 내에서만 유효한 주소인데
독립적인 프로세스인 커널모듈이 어떻게 임의의 유저프로그램의 가상주소에
접근할수 있나요? 00401000 이라는 유저프로그램 주소가 있어도
이게 어떤 프로그램의 주소인줄을 모를것같은데...?

totohero의 이미지

커널 모듈이 독립적인 프로세스다는 언급은 좀 이상하네요. 커널 모듈은 커널 코드의 일부분일뿐
그 코드가 독립적인 프로세스로 동작할 수도 아닐 수도 있습니다. 그 코드의 어떤 부분이

A) kernel thread로 돌면 독립적인 프로세스가 되기도 하겠지만
B) 어떤 부분은 그냥 유저 프로세스가 system call 호출시 불려지기만 하는 함수일 수도 있겠고
C) 또 어떤 부분은 인터럽트 핸들러처럼 독립적인 프로세스도 아니고 system call에서 불리는 함수도
아닌 경우가 있습니다. (threaded irq 같은 경우 제외)

copy_to_user 등은 B의 경우 주로 사용합니다. 현재 프로세스가 무엇인지는 커널이 잘 알고 있죠.
A의 경우엔 user 영역 맵핑이 없으므로 사용할 일이 없고요. C의 경우엔 현재 프로세스가 뭔지
신경쓰면 이상한 경우죠.

현재 프로세스가 아닌 임의의 다른 프로세스의 user 영역 메모리를 접근하려면... 음 그 프로세스의
task_struct로부터 mm 정보를 얻어 맵핑된 물리 메모리를 찾아내는 좀 복잡한 방법이 필요하지 싶은데
가능은 할거 같습니다만 정확히 모르겠네요;;

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.