`open()`, `mmap()`이 더 기본적인 기능인가요, 아니면 둘 다인가요?

`open()`, `mmap()`이 더 기본적인 기능인가요, 아니면 둘 다인가요?

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()~에 따르면리누스 토발즈의 말을 인용하자면당신은 그것을 보았을 것입니다.

관련 정보