어떻게 mmap를 이용해 여러개의 메모리를 할당하나요?
글쓴이: leonhan / 작성시간: 목, 2004/05/13 - 7:49오후
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이용해서 할 수도 있지만 이게 항상 얻어진다는 보장도 없구 )
어떻게 처리하는 게 현명한 일일까요 ?
Forums:
이게 제대로 이해한 것인지..
"device 드라이버 조작 함수로 mmap을 등록해서, 커널영역의 메모리 3개를 할당받아와서, 유저 영역에서 해당 영역에 작업을 하려고 하는것"
그러니까 질문을 이해한 것은 "구현한 mmap함수를 이용해서 3개의 별개 영역을 확보해야 한다" 입니다.
만약 제가 이해한 것이 맞다면, 이런 방법은 어떨까요,
device operation구조에 등록시킨 mmap함수 안에서 static으로 id를 하나 잡고, 0으로 초기화 시킨후, mmap이 호출될때마다 id를 증가 시키면서, 매번 호출마다 다른 동작을 하도록 하는 것입니다.
예를 들면
3개의 커널영역 메모리를 할당 한다고 하셨는데요,
위 예를 토대로 하면, id가 0일때, a를 kmalloc로 할당 받고,
다음 1일땐 b를 .... 등등..
https://nicesj.com
https://blog.nicesj.com
후후..한번 해보겠습니다.고맙습니다.
일단 그렇게 3번 호출해서 호출할때마다 user app쪽에서 받아온 각기 다른 메모리로 접근가능한 지를 확인해 봐야 겠네요 ..그럼 좋은 하루 되세요.
..
되었나요?
커널영역에서 잡은 메모리가 유저영역에서 사용가능한지 궁금한데...
답글을 기다려도 안달리네요....
된건가요?
https://nicesj.com
https://blog.nicesj.com
예.가능합니다.
커널영역에서 잡은 메모리를 유저 영역에서 사용하는 방법은 여러가지가 있는데 .
쉬운 방법으로는 그냥 ioctl에서 함수를 이용해서 밑의 메모리에 접근하는 방법이 있고
대용량의 메모리에 접근하기 위해 mmap를 사용해서 합니다.
댓글 달기