맨위로가기

중첩 확장 메모리

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

중첩 확장 메모리는 IBM PC 및 호환 기종에서 메모리 접근의 한계를 극복하기 위해 개발된 기술이다. 인텔 8088 프로세서 기반 시스템의 1MB 메모리 주소 공간 제약으로 인해, 확장 메모리는 뱅크 스위칭 방식을 사용하여 더 많은 RAM을 사용할 수 있게 했다. 로터스, 인텔, 마이크로소프트는 EMS 표준을 개발하여 확장 메모리 사용을 표준화했으며, EMS는 하드웨어 또는 소프트웨어적으로 구현될 수 있었다. EMS는 1990년대에 들어 32비트 주소 공간을 지원하는 새로운 운영체제와 DOS 확장 기술의 등장으로 인해 점차 쇠퇴했다.

더 읽어볼만한 페이지

  • 기억 장치 - EPROM
    EPROM은 자외선을 사용하여 내용을 지울 수 있는 읽기 전용 메모리이며, MOSFET의 부유 게이트를 사용하여 데이터를 저장하고, 펌웨어 업데이트가 용이하여 소량 생산에 사용되었으나 EEPROM과 플래시 메모리에 의해 대체되었다.
  • 기억 장치 - 정적 램
    정적 램(SRAM)은 전원이 공급되는 동안 데이터를 저장하며, 갱신 회로가 필요 없고 빠른 접근 속도를 가지는 휘발성 메모리 유형이다.
중첩 확장 메모리
DOS 확장 메모리 (EMS)
EMS 및 XMS 아키텍처
EMS 및 XMS 아키텍처
일반 정보
유형메모리 관리
개발자로터스 소프트웨어
인텔
마이크로소프트
운영 체제도스
플랫폼x86
첫 출시1985년
메모리 관리
메모리 모델뱅크 스위칭
최대 크기64MB
접근 방식페이지 프레임 (64KB 크기의 페이지)
표준
주요 버전EMS 3.0
EMS 3.2
EMS 4.0
관련 기술
관련 기술확장 메모리 (XMS)
확장 메모리 사양 (Extended Memory Specification, XMS)
도스 메모리 관리자
중첩 확장 메모리 (VCPI, DPMI)

2. 역사적 배경

IBM PC와 IBM PC/XT의 인텔 8088 프로세서는 1 MB의 메모리를 주소 지정할 수 있었다. PC 설계자는 하위 640 KB를 읽기-쓰기 프로그램 메모리(RAM)로 할당하여 "기본 메모리"라 불렀고, 나머지 384 KB는 시스템 BIOS, 비디오 메모리 등으로 예약했다.

1984년 IBM PC AT는 최대 16 MB의 RAM을 확장 메모리로 주소 지정 가능한 80286 칩을 사용했지만, 보호 모드에서만 가능했다. 보호 모드와 호환되는 소프트웨어가 부족했기 때문에 시장은 다른 솔루션을 필요로 했다.

더 많은 메모리에 접근하기 위해 뱅크 스위칭 방식이 고안되었으며, 이 방식은 추가 메모리의 선택된 부분만 특정 시간에 접근할 수 있도록 했다. 기본 메모리와 확장 메모리 사이의 "창"은 확장 메모리 내의 다른 위치에 접근하도록 조정될 수 있었다.

뱅크 스위칭 기술을 사용하려는 첫 시도는 Tall Tree Systems에서 JRAM 보드를 통해 이루어졌지만, 널리 사용되지는 않았다.

3. EMS (Expanded Memory Specification)

로터스, 인텔, 마이크로소프트는 협력하여 EMS 표준(LIM EMS)을 개발했다. EMS의 첫 공개 버전인 3.0은 최대 4MB의 확장 메모리 접근을 허용했다. 3.2 버전에서는 8MB, 최종 버전인 4.0에서는 최대 32MB까지 확장 메모리 용량이 늘어났고 추가 기능도 지원되었다. 마이크로소프트는 뱅크 스위칭이 세련되지 않고 임시적이지만 필요한 임시 방편이라고 생각했다.[1]

