안녕하세요
/dev/mem을 open후 mmap으로 메모리 주소를 할당했는데요, 여기에 특정 파일을 올리고 싶은데 어떻게 해야할까요?
fd=open(/dev/mem, O_RDWR | O_SYNC)하고
addr=mmap(...)이렇게 했고 이 공간에 temp라는 파일을 load하고 싶습니다.
댓글 3
-
DEWH
2022.01.22 17:52
-
이파란
2022.01.24 00:25
kerenl to user 제로 카피 인 메모리 파일 읽기를 사용할 때, 더 많은 방법이 있겠지만(아시는 분 공유해요~)
제가 지금 생각나는 방법은 크게 두 가지인데요.
(1) 캐릭터 디바이스 & mmap 유저 제로 카피 활용
- https://gist.github.com/paranlee/1d89a260629722fe06bb9371fa8a65c7
(2) /dev/shm 을 활용한 인 메모리 파일시스템 tmpfs & mmap 유저 제로 카피 활용
- https://github.com/Amirsorouri00/kernel-module/blob/master/shared-memory-sysv/server.c위의 링크는 예제이고, 실제로 활용하려면 저도 추가로 스터디를 해봐야겠어요!
참고:
인메모리 파일시스템 tmpfs
: 디폴트 인메모리 파일시스템이 있음
- https://unix.stackexchange.com/questions/59300/how-to-place-store-a-file-in-memory-on-linuxtmpfs를 파일시스템에서 mmap을 사용하여 zero copy 가 잘 될까요?
: YES
- https://unix.stackexchange.com/questions/348464/if-i-mmap-a-file-from-tmpfs-will-it-double-the-memory-usagecreating a shm file from kernel module
- https://stackoverflow.com/questions/44398868/creating-a-shm-file-from-kernel-modulemmap very slow when using o sync
- https://stackoverflow.com/questions/48179097/mmap-very-slow-when-using-o-syncfopen (한글)
- https://m.blog.naver.com/bestheroz/113881732MMAP 시스템콜 설명 (한글)
- https://coder-in-war.tistory.com/entry/Linux-Kernel-메모리-맵-파일mmap -
이파란
2022.01.24 17:10
문C 블로그 - User virtual maps (mmap)
http://jake.dothome.co.kr/user-virtual-maps-mmap2
.
파일을 올린다는 것이 어떤 개념인지는 정확이 모르겠으나.., /dev/mem을 mmap한 예제를 하나 소개해드리겠습니다.
bcm2835 라이브러리는 /dev/mem을 mmap해서 유저에게 주변 장치에 접근할 수 있도록 구현되어 있습니다.
아래에 링크를 첨부하겠습니다.
https://github.com/janne/bcm2835/blob/master/bcm2835.c#L1633