Linux 커널 내에서 파일에 액세스하는 보다 기본적인 방법입니까, 아닌가 open()
? mmap()
"기본"이란 "결국 다른 함수를 호출하는가, 아니면 다른 함수의 간단한 도우미 함수인가?"를 의미합니다.
스택 네트워크에는 이 두 가지 기능의 성능에 대해 묻는 질문이 많이 있습니다. 이 질문의 목적은 먼저 Linux 커널 내부에서 무슨 일이 일어나고 있는지 이해하는 것입니다. open()
호출 mmap()
하거나 본질적으로 구현된 도우미 기능이 있습니까 mmap()
? 아니면 기본적으로 구현된 일부 도우미 함수를 mmap()
호출 하거나 호출합니까 ?open()
open()
질문의 요점은 이 두 시스템 호출이 유효한지 여부입니다.원래다른 것 또는 하나가 다른 것의 "편의 기능"인지 여부.
답변1
참고하세요매핑(2)종종 하나를 원한다파일 설명자일반적으로 구성오픈(2); 이런 의미에서 open
더 근본적입니다. 또한 참고하시기 바랍니다가상 주소 공간일부의프로세스합격할 수 있을 뿐만 아니라 mmap
,,munmap
보호(2)하지만 다른 사람을 통해서도시스템 호출(포함하다실행(2);당신은 또한 볼 수 있습니다shm_개요(7))
그런데 리눅스 커널은 그렇지 않습니다.사용 mmap
또는 open
이를 제공하고 구현합니다(애플리케이션 수준의 경우).사용자 공간프로그램).
하지만리눅스 커널관리하다페이지 캐시이것은 더 기본적이고 관련성이 높습니다.둘 다 시스템 호출. 당신은 또한 볼 수 있습니다리눅스AteMyRam그리고 고려아마도사용미친 웨스(2),posix_fadvise(2),미리 읽기(2)페이지 캐싱 하위 시스템에 메시지를 표시합니다.
이 두 시스템 호출은 근본적으로 다른가요?
모든 시스템 호출(목록:시스템 호출(2)...) 다르다.
또한 읽어보세요고급 Linux 프로그래밍그리고운영 체제: 세 가지 간단한 부분(둘 다 무료로 다운로드할 수 있습니다).
답변2
함수 이름을 지정하고 있으므로 호출 mmap()
파일에 fd가 필요하다는 것을 이미 알고 있다고 가정합니다. fd는 일반적으로(항상은 아니지만) 사용됩니다 open()
.
read()
O_DIRECT를 사용하지 않는 한, " 통합 버퍼 캐시"가 write()
있고 mmap()
. 그러나 이는 각 접근 방식의 성능 장단점을 무시하므로 그다지 유용한 답변은 아닌 것 같습니다.
책을 구하는 것 외에도 Google에서는 다음을 발견했습니다.mmap과 일반 IO 및 페이지 캐싱에 대한 간략한 설명. 성능 언급 없음비용mmap()
~에 따르면리누스 토발즈의 말을 인용하자면당신은 그것을 보았을 것입니다.