어떻게 mmap를 이용해 여러개의 메모리를 할당하나요?

leonhan의 이미지

user app에서 그래픽을 위해 메모리 1개 , 영상을 위해 메모리 2개 의 kernel address를 얻어와서 user app에서 작업을 해야 합니다.

이를 위해 mmap를 했는데 문제는 mmap로 일반적으로 1개의 메모리만 할당을 하잖아요 ? 어떻게 3개를 하나요 ?
<user app >
b= mmap 호출
b 사용 하여 밑의 a 접근
<device driver>
mmap ()
{
a=kmalloc ();
}

그래서 생각한 것이 그럼 3개를 합쳐 하나의 큰 메모리를 잡아 나누면 될까 했는데 그게 또 128kb 이상이 되다보니 .....(kmalloc가 128이 최대잖아요. 물론 freepage이용해서 할 수도 있지만 이게 항상 얻어진다는 보장도 없구 )

어떻게 처리하는 게 현명한 일일까요 ?

sjpark의 이미지

"device 드라이버 조작 함수로 mmap을 등록해서, 커널영역의 메모리 3개를 할당받아와서, 유저 영역에서 해당 영역에 작업을 하려고 하는것"
그러니까 질문을 이해한 것은 "구현한 mmap함수를 이용해서 3개의 별개 영역을 확보해야 한다" 입니다.

만약 제가 이해한 것이 맞다면, 이런 방법은 어떨까요,
device operation구조에 등록시킨 mmap함수 안에서 static으로 id를 하나 잡고, 0으로 초기화 시킨후, mmap이 호출될때마다 id를 증가 시키면서, 매번 호출마다 다른 동작을 하도록 하는 것입니다.

예를 들면

mmap(.........) {
   static int id=0;
   switch(id) {
       case 0: 
             //  do what you want
             break;
       case 1: ... 
       case 2: ....
           .
           .
       case n:
       default :
   }
   id++;
}

3개의 커널영역 메모리를 할당 한다고 하셨는데요,
위 예를 토대로 하면, id가 0일때, a를 kmalloc로 할당 받고,
다음 1일땐 b를 .... 등등..

leonhan의 이미지

일단 그렇게 3번 호출해서 호출할때마다 user app쪽에서 받아온 각기 다른 메모리로 접근가능한 지를 확인해 봐야 겠네요 ..그럼 좋은 하루 되세요.

sjpark의 이미지

되었나요?

커널영역에서 잡은 메모리가 유저영역에서 사용가능한지 궁금한데...

답글을 기다려도 안달리네요....

된건가요?

leonhan의 이미지

커널영역에서 잡은 메모리를 유저 영역에서 사용하는 방법은 여러가지가 있는데 .
쉬운 방법으로는 그냥 ioctl에서 함수를 이용해서 밑의 메모리에 접근하는 방법이 있고

대용량의 메모리에 접근하기 위해 mmap를 사용해서 합니다.

댓글 달기

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