User 영역 함수를 Kernel 영역에서 사용하는 방법 문의드립니다.

astzlra955의 이미지

안녕하세요.

User영역에서 stdio.h 등을 이용해서 사용하는 함수를 kernel 영역에서 불러서 사용할 수 있는 방법이 있을까요?

System Call을 이용하는 user영역함수들은 그 System Call 자체를 kernel 영역에서 불러서 사용하면 되는데, 그게 아닌 경우에는 어떤 방법이 있을까요?

좋은 하루 보내세요~

shint의 이미지

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

익명 사용자의 이미지

일단 약간의 배경 지식을 먼저 말씀드리자면,

1) user -> kernel
사용자 영역 프로그램이 커널(보통 시스템이라고 하지요)에서 서비스를 요청하므로, 이를 시스템 호출(system call)이라고 합니다.

2) kernel -> user
커널에는 필수적인 루틴만 들어가는게 이상적이며, 단지 kernel에 포팅하면 빨라질 것이라는 별로 타당하지 않은 이유로, 무리하게 커널 내부로 유저 영역 프로그램을 포팅하면, 나중에 maintenance, scalability, high availability, load balancing등에서 낭패를 볼 수 있습니다. 개인적으로, 십수년 전에도 그러했고, 지금은 더 심하다고 봅니다.
그러나, 특정 기능을 위해 커널에 필수 모듈로 만들어 일부를 넣어 두고, 사용자 영역에 있음직한 부분에 대해서는 사용자 영역에 그냥 둡니다. 예를 들어, 데이터베이스 등은 사용자 영역에 있는게 좋겠지요? 그리고, 가끔은 커널에서 사용자 영역 프로그램을 호출할 필요가 있습니다.

-------------------------
상부: 사용자영역/응용
------------------------
하부: 운영체제커널/시스템
------------------------
위 그림처럼 보통 시스템(커널)이 하부구조에 있고, 상위에서 하부구조의 저수준 호출(시스템호출, 'system call')을 하는데요.
이 경우에는 반대로 아래(하부구조)에서 상부로 호출을 합니다. 그래서 이를 부르는 이름이 'up call'입니다.
키워드가 'upcall' 이라는 얘기입니다.

답변 예제) 간단한지라, 구지 설명은 생략하겠습니다. 원리만 아시면 되겠지요?
http://people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-7.html
-------------
* 참고로, callback은 call(즉, 요청)을 하고 나면 나중에(완료되었을 때) 되돌려서 호출해줄게(back)이라는 의미가 됩니다. system call도 콜백할 수 있을 것이고, upcall도 콜백할 수 있고, .......

익명 사용자의 이미지

* fuse 사용자 영역 파일 시스템의 경우 대표적인 응용이라 할 수 있겠습니다.
파일 시스템이 보통 커널에 있는데, 이는 사용자 영역에서 그 일을 하고 있으니 말입니다.

참고하시길.

댓글 달기

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