고위 메모리 영역
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
고위 메모리 영역은 인텔 8086/8088 프로세서의 세그먼테이션 구조 한계를 극복하고, 20비트 주소 버스의 한계를 넘어 메모리 접근을 확장하기 위한 기술이다. 80286 이후 프로세서에서 21번째 주소선(A20) 활성화를 통해 1MB를 초과하는 영역에 접근 가능하게 되었으며, FFFF:0010 ~ FFFF:FFFF 영역(64KB - 16바이트)을 리얼 모드에서 사용할 수 있게 되었다. 이 기술은 운영체제에서 활용되었으며, 특히 Windows/286 2.1, DR-DOS 5.0, MS-DOS 등에서 HMA 공간을 활용하여 메모리 사용 효율을 높였다.
더 읽어볼만한 페이지
- x86 메모리 관리 - X86 메모리 분할
x86 메모리 분할은 초기 x86 프로세서의 1MB 메모리 한계를 극복하기 위해 도입된 기술로, 세그먼트 레지스터와 오프셋을 사용하여 물리 주소를 계산하는 방식으로 메모리를 관리하며, 보호 모드와 페이징 기법으로 발전하여 메모리 보호 및 가상 메모리 관리의 기반이 되었으나, 현대에는 플랫 메모리 모델로 인해 역할이 축소되었다. - 기억 장치 - EPROM
EPROM은 자외선을 사용하여 내용을 지울 수 있는 읽기 전용 메모리이며, MOSFET의 부유 게이트를 사용하여 데이터를 저장하고, 펌웨어 업데이트가 용이하여 소량 생산에 사용되었으나 EEPROM과 플래시 메모리에 의해 대체되었다. - 기억 장치 - 정적 램
정적 램(SRAM)은 전원이 공급되는 동안 데이터를 저장하며, 갱신 회로가 필요 없고 빠른 접근 속도를 가지는 휘발성 메모리 유형이다.
고위 메모리 영역 | |
---|---|
개요 | |
명칭 | 고위 메모리 영역 |
영어 명칭 | High Memory Area (HMA) |
약자 | HMA |
유형 | 메모리 관리 |
크기 | 64KB (65520 바이트) |
위치 | 1MB에서 64KB 모자란 주소 (0x00100000 - 16 바이트) |
사용 조건 | 80286 이상 프로세서, 실제 주소 모드가 아닌 경우 |
상세 정보 | |
설명 | DOS 운영 체제에서 1MB 이상의 메모리를 활용하기 위해 사용하는 기술적인 해결 방법임. |
목적 | DOS 프로그램이 640KB 기본 메모리 제한을 넘어 더 많은 메모리를 사용할 수 있도록 함. |
사용 방식 | A20 라인을 활성화하여 1MB + 64KB 영역에 접근. |
장점 | DOS 프로그램의 사용 가능한 메모리 공간 확대. 시스템 성능 향상 (일부 프로그램의 경우). |
단점 | 모든 프로그램이 고위 메모리 영역을 지원하지 않음. 메모리 관리 충돌 가능성 존재. |
관련 기술 | XMS (Extended Memory Specification) UMB (Upper Memory Block) |
역사적 맥락 | |
배경 | IBM PC 아키텍처의 메모리 제한 (640KB 기본 메모리). DOS 운영 체제의 제약. |
발전 | 80286 프로세서의 등장과 함께 1MB 이상의 메모리 주소 지정 가능. 고위 메모리 영역을 활용한 메모리 관리 기술 개발. |
기술적 세부 사항 | |
A20 라인 | 20번째 주소 라인 (A20)을 사용하여 1MB 이상의 메모리에 접근. IBM PC/AT에서 키보드 컨트롤러를 통해 A20 라인 활성화/비활성화 제어. |
래퍼 | 고위 메모리 영역을 관리하고 DOS 프로그램에 제공하는 소프트웨어 (예: HIMEM.SYS). |
메모리 맵 | 0xA0000 ~ 0xFFFFF 주소 영역 (UMB와 함께 사용 가능). |
2. 인텔 8086/8088 세그먼테이션 구조와 한계
인텔 8086/8088 프로세서의 세그먼테이션 구조는 16비트 레지스터의 한계를 극복하기 위한 메모리 관리 기법이었다. 16비트 세그먼트와 16비트 오프셋을 조합한 '''세그먼트:오프셋''' 표기법으로, 최대 1 MiB 영역까지 주소 지정 범위를 확장했다.
2. 1. 세그먼트:오프셋 주소 지정 방식
인텔의 8086/8088 프로세서에서 선보인 세그멘테이션 구조는, 16비트 레지스터로는 최대 65,535 바이트 (216 바이트, 64 KiB) 밖에 접근할 수 없었던 한계를 극복하기 위한 메모리 관리 기법이다. 16비트의 세그먼트와 16비트의 오프셋을 조합한 '''세그먼트:오프셋''' 표기법을 사용하여 최대 1,048,576 바이트(220 바이트, 1 MiB) 영역까지 확장하였다. 이렇게 표현된 논리 주소는 '''(세그먼트) x 16 + (오프셋)'''의 식으로 계산되어 메모리의 특정 물리 주소에 접근할 수 있다.본래 세그먼트 주소 지정 방식은 8086에서 16비트 레지스터 두 개와 20비트의 주소선을 가지고 1MiB 이내의 메모리 영역(FFFF:000F, 0xFFFFF, 1,048,575)에 접근하기 위해 설계되었다. 그러나 8086은 20비트의 주소선만 가지고 있었기 때문에 20비트를 초과하는 영역에 대해서는 상위 비트가 버려졌다. 세그먼트:오프셋 표현으로는 FFFF:FFFF가 표현할 수 있는 한계였지만, 실제로 8086에서 접근 가능한 한계는 FFFF:000F였다.
FFFF:000F를 초과하는 FFFF:0010를 예로 들면 다음과 같이 물리 주소가 계산된다.
0xFFFF0 -- 세그먼트는 왼쪽으로 한번 이동(shift)한다. (이는 0x4를 곱한 것과 같다.)
+ 0x0010 -- 오프셋
- --------
0x100000 (혹은 십진수 1,048,576)
이때 계산된 0x100000에서, 20비트를 넘어가는 최상위 비트인 1을 빼면 0x0, 즉 0000:0000과 같게 된다.
8086 (혹은 A20 주소선이 비활성화된 리얼 모드의 80x86 시스템에서) 세그먼트:오프셋 주소 지정 방식으로 20비트의 절대 주소를 넘어갈 경우, 이 한계를 넘는 번지는 처음으로 되돌아간다. 이를 '''wrap around'''라고 한다.
2. 2. 20비트 주소 버스의 한계
8086은 16비트 레지스터 두 개와 20비트 주소선을 가지고 1 MiB 이내의 메모리 영역(FFFF:000F, 0xFFFFF, 1,048,575)에 접근하기 위해 세그먼트 주소 지정방식을 설계했다. 그런데 8086은 20비트 주소선만 가지고 있었기 때문에 20비트를 초과하는 영역에 대해서는 상위 비트가 버려졌다. 이 때문에 세그먼트:오프셋 표현으로는 FFFF:FFFF가 표현할 수 있는 한계였지만, 실제로 8086에서 접근 가능한 한계는 FFFF:000F였다.FFFF:000F를 초과하는 FFFF:0010을 예로 들면 다음과 같이 물리 주소가 계산된다.
0xFFFF0 -- 세그먼트는 왼쪽으로 한번 이동(shift)한다. (이는 0x4를 곱한 것과 같다.)
+ 0x0010 -- 오프셋
- --------
0x100000 (혹은 십진수 1,048,576)
이때 계산된 0x100000에서 20비트를 넘어가는 최상위 비트인 1을 빼면 0x0, 즉 0000:0000과 같게 된다.
8086 (혹은 A20 주소선이 비활성화된 리얼 모드의 80x86 시스템에서) 세그먼트:오프셋 주소지정 방식으로 20비트의 절대 주소를 넘어갈 경우, 이 한계를 넘는 번지는 처음으로 되돌아간다. (이를 '''wrap around'''라고 한다)
3. 80x86 이후 프로세서의 고위 메모리 영역 접근
80286 프로세서는 24개의 주소선을 사용하여 1MiB를 초과하는 메모리 영역에 접근할 수 있게 되었다. 이후 출시된 인텔 호환 프로세서들도 이 방식을 따랐으며, 8086에서 사용되지 않던 FFFF:0010 ~ FFFF:FFFF 영역 (64KiB - 16바이트)을 리얼 모드에서 사용할 수 있게 되었다. 이는 IBM_PC/AT 이후 기종에서 24개의 주소 버스가 제공되면서 가능해진 것이다. 기존 8086 프로그램과의 호환성을 위해 A20 주소선을 통해 20비트 주소선 모드와 전환하며 사용되었다.
3. 1. A20 게이트의 도입
IBM_PC/AT 시스템에 장착된 80286 프로세서는 24개의 주소선을 가지고 있어, 21번째 주소선(A20)을 활성화하여 1 MiB를 초과하는 영역( FFFF:0010, 0x100000, 1,048,576 )에 대해서도 주소 지정이 가능했다.[1]이후 출시된 인텔 호환 프로세서들은 이러한 방식으로 20비트 이상의 메모리 영역을 지정할 수 있게 되면서, 8086에서 버려졌던 FFFF:0010 이후부터 FFFF:FFFF 까지의 영역을 리얼 모드에서 사용할 수 있게 되었다.[1] A20 주소선을 활성화하지 않더라도 FFFF:000F 까지는 접근이 가능했기 때문에, 고위 메모리 영역에서 16비트가 빠진다.[1] 따라서 FFFF:0010 ~ FFFF:FFFF 까지의 크기는 ( 64 KiB - 16 바이트 )가 된다.[1]
이는 CPU뿐만 아니라 메인보드의 주소 버스 크기와도 관련이 있었기 때문에, 24개의 주소 버스가 제공되는 AT 이후 기종에서 제대로 동작했다.[1] 기존 8086에서 동작하던 프로그램과의 하위 호환성을 위해 20비트 주소선도 사용할 필요가 있었는데, 21번째 주소선인 A20 주소선을 통해 모드를 변환했다.[1]
A20 주소선을 제어하기 위해 A20 게이트 회로가 존재했는데, 초기에는 키보드 컨트롤러에서 사용되지 않는 핀을 활용하여 A20 주소선을 제어하도록 하였다.[1] A20 핸들러라고 불리는 컨트롤러가 주소 지정 모드를 동적으로 바꿀 수 있었는데, 이를 통해 리얼 모드에서도 프로그램이 고위 메모리 영역에서 실행될 수 있었다.[1]
3. 2. 고위 메모리 영역 (HMA)
이후 출시된 80286 프로세서는 24개의 주소선을 가지고 있었는데, 24개의 주소 버스가 제공되는 IBM_PC/AT 시스템에 장착될 경우, 21번째 주소선(A20)을 활성화하여 1MiB를 초과하는 영역( FFFF:0010, 0x100000, 1,048,576 )에 대해서도 주소 지정이 가능하게 되었다.[1]이후 출시된 인텔 호환 프로세서들은 이런 방식으로 20비트 이상의 메모리 영역을 지정할 수 있게 되면서, 8086에서 버려졌던 FFFF:0010 이후부터 FFFF:FFFF 까지의 영역을 리얼모드에서 사용할 수 있게 되었다.[1] 굳이 A20 주소선을 활성화시키지 않더라도 이미 FFFF:000F 까지는 접근이 가능했기 때문에, 고위 메모리 영역에서 사용 가능한 공간은 16비트가 빠진다.[1]
따라서 FFFF:0010 ~ FFFF:FFFF 까지의 크기는 '''( 64 KiB - 16 바이트 )''' 가 된다.[1]
이는 CPU 뿐만 아니라 메인보드의 주소 버스 크기와도 상관이 있었기 때문에, 24개의 주소 버스가 제공되는 AT 이후 기종에서 제대로 동작했다.[1] 기존 8086에서 동작하던 프로그램의 하위 호환성을 위해 20비트 주소선도 사용할 필요가 있었는데, 21번째 주소선인 A20 주소선을 통해 모드를 변환했다.[1]
A20 주소선을 제어하기 위해 A20 게이트 회로가 존재했는데, 초기에는 키보드 컨트롤러에서 사용되지 않는 핀을 활용하여 A20 주소선을 제어하도록 하였다.[1] A20 핸들러라고 불리는 컨트롤러가 주소 지정 모드를 동적으로 바꿀 수 있었는데, 이를 통해 리얼모드에서 프로그램이 고위 영역 메모리에서 실행될 수 있게 되었다.[1]
4. 적용 및 영향
고위 메모리 영역(HMA)은 도스 시절 기본 메모리(640KB)의 한계를 극복하기 위해 사용된 기술로, 시스템의 메모리 관리 효율성을 높이는 데 기여했다.
4. 1. 운영체제의 활용
이 기법을 처음 차용한 곳은 마이크로소프트의 1988년에 발표된 Windows/286 2.1이었는데, HIMEM.SYS 장치 드라이버가 소개되었다.[1]1990년 발표된 DR-DOS 5.0과 1991년 발표된 MS-DOS도 운영 체제의 일부를 HMA 공간에 올릴 수 있어 기본 메모리(혹은 상용 메모리라고 불림)에서 46KiB 정도를 절약할 수 있었다.[1] 장치 드라이버나 TSR 같은 다른 요소들은 상위 메모리에 불러올 수 있었다.[1]
4. 2. 소프트웨어 개발에 미친 영향
이 기법을 처음 사용한 것은 마이크로소프트가 1988년에 발표한 Windows/286 2.1이었는데, HIMEM.SYS 장치 드라이버가 소개되었다.[1]1990년에 발표된 DR-DOS 5.0과 1991년에 발표된 MS-DOS도 운영 체제의 일부를 HMA 공간에 올려 기본 메모리(상용 메모리)에서 46KiB 정도를 절약할 수 있었다. 장치 드라이버나 TSR 같은 다른 요소들은 상위 메모리에 불러올 수 있었다.
4. 3. 하드웨어 호환성 문제
이 기법은 마이크로소프트가 1988년에 발표한 Windows/286 2.1에서 처음 사용되었으며, HIMEM.SYS 장치 드라이버가 소개되었다.1990년에 발표된 DR-DOS 5.0과 1991년에 발표된 MS-DOS도 운영 체제의 일부를 HMA 공간에 올려 기본 메모리(상용 메모리)에서 46KiB 정도를 절약할 수 있었다. 장치 드라이버나 TSR 같은 다른 요소들은 상위 메모리에 불러올 수 있었다.[1]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com