EMS 3.2는 상위 384KiB(상위 메모리)의 64KiB 영역을 사용했으며, 이는 확장 메모리의 일부를 매핑하는 데 사용할 수 있는 16KiB 페이지 4개로 나뉘었다.

EMS 3.2는 AST Research, Quadram, Ashton-Tate에 의해 개선되었는데, 이들은 자체 향상된 EMS(EEMS) 표준을 만들었다. EEMS는 인터럽트, 네트워크, 비디오 카드와 같은 전용 I/O 메모리와 관련이 없는 한 하위 RAM의 모든 16KiB 영역을 확장 메모리에 매핑할 수 있도록 하여, 전체 프로그램을 추가 RAM에서 전환할 수 있었다. EEMS는 또한 두 세트의 매핑 레지스터에 대한 지원을 추가했는데, 이는 DESQview와 같은 초기 DOS 멀티태스커 소프트웨어에서 사용되었다. 1987년에 출시된 LIM EMS 4.0 사양은 EEMS의 거의 모든 기능을 통합했다.

LIM EMS 4.0에는 EMS 보드가 여러 세트의 페이지 매핑 레지스터(최대 64 세트)를 가질 수 있다는 기능이 추가되어, DOS 컴퓨터 멀티태스킹의 원시적인 형태가 가능했다. 그러나 표준에서 보드가 얼마나 많은 레지스터 세트를 가져야 하는지 지정하지 않아 하드웨어 구현 간에 큰 가변성이 있었다.

EMS 기능은 소프트웨어 인터럽트 67h를 통해 접근할 수 있다. EMS를 사용하는 프로그램은 먼저 장치 이름이 '''EMMXXXX0'''인 장치 드라이버를 확인하여 설치된 확장 메모리 관리자(EMM)의 존재를 확인해야 한다.

초기 MS-DOS는 인텔 8086용으로 만들어졌기 때문에 1MB 이상의 메모리 처리는 고려되지 않았다. ROM이나 VRAM 등에 사용되는 공간을 제외하면 메인 메모리 공간은 640KB 또는 768KB로 제한되었고, 애플리케이션 규모가 커지고 처리할 데이터가 증가하면서 1MB조차 부족하게 되었다.

이후 1MB를 넘는 메모리를 처리할 수 있는 80286, 80386 등 상위 호환 제품이 등장하고 메모리 모듈 가격이 저렴해졌지만, 리얼 모드에서 어떻게 사용할 것인가가 문제였다. 프로세서를 프로텍트 모드로 작동시키면 1MB를 넘는 메모리를 처리할 수 있었지만, 당시의 MS-DOS 및 그 애플리케이션은 대부분 리얼 모드로 작동했기 때문이다.

이러한 문제를 극복하기 위한 하드웨어적인 구현은 몇 가지 있었지만, 대표적인 것은 후에 통일 규격으로 제정된 뱅크 전환에 의한 메모리 확장 방식인 '''EMS'''이다. EMS를 사용하는 소프트웨어에서는 데이터를 16KB~64KB의 창을 통해 접근해야 했기 때문에 데이터 분해 및 재결합이 필요했고, EMS를 일반 메모리처럼 투명하게 처리하는 라이브러리도 없어 다소 번거로운 프로그래밍이 필요했다.

