VDSO

위키백과, 우리 모두의 백과사전.

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일에 확인함.