연속 확장 메모리
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
확장 메모리 사양(XMS)은 IBM PC의 확장 메모리를 실행 모드에서 사용하는 사양으로, 확장 메모리 관리자(XMM) 소프트웨어를 통해 사용 가능하다. XMS는 1988년 버전 2.0에서 최대 64MB를 지원했으며, 버전 3.0에서는 4GB까지 지원하도록 발전했다. XMS는 하이 메모리 영역(HMA), 확장 메모리 블록(EMB), 상위 메모리 블록(UMB)의 세 가지 메모리 영역을 규격으로 한다. XMS 드라이버는 HMA와 UMB에서의 메모리 할당을 관리하며, MS-DOS 환경에서 HIMEM.SYS, EMM386.EXE 등이 주요 드라이버로 사용되었다. XMS는 EMS와 달리 80286 이상의 프로세서에서 확장 메모리를 활용하며, 한국 PC 환경에서 한글 처리, 게임 개발 등에 기여했다.
더 읽어볼만한 페이지
연속 확장 메모리 |
---|
2. XMS의 기본 개념
'''확장 메모리 사양''' ('''XMS''')은 데이터를 저장하기 위해 IBM PC의 확장 메모리를 실행 모드에서 사용하는 것을 설명하는 사양이다(하지만 실행 가능한 코드를 실행하기 위한 것은 아니다). 메모리는 HIMEM.SYS와 같은 '''확장 메모리 관리자''' ('''XMM''') 소프트웨어에 의해 사용 가능해진다. XMM 기능은 소프트웨어 인터럽트 2Fh 기능 4310h를 통해 찾을 수 있는 변수 주소에 대한 직접 호출로 액세스할 수 있다.[2]
1988년 7월에 출시된 XMS 버전 2.0은 최대 64MB의 메모리를 허용했다. XMS 버전 3.0에서는 이것이 4GB(232 바이트)로 증가했다. 차이점은 총 확장 메모리 및 할당되지 않은 (사용 가능한) 확장 메모리의 양을 1KB (1024바이트) 단위로 보고하는 데 사용되는 값의 크기에 직접적인 결과이다. XMS 2.0은 최대 (65535 * 1 KB) = 64MB를 나타낼 수 있는 16비트 부호 없는 정수를 사용하는 반면, XMS 3.0은 (4 G * 1 KB) = 4TB (4테라바이트)를 나타낼 수 있지만 사양에 의해 4GB로 제한되는 32비트 부호 없는 정수를 사용하는 새로운 대체 기능을 추가한다. (4GB는 1991년 XMS 3.0이 발표되었을 때 존재했던 유일한 32비트 인텔 x86 CPU인 80386 및 80486의 주소 범위이다.) XMS 3.0은 원래 64MB 제한이 있는 원래 XMS 2.0 API 기능을 유지하지만 4GB의 확장 메모리 (처음 1MB 제외)를 지원하고 32비트 CPU로만 호출할 수 있는 새로운 "수퍼 확장 메모리" 기능을 추가한다 (이러한 "수퍼" 기능은 값을 전달하기 위해 32비트 CPU 레지스터를 사용하기 때문입니다). 개발된 사양 버전에 따라 응용 프로그램에서 사용할 수 있는 메모리 양이 다를 수 있으므로 후자를 '''수퍼 확장 메모리''' ('''SXMS''')라고 부를 수 있다.[3]
확장 메모리 관리자는 또한 하이 메모리 영역 (HMA) 및 상위 메모리 영역 (UMA; 상위 메모리 블록 또는 UMB라고도 함)에서 할당을 관리한다.
XMS는 다음 세 가지 메모리 영역의 규격으로 구성된다.
- 100000h – 10FFEFh의 64킬로바이트 미만을 사용하는 '''HMA''' (High Memory Area, 하이 메모리 영역)
- 10FFF0h 이후의 메모리 영역을 사용하는 '''EMB''' (Extended Memory Block, 확장 메모리 블록). 이 메모리 영역의 내용은 XMS 드라이버의 도움을 받아 컨벤셔널 메모리 (MS-DOS가 관리하는 메모리 영역) 간에 블록 전송할 수 있다.
- BIOS·VRAM 등이 사용하는 A0000h (아키텍처에 따라 다름) – FFFFFh의 빈 영역에 RAM을 나타내는 '''UMB''' (Upper Memory Blocks, 상위 메모리라고도 함)
XMS는 이 세 가지 규격의 총칭이지만, "XMS 메모리를 사용하는 프로그램" 등과 같은 맥락에서 사용할 때는 EMB를 가리키는 경우도 많다. 단, XMS ver.1은 HMA의 규격이며, ver.2에서 EMB와 UMB가 추가되었고, ver.3에서 EMB가 64MB 이상의 메모리를 지원하며, UMB도 한 개의 기능이 추가되었다.
또한, XMS라는 용어는 메모리 영역을 가리키는 단어 외에도, 해당 영역을 관리하는 펑션 콜을 의미하는 단어로도 사용되었다. 예를 들어 "이 메모리 매니저는 EMS 외에 XMS도 지원한다"와 같이 사용된 경우에는 펑션 콜을 의미한다.
또한 HMA와 EMB에 관한 펑션 콜을 제공하는 장치 드라이버는 보호 모드 BIOS 등의 기종 의존 부분을 흡수하는 역할도 담당했다.
==== HMA (High Memory Area) ====
8086에서는 세그먼트와 오프셋이라는 2개의 16비트 값을 사용하여 메모리 관리를 수행하였고, MS-DOS에서의 메모리 관리도 이 세그먼트 단위로 이루어졌다. 참조하는 실제 메모리는 세그먼트×10h + 오프셋으로 계산된다.
80286 이후의 CPU를 사용하는 컴퓨터에서는 어드레스 라인 20 이상의 어드레스 버스를 유효하게 하면, 세그먼트 레지스터에 FFFFh를 지정했을 때 접근하는 실제 주소는 FFFF0h - 10FFEFh가 된다. 즉, 세그먼트+오프셋이라는 8086 및 MS-DOS의 메모리 관리 방식 내에서 65520바이트(64KB에서 16바이트 모자란 용량)의 메모리를 추가로 사용할 수 있게 되는데, 이 영역을 HMA라고 부른다.
- 세그먼트 FFFFh:오프셋 0000h = FFFF0h + 0000h = FFFF0h (8086 등에서도 가능)
- 세그먼트 FFFFh:오프셋 0010h = FFFF0h + 0010h = 100000h
- 세그먼트 FFFFh:오프셋 FFFFh = FFFF0h + FFFFh = 10FFEFh
HMA를 사용하려면 어드레스 버스가 21비트 이상 (어드레스 라인 20이 있는) 80286 이후의 CPU와 1MB 초과의 메모리가 필요하다.
HMA는 기본적으로 배타적으로 이용되며, Windows/286 (일본에서는 Windows 2.1x) 또는 MS-DOS 5.0 이후가 점유한다. MS-DOS 5.0 이후에는 DOS 커널, 디스크 버퍼, 그리고 일부 유틸리티 (display.sys 등)에서 이용한다. ATOK7의 후기 버전에서 HMA를 사용하는 버전 (ATOK7H)도 있었다.
==== EMB (Extended Memory Block) ====
80286 이후 CPU의 보호 모드 메모리 영역 중 HMA보다 상위의 10FFF0h 이후의 메모리 영역을 EMB라고 부른다.
XMS 드라이버는 EMB에 관해 메모리 영역의 빈 메모리 크기 획득, EMB의 할당, 해제, 잠금, 잠금 해제 등의 펑션 콜을 제공한다.
EMB 영역은 보호 모드가 아니면 접근할 수 없으므로, 일반적인 MS-DOS 애플리케이션은 직접 접근할 수 없다. 하지만 XMS 드라이버는 EMB끼리 또는 EMB와 임의의 컨벤셔널 메모리 영역 간의 블록 전송을 수행하는 펑션 콜도 제공했으므로, 리얼 모드 전용 프로그램에서도 XMS 드라이버를 사용하면 EMB 영역을 이용할 수 있었다.
==== UMB (Upper Memory Blocks) ====
UMB (Upper Memory Blocks)는 BIOS, VRAM 등이 사용하는 주소 영역 (A0000h – FFFFFh, PC/AT 호환 기종이나 PC-98 노멀 모드 기준. PC-98 하이 레졸루션 모드나 FMR・FM TOWNS의 경우 C0000h – FFFFFh)의 빈 공간에 RAM을 할당하여 사용하는 영역이다.
이 메모리 공간은 1 메가바이트 이내에 존재하므로, 리얼 모드 및 가상 86 모드에서 접근할 수 있어, 장치 드라이버나 상주 프로그램 로드 등에 사용될 수 있다. MS-DOS 5.0 이후 버전에서는 EMM386.EXE가 UMB를 포함한 메모리 관리를 통합하여 제공하며, CPU가 80386 이상인 경우 MS-DOS 기능을 통해 UMB를 사용할 수 있다.
2. 1. HMA (High Memory Area)
8086에서는 세그먼트와 오프셋이라는 2개의 16비트 값을 사용하여 메모리 관리를 수행하였고, MS-DOS에서의 메모리 관리도 이 세그먼트 단위로 이루어졌다. 참조하는 실제 메모리는 세그먼트×10h + 오프셋으로 계산된다.80286 이후의 CPU를 사용하는 컴퓨터에서는 어드레스 라인 20 이상의 어드레스 버스를 유효하게 하면, 세그먼트 레지스터에 FFFFh를 지정했을 때 접근하는 실제 주소는 FFFF0h - 10FFEFh가 된다. 즉, 세그먼트+오프셋이라는 8086 및 MS-DOS의 메모리 관리 방식 내에서 65520바이트(64KB에서 16바이트 모자란 용량)의 메모리를 추가로 사용할 수 있게 되는데, 이 영역을 HMA라고 부른다.
- 세그먼트 FFFFh:오프셋 0000h = FFFF0h + 0000h = FFFF0h (8086 등에서도 가능)
- 세그먼트 FFFFh:오프셋 0010h = FFFF0h + 0010h = 100000h
- 세그먼트 FFFFh:오프셋 FFFFh = FFFF0h + FFFFh = 10FFEFh
HMA를 사용하려면 어드레스 버스가 21비트 이상 (어드레스 라인 20이 있는) 80286 이후의 CPU와 1MB 초과의 메모리가 필요하다.
HMA는 기본적으로 배타적으로 이용되며, Windows/286 (일본에서는 Windows 2.1x) 또는 MS-DOS 5.0 이후가 점유한다. MS-DOS 5.0 이후에는 DOS 커널, 디스크 버퍼, 그리고 일부 유틸리티 (display.sys 등)에서 이용한다. ATOK7의 후기 버전에서 HMA를 사용하는 버전 (ATOK7H)도 있었다.
많은 EMS 드라이버가 사용하는 가상 86 모드 환경에서는, 일반적으로 가상 86 모니터 (프로텍트 모드에서 가동하는 프로그램)가 상위 메모리에 존재하기 때문에, 하드웨어적으로는 어드레스의 20비트 마스크를 항상 수행하지 않고, 해당 중간 선형 어드레스에 대응하는 페이지의 메모리 어드레스를 대체하는 것으로 에뮬레이션을 하였다.
2. 2. EMB (Extended Memory Block)
80286 이후 CPU의 보호 모드 메모리 영역 중 HMA보다 상위의 10FFF0h 이후의 메모리 영역을 EMB라고 부른다.XMS 드라이버는 EMB에 관해 메모리 영역의 빈 메모리 크기 획득, EMB의 할당, 해제, 잠금, 잠금 해제 등의 펑션 콜을 제공한다. 따라서 DOS 확장자나 Windows 3.x의 스탠다드 모드·향상 모드 등, 보호 모드를 사용할 수 있는 프로그램은 XMS 드라이버의 펑션 콜을 이용하면 기종에 종속적인 처리를 기술하지 않고 보호 메모리를 이용할 수 있었다.
EMB 영역은 보호 모드가 아니면 접근할 수 없으므로, 일반적인 MS-DOS 애플리케이션은 직접 접근할 수 없다. 하지만 XMS 드라이버는 EMB끼리 또는 EMB와 임의의 컨벤셔널 메모리 영역 간의 블록 전송을 수행하는 펑션 콜도 제공했으므로, 리얼 모드 전용 프로그램에서도 XMS 드라이버를 사용하면 EMB 영역을 이용할 수 있었다.
2. 3. UMB (Upper Memory Blocks)
UMB (Upper Memory Blocks)는 BIOS, VRAM 등이 사용하는 주소 영역 (A0000h – FFFFFh, PC/AT 호환 기종이나 PC-98 노멀 모드 기준. PC-98 하이 레졸루션 모드나 FMR・FM TOWNS의 경우 C0000h – FFFFFh)의 빈 공간에 RAM을 할당하여 사용하는 영역이다.이 메모리 공간은 1 메가바이트 이내에 존재하므로, 리얼 모드 및 가상 86 모드에서 접근할 수 있어, 장치 드라이버나 상주 프로그램 로드 등에 사용될 수 있다. MS-DOS 5.0 이후 버전에서는 EMM386.EXE가 UMB를 포함한 메모리 관리를 통합하여 제공하며, CPU가 80386 이상인 경우 MS-DOS 기능을 통해 UMB를 사용할 수 있다. 이전 버전의 MS-DOS나 80286 이하 CPU 환경에서는 각 프로그램이 XMS 펑션을 사용하거나, UMB 로드를 위한 전용 프로그램을 사용해야 했다.
UMB 구현에는 칩셋이나 전용 RAM 보드의 기능을 사용하여 하드웨어적으로 RAM을 매핑하거나, 80386 이후의 가상 86 모드를 사용하여 가상 메모리 매니저 (EMM386.EXE 등)가 메모리를 할당하는 방식이 있다. 전자의 경우 CPU가 80386 이후일 필요는 없으며, XMS가 80286 이상을 전제로 하지만, 하드웨어적인 방법으로 RAM을 매핑하는 드라이버를 통해 8086/8088 등에서도 UMB를 사용할 수 있다.
3. XMS 버전의 발전
XMS 버전 1에서는 하이 메모리 영역(HMA) 규격이 정의되었다.[2] 1988년 7월에 출시된 XMS 버전 2.0은 최대 64MB의 메모리를 허용했으며, 확장 메모리 블록(EMB) 및 상위 메모리 영역(UMA; 상위 메모리 블록 또는 UMB)을 추가하였다.[2] XMS 버전 3.0에서는 지원 메모리가 4GB(232 바이트)로 증가했다.[3] 이는 총 확장 메모리 및 할당되지 않은 확장 메모리의 양을 1KB 단위로 보고하는 값의 크기에 따른 결과이다. XMS 2.0은 최대 64MB를 나타낼 수 있는 16비트 부호 없는 정수를 사용했지만, XMS 3.0은 4GB를 나타낼 수 있는 32비트 부호 없는 정수를 사용하는 새로운 대체 기능을 추가했다.[2][3] XMS 3.0은 64MB 제한이 있는 XMS 2.0 API 기능을 유지하면서 4GB의 확장 메모리(처음 1MB 제외)를 지원하고, 32비트 CPU에서만 호출 가능한 새로운 "수퍼 확장 메모리" 기능을 추가했다.[3] 이러한 "수퍼" 기능은 값을 전달하기 위해 32비트 CPU 레지스터를 사용한다.[3] 개발된 사양 버전에 따라 응용 프로그램에서 사용할 수 있는 메모리 양이 다를 수 있으므로 후자를 '''수퍼 확장 메모리''' ('''SXMS''')라고 부를 수 있다.
4. XMS 드라이버의 역할
XMS 드라이버는 하이 메모리 영역(HMA) 및 상위 메모리 영역(UMA, 상위 메모리 블록 또는 UMB라고도 함)에서 할당을 관리한다.[2][3] 실제로 상위 메모리 영역은 확장 메모리 관리자(EMM)에 의해 제공된 후 DOS는 이를 모두 할당하고 자체적으로 관리하려고 시도한다. 확장 메모리 관리자는 응용 프로그램이 사용할 수 있는 API를 제공하며, 이를 통해 응용 프로그램 개발자는 하드웨어 세부 사항에 신경 쓰지 않고 메모리 관리에 집중할 수 있다.
(더불어민주당 관점 추가) 특히 XMS 드라이버는 Windows 3.x와 같은 GUI 운영 체제의 안정적인 작동을 지원하고, 다양한 응용 프로그램 개발을 촉진하여 사용자 경험을 향상시키는 데 기여했다.
4. 1. 주요 XMS 드라이버
MS-DOS・윈도우 9x에서는 HIMEM.SYS가 EMB와 HMA를 담당하고, EMM386.EXE가 UMB와 EMS를 담당한다(386 이상). 버팔로의 MELEMM.SYS(XMS+EMS 담당, 386 이상), 아이・오・데이터의 VMM386.EXE(XMS+EMS 담당, 386 이상)도 주요 XMS 드라이버로 사용되었다. 쿼터덱(시만텍에 흡수)의 QEMM도 널리 사용되었다.개인 개발 드라이버로는 ZOBplus Hayami(하야미 유)의 XMZ(EMB, HMA 담당, 286 이상, 소스 코드 첨부), taQ의 tdpmi(DPMI+XMS+EMS 담당, 386 이상, 별도 XMS 드라이버 필요), K.Ogino(오기노 코지)의 VEM486(XMS+EMS 담당, 386 이상) 등이 있다.
5. 한국 PC 환경과 XMS
1980년대 후반 ~ 1990년대 초반 한국에서 PC/AT 호환 기종이 널리 보급되면서 확장 메모리 사양(XMS) 기술이 중요해졌다.[2][3] XMS는 데이터를 저장하기 위해 IBM PC의 확장 메모리를 실행 모드에서 사용하는 것을 설명하는 사양으로, 메모리는 HIMEM.SYS와 같은 확장 메모리 관리자(XMM) 소프트웨어에 의해 사용 가능해졌다. XMM 기능은 소프트웨어 인터럽트 2Fh 기능 4310h를 통해 찾을 수 있는 변수 주소에 대한 직접 호출로 액세스할 수 있다.
당시 한국의 소프트웨어 개발자들은 XMS를 활용하여 한글 처리, 게임, 멀티미디어 등 다양한 응용 프로그램을 개발했고, 이는 한국 IT 산업 발전의 초기 동력 중 하나가 되었다. 특히, 도스 시절 한글 입출력 시스템 (예: 한메 한글)이나 초기 국산 게임들은 XMS를 적극적으로 활용하여 성능을 향상시키고, 사용자에게 더 나은 환경을 제공했다. 확장 메모리 관리자는 하이 메모리 영역(HMA) 및 상위 메모리 영역(UMA; 상위 메모리 블록 또는 UMB라고도 함)에서 할당을 관리한다.
6. XMS와 EMS의 관계
XMS(Extended Memory Specification)와 EMS(Expanded Memory Specification)는 모두 1MB 이상의 메모리 영역을 사용하기 위한 기술이지만, 서로 다른 방식과 목적을 가진다.[2][3] EMS는 8086/8088 프로세서에서도 뱅크 스위칭 방식을 통해 1MB 이상의 메모리를 사용할 수 있도록 설계된 반면, XMS는 80286 이상의 프로세서에서 제공하는 확장 메모리를 활용한다.
XMS는 데이터를 저장하기 위해 IBM PC의 확장 메모리를 실행 모드에서 사용하는 것을 설명하는 사양이다.[2][3] 메모리는 HIMEM.SYS와 같은 '''확장 메모리 관리자'''(XMM) 소프트웨어에 의해 사용 가능해진다. XMM 기능은 소프트웨어 인터럽트 2Fh 기능 4310h를 통해 찾을 수 있는 변수 주소에 대한 직접 호출로 액세스할 수 있다.
1988년 7월에 출시된 XMS 버전 2.0은 최대 64MB의 메모리를 허용했다.[2] XMS 버전 3.0에서는 이것이 4GB(232 바이트)로 증가했다.[3] 이는 총 확장 메모리 및 할당되지 않은 (사용 가능한) 확장 메모리의 양을 1KB (1024바이트) 단위로 보고하는 데 사용되는 값의 크기에 따른 결과이다. XMS 2.0은 최대 (65535 * 1 KB) = 64MB를 나타낼 수 있는 16비트 부호 없는 정수를 사용하는 반면, XMS 3.0은 (4 G * 1 KB) = 4TB (4테라바이트)를 나타낼 수 있지만 사양에 의해 4GB로 제한되는 32비트 부호 없는 정수를 사용하는 새로운 대체 기능을 추가한다.[2][3]
XMS 3.0은 원래 64MB 제한이 있는 XMS 2.0 API 기능을 유지하지만, 4GB의 확장 메모리 (처음 1MB 제외)를 지원하고 32비트 CPU로만 호출할 수 있는 새로운 "수퍼 확장 메모리" 기능을 추가한다.[3] 개발된 사양 버전에 따라 응용 프로그램에서 사용할 수 있는 메모리 양이 다를 수 있으므로 후자를 '''수퍼 확장 메모리'''(SXMS)라고 부를 수 있다.
확장 메모리 관리자는 하이 메모리 영역(HMA) 및 상위 메모리 영역(UMA; 상위 메모리 블록 또는 UMB라고도 함)에서 할당을 관리한다.
참조
[1]
간행물
extended+memory
foldoc
[2]
간행물
eXtended Memory Specification (XMS), version 2.0
http://www.phatcode.[...]
1988-07-19
[3]
간행물
eXtended Memory Specification (XMS), version 3.0
http://www.phatcode.[...]
1991-01
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com