오버레이 (프로그래밍)

컴퓨팅에서 오버레이(overlay)란 데이터나 인스트럭션 블록을 다른 블록으로 교체[1]하는 것을 의미한다. 오버레이는 컴퓨터의 메인 메모리보다 큰 프로그램을 실행할 수 있게끔하는 프로그래밍 방법이다. 주로 가상 메모리를 지원하지 않는 임베디드 시스템에서 많이 사용된다.

사용법 편집

오버레이 방식을 사용하기 위해선 먼저 프로그램을 오버레이라 불리는 독립적인 목적 코드 블록으로 나눠야 한다. 이 코드 블록들은 트리 구조로 배치되며, 같은 깊이에 있는 형제 블록들은 같은 메모리 영역을 공유한다. 이 메모리 영역은 오버레이 영역 혹은 대상 영역이라 불린다. 오버레이 프로그램이나 운영 체제의 일부로 동작하는 오버레이 관리자는 외부 기억 장치에서 필요한 오버레이를 대상 영역으로 읽어들인다. 참고로 링커에서 오버레이를 지원해 주는 경우가 많다.[2]

예제 편집

다음 예제는 OS/360 링크 편집기로 오버레이 프로그램을 링크할 때 사용하는 제어 명령들이다.

 INCLUDE SYSLIB(MOD1)
 INCLUDE SYSLIB(MOD2)
 OVERLAY A
   INCLUDE SYSLIB(MOD3)
     OVERLAY AA
       INCLUDE SYSLIB(MOD4)
       INCLUDE SYSLIB(MOD5)
     OVERLAY AB
        INCLUDE SYSLIB(MOD6)
 OVERLAY B
    INCLUDE SYSLIB(MOD7)
                       +--------------+
                       | Root Segment |
                       | MOD1, MOD2   |
                       +--------------+
                               |
                    +----------+----------+
                    |                     |
             +-------------+       +-------------+
             |  Overlay A  |       |  Overlay B  |
             |  MOD3       |       |  MOD7       |
             +-------------+       +-------------+
                    |
           +--------+--------+
           |                 |
    +-------------+   +-------------+
    | Overlay AA  |   | Overlay AB  |
    | MOD4, MOD5  |   | MOD6        |
    +-------------+   +-------------+

위의 예제에서 오버레이 A와 B는 같은 메모리 영역을 공유하고 오버레이 AA와 AB도 같은 메모리 영역을 공유한다. 오버레이 A의 코드가 모두 실행되면 이 메모리 영역에 오버레이 B의 코드가 덮어씌워진 뒤 오버레이 B의 코드가 실행되는 형태로 프로그램이 진행된다.

최상위 오버레이에서 어떤 주어진 오버레이 사이의 모든 오버레이들은 경로라 불린다.

활용 편집

2007년도 기준으로 대부분의 비즈니스 프로그램들은 가상 메모리 환경에서 동작하도록 만들어졌기 때문에 프로그램의 작업 세트(working set)가 물리적인 메모리보다 크지 않는 이상 오버레이 방식을 사용하지 않아도 된다. 덕분에 대부분의 개발자들은 더이상 오버레이 크기라는 제약 없이 프로그램이 해결하고자 하는 문제 자체에 집중할 수 있게 되었다. 또한 더이상 프로그램 크기에 크게 구애받지 않기 때문에 자바C++와 같은 고급 프로그래밍 언어를 편하게 사용할 수 있게 되었다.

하지만 임베디드 시스템에 자주 사용되는 저렴한 프로세서들은 메모리 관리 장치(MMU)를 제공하지 않기 때문에 이와 같은 경우 오버레이 방법이 여전히 유용하게 사용된다.[3] 또한 오버레이 방식이 페이징보다 더 예측가능한 시간안에 동작하기 때문에 실시간 시스템에서도 여전히 많이 사용된다. 예를 들어 우주 왕복선Primary Avionics System Software (PASS, 항공 전자 시스템 소프트웨어)는 오버레이 방식을 사용한다.[4]

참고 문헌 편집

  1. “Oxford Dictionaries”. 2007년 2월 19일. 2007년 9월 29일에 원본 문서에서 보존된 문서. 2014년 1월 28일에 확인함. 
  2. “The GNU Linker documentation: Overlay Description”. 2008년 6월 3일. 
  3. Levine, John R. (2000). 《Linkers & Loaders》. Morgan Kaufmann Publishers. 177쪽. ISBN 1-55860-496-0. 
  4. “An Assessment of Space Shuttle Flight Software Development Processes”. 2012년 10월 29일에 확인함. 

같이 보기 편집