หน่วยความจำ จำกัด ในระบบ 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 Exabytes)

ฉันจำได้จาก DOS / Windows 3.11 วันหน่วยความจำ 16 บิตนั้นสามารถแยกออกเป็นส่วน ๆ เพื่อให้เครื่อง 16 บิตสามารถเข้าถึงหน่วยความจำได้มากกว่า 64 กิโลไบท์

ฉันมีเครื่องที่มีหน่วยความจำ 16GB และกำลังบูตระบบปฏิบัติการ 32 บิตและระบบปฏิบัติการ 64 บิต ฉันสามารถเข้าถึง 16GB ทั้งหมดจาก 64 บิต แต่เพียง 3.21GB ใน 32 บิต

ดังนั้นคำถามของฉันคือถ้าระบบปฏิบัติการ 16 บิตอนุญาตให้เข้าถึงหน่วยความจำ 64KB ได้มากกว่าเนื่องจากการแบ่งเซ็กเมนต์หน่วยความจำทำไมเครื่อง 32 บิตไม่ทำตามราคาอันเดียวกัน?

คำตอบ:


15

พวกเขาทำระบบที่เรียกว่าส่วนขยายที่อยู่ทางกายภาพ (PAE) นี่คือรายการของwindows OS'esและหน่วยความจำสูงสุดของพวกเขาระบบ 32 บิตใด ๆ ที่อนุญาตให้ RAM มากกว่า 4GB กำลังใช้ PAE เพื่อเข้าถึงหน่วยความจำ (ตัวอย่างเช่น Windows 2003 R2 Datacenter 32 บิตอนุญาตให้ใช้ RAM 128GB)


ในความเป็นจริง Windows 8 ต้องใช้ CPU ที่มีความสามารถใน PAE มันต้องการขั้นต่ำ


หากต้องการตอบคำถาม "ไม่ได้รับการถาม" เกี่ยวกับสาเหตุที่ระบบปฏิบัติการ 32 บิตของคุณไม่สามารถเข้าถึงหน่วยความจำได้หากมีอยู่: สิทธิ์ใช้งาน พวกเขาเลือกที่จะไม่อนุญาตให้ RAM สูงกว่า 4GB สำหรับระบบปฏิบัติการ 32 บิตเว้นแต่ว่าคุณจะจ่ายค่าศูนย์ข้อมูล (นั่นคือเหตุผลที่พวกเขาขายรุ่นศูนย์ข้อมูลหากคุณต้องการหน่วยความจำจำนวนมากคุณอาจจ่ายได้มากขึ้น เงินบนระบบปฏิบัติการ)


อาฉันเคยได้ยินเรื่อง PAE มาก่อน แต่ไม่เคยตรวจสอบเลย ดูเหมือนว่าส่วนใหญ่จะใช้ในสถาปัตยกรรมเซิร์ฟเวอร์ดังนั้นจึงดูเหมือนจะไม่ใช้กับการติดตั้ง Windows 7 32 บิตเนื่องจากรายการระบุว่า W7x86 อนุญาตได้สูงสุด 4GB เท่านั้น
Matthew Layton

1
@ 0xC0000022L เป็นธรรมฉันเพิ่มส่วนใบอนุญาตเป็นแก้ไขหลังจากความคิดเห็นของเขา แต่เนื่องจากหน้าต่างแก้ไข 4 นาทีดูเหมือนว่าฉันโพสต์ไว้ก่อนที่เขาจะแสดงความคิดเห็น
Scott Chamberlain

1
PAE ต้องการ switcheroo ของตารางหน้าให้ทำงานและมีค่าใช้จ่ายสูงในแง่ของประสิทธิภาพ
vonbrand

3
นั่นเป็นตำนาน ค่าใช้จ่ายเนื่องจาก PAE นั้นเล็กมาก และถ้าคุณไม่ชอบ PAE คุณควรเกลียด x64 เพราะโครงสร้างตารางหน้าใน x64 ดูเหมือนว่า PAE เพียงแค่เพิ่มระดับตารางอื่นที่ด้านบนและบิตเพิ่มเติมสำหรับ PFN ใน PxE
เจมี่ Hanrahan

1
PAE ไม่ได้ "ลบออกใน Windows 7 เพราะไม่จำเป็นต้องใช้อีกต่อไป" แต่ยังคงปรากฏอยู่ใน Windows 7 x86 - เป็นค่าเริ่มต้นแทนที่จะต้องเป็นตัวเลือก
Jamie Hanrahan