EMS의 주요 특징은 다음과 같다.


  • "EMS 매니저"를 통해 메모리 공간 획득, 해제, 뱅크 전환 등을 수행한다.
  • 16KB 단위로 뱅크를 전환하며, 이를 페이지라고 부른다.
  • 8086에서 접근 가능한 1MB 범위 내에 "페이지 프레임" 구획을 설정한다.
  • 페이지 프레임은 대부분 4 페이지 = 64KB (버전 4.0)의 연속된 영역이다.
  • EMS 매니저는 요청된 페이지를 페이지 프레임에 나타나게 한다.
  • 따라서 각종 조작은 숨겨져 있으며, 사용자는 신경 쓸 필요가 없다.
  • 대응하는 메모리 총량은 32MB (2048 페이지)까지이다.
  • 주요 버전으로 3.2, Enhanced EMS 3.2, 4.0이 있다. 4.0에서는 특히 Windows 2.x용 확장을 수행했다.

3. 1. EMS의 단점

EMS는 다음과 같은 단점을 가지고 있었다.

  • 주소 공간 자체를 확장하는 것이 아니므로, 동시에 참조 가능한 주소 공간의 크기는 1MB로 유지되었다.
  • 프로그래머는 페이지 프레임에 나타나는 페이지를 항상 파악하고 프로그램을 개발해야 했으므로 메모리 관리가 번거로웠다.
  • 멀티태스킹 처리에 필요한 시스템 보호 기능(태스크마다 읽기 전용 속성이나 코드 실행 전용 속성을 부여하는 등)이 사양에 없었기 때문에, 멀티태스킹 및 유사 멀티태스킹 OS의 기본 메모리 사양으로는 적합하지 않았다.
  • DOS 익스텐더 등 DOS상에서 1MB를 초과하는 메모리를 사용하는 다른 방법보다 느렸다.(DOS 익스텐더는 뱅크 전환 처리가 불필요하다)
  • 가상 86EMS는 다른 보호 모드 프로그램과 공존하기 위해 VCPI 등의 규격에 대응할 필요가 있었다.

4. XMA (Expanded Memory Adapter)

IBM은 자체 메모리 표준인 확장 메모리 어댑터(XMA)를 개발했으며, IBM DOS 드라이버는 XMAEM.SYS였다. EMS와 달리 IBM 확장 보드는 확장 메모리 모델과 확장 메모리를 모두 사용하여 주소를 지정할 수 있었다. 그러나 XMA 보드에서 사용되는 확장 메모리 하드웨어 인터페이스는 EMS와 호환되지 않았으며, XMA2EMS.SYS 드라이버는 XMA 보드에 대한 EMS 에뮬레이션을 제공했다. XMA 보드는 1986년 개선된 3270 PC 모델에 처음 도입되었다.

5. 구현 방식

하위 1 MiB 주소 공간의 일부는 확장 메모리의 여러 메가바이트로 "창"을 제공한다.


IBM PC와 IBM PC/XT의 인텔 8088 프로세서는 1 MiB (220 바이트)의 메모리를 주소 지정할 수 있었는데, 이는 인텔 8086의 20비트 외부 주소 버스에서 상속된 제한이었다. PC 설계자는 주소 공간의 하위 640 KiB를 읽기-쓰기 프로그램 메모리(RAM)로 할당하고 "기본 메모리"라고 불렀으며, 나머지 384 KiB는 시스템 BIOS, 비디오 메모리 등 다른 용도로 예약했다.

1984년에 출시된 IBM PC AT는 최대 16 MiB의 RAM을 확장 메모리로 주소 지정할 수 있는 80286 칩을 사용했지만, 이는 보호 모드에서만 가능했다. 보호 모드와 호환되는 소프트웨어가 부족했기 때문에(표준 DOS 응용 프로그램은 보호 모드에서 실행할 수 없었음) 시장은 여전히 다른 솔루션을 필요로 했다.

더 많은 메모리에 접근할 수 있도록 뱅크 스위칭 방식이 고안되었는데, 추가 메모리의 선택된 부분만 특정 시간에 접근할 수 있었다. 처음에는 64 KiB (216 바이트)의 단일 메모리 창인 페이지 프레임이 사용되었으며, 이후 유연성이 더해졌다. 프로그램은 확장 메모리에 접근하기 위해 특정 방식으로 작성되어야 했다. 기본 메모리와 확장 메모리 사이의 "창"은 확장 메모리 내의 다른 위치에 접근하도록 조정될 수 있었다.

