나는 모든 프로그램이 vdso 라이브러리에 대해 gcc 링크로 컴파일된 것을 발견했습니다. mmap(), fork() 및 기타 시스템 호출과 같은 커널에 대한 시스템 호출을 포함하는 라이브러리입니까?
시스템 호출은 GNU C 표준 라이브러리의 기능이 아니므로 해당 개체 코드는 컴파일 타임에 응용 프로그램과 연결된 일부 라이브러리에 있어야 한다는 것을 알고 있습니다.
그럼 vdso가 그 라이브러리인가요?
답변1
답변에서 언급한 대로 시스템 호출은 커널에서 구현됩니다.후속 질문. 가상 동적 공유 객체인 vDSO는 작은 가상 라이브러리입니다.반품모든 프로세스에 매핑되는 커널에 의해 구현됩니다. 시스템 호출과 마찬가지로 C 라이브러리에 의해 래핑됩니다.
시스템 호출과 vDSO의 주요 차이점 중 하나는 권한입니다. 시스템 호출은 커널 공간에서 실행되며 사용자 공간과 커널 공간 사이를 전환하는 데 비용이 많이 듭니다. 최적화로서 vDSO는 실제로 커널 공간에서 실행될 필요가 없는 일부 시스템 호출을 제공하는 반면 vDSO는 사용자 공간에서 실행됩니다. 한 가지 예는 gettimeofday
자주 호출되는 경향이 있고 커널 공간으로 전환하지 않고도 커널에 의해 구현될 수 있다는 것입니다.
이것vdso
맨페이지에 자세한 내용이 있습니다. vDSO를 포함한 Linux의 일반 시스템 호출에 대한 자세한 내용은 다음을 참조하세요.시스템 호출 분석 1 부그리고2 부.