커널과 사용자 영역에서 메모리를 공유해서 read, write 시에 동기화는 어떻게 해야 하나요?

i20749의 이미지

안녕하세요. 이전에 커널과 사용자 영역에서 메모리를 공유할 방법에 대해 질문을 올렸었는데요.

해당 문제는 더미 캐릭터 디바이스와 mmap을 이용해 해결하였습니다. 힌트 주신분이 계셨는데 감사드리구요.

이번엔 해당 메모리를 커널 영역과 사용자 영역에서 read, write 할때 동기화를 어떻게 할지에 대해서

질문 드리려고 합니다. 물론 개인적으로도 고민하고 있구요.

위와 같이 메모리를 공유하는것이 디바이스 드라이버에서는 일반적인 방법 같은데요, 디바이스 드라이버를

개발하시는 분들은 어떤 방법으로 동기화를 하시는지요?

i20749의 이미지

1:1로 동기화해야 하는게 아니라서

쉽게 멀티쓰레드들 사이에서 동기화하는

것으로 생각하시면 됩니다

많이 배우고 싶습니다

goforit의 이미지

안녕하세요.

이렇게 나누어 보겠습니다.


  • Time critical 하지 않으면 (Async) Netlink 를 사용하세요 N:1 해결 가능합니다.

  • Time critical 요구하면, 다시 다음 두가지 방법이 있습니다.
    #1 Busy waiting: (Sync) mmap을 영역에서 header를 만들고 플래그를 넣으세요. 하지만 N이 증가하면 system call에 부하가 걸려서 첫번 째와 크게 다르지 않습니다.
    #2 Sleeping: 드라이버에 Semaphore 넣어서 Blocking read/write 만드세요.

수고하세요.

i20749의 이미지


Time critical 하지 않으면 (Async) Netlink 를 사용하세요 N:1 해결 가능합니다.

-> netlink의 경우 해당 기능을 개발후에 유닉스에도 포팅을 해야해서 제외하였는데요. netlink가 리눅스에만 있는 방식이 맞겠지요? ^^;

검색 결과 유닉스에는 없는거 같았는데요.

또 한가지가 netlink의 예제들을 보면 user 영역에서 -> kernel 영역으로 데이터를 보내면 kernel 영역에서는 데이터 recv 후에 콜백으로

user 영역으로 데이터를 보내게 되어 있는데요. kernel 영역에서도 먼저 user 영역으로 데이터를 보낼 수 있는건가요?

기능상 커널에서 먼저 데이터를 보내면 이에 대한 응답을 사용자영역의 데몬에서 해야하거든요.

Time critical 요구하면, 다시 다음 두가지 방법이 있습니다.

-> 두번째 내용은 제가 이해를 잘 못하겠습니다 ㅠ.ㅜ

많이 배우고 싶습니다

댓글 달기

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