반응형
컴포넌트
컴포넌트란 배포 단위 (자바의 경우 jar 파일)
여러 컴포넌트를 서로 링크하여 실행 가능한 단일 파일로 생성할 수 있음.
컴포넌트 역사
구시대
- 절대적 로드 방식으로, 프로그래머가 로드할 메모리의 위치를 직접 정해야 하고, 프로그램 위치가 한번 결정되면 재배치가 불가능.
- 라이브러리의 경우 라이브러리 함수의 소스 코드를 애플리케이션 코드에 직접 포함시켜 단일 프로그램으로 컴파일
- 라이브러리는 바이너리가 아니라 소스 코드 형태로 유지 ⇒ 매우 느린 컴파일 속도
애플리케이션과 라이브러리의 분리
- 컴파일 시간을 단축시키기 위해서, 라이브러리의 소스코드를 애플리케이션 코드로 부터 분리.
- 함수 라이브러리를 개별적으로 컴파일하고, 컴파일된 바이너리를 메모리의 특정 위치에 로드.
링킹 로더의 등장
- 위의 문제를 해결하고자 지능적인 로더를 사용해서 메모리에 재배치가 가능한 바이너리를 생성하도록 컴파일러를 수정.
- 만약 라이브러리 함수를 호출한다면 컴파일러는 라이브러리 함수 이름을 외부 참조로 생성 ⇒ 외부 정의를 로드 할 위치가 정해지기만 하면 로더가 외부 참조를 외부 정의에 링크시킬 수 있음.
- 이렇게 링킹 로더의 등장으로 프로그램을 개별적으로 컴파일하고 로드할 수 있는 단위로 분할할 수 있게 됨.
- 하지만, 링킹 로더는 느린 장치를 사용해서 바이너리 라이브러리를 읽고 외부 참조를 해석해야 했음 ⇒ 속도가 너무 느림
로드와 링크의 분리
- 로드와 링크가 두 단계로 분리
- 프로그래머가 느린 부분 (링크 과정)을 맡았는데, 링커라는 별도의 애플리케이션으로 이 작업을 처리하도록 만듬.
- 링커는 링크가 완료된 재배치 코드를 만들어주었고, 이로 인해 로더의 로딩 과정이 아주 빨라졌다.
- 비록 느린 링커를 사용해서 실행 파일을 만들었지만, 한번 만들어둔 실행 파일은 언제라도 빠르게 로드할 수 있게 되었다.
반응형
'공통 > 기타' 카테고리의 다른 글
함수형 프로그래밍이란? (0) | 2021.07.21 |
---|---|
객체 지향? 객체 지향의 특성 (0) | 2021.05.17 |
SOLID 원칙이란? (0) | 2021.03.18 |
AOP란? 횡단 관심사? 흩어진 관심사? (0) | 2021.02.16 |