13

แทนที่จะอธิบายด้วยตัวเองฉันจะให้คนที่ต้องรักษาเคอร์เนลด้วยการสนับสนุน PAE พูดด้วยวิธีที่มีเสน่ห์ของเขา Linus Torvalds

โปรดทราบว่าการรองรับ PAE ใน Windows 32 บิตมาพร้อมกับเงินสดจำนวนมาก XP จะไม่สามารถใช้ RAM 4GB เต็มรูปแบบได้ตามปกติเพราะ MS เลือกที่จะไม่เปิดใช้งานฟีเจอร์ PAE เคอร์เนลที่เกี่ยวข้องอย่างใกล้ชิด Windows 2003 Server รองรับ PAE อย่างไรก็ตามถึงแม้จะมี "Standard edition" ของคุณจะรองรับได้ถึง 4 GiB (แต่ทำงานรอบ ๆ หลุมหน่วยความจำ BIOS) ในขณะที่รุ่นที่มีราคาแพงกว่านั้นจะอนุญาตให้ใช้ RAM ได้ถึง 64 GiB เดียวกันถือสำหรับ32 bit Vista

อย่างไรก็ตามข้อ จำกัด นี้กำหนดโดย Windows ในบางกรณี ถ้าเป็นเช่นนั้นการบูทเคอร์เนลที่เปิดใช้งาน PAE จะยังคงช่วยให้คุณใช้ 4GB แบบเต็ม (หรือมากกว่า) ผู้ผลิตฮาร์ดแวร์บางรายเลือกที่จะกำหนดข้อ จำกัด นี้ที่ระดับ BIOS แม้ว่า CPU และชิปเซ็ตจะสามารถจัดการ PAE ได้


เพียงแค่ด้านข้างหมายเหตุ: ไม่มีการใช้ x86 ประมวลผล 64bit ปัจจุบันยังสามารถอยู่เต็มรูปแบบของพื้นที่ที่อยู่ 64 บิตร่างกาย (สำหรับการอ้างอิงดูคำถามนี้และคำตอบ)


อืมทำไมฉันถึงได้รับความประทับใจที่ไลนัสเกลียด HIGHMEM.SYS และ PAE จริงๆ : P
Karan

2
ฉันเข้าใจว่า PAE จะเป็นสิ่งที่สร้างความรำคาญให้กับรหัสใด ๆ ที่ต้องการชุดการทำงานมากกว่าสองกิ๊กและสำหรับรหัสระดับระบบที่ต้องการจัดการหลาย ๆ งานเป็น 2 กิ๊กหรือมากกว่านั้นยกเว้นว่าแอปพลิเคชันเดียวต้องการมากกว่า 2 gigs ฉันคาดหวังว่า PAE จะโปร่งใส นอกจากนี้ฉันคิดว่า PAE จะดีกว่าการใช้ตัวชี้แบบ 64 บิตทั่วโลกในกรณีที่จำเป็นต้องใช้ RAM ทั่วไป 3 กิ๊กบวกกับแคชดิสก์ขนาดใหญ่หรือไดรฟ์เก็บข้อมูลชั่วคราว
supercat

ความคิดเห็นของ Linus แปลกมาก ไม่มีความสัมพันธ์ระหว่างวิธีการทำงานของ himem.sys กับวิธีการทำงานของ PAE มันสนุกมากที่เห็นผู้คนทะเลาะกับ x64 และต่อต้านการจ่าหน้า PAE ... เมื่อ x64 โหมดยาวใช้โครงร่าง PAE และเพิ่มตารางเพจอีกระดับหนึ่ง!
เจมี่ Hanrahan