뱅크 스위칭 기술을 사용하려는 첫 번째 시도는 Tall Tree Systems에서 JRAM 보드를 통해 이루어졌지만, 널리 사용되지 않았다. (Tall Tree Systems는 나중에 동일한 JRAM 브랜드를 사용하여 EMS 기반 보드를 만들었다.)

초기 MS-DOS는 인텔 8086용으로 만들어졌기 때문에 1MB 이상을 처리하는 것은 고려되지 않았다. 8086이 처음 등장했을 당시에는 8비트 프로세서의 최대 64KB 공간에 비해 여유가 있는 것처럼 보였지만, ROM이나 VRAM을 위해 소비되는 공간을 제외한 메인 메모리 공간은 640KB 또는 768KB로 제한되었으며, 애플리케이션의 규모가 커지면서 1MB조차 부족하게 되었다.

이후 1MB를 넘는 메모리를 처리할 수 있는 상위 호환 제품인 8028680386이 등장하고 메모리 모듈을 저렴하게 구할 수 있게 되었지만, 리얼 모드에서 어떻게 사용할 것인가가 문제였다. 프로세서를 프로텍트 모드로 작동시키면 1MB를 넘는 메모리를 처리할 수 있었지만, 당시의 MS-DOS 및 그 애플리케이션은 대부분 리얼 모드로 작동했기 때문이다.

이러한 문제를 극복하기 위한 하드웨어적인 구현은 몇 가지 있었지만, 대표적인 것은 후에 통일 규격으로 제정된 뱅크 전환에 의한 메모리 확장 방식인 '''EMS'''이다. EMS를 사용하는 소프트웨어에서는 데이터를 16KB~64KB의 창을 통해 접근해야 했기 때문에 데이터의 분해 및 재결합을 해야 했으며, 또한 EMS를 일반 메모리처럼 투명하게 처리하는 라이브러리도 없었기 때문에 다소 번거로운 프로그래밍이 필요했다. 80386부터는 가상 86 모드를 사용한 소프트웨어적인 EMS 구현이 일반화되었다.

EMS는 "EMS 매니저"를 통해 메모리 공간 획득, 해제, 뱅크 전환 등을 수행한다. 16KB 단위로 뱅크를 전환하며, 이를 페이지라고 부른다. 8086에서 접근 가능한 1MB 범위 내에 "페이지 프레임" 구획을 설정하며, 페이지 프레임은 대부분 4 페이지 = 64KB (버전 4.0)의 연속된 영역이다. EMS 매니저는 요청된 페이지를 페이지 프레임에 나타나게 하며, 각종 조작은 숨겨져 있어 사용자는 신경 쓸 필요가 없다. 대응하는 메모리 총량은 32MB (2048 페이지)까지이다. 주요 버전으로 3.2, Enhanced EMS 3.2, 4.0이 있으며, 4.0에서는 특히 Windows 2.x용 확장을 수행했다.

CPU나 메모리 버스의 변천에 따라 몇 가지 구현 방식이 있었으며, 하위 섹션에서 자세히 설명한다.

MS-DOS용 소프트웨어의 호환성을 위해, Windows 9x까지는 MS-DOS 모드용으로 EMM386이 준비되어 있었다. 또한 가상 86 모드에 대응하는 Windows의 DOS 프롬프트에서는 Windows 기능에 의해 가상 EMS가 제공된다. 특히 MS-DOS 모드를 가지지 않는 Windows NT에서는 DOS 프롬프트상에서 동작하는 애플리케이션에 한정되지만, 그 이후의 Windows에서도 EMS의 설정 항목이 존재한다.

5. 1. 하드웨어 EMS

