동적 적재
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
동적 적재는 프로그램 실행 중에 라이브러리나 모듈을 로드하는 기술이다. 이는 IBM의 OS/360에서 처음 사용되었으며, I/O 서브루틴, COBOL, PL/I 런타임 라이브러리에 적용되었다. 주요 장점으로는 하위 시스템 수정 사항의 즉각적인 적용과 라이브러리의 무단 수정 방지가 있다. CICS와 같은 시스템에서 광범위하게 사용되었으며, 현대 운영체제에서 플러그인 구현 및 라이브러리 활용에 중요한 역할을 한다. C/C++에서는 유닉스 계열 운영체제와 윈도우에서 API를 통해 지원되며, 자바에서는 ClassLoader 객체를 통해 클래스를 동적으로 로드할 수 있다. 반면, Plan 9와 9front, 초기 Go 언어는 동적 연결을 지원하지 않았다.
더 읽어볼만한 페이지
- 라이브러리 - 바이너리 재컴파일러
- 라이브러리 - 동적 링크 라이브러리
동적 링크 라이브러리(DLL)는 윈도우 운영체제에서 프로그램 실행 시 필요한 코드와 데이터를 제공하며, 여러 프로그램에서 공유되어 메모리 효율성을 높이고 모듈성을 향상시키는 라이브러리 형식이다. - 운영체제 기술 - 프로세스
프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다. - 운영체제 기술 - 커널 (컴퓨팅)
커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
동적 적재 | |
---|---|
설명 | |
동적 적재 | 실행 시간 동안 프로그램에 모듈을 적재하는 메커니즘 |
개요 | |
특징 | 실행 시간 동안 모듈 적재 가능 필요할 때만 모듈 적재 가능 프로그램 크기 감소 유연성 증가 |
구현 | |
방법 | 운영체제 API 사용 (LoadLibrary, dlopen 등) 프로그래밍 언어 기능 활용 |
사용 사례 | 플러그인 시스템 모듈식 소프트웨어 설계 기능 확장 |
장단점 | |
장점 | 프로그램 크기 감소 유연성 증가 메모리 효율성 증가 유지보수 용이성 증가 |
단점 | 복잡성 증가 의존성 관리 필요 보안 문제 발생 가능성 증가 |
같이 보기 | |
관련 개념 | 동적 연결 라이브러리 플러그인 모듈 |
2. 역사
IBM의 System/360용 운영 체제인 OS/360에서 동적 적재가 처음 사용되었다. 특히 I/O 서브루틴과 COBOL, PL/I 런타임 라이브러리에서 흔히 사용되었으며, z/Architecture용 IBM 운영 체제인 z/OS에서도 계속 사용되고 있다. 응용 프로그램 프로그래머 입장에서 로딩은 운영 체제(또는 I/O 하위 시스템)에 의해 처리되므로 상당히 투명하다. 주요 장점은 다음과 같다.
- 하위 시스템 수정(패치) 시 프로그램을 다시 링크할 필요 없이 모든 프로그램을 한 번에 수정할 수 있다.
- 라이브러리를 무단 수정으로부터 보호할 수 있다.
1970년대 이후 IBM의 전략적 트랜잭션 처리 시스템인 CICS는 커널과 일반 응용 프로그램 로딩에 동적 로딩을 광범위하게 사용한다. 응용 프로그램 수정은 오프라인에서 수행 가능하며, 변경된 프로그램의 새 사본은 CICS를 다시 시작할 필요 없이 동적으로 로드할 수 있다. CICS는 24/7로 실행될 수 있으며, 실제로도 자주 그렇게 운영된다.
1980년대에 공유 라이브러리가 유닉스에 추가되었지만, 초기에는 프로그램 시작 후 추가 라이브러리를 로드하는 기능은 없었다.
3. 활용
동적 적재는 소프트웨어 플러그인 구현에 가장 자주 사용된다. 예를 들어, 아파치 웹 서버의 *.dso
"동적 공유 객체" 플러그인 파일은 런타임에 동적 적재를 통해 로드되는 라이브러리이다. 동적 적재는 여러 개의 서로 다른 라이브러리가 필요한 기능을 제공하고 사용자가 어떤 라이브러리를 제공할지 선택할 수 있는 컴퓨터 프로그램을 구현하는 데에도 사용된다.
4. C/C++
C/C++에서 동적 적재는 운영체제별 API를 통해 지원된다. 모든 시스템이 동적 적재를 지원하는 것은 아니다. macOS, 리눅스, 솔라리스와 같은 유닉스 계열 운영 체제는 C 언어 "dl" 라이브러리를 통해, 윈도우 운영 체제는 윈도우 API를 통해 동적 적재를 제공한다. 구체적인 API 호출 방식은 '요약' 섹션의 표를 참고하라.
4. 1. 요약
LoadLibraryEx
dlsym
GetProcAddress
dlclose
FreeLibrary