Shim

Ahn9807 (토론 | 기여)님의 2023년 6월 11일 (일) 10:04 판 (새 문서: 분류: 전산용어 == 개요 == 컴퓨터 프로그램, 컴퓨터 시스템에서 shim이란, 특정 API에 대한 요청을 transparent하게 intercept해서 실행시키는 라이브러리를 의미한다. Shim은 오래된 API에 대한 지원이나, 새로운 API를 오래된 Application에서 사용하기 위해서 사용된다. 예를 들어서,LD_PRELOAD는 libc라이브러리와 같은 Shared library에 대한 API를 중간에서 가로채서 새...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

컴퓨터 프로그램, 컴퓨터 시스템에서 shim이란, 특정 API에 대한 요청을 transparent하게 intercept해서 실행시키는 라이브러리를 의미한다. Shim은 오래된 API에 대한 지원이나, 새로운 API를 오래된 Application에서 사용하기 위해서 사용된다.

예를 들어서,LD_PRELOAD는 libc라이브러리와 같은 Shared library에 대한 API를 중간에서 가로채서 새로운 API에 제공한다. 이를 통해서 LD_PRELOAD를 통해서 Loading되는 Application은 Binary patch없어도, 새로운 API를 사용할 수 있다.

Docker에서 shim을 통해서, runC (Docker container을 생성하는 프로그램)에 대한 API요청을 contained-shim이 가로채서, containerd는 containerd-shim을 통해서 runC를 호출하고, containerd-shim은 생성된 Container을 계속해서 관리시킬 수 있도록 하였다.

Shim은 Level of indirection의 한 예시로 볼수 있다. Libc <- LD_PRELOAD -> Application나, runC <- Containerd-shim -> Containerd처럼 중간 레이어에 해당하는 새로운 API재정의 라이브러리를 통해서, Shim을 사용할 수 있도록 하는 것이다. (직접 접근이 아니라 새로운 계층을 통해서 접근)