주변 장치 주소 공간에 메모리 창을 삽입하는 것은 원래 컴퓨터의 ISA 확장 버스에 꽂는 특정 확장 보드를 통해서만 수행할 수 있었다. 1980년대의 유명한 확장 메모리 보드로는 AST RAMpage, IBM PS/2 80286 메모리 확장 옵션, AT&T 확장 메모리 어댑터 및 인텔 어보브 보드가 있었다. 당시 램 가격이 MiB당 수백 달러에 달했고, 위의 브랜드들의 품질과 명성을 고려할 때 확장 메모리 보드는 매우 비쌌다.

뱅크 전환 기능을 가진 전용 메모리 카드를 확장 버스에 연결하는 방식으로, 뱅크 전환 등의 조작은 하드웨어적으로 이루어지므로 고속이다. 또한, 8086, 80186, V30과 같이 어드레스 버스가 20비트인 CPU에서도 EMS를 사용할 수 있었다. 순수한 하드웨어 EMS를 80286 이후 탑재된 컴퓨터에 증설해도 보호 메모리로는 사용할 수 없었기 때문에, 둘 다 사용하고 싶은 경우에는 "이중 투자"가 되었다. 그 때문에 카드상의 스위치 전환으로 "확장 버스 접속의 보호 메모리"로도 사용할 수 있는 EMS 카드도 존재했다.

5. 2. 소프트웨어 EMS

80286 이후의 CPU에서 사용 가능하다. 보호 모드 메모리를 사용하여 EMS를 에뮬레이션한다. EMS 매니저는 뱅크 전환 명령을 받으면 보호 모드 메모리에서 페이지 프레임으로 페이지를 복사/쓰기 한다. 이 때문에 속도가 느리다. EMS 매니저를 포함하지 않는 경우에는 보호 모드 메모리를 그대로 사용할 수 있으므로 범용성이 있다.[1]

일반적으로 소프트웨어 에뮬레이션 방식의 EMS (소프트웨어 EMS)는 보호 모드 메모리를 사용한 것을 가리키지만, 그 외의 에뮬레이션 방식에 대해서도 함께 기술한다.

PC-9800 시리즈용 일부 EMS 매니저는 보호 모드 메모리 대신 I·O 뱅크 메모리를 이용할 수 있었다(페이지 프레임의 주소는 하드웨어 EMS 유무에 따라 다르다). 뱅크 메모리를 사용하는 경우에는 8086/V30에서도 사용할 수 있다.

보호 모드 메모리 대신 보조 기억 장치 (스토리지) 상의 파일을 사용하는 드라이버도 있다. 메모리 대신 파일에 접근하기 때문에 속도가 매우 느리지만, 드라이버에 따라 8086/8088 등에서도 사용할 수 있다. HP 200LX(CPU는 80C186)에서는 이 방법을 통해 EMS를 사용할 수 있다. 페이지 프레임을 메인 메모리 공간에 확보하고 스토리지에 충분한 빈 공간이 있다면 추가 하드웨어는 필요하지 않다. HP 200LX용 LXEMM 등이 있다.

5. 3. 가상 86 EMS

80386 이후의 CPU에서 사용 가능하다. IA-32의 가상 86 모드를 이용하여 EMS를 실현한다. EMS 매니저는 CPU의 메모리 매핑 기구를 이용하여 (프로그램에서 보기에) 페이지 프레임에 프로텍트 메모리상의 페이지를 나타나게 한다. 소프트웨어 EMS와 마찬가지로 범용성이 있으며, 페이지 전환도 빠르다. 또한 범용 확장 버스가 아닌 메모리 전용 버스상의 메모리를 사용할 수 있기 때문에 가장 빠르다. 단, 가상 86 모드는 프로텍트 모드의 1개의 태스크(독립적인 동작 모드가 아님)이므로, 프로텍트 모드를 사용했을 때 발생하는 것과 같은 처리 속도 저하가 있다. 특히 인터럽트와 I/O 포트에 대한 액세스에서 이 속도 저하가 현저하게 나타난다.

