16, 32 및 64 비트 시스템의 메모리 제한


17

16, 32 및 64 비트 시스템의 이론적 메모리 한계는 다음과 같습니다.

  • 16 비트 = 65,536 바이트 (64 킬로바이트)

  • 32 비트 = 4,294,967,296 바이트 (4 기가 바이트)

  • 64 비트 = 18,446,744,073,709,551,616 (16 엑사 바이트)

DOS / Windows 3.11 일에서 16 비트 메모리를 세그먼트로 분리하여 16 비트 시스템이 64 킬로바이트보다 많은 양의 메모리에 액세스 할 수 있음을 기억합니다.

16GB의 메모리가있는 시스템이 있고 32 비트 운영 체제와 64 비트 운영 체제를 이중 부팅합니다. 64 비트에서 16GB를 모두 액세스 할 수 있지만 32 비트에서는 3.21GB 만 액세스 할 수 있습니다.

따라서 내 질문은 16 비트 운영 체제가 메모리 세그먼트 화로 인해 64KB 이상의 메모리 액세스를 허용하면 왜 32 비트 시스템이 동일한 주체를 따르지 않습니까?

답변:


15

그럴 경우 시스템을 PAE (실제 주소 확장 )라고 합니다. 다음은 Windows OS 및 최대 메모리 목록입니다. 4GB 이상의 RAM을 허용하는 32 비트 시스템은 PAE를 사용하여 메모리에 액세스합니다 (예 : Windows 2003 R2 Datacenter 32 비트는 128GB 램 허용).


실제로 Windows 8 에는 최소 요구 사항 으로 PAE 가능 CPU가 필요 합니다.


32 비트 OS가 램에 액세스 할 수없는 이유에 대한 "비 분명한"질문을 해결하려면 : Licensing. 그들은 데이터 센터 에디션을 지불하지 않는 한 32 비트 OS에서 RAM이 4GB 이상으로 허용하지 않도록 선택합니다 (따라서 데이터 센터 에디션을 판매하는 이유 는 많은 램 이 필요한 경우 더 많은 비용을 지출 할 수 있음) OS에 돈).


아아 PAE에 대해 들어 본 적이 있지만 조사한 적이 없습니다. 목록은 W7x86이 최대 4GB 만 허용하도록 지정하므로 Windows 7 32 비트 설치에는 적용되지 않는 것 같습니다.
Matthew Layton

1
@ 0xC0000022L 공정하게 말하면 라이센스 부분을 주석 후에 편집으로 추가했지만 4 분의 편집 창으로 인해 주석을 게시하기 전에 게시 한 것처럼 보입니다.
Scott Chamberlain

1
PAE는 페이지 테이블 switcheroo가 작동해야하며, 성능면에서 비용이 많이 듭니다.
vonbrand

3
그것은 신화입니다. PAE로 인한 오버 헤드는 작습니다. 그리고 PAE를 싫어한다면 x64를 싫어해야합니다. x64의 페이지 테이블 구조는 PAE와 비슷하지만 PxE의 PFN에 대한 최상위 비트와 더 많은 비트에 추가 된 또 다른 테이블 레벨이 있기 때문입니다.
Jamie Hanrahan

1
PAE는 여전히 윈도우 7 86에 존재하는, "이 더 이상 필요하지 않기 때문에 Windows 7에서 제거되지"되지 않았습니다 -. 오히려에 선택권을 할 필요없이 기본적으로 그냥 거기 있어요
제이미 한라

13

직접 설명하는 대신 PAE를 지원하는 커널을 유지 관리해야하는 사람이 자신의 매력적인 방식으로 리누스 토발즈에게 말하도록하겠습니다.

또한 Windows 32 비트 버전의 PAE 지원은 많은 현금이 필요합니다. MS는 PAE 기능을 활성화하지 않기 때문에 XP는 전체 4GiB의 RAM을 정상적으로 사용할 수 없습니다. 밀접하게 관련된 커널 인 Windows 2003 Server는 PAE를 지원합니다. 그러나 "Standard edition"조차도 최대 4GiB 만 지원하지만 BIOS 메모리 홀을 중심으로 작동하지만 더 비싼 에디션은 최대 64GiB의 RAM을 허용합니다. 32 비트 Vista에서도 마찬가지 입니다.

