시스템 콜 관련하여 개념 질문좀 드립니다.

happyKYS의 이미지

안녕하세요 아무쪼록 답변 부탁드립니다 .꾸벅(__)

시스템 콜을 구현하고, 래퍼 루틴을 구현한 뒤, user 영역에서 라이브러리를 통해 시스템 콜과 연계된 함수를 수행하면, 해당 라이브러리 래퍼 루틴에서 system call 인터럽트를 걸면서 결과적으로 시스템 콜 함수가 수행되는 것으로 알고 있습니다.

간단히 생각해보면 단순히 유저 영역에서 커널 영역 접근을 할 수 없으니까, 시스템 콜을 통해 원하는 행동을 하는 것이므로, 역으로 생각해보면 커널 영역의 코드라면 sys_mknod() 와 같이 시스템 콜 함수를 직접 호출해서 사용할 수 있지 않을까? 라고 생각했었는데 놓치는 부분이 있는지 저런 방식은 할 수 없더군요.

시스템 콜 전에 유저 영역의 값에 대한 선 처리라던지 하는 부분과 시스템 콜 구현부 자체가 유저 영역으로의 서비스를 위해 작성된 것이기 때문에 그럴수도 있겠다.. 라는 생각도 들지만, 좀 더 명확하게 "커널 소스에서 시스템 콜을 직접 호출해서 정상적인 동작을 바랄수는 없다"에 대한 이유를 알고 싶습니다. 아시는 고수분은 답변좀 부탁드립니다.

감사합니다.

declspec의 이미지

고수는 아니지만 제가 이해하는바로는...
시스템콜은 말씀하신대로 유저 영역으로의 서비스를 위해 있는 인터페이스 이기때문에
커널영역에서 시스템콜을 호출하기위한 래퍼루틴이 만들어진게 없어서 사용할수가 없을겁니다

하지만 결국 시스템콜도 어쨋든 커널모드상에서 코드가 수행되는것이므로 인터페이스는 억지로 만든다면
만들수 있을겁니다. 하지만 그럴 필요가 없죠

만약 커널모드로만 수행되는 커널쓰레드를(커널 자체를) 작성하시는 것이라면
이미 커널의 모든 코드들을 수행할수 있는데 구지 권한상승을 시켜주는 시스템콜을 이용할 필요가 없을것이고...
또만 만약 setreuid 를 예로 든다면, 순수한 커널코드상에서 이런 시스템콜이 사용되는 상황이 없죠
real, effective user ID 를 set 하는 시스템콜인데 이건 user application 이 아니면 개념적으로 해당이 안되니까요
read/write 같은 경우도 어떤 file descriptor 에 읽고 쓰느냐? 라는 상황이 존재해야 하는데, file descriptor 가 유저모드 프로그램
마다 독립적으로 존재하니까 유저모드자체가 없는 순수 커널코드에서는 file descriptor 를 어떻게 명시할지 난감한거죠...

유저컨텍스트에서 진입할 커널코드를 작성하시는거라면(핸들러 함수나 모듈 등) 문제가 달라지지만
구지 커널코드에 진입한다음 거기서 시스템콜을 또 부를 바에야 애초에 해당 코드에 진입할 유저코드에서
시스템콜을 호출하는게 더 효과적일테니까요

시스템콜은 해당 콜을 호출하는 유저 프로그램의 context 를 대부분 그대로 가져갑니다
context 전환에 대해서 알아보시다 보면 도움이 되지 않을까 싶네요

자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.