vDSO (virtual dynamically linked shared object)는 신중하게 선택된 커널 영역 루틴들의 집합을 사용자 영역 애플리케이션으로 내보내는 리눅스 커널 메커니즘이다. 이를 통해 애플리케이션은 시스템 호출 인터페이스로 커널 영역 루틴들을 호출할 때 생기는 문맥 교환의 페널티 없이, 프로세스 내에서 이러한 커널 영역 루틴들을 호출할 수 있게 된다.[1]

vDSO는 vsyscall의 기능들을 제공함과 동시에 한계들을 극복하기 위해 개발되었다 : 오직 4개의 시스템 호출만을 허용하는 작은 양의 할당된 메모리 그리고 각 프로세스에서 같은 주소를 갖음으로 인한 보안의 위협이 그것이다.

vDSO링킹로딩(표준 ELF 파일 형식)을 위한 표준 메커니즘을 사용한다.[2][3]

vDSO는 몇몇 커널 기능들을 드러내는 사용자 공간에 할당된 메모리 공간이다. vDSO는 더 안전한 메모리 공간 랜덤화와 4개 이상의 시스템 호출들을 제공하며 동적으로 할당된다(vsyscall은 정적으로 할당된다). vDSO 링크들은 glibc 라이브러리를 통해 제공된다. 만약 리눅스 커널이 vDSO 지원을 제공하지 않는다면 전통적인 syscall이 만들어진다.[4]

이것은 간단한 커널 루틴들의 호출에 의한 오버헤드를 감소시키며 또한 몇몇 아키텍처에서는 최선의 시스템 호출 방식을 고르는 방법으로 사용될 수 있다.

다른 방식보다 장점으로는 이러한 내보내진 루틴들이 적절한 DWARF (Debug With Attributed Record Format) 디버깅 정보를 제공할 수 있다는 점이다.

같이 보기 편집

각주 편집

  1. “vDSO - overview of the virtual ELF dynamic shared object”. Canonical. 2016년 3월 4일에 원본 문서에서 보존된 문서. 2015년 12월 10일에 확인함. 
  2. “Creating a vDSO: the Colonel's Other Chicken”. Linuxjournal.com. 2015년 2월 16일에 확인함. [깨진 링크(과거 내용 찾기)]
  3. “On vsyscalls and the vDSO”. Lwn.net. 2015년 2월 16일에 확인함. 
  4. “Community answer to question "What are vDSO and vsyscall?". 2016년 11월 19일에 확인함.