@JamieHanrahan: ... อย่างน้อยสองระบบใหม่ (เนื่องจากการจำลองเสมือน) ซึ่งเปิดโอกาสที่น่าตื่นเต้น การเปรียบเทียบ (Linus ') ของเขาไม่ถูกต้อง แต่ถ้าเป็นแนวคิดต่างประเทศอุปมาอุปมัยสามารถช่วยได้ :) ... ฉันเดาว่านั่นเป็นสาเหตุที่เขาเลือกให้เป็นประเด็น
0xC0000022L

2

ซีพียู 8 บิตมักจะมีบัสแอดเดรส 16 บิต (Motorola มีบัสแอดเดรสที่รวมเป็นหนึ่งเดียว RAM และอุปกรณ์ต่อพ่วง I / O ที่ใช้พื้นที่ที่อยู่ร่วมกัน Intel เลือกที่จะแบ่งทั้งสองอย่างในกรณีของ Intel ขีด จำกัด ที่อยู่ IO ของ 8088 และ 8086 นั้นมีขีด จำกัด มากกว่าจาก 8080 & ซีพียู 8085)

Intel 8088 และ 8086 มีบัสแอดเดรสหน่วยความจำ 20 บิต (1MB) ในขณะที่ 68000 ของ Motorola มีบัสแอดเดรส 24 บิต (16 MB) IIRC, [80] 286 กระโดดขึ้นรถบัสที่อยู่ 24 บิต ต่อมาทั้งคู่ขยายไปยังแอดเดรสบัส 32 บิตด้วย [80] 386 และ 68020 ตามลำดับ) ด้วยชิป Pentium บัสแอดเดรสนั้นขยายเป็น 64 บิต (ฉันคิดว่าชิปของ PowerPC ของโมโตโรล่า / ไอบีเอ็มก็ใช้แอดเดรสบัส 64 บิตด้วยเช่นกัน)

หน่วยความจำที่มีอยู่ด้านล่างและสูงสุดที่ CPU สามารถเข้าถึงได้โดยตรงนั้นถูก จำกัด โดยชิปฮาร์ดแวร์ (ชิปเซ็ต) และระบบปฏิบัติการที่รองรับเท่านั้น Bill Gates มีชื่อเสียงในอดีตเนื่องจากระบุว่าไม่มีใครต้องการ RAM มากกว่า 640K ดังนั้น DOS จึงไม่พัฒนาเพื่อเข้าถึง RAM โดยตรง ด้วย HiMem.sys และ EMM386, DOS ถูกขยายเพื่อเข้าถึงหน่วยความจำ "ส่วนบน" มากขึ้นโดยใช้ EMM386 เพื่อเข้าถึง RAM ที่มีอยู่ทั้งหมดโดยตรง HiMem.sys มีความยืดหยุ่นน้อยลงและโดยทั่วไปสามารถใช้ RAM เพิ่มเติมสำหรับการจัดเก็บได้

หน่วยความจำเกินขีด จำกัด นั้นจำเป็นต้องใช้ MMU (หน่วยจัดการหน่วยความจำ) เพื่อแบ่งหน่วยความจำออกเป็นส่วน ๆ และแมปลงในพื้นที่หน่วยความจำที่กำหนดแอดเดรสได้ของ CPU เป็นวิธีที่ CoCo 3, Commodore 128 และคอมพิวเตอร์ 8 บิตอื่น ๆ สามารถเข้าถึง RAM ได้มากกว่า 64K

สิ่งที่ดีกว่าในตอนนี้คือการใช้หน่วยความจำเสมือนเพื่อขยายขีด จำกัด หน่วยความจำฟิสิคัลที่ผ่านมาแม้ว่าจะมีขีด จำกัด ที่กำหนดโดยระบบปฏิบัติการ


1

เพราะไม่มีเหตุผลเชิงปฏิบัติที่จะทำเช่นนั้น การขยายที่อยู่ทางกายภาพทำให้ฟังก์ชันการทำงานเดียวกันและการใช้งานของพวกเขายัง จำกัด มากในหมู่ผู้ใช้ ใน Windows 3.1 วันมีข้อ จำกัด ที่ไม่ได้มีอยู่ในปัจจุบัน


1
นี่ไม่มีข้อมูลเพียงพอที่จะสำรองข้อมูลงบของคุณ Windows 3.1 เป็นระบบปฏิบัติการ 16 บิต ต้องจำไว้ว่าในปี 1992 หน่วยความจำ2MBนั้นมากกว่า $ 300
Ramhound

คุณกำลังแสดงความคิดเห็น 22 กุมภาพันธ์และคำอธิบายของ Scott Chamberlin ค่อนข้างครอบคลุมสิ่งที่ฉันกำลังขับรถ พวกเขาไม่ได้อธิบายว่าทำไมการแบ่งหน้าแบบแบ่งส่วนแบบขยายจึงถูกใช้ใน DOS / Win16 แต่ไม่ใช่ใน Windows รุ่นใหม่กว่า ฉันไม่ได้รวมสิ่งนั้นไว้เพราะจะไม่ส่งผลโดยตรงต่อการตอบคำถามของ OP
OCDtech

มุมมองของฉันที่คำตอบควรยืนอยู่คนเดียว ความคิดเห็นของคุณเพิ่มข้อมูลเพียงพอที่จะแก้ไขปัญหาของฉันกับคำตอบของคุณ
Ramhound