그러나 모든 경우 에 Windows가이 제한을 부과하는 것은 아닙니다 . 만약 그렇다면, PAE 가능 Linux 커널로 부팅해도 여전히 완전한 4 GiB (또는 그 이상)를 사용할 수 있습니다. CPU와 칩셋이 PAE를 처리 할 수 ​​있지만 일부 하드웨어 제조업체는 BIOS 수준에서이 제한을 적용하기로 결정했습니다.


참고 사항 : 현재 x86 기반 64 비트 프로세서 중 어느 것도 64 비트 주소 공간의 전체 범위를 물리적으로 처리 할 수 ​​없습니다 ( 이 질문 및 답변 참조 ).


흠, 왜 Linus가 실제로 HIGHMEM.SYS와 PAE를 싫어한다는 인상을 받습니까? : P
Karan

2
PAE는 두 개의 작업 세트 이상의 작업 세트가 필요한 모든 코드와 2 개의 gigs 정도의 여러 작업을 관리 해야하는 시스템 수준의 코드에 대해 성가신 것으로 알고 있지만 단일 응용 프로그램에 2 개 이상이 필요하지 않으면 공연 PAE가 투명 할 것으로 기대합니다. 또한 PAE가 범용 RAM 3GB와 대용량 디스크 캐시 또는 임시 저장 장치 드라이브가 필요한 경우 64 비트 포인터를 전역 적으로 사용하는 것보다 낫습니다.
supercat

Linus의 의견은 이상합니다. himem.sys 작동 방식과 PAE 작동 방식 사이에는 관계가 없습니다. x64 긴 모드가 단순히 PAE 체계를 취하고 한 단계 더 높은 페이지 테이블을 추가 할 때 사람들이 x64와 PAE 주소 지정에 대해 논쟁하는 것을 보는 것은 매우 재미 있습니다!
Jamie Hanrahan

@JamieHanrahan : ... 가상화로 인해 새로운 시스템에서 최소한 두 개 이상이 가능합니다. 그의 (Linus ') 비교는 완전히 옳지는 않지만 외국 개념이라면 은유가 도움이 될 수 있습니다.
0xC0000022L

2

8 비트 CPU에는 보통 16 비트 주소 버스가있었습니다. (Motorola에는 통합 주소 버스가 있었고 RAM과 주변 장치 I / O는 동일한 주소 공간을 공유했으며 인텔은 두 주소를 나누기로 결정했습니다. 인텔의 경우 8088 및 8086의 IO 주소 제한이 8080 및 8085 CPU)

인텔의 8088 및 8086에는 20 비트 메모리 주소 버스 (1MB)가 있고 Motorola의 68000에는 24 비트 주소 버스 (16MB)가있었습니다. IIRC에서 [80] 286은 24 비트 주소 버스로 뛰어 들었다. 둘 다 나중에 [80] 386과 68020을 사용하여 32 비트 주소 버스로 확장되었습니다.) Pentium 칩의 경우 주소 버스가 64 비트로 확장되었습니다. (모토로라 / IBM 벤처 PowerPC 칩도 64 비트 주소 버스를 사용했다고 생각합니다.)

CPU가 직접 액세스 할 수있는 최대 이하의 메모리는 지원 하드웨어 칩 (칩셋) 및 OS에 의해서만 제한되었습니다. 빌 게이츠 (Bill Gates)는 과거에 아무도 640K 이상의 RAM이 필요하지 않다고해서 DOS가 더 이상 RAM에 직접 액세스하도록 진화 한 적이 없었습니다. HiMem.sys 및 EMM386을 통해 DOS는 더 많은 "상위"메모리에 액세스하도록 확장되었으며 EMM386은 사용 가능한 모든 RAM에 직접 액세스하는 데 사용되었습니다. HiMem.sys는 유연성이 떨어지고 기본적으로 추가 RAM을 스토리지에 사용할 수 있습니다.

이 한계를 초과하는 메모리는 메모리를 세그먼트로 나누고 CPU의 주소 지정 가능한 메모리 공간에 매핑하기 위해 MMU (Memory Management Unit)가 필요했습니다. CoCo 3, Commodore 128 및 기타 8 비트 컴퓨터가 64K 이상의 RAM에 액세스 할 수있는 방법입니다.

