DOS 메모리 관리
DOS memory management이 글은 검증을 위해 인용구가 추가로 필요하다. – · · 책 · · (2011년 3월) (이 를 |
IBM PC 호환 컴퓨팅에서 DOS 메모리 관리는 애플리케이션에게 "기존 메모리"의 640 키비바이트(640*1024바이트) 이상(kiB)에 대한 액세스를 제공하기 위해 채택된 소프트웨어와 기법을 말한다.640 KiB 한계는 IBM PC와 가까운 호환성에 한정되었다. 예를 들어, MS-DOS를 실행하는 다른 기계들은 다른 한계를 가지고 있었다. 예를 들어, 살구 PC는 최대 768 KiB와 시리우스 Victor 9000, 896 KiB를 가질 수 있었다.IBM 제품군의 메모리 관리는 컴퓨터 사용자가 대량의 저비용 메모리와 신세대 프로세서를 활용할 수 있도록 하는 한편, 원래의 PC 설계와[1] 리얼 모드 DOS와의 역호환성을 유지할 필요성에 의해 복잡하게 만들어졌다.DOS는 IBM PC의 원래 임의의 640 KiB 제한에 의해 제한되지 않는 Microsoft Windows 및 기타 32비트 운영 체제에 자리를 내주었기 때문에, 개인용 컴퓨터의 메모리를 관리하는 것은 더 이상 사용자가 시스템의 내부 설정과 파라미터를 수동으로 조작할 필요가 없다.
640 KiB 한계는 그것을 회피하기 위해 의도된 하드웨어와 소프트웨어에 큰 복잡성을 부과했다; 기계의 물리적 메모리는 기본 메모리 또는 재래식 메모리(하위 메모리 포함), 상위 메모리, 하이 메모리(상위 메모리와 동일하지 않음), 확장 메모리 및 확장 메모리의 조합으로 조직될 수 있었다.
재래식 메모리
원본 IBM PC에 사용된 Intel 8088 프로세서는 20개의 주소 라인을 가지고 있어 1 MiB(2바이트20)의 메모리를 직접 처리할 수 있었다.이 주소 공간의 다른 영역은 다른 목적에 사용되는 다른 종류의 메모리에 할당되었다.PC에는 주소 공간의 가장 낮은 끝에서 시작하여 DOS와 응용 프로그램이 사용하는 읽기/쓰기 RAM(Random Access Memory)이 설치되었다.이 메모리의 첫 부분은 시스템의 마더보드에 설치되었다(초기 기계에서는 64 KiB, 후에 256 KiB로 수정).확장 슬롯에 카드를 꽂으면 추가 메모리를 추가할 수 있다. 각 카드에는 해당 카드의 메모리와 장치에 접근하는 주소 공간의 일부를 제어하는 스트랩 또는 스위치가 포함되어 있다.
IBM PC에서는 최대 640KiB의 주소 공간을 모두 RAM에 사용할 수 있었다.시작 시 DOS의 모든 버전에서 자동으로 액세스할 수 있기 때문에 주소 공간의 이 부분을 "기존 메모리"라고 부른다.기존 메모리의 첫 64KB인 세그먼트 0은 메모리 부족 영역이라고도 불린다.일반적으로 확장 메모리는 마더보드의 메모리가 있는 주소 공간에서 연속적으로 설정된다.마더보드 메모리와 확장 메모리 사이에 할당되지 않은 간극이 있다면, 메모리는 DOS에서 사용할 수 있는 것으로 자동 감지되지 않을 것이다.
상위 메모리 영역
상위 메모리 영역(UMA)은 640KiB에서 1024KiB(0xA0000-0x) 사이의 주소 공간을 가리킨다.FFFFF). 0xA0000 ~ 0xBFF 사이의 128KiB 영역FF는 VGA 화면 메모리와 레거시 SMM용으로 예약되었으며, 0xC0000 ~ 0xDFFFF 사이의 128KiB 영역은 Video BIOS를 포함한 장치 옵션 ROM용으로 예약되었다.0xE0000 ~ 0xEFF 주소 공간의 64KiBFF는 BIOS나 옵션 ROM을 위해 예약되었다.IBM PC는 BIOS 및 Cassette BASIC 읽기 전용 메모리(ROM)를 위해 0xF0000 ~ 0xFFFF까지 주소 공간 중 맨 위 64KiB를 예약했다.[2]
예를 들어, 단색 비디오 어댑터 메모리 영역은 704에서 736KiB(0xB0000–0xB7)까지 실행되었다.FFF). 단색 디스플레이 어댑터만 사용한 경우 주소 공간은 0xA0000 ~ 0xAFF기존 메모리와 연속되는 RAM에 FF를 사용할 수 있다.[3]
CPU 시작 주소는 프로세서의 설계에 의해 고정되기 때문에 시스템 BIOS ROM은 주소 공간의 상단 끝에 있어야 한다.시작 주소는 하드웨어 재설정 후 CPU의 프로그램 카운터에 로드되며, 시스템에 전원이 차단된 후 지속되는 정의된 값을 가져야 한다.재설정 또는 전원을 켤 때 CPU는 시스템 ROM에서 주소를 로드한 다음 정의된 ROM 위치로 이동하여 시스템 전원 켜기 자가 테스트 실행을 시작하고 결국 운영 체제를 로드한다.
비디오 어댑터, 하드 드라이브 컨트롤러 또는 네트워크 어댑터와 같은 확장 카드는 많은 상위 메모리 영역에서 메모리 할당을 사용할 수 있기 때문에, 카드 조합의 구성은 카드 설정과 효과가 있는 메모리 매핑을 찾기 위해 문서화 또는 실험을 주의 깊게 읽어야 했다.동일한 물리적 메모리 주소를 사용하도록 두 장치를 매핑하면 시스템이 정지되거나 불안정해질 수 있다.[3]상위 메모리 영역의 모든 주소가 일반적인 시스템에서 사용된 것은 아니며, 프로세서가 액세스할 경우 사용되지 않은 물리적 주소는 정의되지 않은 데이터 및 시스템 의존적인 데이터를 반환할 것이다.
확장 메모리
메모리 가격이 하락함에 따라, 스프레드시트나 컴퓨터 지원 제도 같은 응용 프로그램이 시스템의 물리적 메모리를 점점 더 많이 이용하기 위해 변경되었다.8088년과 8086년의 가상 메모리는 프로세서 하드웨어에 의해 지원되지 않았으며, 당시의 디스크 기술은 그것을 실용화하기에는 너무 느리고 번거로울 것이다.확장된 메모리는 애플리케이션 프로그램이 프로세서의 주소 공간에 직접 보이는 것보다 더 많은 RAM에 접근할 수 있도록 하는 시스템이었다.그 과정은 일종의 은행 전환이었다.추가 RAM이 필요할 때, 드라이버 소프트웨어는 프로세서가 일시적으로 확장된 메모리 조각에 접근할 수 있게 만들었고, 메모리의 데이터가 업데이트되었을 때, 다른 부분은 프로세서의 주소 공간으로 교환될 수 있었다.IBM PC와 IBM PC/XT의 경우, 주소 라인이 20개 밖에 되지 않는 특수 용도 확장 메모리 카드는 8088 주소 공간의 정의된 부분에서 프로세서가 메모리에 접근할 수 있도록 하기 위해 보드에 로직으로 확장된 메모리의 1메가바이트 또는 그 이상을 포함하고 있다.
확장된 메모리의 할당과 사용은 애플리케이션 프로그램에 투명하지 않았다.애플리케이션은 특정 데이터 조각을 포함하는 확장 메모리 뱅크를 추적해야 했고, 그 데이터에 대한 액세스가 필요할 때 애플리케이션은 프로세서의 주소 공간에 메모리의 해당 부분을 매핑하기 위해 확장 메모리 보드를 요청해야 했다.애플리케이션은 상대적인 자유도로 확장된 메모리를 사용할 수 있지만 드라이버와 TSR과 같은 많은 다른 소프트웨어 구성요소는 여전히 일반적으로 640K "기존 메모리" 영역 내에 상주하도록 제한되었고, 이 영역은 곧 매우 부족한 자원이 되었다.
80286과 높은 메모리 영역
IBM PC/AT가 도입되었을 때, Intel 제품군 프로세서의 분할된 메모리 아키텍처는 "실제" 모드에서 1MiB 이상의 메모리가 처리되도록 허용하는 부산물을 가지고 있었다.80286은 20개 이상의 주소선을 가지고 있었기 때문에, 세그먼트와 오프셋의 특정 조합은 0x010000020(2) 위치 위의 메모리를 가리킬 수 있다.80286은 시스템 메모리의 16MiB까지 주소를 지정할 수 있으므로 메모리 주소가 "뒤집고 다니는" 동작을 제거할 수 있다.필요한 주소 라인이 이제 존재했기 때문에 F800:8000 조합은 더 이상 물리적 주소 0x0000000이 아니라 올바른 주소 0x00100000을 가리킬 것이다.
결과적으로, 일부 DOS 프로그램은 더 이상 작동하지 않을 것이다.AT는 PC 및 XT 동작과의 호환성을 유지하기 위해 8088 프로세서에서처럼 AT 랩에 메모리 주소를 저장하는 A20 라인 게이트(Gate A20)를 포함했다.이 게이트는 처음에 키보드 컨트롤러를 통해 제어되어 이를 위해 설계된 실행 프로그램이 추가적으로 65,520바이트(실제 모드의 메모리 64KiB)에 액세스할 수 있도록 설계되었다.부팅 시 BIOS는 시스템 메모리를 모두 계산하고 테스트할 때 A20을 먼저 활성화하고, 이를 비활성화한 후 운영체제로 제어권을 이전한다.A20 라인을 활성화하는 것은 부팅 프로세스에서 종종 제어권이 부트스트랩에서 커널로 전달되기 전에(예: Linux의 경우) 보호 모드 x86 운영 체제가 수행하는 첫 번째 단계 중 하나이다.
HMA(High Memory Area, High Memory Area)는 IBM PC/AT 또는 호환 가능한 마이크로 컴퓨터의 확장 메모리의 처음 64 KiB에서 16바이트를 뺀 RAM 영역이다.
원래 논리 게이트는 인텔 8042 키보드 컨트롤러에 연결된 게이트였다.그것을 제어하는 것은 비교적 느린 과정이었다.그 후, 시스템 메모리에 모두 접속하는 프로그램과 이러한 마무리가 필요한 프로그램의 보다 효율적인 멀티태스킹이 가능하도록 다른 방법이 추가되었다.처음에는 다양한 방법이 있었지만, 결국 업계는 포트 92h에서 비트(bit)를 사용해 A20 라인을 제어하는 PS/2 방식에 안착했다.
A20의 연결을 해제하면 1MiB, 3MiB, 5MiB 등의 범위에 있는 메모리 액세스만 1MiB를 초과하는 모든 메모리 액세스가 래핑되지 않는다.리얼 모드 소프트웨어는 1MiB보다 약간 높은 부분만 신경 썼기 때문에 게이트 A20이면 충분했다.
Intel 80386과 함께 도입된 가상 8086 모드는 프로세서의 가상 메모리 설비를 사용하여 A20 랩어라운드를 시뮬레이션할 수 있다. 물리적 메모리는 여러 가상 주소에 매핑될 수 있으므로 가상 메모리의 첫 번째 메가바이트에서 매핑된 메모리는 가상 메모리의 두 번째 메가바이트에서 다시 매핑될 수 있다.운영체제는 Gate A20의 변경을 가로채고 가상 메모리 주소 공간에 상응하는 변경을 할 수 있으며, Gate-A20 토글링의 효율성과도 무관하다.
마이크로소프트 제품 중 HMA의 첫 번째 사용자는 1987년 HIMEM을 도입한 윈도 2.0이었다.SYS 장치 드라이버.DR-DOS(1990) 버전 5.0과 MS-DOS(1991) 버전에서 시작하여 운영 체제의 일부를 HMA에도 로드하여 최대 46KiB의 기존 메모리를 확보할 수 있다.장치 드라이버와 TSR과 같은 다른 구성요소는 상위 메모리 영역(UMA)에 로드될 수 있다.
A20 핸들러
A20 핸들러는 높은 메모리 영역에 대한 액세스를 제어하는 소프트웨어다.확장 메모리 관리자는 일반적으로 이 기능을 제공한다.DOS에서는 HIMEM과 같은 높은 메모리 영역 관리자.SYS는 A20 관리 업무를 추가로 맡았고, A20 개폐 API를 제공했다.DOS 자체는 이 영역을 스토리지 요구의 일부에 활용할 수 있으므로 프로그램에 대한 더 많은 재래식 메모리를 확보할 수 있다.이 기능은 CONFIG의 "DOS=HIGH" 지시어에 의해 활성화되었다.SYS 구성 파일.
이후 프로세서의 A20 게이트
인텔 80486과 펜티엄은 A20M#이라는 특수 핀을 추가했는데, 이는 모든 온칩 캐시나 외부 메모리 액세스에 대해 물리적 주소의 비트 20이 0이라고 주장할 때, 이 핀을 추가했다.이것은 80486이 온칩 캐시를 도입했기 때문에 필요했고, 따라서 이 비트를 외부 논리에서 더 이상 마스킹할 수 없었다.소프트웨어는 여전히 게이트를 조작해야 하며, 그것을 위해 외부 주변장치(칩셋)를 처리해야 한다.[4]
80386 및 후속 프로세서
386 이후 Intel 프로세서는 DOS 애플리케이션을 위한 확장 메모리를 구현하는 데 필요한 하드웨어를 단순화한 가상 8086 모드를 허용했다.쿼터덱의 QEMM 제품과 마이크로소프트의 EMM386과 같은 확장 메모리 관리자는 특별한 메모리 보드에 대한 요구사항 없이 확장 메모리 표준을 지원했다.
386 및 후속 프로세서에서 QEMM과 같은 메모리 관리자는 드라이버 또는 TSR에 대한 코드의 대부분을 확장 메모리로 이동하고 확장 메모리 상주 코드에 액세스할 수 있는 작은 손가락 홀드로 교체할 수 있다.메모리 사용량을 분석해 시동 중 RAM이 더 필요한 드라이버를 검색하고, 시작 후 더 이상 필요하지 않은 메모리를 복구해 재사용할 수 있다.메모리 매핑된 I/O에 일반적으로 사용되는 메모리 영역을 다시 매핑할 수도 있다.이러한 속임수의 많은 부분은 운전자와 다른 구성 요소의 기능에 대한 가정을 포함하고 있었다.실제로 메모리 관리자는 즉시 역엔지니어링하고 다른 벤더의 코드를 수정할 수 있다.예상했겠지만, 그런 속임수가 항상 효과가 있었던 것은 아니다.따라서 메모리 관리자는 구성 가능한 옵션의 매우 정교한 시스템도 통합했으며, 선택한 옵션이 PC를 부팅 불가능한 상태로 만들 경우(빈도 발생) 복구를 위한 프로비저닝도 통합했다.
메모리 관리자를 설치하고 구성하려면 몇 시간 동안 옵션을 사용하여 실험하고, 반복적으로 컴퓨터를 재부팅하고, 결과를 테스트해야 할 수 있다.그러나 기존의 메모리는 매우 귀중한 것이어서 PC 소유자들은 만약 그 결과가 30KiB 또는 40KiB의 기존 메모리 공간을 자유롭게 한다면 그러한 시간이 충분히 소비된다고 느낄 정도였다.
확장 메모리
IBM PC 호환 컴퓨터의 맥락에서 확장 메모리는 8088과 8086의 20개 주소 라인에 의해 부과되는 1메가바이트 제한을 넘어 80286 및 이후 프로세서의 주소 공간에 있는 메모리를 말한다.이러한 메모리는 80286 및 후속 프로세서의 소위 "실제 모드"로 실행되는 DOS 애플리케이션에는 직접 사용할 수 없다.이 메모리는 80286 이상의 보호 모드 또는 가상 모드에서만 액세스할 수 있다.
참고 항목
- 글로벌 EMM 가져오기 규격(GEMMIS)
- VDS(가상 DMA 서비스)
- 가상 제어 프로그램 인터페이스(VCPI)
- XVCPI(Extended Virtual Control Program Interface
- DOS 보호 모드 인터페이스(DPMI)
- DOS 보호 모드 서비스(DPMS)
- 헬릭스 클로킹
참조
- ^ Mueller, Scott (1994). "7". Upgrading and Repairing PCs (4th ed.). Que. ISBN 1-56529-932-9.
- ^ "Memory Map (x86) - OSDev Wiki". wiki.osdev.org. Retrieved 2020-12-20.
- ^ a b Mueller, Scott (1999). "6: Memory". Upgrading and Repairing PCs (11th ed.). Que Corporation. ISBN 0-7897-1903-7.
- ^ Shanley, Tom (1996). Protected mode software architecture. Taylor & Francis. p. 60. ISBN 0-201-55447-X.
외부 링크
- Microsoft 지원:MS-DOS의 메모리 관리 기능 개요
- 컴퓨터 크로니클즈 (1990)."고메모리 관리".인터넷 보관소에서.