5. 4. LIMulator

LIMulator는 마더보드나 인텔 80386 프로세서의 기능을 전혀 사용하지 않는 소프트웨어 확장 메모리 에뮬레이션 프로그램이다. 이들은 확장 메모리 윈도우를 위해 기본 RAM의 64 KiB를 예약하고, 응용 프로그램이 페이지 전환을 요청할 때 확장 메모리나 하드 디스크에서 데이터를 복사하는 방식으로 작동한다. 이러한 방식은 프로그래밍적으로 구현하기는 쉬웠지만 성능은 낮았다. 이 기술은 어보브 소프트웨어(Above Software)의 AboveDisk와 여러 셰어웨어 프로그램에서 제공되었다.

6. 설정 상의 주의

EMS를 사용할 때 메인 메모리(컨벤셔널 메모리)의 용량을 차지하지 않도록 하려면, 페이지 프레임을 메인 메모리 범위를 벗어난 어퍼 메모리 영역에 설정해야 한다. 그러나 어퍼 메모리 영역은 BIOS, 확장 카드 BIOS, VRAM이 사용하는 공간이다.

따라서 EMS를 사용할 때에는 확장 카드 BIOS를 다음과 같이 설정해야 한다.


  • 본체 BIOS, VRAM, 다른 카드의 BIOS와 충돌하지 않도록 설정한다.
  • 64KB의 연속된 미사용 영역이 생기도록 설정하고, 그곳을 페이지 프레임으로 지정한다.

7. 라지 프레임

PC/AT 호환기종에서의 EMS 구현 방법으로, 640KB 이후의 어퍼 메모리에 페이지 프레임을 설치하는 것 외에도, 컨벤셔널 메모리의 상위 주소(256KB:40000H 이후 등)에도 페이지 프레임을 설치하는 라지 프레임 방식이 있다(구현에 가상 메모리 매니저를 사용하는 경우가 많았다). 특히 Windows 2.0, Windows/286, Windows 3.0 리얼 모드에서는 이 방법을 사용하여 컨벤셔널 메모리에 상주하는 DLL을 전환할 수 있었으며, 이 점에서 국산 PC-9801 등에 비해 쾌적한 OS 환경을 구현했다(일본 IBM에서 발매한 Windows 3.0A의 리얼 모드에서도 이 기능을 이용할 수 있었다).

그러나 아래에 나타난 결점 때문에 Windows 3.0 이후에는 점차 확장 메모리의 표준을 프로텍트 모드로 이행하게 된다.

8. 쇠퇴

1990년대에 들어 IBM AT 인텔 80286보호 모드에서 24비트 주소 공간(16MiB)을 지원했고, 386은 32비트 주소, 즉 4 기가바이트(232)의 RAM을 지원했는데, 이는 8086의 주소 지정 가능 공간의 4096배에 달했다.[1] DOS 자체는 보호 모드를 직접 지원하지 않았지만, 마이크로소프트는 DPMI를 개발했고, 이를 기반으로 여러 DOS 확장자가 출시되었다. 과 같은 DOS 프로그램은 DOS/4G와 같은 확장자를 사용하여 DOS API를 계속 사용하면서 보호 모드에서 실행할 수 있었다. 1990년대 초 리눅스, 윈도우 9x, 윈도우 NT, OS/2, BSD/OS와 같은 새로운 운영 체제는 보호 모드를 "기본적으로" 지원했다. 이러한 발전으로 인해 확장 메모리는 구식 개념이 되었다.

참조

[1] 간행물 The Most Memorable Tech Flops https://books.google[...] PC Magazine 2008-01
[2] 논문 Effective utilization of IBM 3090 large virtual storage in the numerically intensive computations of ab initio molecular orbitals https://ieeexplore.i[...] 1988
[3] 웹사이트 IBM: Configuring Storage https://www.vm.ibm.c[...] 2006-08-29



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com