OS가 부과하는 한계에도 불구하고 가상 메모리를 사용하여 실제 메모리 한계를 넘어 확장하는 것이 더 유리합니다.


1

그렇게 할 실질적인 이유가 없기 때문입니다. 실제 주소 확장은 거의 동일한 기능을 허용하며 사용자의 사용은 여전히 ​​매우 제한적입니다. Windows 3.1 일에는 오늘날에는 존재하지 않는 제약 조건이있었습니다.


1
이것은 실제로 당신의 진술을 백업하기에 충분한 정보가 없습니다. Windows 3.1은 16 비트 운영 체제입니다. 1992 년에 2MB 의 메모리는 300 달러가 넘었다 는 것을 기억해야합니다 .
Ramhound

당신은 2 월 22 일 코멘트이고, Scott Chamberlin의 설명은 내가 운전하고 있었던 것을 거의 다룬다. 확장 가능한 분할 페이지 매김이 DOS / Win16에서 사용되었지만 이후 Windows에서는 사용되지 않은 이유에 대한 설명은 생략합니다. OP의 질문에 직접 대답하는 데 기여하지 않기 때문에 포함하지 않았습니다.
OCDtech

대답은 혼자서야한다는 나의 견해. 귀하의 의견은 귀하의 답변과 관련된 문제를 해결하기에 충분한 정보를 추가합니다.
Ramhound

1
@OCDtech : 8086 세그먼트 모델은 객체 지향 언어가 2 바이트 객체 참조를 사용하여 16 바이트 경계에 정렬 된 객체를 식별 할 수있게하지만 언어는 세그먼트를 효과적으로 사용하기에 적합하지 않았습니다. 80286 모델은 이러한 프로그램에 엄청나게 큰 오버 헤드를 부과하며, 80386에서 확장 된 방식은 객체 별 세그먼트 체계를 완전히 쓸모 없게 만듭니다.
supercat

0

16, 32 및 64 비트 시스템의 이론적 메모리 한계는 다음과 같습니다.

여기서 기본적인 결함은 일반적으로 머신의 범용 레지스터의 크기 인 프로세서의 "비트 폭"이 반드시 RAM 주소의 폭과 동일하다는 개념입니다.

페이징이 활성화되었지만 PAE가없는 x86에서는 프로그램과 OS 코드가 사용하는 주소를 인텔에서 "선형 주소"라고합니다. 일반적으로이를 "가상 주소"라고합니다. 너비는 32 비트입니다. 이를 통해 4GiB 가상 주소 공간이 허용됩니다.

그러나 실제 (RAM) 주소의 크기도 32 비트라는 것은 페이지 테이블 항목 형식의 아티팩트 일뿐입니다.

PAE를 사용하면 후자는 36 비트입니다 (처음에는 나중에 구현할 때 더 넓음). 따라서 예를 들어 "32 비트 시스템"이라고해서 실제 메모리 주소가 32 비트로 제한되는 것은 아닙니다.

업계에서는 "비트 폭"이 최대 물리적 주소 크기와 일치하지 않는 시스템의 오랜 역사를 가지고 있습니다. 예를 들어, VAX 아키텍처는 32 비트 시스템을 정의하며 가상 주소 (주소 변환이 켜진 후 코드에서 사용하는 주소)는 실제로 32 비트입니다. 그러나 VAX의 실제 주소는 30 비트입니다. 물리적 주소 공간의 절반은 I / O 장치 레지스터 전용이며 최대 RAM은 512MiB에 불과합니다.

주소 변환 하드웨어가 없어도 시스템의 "비트 폭"이 최대 RAM 주소를 정의하는 것은 아닙니다. 예 : CDC "3000"시리즈는 36 비트 시스템입니다. 그들이 64GiB의 RAM을 처리 할 수 ​​있다고 생각하십니까? 별로! 그 기계들은 60 년대 중반에 나왔습니다! 그 당시에는 64GB의 디스크 공간 도 확보 할 수 없었습니다 . CDC 6000 시리즈는 60 비트 시스템이었습니다. 계속 진행해야합니까?


그리고 RAM 셀당 8 비트를 사용하지 않는 시스템을 잊지 마십시오. (EG : 16/16 = 128K 맥스 32/32 = 16G 맥스 64분의 32 32G = 최대)
SkyCharger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.