1
@OCDtech: โมเดล 8086 แบ่งส่วนจะช่วยให้ภาษาเชิงวัตถุใช้การอ้างอิงวัตถุ 2 ไบต์เพื่อระบุวัตถุที่อยู่ในขอบเขต 16- ไบต์ แต่ภาษาไม่ได้รับการติดตั้งอย่างดีให้ใช้เซ็กเมนต์ได้อย่างมีประสิทธิภาพ โมเดล 80286 กำหนดค่าใช้จ่ายที่มากขึ้นอย่างมากสำหรับโปรแกรมดังกล่าวและวิธีการขยายใน 80386 จะทำให้โครงการเซ็กเมนต์ต่อวัตถุไม่มีประโยชน์โดยสิ้นเชิง
supercat

0

การ จำกัด หน่วยความจำตามทฤษฎีในเครื่อง 16, 32 และ 64 บิตมีดังนี้ ...

ข้อบกพร่องพื้นฐานที่นี่คือแนวคิดที่ว่า "ความกว้างบิต" ของโปรเซสเซอร์ซึ่งโดยปกติจะเป็นขนาดของการลงทะเบียนที่ใช้งานทั่วไปของเครื่องนั้นจำเป็นต้องเท่ากับความกว้างของที่อยู่ RAM

ใน x86 ที่เปิดใช้งานการเพจ แต่ไม่มี PAE ที่อยู่ที่โปรแกรมและการใช้รหัส OS เรียกว่า "ที่อยู่เชิงเส้น" โดย Intel - เรามักจะเรียกพวกเขาว่า "ที่อยู่เสมือน" พวกมันกว้าง 32 บิต สิ่งนี้อนุญาตให้มีพื้นที่แอดเดรสเสมือน 4 GiB

แต่มันเป็นเรื่องบังเอิญมากกว่าหรือน้อยกว่าเพียงส่วนของรูปแบบของรายการตารางเพจที่ขนาดของที่อยู่ทางกายภาพ (RAM) ก็เป็น 32 บิต

ด้วย PAE หลังคือ 36 บิต (ตอนแรก ... กว้างขึ้นในการใช้งานในภายหลัง) ดังนั้นเพียงเพราะมันเป็นเช่น "เครื่อง 32 บิต" ไม่ได้หมายความว่าที่อยู่หน่วยความจำกายภาพจะถูก จำกัด ไว้ที่ 32 บิต

อุตสาหกรรมที่มีความยาวประวัติศาสตร์ของเครื่องที่มี "width บิต" ไม่ตรงกับขนาดของพวกเขาที่อยู่สูงสุดทางกายภาพ ตัวอย่างเช่นสถาปัตยกรรม VAX กำหนดเครื่อง 32 บิตและที่อยู่เสมือน (ซึ่งเป็นที่อยู่ที่ใช้โดยรหัสเมื่อเปิดใช้การแปลที่อยู่) มีความกว้าง 32 บิตแน่นอน ... แต่ที่อยู่ทางกายภาพของ VAX กว้าง 30 บิตเท่านั้น - และครึ่งหนึ่งของพื้นที่ที่อยู่ทางกายภาพนั้นใช้สำหรับการลงทะเบียนอุปกรณ์ I / O ดังนั้น RAM สูงสุดจึงเป็นเพียง 512 MiB

แม้ว่าจะไม่มีฮาร์ดแวร์การแปลที่อยู่ก็ตามก็ไม่จำเป็นว่าในกรณีที่ "ความกว้างบิต" ของเครื่องจะกำหนดที่อยู่ RAM สูงสุด ตัวอย่าง: ซีรี่ส์ CDC "Upper 3000" เป็นเครื่อง 36 บิต คุณคิดว่าพวกเขาสามารถจัดการกับ RAM 64 GiB ได้หรือไม่? ไม่ยาก! เครื่องจักรเหล่านั้นออกมาในช่วงกลางทศวรรษที่ 60! Heck เราไม่สามารถมีพื้นที่ดิสก์ 64 GB ในสมัยนั้น (ชุด CDC 6000 เป็นเครื่องจักรขนาด 60 บิตฉันต้องการไปต่อหรือไม่?)


และอย่าลืมระบบที่ไม่ใช้ 8-bits ต่อ RAM-cell (EG: 16/16 = สูงสุด 128K, 32/32 = 16G สูงสุด, 32/64 = 32G สูงสุด)
SkyCharger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.