[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 9-2) Static Linking vs. Dynamic Linking(shared Library)

극꼼 2023. 3. 7. 10:06
반응형


링커에 대해서는 프로그램의 컴파일 과정 포스팅에서 간략하게 나왔는데요, 컴파일된 오브젝트 코드를 실행 파일로 Linking해주는 역할을 합니다. 이번 포스팅에서는 링킹의 종류를 알아보려 합니다.

 

1. Static Linking

: 실행 파일을 만들 때 정적 라이브러리를 포함시켜 .exe 파일을 만드는 것입니다. 

* 정적 라이브러리 : 컴파일러와 링커에 의해 object 파일과 독립된 실행 파일을 생성하기 위해 대상 애플리케이션에 복사됨. 

 

  • 장점 : 링커가 프로그램이 필요로 하는 부분을 라이브러리에서 실행파일에 바로 복사하므로, 라이브러리가 필요 없어서 컴파일 시간이 단축됩니다. 직접 구현한 코드를 라이브러리화시켜서 기술 유출을 방지할 수도 있습니다.
  • 단점 : 실행 파일 내에 라이브러리 코드를 저장하므로 메모리를 잡아먹습니다. 멀티유저 시스템일 경우, 여러명의 유저가 서버에 접속해 동시에 코드를 실현할 경우 메모리에 해당 유저 수만큼의 코드가 존재해 비효율적입니다. 그래서 생긴 방법이 Dynamic Linking 입니다. 

 

2. Dynamic Linking

: 해당 라이브러리를 전부 복사하는 static linking과는 다르게, 해당 라이브러리를 가리키는 포인터만 가지게 됩니다. 메모리에 해당 라이브러리가 한 번 올라가면 그 다음부터는 코드를 호출할 때 그 메모리에 접근하게 됩니다. 별다른 옵션을 주지 않을 경우 보통 동적 링킹을 합니다. 

 

* 동적 링크 라이브러리(DLL, Dynamic-link Library) : 윈도우에서 동적 링킹할 때 사용되는 라이브러리 파일(유닉스, 리눅스에서는 Shared Library로 불림). DLL 파일들이 보통 윈도우 시스템 디렉토리에 있습니다.

- 많이 사용되는 라이브러리 함수를 메모리에 한 번 올리고, 프로그램이 이 함수를 호출할 때 메모리에 있는 함수 주소로 점프해 실행한 후 다시 돌아옵니다. 

 

  • 장점 : 메모리 요구사항이 적습니다.
  • 단점 : 라이브러리가 저장되어 있는 주소로 점프하기 때문에 오버헤드가 듭니다. 

 

반응형