user level memory access vs kernel level memory access
글쓴이: studentoflinux / 작성시간: 월, 2015/12/07 - 7:54오후
안녕하세요.
arm 임베디드 보드에서 메모리 액세스 관련 코딩을 하다가 궁금한 것이 생겼습니다.
리얼 타임 시스템을 개발중이라 외부 램에 일정 주기로 read/write을 해야 하는데요.
user level에서 mmap을 이용해서 테스트 중인데요. 아무래도 userlevel에서는 실제 메모리에 데이터를 쓰기 까지 user level 버퍼를 거쳐 리얼타임 성능에 영향을 미칠 것 같습니다.
커널레벨에서 메모리 액세스를 하려면 어떻게 해야 하나요 ?
debian wheezy 사용중입니다.
감사합니다.
Forums:
찾아봤습니다.
어딘가에 답이 있을겁니다.
커널 mmap
http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=%EC%BB%A4%EB%84%90+mmap
mmap 커널레벨
http://search.naver.com/search.naver?ie=utf8&sm=stp_hty&where=se&query=mmap+%EC%BB%A4%EB%84%90%EB%A0%88%EB%B2%A8
http://www.google.co.kr/search?q=mmap+%EC%BB%A4%EB%84%90%EB%A0%88%EB%B2%A8&hl=ko&biw=&bih=&gbv=2&oq=mmap+%EC%BB%A4%EB%84%90%EB%A0%88%EB%B2%A8&gs_l=heirloom-serp.12...7673.7673.0.8534.1.1.0.0.0.0.114.114.0j1.1.0....0...1ac..34.heirloom-serp..1.0.0.xu2p3AsYT4Y
커널레벨 유저레벨 성능
http://search.naver.com/search.naver?ie=utf8&sm=stp_hty&where=se&query=%EC%BB%A4%EB%84%90%EB%A0%88%EB%B2%A8+%EC%9C%A0%EC%A0%80%EB%A0%88%EB%B2%A8+%EC%84%B1%EB%8A%A5
http://www.google.co.kr/search?hl=ko&source=hp&biw=&bih=&q=%EC%BB%A4%EB%84%90%EB%A0%88%EB%B2%A8+%EC%9C%A0%EC%A0%80%EB%A0%88%EB%B2%A8+%EC%84%B1%EB%8A%A5&gbv=2&oq=%EC%BB%A4%EB%84%90%EB%A0%88%EB%B2%A8+%EC%9C%A0%EC%A0%80%EB%A0%88%EB%B2%A8+%EC%84%B1%EB%8A%A5&gs_l=heirloom-hp.12...0.0.1.618.0.0.0.0.0.0.0.0..0.0....0...1ac..34.heirloom-hp..1.0.0.kS3VlT_BrB0
mmap
http://www.codeproject.com/search.aspx?q=mmap&x=6&y=1&sbo=kw
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
감사합니다.
초보라 이런 개념으로 생각해야 한다는걸 잊었네요.
mmap와 같은 기능을 하는 것이 커널레벨에도 있군요
정말 도움 많이 되었습니다.
zero copy 개념에 대해 공부하세요. 오래된
zero copy 개념에 대해 공부하세요.
오래된 개념이네요. 그러나, 여전히 중요한 개념이기도 합니다.
zero copy개념, 현재는 여러 분야에서 보편적인 지식이라 구지 언급할 필요는 없지만, 실시간시스템을 하시는 분이라면 반드시 아셔야 하겠지요.
* 아. 그리고, 실시간 시스템에서는 가상메모리를 사용하지 않습니다. 아시다시피, 그 이유는 가상메모리 관리(스워핑 등)로 인한 오버헤드로 인해 실시간성을 예측하기 어렵기 때문이지요, 아울러, 머신 명령어의 사이클도 고려할 필요가 있는 경우도 있다는 사실을 기억하세요.
네 감사합니다.
네 감사합니다.
user level 버퍼를 거치지
user level 버퍼를 거치지 않습니다.
/dev/mem 을 사용하시는 거라면,
O_DSYNC 플래그로 open() 할 경우 mmap() 때 cache/write-buffer 모두 비활성화 시킬 수 있습니다.
/dev/mem 을 사용하시는 거라면,
CPU 가 memory mapped I/O 로 접근할 수 있는 모든 영역에 접근 가능하고, MMAP_NORESERVE 을 같이 사용하세요.
(CONFIG_STRICT_DEVMEM 이 켜져 있을 경우, RAM 영역과 IORESOURCE_EXCLUSIVE 로 등록한 영역의 mmap() 은 거부됩니다)
어떤 식으로든 user application 이 끼어들어야만 하는 구조라면,
application 이 mmap() 해서 직접 접근하는게 가장 효율적입니다.
댓글 달기