오버레이 (프로그래밍)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
오버레이 (프로그래밍)는 컴퓨터의 주 기억 장치 용량이 제한적이었던 시절, 가상 메모리 기술이 보편화되기 전에 사용된 프로그래밍 기법이다. 프로그램의 특정 부분만 메모리에 로드하여 실행하고, 필요에 따라 다른 부분을 덮어쓰는 방식으로, 제한된 메모리 공간에서 더 큰 프로그램을 실행할 수 있게 했다. IBM의 FORTRAN II에서 체인 잡 개념으로 시작되어, OS/360, 홈 컴퓨터 시대를 거치며 널리 사용되었으나, 가상 메모리 기술의 발전으로 인해 사용 빈도가 줄었다. 현재는 임베디드 시스템이나 실시간 시스템과 같이 메모리 관리 장치를 사용하지 않거나 페이징의 지연을 피해야 하는 환경에서 활용된다. 오버레이 네트워크, 오버레이 표시, 폼 오버레이, 오버레이 시트 등과 같이 프로그래밍 외 다른 분야에서도 유사한 개념이 사용된다.
더 읽어볼만한 페이지
- 가상 메모리 - 메모리 관리 장치
메모리 관리 장치(MMU)는 가상 주소를 물리 주소로 변환하여 메모리 접근을 관리하고 보호하는 하드웨어 장치로서, 가상 메모리 시스템에서 독립적인 가상 주소 공간을 제공하고 불법적인 메모리 접근을 차단하며, 페이지 테이블을 통해 외부 단편화 문제를 완화하고 트랜슬레이션 룩어사이드 버퍼(TLB)로 주소 변환 속도를 향상시킨다. - 가상 메모리 - 가상 주소 공간
가상 주소 공간은 운영 체제가 프로세스에 제공하는 논리적인 메모리 공간으로, 실제 물리 메모리 주소와 독립적으로 관리되며, 프로세스는 이 공간을 통해 실행 파일, DLL 파일, 페이지 파일 등을 매핑하고 메모리를 할당받는다.
오버레이 (프로그래밍) | |
---|---|
개요 | |
정의 | 오버레이는 컴퓨터 프로그래밍에서 프로그램이나 데이터의 일부를 주기억 장치에 로드하여 실행하는 기술이다. 필요할 때마다 다른 부분을 로드하여 메모리 공간을 효율적으로 활용한다. |
목적 | 제한된 메모리 환경에서 큰 프로그램을 실행할 수 있도록 한다. |
역사 | 초창기 컴퓨터 시스템에서 메모리 용량의 제약을 극복하기 위해 개발되었다. |
기술적 특징 | |
구현 방식 | 수동 오버레이와 자동 오버레이가 있다. 수동 오버레이는 프로그래머가 직접 오버레이 영역을 관리하고, 자동 오버레이는 운영체제나 컴파일러가 자동으로 관리한다. |
오버레이 매니저 | 오버레이 영역의 로드와 언로드를 담당하는 소프트웨어 모듈이다. |
장점 | 작은 메모리 공간에서 큰 프로그램을 실행할 수 있다. 메모리 사용량을 최적화할 수 있다. |
단점 | 프로그래밍 복잡도가 증가할 수 있다. 오버레이 구조 설계가 어렵다. 성능 저하가 발생할 수 있다. |
사용 예시 | |
초창기 게임 | 메모리 제약이 심했던 과거 게임 개발에서 오버레이 기술이 널리 사용되었다. |
임베디드 시스템 | 제한된 자원을 가진 임베디드 시스템에서 메모리 효율성을 높이기 위해 사용된다. |
관련 용어 | |
가상 메모리 | 가상 메모리는 오버레이와 유사한 개념이지만, 운영체제가 자동으로 메모리 관리를 수행한다. |
동적 로딩 | 동적 로딩은 프로그램 실행 중에 필요한 라이브러리나 모듈을 로드하는 기술이다. |
뱅킹 (Banking) | 오버레이 기법의 다른 이름이다. |
참고 자료 | |
참고 서적 | 컴퓨터 구조 및 운영체제 관련 서적에서 오버레이에 대한 내용을 찾아볼 수 있다. |
온라인 자료 | 위키백과 및 관련 기술 블로그에서 오버레이에 대한 정보를 얻을 수 있다. |
2. 역사적 배경
오버레이는 사용 가능한 주소 공간보다 큰 프로그램을 실행하기 위한 프로그래밍 기법이다. 특정 시점에 필요한 코드만 주 기억 장치의 주소 공간에 로드하고, 다른 코드가 필요해지면 기존 코드가 있던 메모리 영역에 새로운 코드를 덮어쓰는 방식으로 작동한다.
이 기법은 가상 메모리 기술이 보편화되기 이전, 컴퓨터의 주 기억 장치 용량이 매우 제한적이던 시절에 주로 사용되었다. 당시에는 오버레이를 통해 물리적 메모리 크기의 한계를 넘어선 프로그램을 실행할 수 있었다. 가상 메모리와 달리 오버레이는 프로그래머가 직접 각 코드 부분을 언제 메모리에 로드하고 내릴지 명시적으로 관리해야 했다.
일반적으로 CPU의 주소 공간 내 주 기억 장치와 외부 보조 기억 장치를 함께 사용하는 방식으로 구현되었지만, 주소 공간 자체가 좁았던 초기 시스템에서는 뱅크 전환 같은 방식으로 주 기억 장치를 전환하며 오버레이를 구현하기도 했다. 특히 제어 시스템에 사용된 16비트 미니컴퓨터에서는 가상 메모리 사용 시 발생할 수 있는 페이지 교체 지연을 피하기 위해, 모든 프로그램을 물리 메모리에 미리 로드해두고 오버레이 방식으로 전환하며 실행하는 기법을 사용하기도 했다.
하지만 컴퓨터 하드웨어의 발전으로 사용 가능한 물리 메모리 용량과 주소 공간이 크게 늘어나고, 무엇보다 가상 메모리 기술이 일반화되면서 프로그래머가 직접 메모리 관리를 해야 하는 복잡한 오버레이 방식은 점차 사용되지 않게 되었다.
2. 1. 초기 역사
IBM은 FORTRAN II에서 체인 잡(chain job) 개념을 도입하여 오버레이 기법의 초기 형태를 도입했다. 이 방식에서는 프로그램이 새로운 링크를 불러오기 위해 명시적으로 CHAIN 서브루틴을 호출해야 했으며, 새로 로드된 링크는 포트란의 COMMON 영역을 제외하고 이전 링크가 사용하던 메모리 공간을 덮어썼다.이후 IBM은 IBSYS/IBJOB 시스템에서 트리 구조 오버레이와 CALL 처리의 일부로 링크를 자동으로 로딩하는 기능을 포함시켜 더욱 일반화된 오버레이 처리 방식을 도입했다. OS/360에서는 IBLDR의 오버레이 기능을 더욱 확장하여, 오버레이 프로그램이 각각 독립적인 오버레이 트리를 가진 여러 개의 오버레이 영역을 가질 수 있도록 지원했다. 또한 OS/360은 1024바이트 크기의 SVC(슈퍼바이저 호출) 임시 영역을 사용하는, 임시 SVC 루틴을 위한 더 간단한 오버레이 시스템도 제공했다.
홈 컴퓨터 시대에는 운영 체제와 컴퓨터 시스템 대부분이 가상 메모리를 지원하지 않았고, RAM 용량도 현재 기준으로는 매우 작았기 때문에 오버레이 기법이 널리 사용되었다. 예를 들어, 초기 IBM PC는 구성에 따라 16K에서 64K 정도의 RAM을 가지고 있었다. 오버레이는 코모도어 BASIC에서 그래픽 화면을 로드하는 데에도 자주 사용된 기술이었다.
1980년대의 일부 DOS 링커들은 25년 전 메인프레임 컴퓨터에서 사용되던 것과 거의 동일한 형태의 오버레이 기능을 지원했다. 메모리 오버레이를 포함하는 이진 파일은 사실상 표준처럼 '.OVL' 또는 '.OVR' 확장자를 사용했다. 때로는 '.000', '.001' 등 숫자로 된 파일 확장자도 사용되었다. 이러한 오버레이 파일 형식은 WordStar(주 실행 파일 `WS.COM`과 오버레이 모듈 `WSMSGS.OVR`, `WSOVLY1.OVR`, `MAILMERGE.OVR`, `SPELSTAR.OVR`로 구성됨. 특히 CP/M-86과 MS-DOS용 포팅 버전에서는 이진적으로 동일한 "팻" 오버레이 파일을 사용), dBase, 그리고 Enable Software사의 'Enable' DOS 오피스 자동화 소프트웨어 패키지 등에서 널리 사용되었다. Borland사의 터보 파스칼과 GFA BASIC 컴파일러도 '.OVL' 파일을 생성할 수 있었다.
2. 2. 홈 컴퓨터 시대
홈 컴퓨터 시대에는 운영 체제와 컴퓨터 시스템 자체에 가상 메모리 기능이 없었고, RAM 용량도 현재 기준으로는 매우 적었기 때문에 오버레이 기법이 널리 사용되었다. 예를 들어, 초기 IBM PC는 구성에 따라 16KB에서 64KB 정도의 메모리만 가지고 있었다. 오버레이는 코모도어 BASIC에서 그래픽 화면을 불러오는 데에도 자주 사용된 기술이었다.1980년대에 들어서면서 DOS 환경의 링커들도 오버레이를 지원하기 시작했는데, 이는 약 25년 전 메인프레임 컴퓨터에서 사용되던 방식과 거의 동일한 형태였다. 메모리 오버레이를 포함하는 이진 파일들은 주로 `.OVL` 또는 `.OVR`이라는 파일 확장자를 사용했다. 때로는 `.000`, `.001`과 같은 숫자 확장자가 사용되기도 했다.
당시 많은 유명 프로그램들이 오버레이 방식을 활용했다. 대표적인 예로는 워드 프로세서인 WordStar, 데이터베이스 관리 시스템인 dBase, 그리고 Enable Software사의 오피스 통합 소프트웨어인 Enable 등이 있다. WordStar의 경우, 주 실행 파일(`WS.COM`) 외에 여러 오버레이 모듈(`WSMSGS.OVR`, `WSOVLY1.OVR`, `MAILMERGE.OVR`, `SPELSTAR.OVR`)로 구성되었으며, CP/M-86과 MS-DOS용 버전은 동일한 오버레이 파일을 사용하기도 했다. 볼랜드의 터보 파스칼이나 GFA BASIC 같은 컴파일러들은 이러한 `.OVL` 오버레이 파일을 직접 생성하는 기능을 제공하기도 했다.
3. 사용법
오버레이는 사용 가능한 주소 공간보다 큰 프로그램을 실행하기 위한 프로그래밍 기법이다. 핵심 원리는 프로그램을 여러 독립적인 코드 블록(오버레이)으로 나누고, 실행 시점에 필요한 블록만 주 기억 장치에 불러와 사용하는 것이다. 다른 코드 블록이 필요해지면, 이전에 사용하던 코드 블록이 차지했던 메모리 영역에 새로운 코드 블록을 덮어쓰는 방식으로 동작한다.
가상 메모리 기술이 일반화되기 전의 컴퓨터 시스템에서는 주 기억 장치 용량의 한계를 극복하기 위해 이 기법을 주로 사용했다. 가상 메모리와 달리 오버레이 방식은 프로그래머가 직접 코드 분할과 메모리 로드 시점을 명시적으로 관리해야 했다. 주 기억 장치와 보조 기억 장치를 함께 사용하는 방식이 일반적이었으나, 뱅크 전환 같은 방식으로 주 기억 장치를 전환하며 오버레이를 구현하기도 했다.
제어 시스템에 사용된 16비트 미니컴퓨터의 경우, 제한된 주소 공간과 가상 메모리 사용 시 발생할 수 있는 페이지 교체 지연을 피하기 위해 오버레이 기법을 채택하기도 했다.
한편, 운영 체제 맥락에서 '오버레이'라는 용어는 다른 의미로 사용되기도 한다. 새로운 프로그램을 시작할 때, 기존 프로세스의 메모리 공간에 새로운 프로그램 코드를 덮어쓰는 과정을 오버레이라고 부르는 경우가 있다. 예를 들어, 유닉스 계열 시스템에서는 `fork()` 시스템 콜로 자식 프로세스를 생성한 후, `exec()` 시스템 콜을 사용하여 해당 자식 프로세스의 메모리 공간에 새로운 프로그램을 로드하는데, 이 `exec()`의 동작 방식을 오버레이 개념에 빗대어 설명하기도 한다.
오버레이 구조를 설계하고 관리하는 것은 복잡하며, 현대에는 주 기억 장치 용량 증가와 가상 메모리 기술의 보편화로 인해 프로그램 크기 제약을 해결하기 위한 목적으로는 거의 사용되지 않는다.
3. 1. 오버레이 구조
오버레이 방식을 사용하기 위해선 먼저 프로그램을 '오버레이'라 불리는 독립적인 목적 코드 블록으로 나누어야 한다. 이 코드 블록들은 트리 구조로 배치되며, 같은 깊이에 있는 '형제' 블록들은 같은 메모리 영역을 공유한다. 이 공유되는 메모리 영역은 '오버레이 영역' 혹은 '대상 영역'이라 불린다.[2]오버레이 프로그램이나 운영 체제의 일부로 동작하는 오버레이 관리자는 외부 기억 장치에서 필요한 오버레이를 필요할 때 대상 영역으로 읽어들인다. 이 로드 과정은 자동으로 이루어질 수도 있고, 프로그래머가 작성한 명시적인 코드를 통해 제어될 수도 있다. 링커에서 오버레이 구조 생성을 지원해 주는 경우가 많다.[2]
가상 메모리와 달리, 오버레이 방식은 프로그래머가 어떤 코드 블록을 언제 메모리에 로드할지 명시적으로 지정하고 관리해야 했다.
3. 2. 예제 (OS/360 링크 편집기)
오버레이 프로그램을 만드는 과정은 프로그램을 독립적인 오브젝트 코드 블록, 즉 '''오버레이''' 또는 '''세그먼트'''로 나누어 트리 구조로 배치하는 작업을 포함한다. 동일한 깊이 수준에 있는 형제 세그먼트들은 같은 메모리 영역(오버레이 영역 또는 대상 영역)을 공유하게 된다. 필요할 때, 오버레이 관리자는 보조 기억 장치에서 해당 오버레이를 이 공유 메모리 영역으로 불러온다. 종종 링커는 이러한 오버레이 구조 생성을 지원한다.다음은 OS/360 링크 편집기(Linkage Editor)를 사용하여 단일 영역(region)을 가진 오버레이 프로그램을 연결(link)하도록 지시하는 제어 명령어의 예시이다. 들여쓰기는 오버레이 구조를 시각적으로 나타낸다.
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)
이 명령어들은 아래와 같은 오버레이 트리 구조를 정의한다.
+--------------+
| 루트 세그먼트 |
| MOD1, MOD2 |
+--------------+
|
+----------+----------+
| |
+-------------+ +-------------+
| 오버레이 A | | 오버레이 B |
| MOD3 | | MOD7 |
+-------------+ +-------------+
|
+--------+--------+
| |
+-------------+ +-------------+
| 오버레이 AA | | 오버레이 AB |
| MOD4, MOD5 | | MOD6 |
+-------------+ +-------------+
위 구조에서 MOD1과 MOD2는 메모리에 항상 상주하는 '''루트 세그먼트'''를 구성한다. 루트 세그먼트 실행 후에는 오버레이 A 또는 오버레이 B가 로드될 수 있다. 오버레이 A(MOD3 포함)와 오버레이 B(MOD7 포함)는 동일한 메모리 영역을 공유한다. 즉, 프로그램 실행 중 오버레이 A가 필요하면 해당 메모리에 로드되고, 이후 오버레이 B가 필요하면 같은 메모리 영역에 오버레이 B가 덮어쓰여 로드된다.
마찬가지로, 오버레이 A 아래에는 두 개의 하위 오버레이 세그먼트 AA(MOD4, MOD5 포함)와 AB(MOD6 포함)가 정의되어 있다. 이 둘 역시 오버레이 A 내부의 동일한 메모리 영역을 공유한다. 즉, 오버레이 A(MOD3)가 실행된 후, 필요에 따라 오버레이 AA 또는 오버레이 AB가 같은 메모리 공간에 로드되어 실행된다.
루트 세그먼트와 특정 오버레이 세그먼트 사이에 위치한 모든 세그먼트들을 통틀어 '''경로'''(path)라고 부른다. 예를 들어, 오버레이 AA의 경로는 루트 세그먼트와 오버레이 A를 포함한다.
4. 활용
현대의 컴퓨터 환경에서는 가상 메모리 기술이 보편화되면서 프로그램 크기가 물리적 메모리 용량에 크게 제약받지 않게 되었다. 이로 인해 과거 메모리 부족 문제를 해결하기 위해 사용되었던 오버레이 기법의 필요성은 전반적으로 감소했다.[3] 개발자들은 메모리 관리의 복잡성에서 벗어나 문제 해결 자체에 집중할 수 있게 되었고, 자바나 C++ 같은 고급 프로그래밍 언어 사용도 용이해졌다.
하지만 모든 환경에서 오버레이가 완전히 사라진 것은 아니며, 메모리 관리 장치(MMU)가 없는 임베디드 시스템이나 실시간 시스템과 같이 가상 메모리 사용이 어렵거나 예측 가능한 실행 시간이 중요한 특정 환경에서는 여전히 유용하게 사용된다.[3][4]
4. 1. 가상 메모리 환경
2015년 기준으로 대부분의 비즈니스 애플리케이션은 가상 메모리가 있는 플랫폼에서 실행되도록 설계된다. 이러한 환경에서는 프로그램의 작업 세트(working set)가 실제 사용 가능한 물리적 메모리 크기를 초과하지 않는 한, 개발자는 메모리 제약 없이 프로그램을 설계할 수 있다.[3] 즉, 오버레이 구조를 고려해야 하는 추가적인 설계 부담 없이 문제 해결 자체에 집중할 수 있게 되었으며, 크기 제약이 줄어들면서 자바, C++, 스몰토크와 같은 고급 프로그래밍 언어를 사용하는 것이 더 용이해졌다.하지만 모든 환경에서 오버레이가 사라진 것은 아니다. 임베디드 시스템에 사용되는 일부 저가형 프로세서는 메모리 관리 장치(MMU)를 제공하지 않아 가상 메모리를 사용하기 어렵기 때문에 오버레이 기법이 여전히 유용하게 사용된다.[3] 또한, 많은 실시간 시스템에서는 페이징 방식보다 오버레이 방식이 더 예측 가능하고 결정적인 응답 시간을 제공하므로 선호되기도 한다. 대표적인 예로 우주 왕복선의 주요 항공 전자 시스템 소프트웨어(PASS, ''Primary Avionics System Software'')는 프로그램된 오버레이 방식을 사용한다.[4]
가상 메모리가 있는 플랫폼에서도 소프트웨어 구성 요소를 필요에 따라 메모리에 올리고 내리는 방식이 사용되기도 한다. 예를 들어 코덱과 같은 구성 요소는 동적 로딩 방식을 통해 필요할 때만 메모리에 적재될 수 있도록 분리하여 설계할 수 있다.
4. 2. 임베디드 시스템 및 실시간 시스템
임베디드 시스템에 자주 사용되는 저가형 프로세서는 메모리 관리 장치(MMU)를 제공하지 않는 경우가 많다. 이러한 환경에서는 오버레이 기법이 여전히 유용하게 사용된다.[3] 또한, 오버레이 방식은 페이징 기법보다 실행 시간 예측이 더 용이하다는 장점이 있어 실시간 시스템에서도 많이 활용된다. 예를 들어 우주 왕복선의 주요 항공 전자 시스템 소프트웨어(en, PASS)는 오버레이 방식을 사용한다.[4]5. 기타 오버레이 관련 개념
운영 체제에서는 새로운 프로그램을 시작할 때, 기존 프로세스의 자원을 공유하면서 실행할 프로그램만 교체하는 방식을 사용하기도 하는데, 이 교체 과정을 오버레이라고 부르기도 한다. 이는 새로운 프로세스를 완전히 처음부터 만드는 방식의 번거로움을 피하기 위함이다.
예를 들어 Unix 계열 운영 체제에서는 `fork()` 시스템 콜을 사용하여 현재 실행 중인 프로세스를 복제해 자식 프로세스를 만들고, 이후 `exec()` 시스템 콜을 호출하여 자식 프로세스가 실행할 프로그램을 새로운 프로그램으로 교체(오버레이)한다.
이 외에도 네트워킹, 그래픽 사용자 인터페이스, 문서 인쇄 등 다양한 분야에서 '오버레이'라는 용어가 각각 다른 의미로 사용되고 있다.
5. 1. 오버레이 네트워크
컴퓨터 네트워크의 하위 토폴로지와 관계없이 구축된 상위 계층의 네트워크를 '''오버레이 네트워크'''라고 한다. 예를 들어, IP 네트워크의 토폴로지와 무관하게 구축된 피어 투 피어 네트워크 등을 가리킨다.5. 2. 오버레이 표시
이미지 데이터나 비디오 신호를 겹쳐서 표시하는 것을 '''오버레이 표시'''라고 부른다. 특히 텔레비전 등의 비디오 출력을 아날로그 신호로 합성하여 컴퓨터 디스플레이에 표시하는 것을 '''비디오 오버레이'''라고 부른다. 또한, 이미지 처리 소프트웨어나 드로잉 소프트웨어에서 여러 개의 레이어를 겹쳐서 표시하는 것도 '''오버레이 표시'''라고 부른다.스페이스 인베이더 게임에서 흑백 화면을 컬러로 보이게 하기 위해 색깔 있는 셀로판을 화면에 붙였는데, 이것도 물리적인 오버레이 표시의 일종이다.
5. 3. 폼 오버레이
'''폼 오버레이'''는 정형 문서 인쇄 용어로서, 문서의 정형 부분을 독립시켜 프린터나 프린트 서버에 저장한 것을 의미한다. 사용 빈도가 높은 문서 형식을 미리 저장해 둠으로써 데이터 전송 시간을 단축할 수 있다. 또한, 데이터베이스에서 대량의 정형 문서를 자동으로 생성하여 인쇄하는 데에도 활용된다.5. 4. 오버레이 시트
태블릿 표면에 겹쳐 사용하는 투명한 시트를 '''오버레이 시트'''라고 부른다. 사진이나 그림을 밑에 끼워 넣어 트레이싱하는 데에도 사용된다. 또한, 계산기 모양의 키보드에 딱 맞도록 구멍이 뚫린 시트도 '''오버레이 시트'''라고 부른다. 이 시트는 응용 소프트웨어에 따라 키에 설정된 기능을 알기 쉽게 하기 위한 것으로, 키의 구멍마다 기능을 설명하는 문자열이 인쇄되어 있다.참조
[1]
웹인용
Oxford Dictionaries
http://www.askoxford[...]
2014-01-28
[2]
웹인용
The GNU Linker documentation: Overlay Description
http://sourceware.or[...]
2008-06-03
[3]
서적
Linkers & Loaders
http://linker.iecc.c[...]
Morgan Kaufmann Publishers
[4]
웹인용
An Assessment of Space Shuttle Flight Software Development Processes
http://www.nap.edu/o[...]
2012-10-29
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com