เครื่องระบบปฏิบัติการ 32 บิตสามารถใช้ไฟล์หน้า 8GB + 20GB ได้ทั้งหมดหรือไม่


98

สิ่งที่ฉันเข้าใจเกี่ยวกับระบบปฏิบัติการ 32 บิตคือที่อยู่จะแสดงเป็น 32 บิตดังนั้นส่วนใหญ่ระบบปฏิบัติการสามารถใช้พื้นที่หน่วยความจำ2 32 = 4G - ฉันถือว่าหน่วยเป็นไบต์ดังนั้น 4GB

หมายความว่าหากเครื่องที่มีระบบปฏิบัติการ 32- บิต (ไม่ว่าจะเป็น Windows หรือ Unix) มีไฟล์ RAM + เพจมากกว่า 4GB ทั้งหมดบนฮาร์ดดิสก์เช่น 8GB RAM และไฟล์เพจ 20GB หน่วยความจำจะไม่ถูกใช้จนหมด "?

เมื่อ"ใช้หมด"ฉันหมายถึงการเพิ่ม RAM หรือไฟล์หน้าจะไม่ช่วยประสิทธิภาพ แน่นอนว่าเป็นไปได้เสมอที่แอปพลิเคชันจะขอหน่วยความจำจากระบบปฏิบัติการ แต่ล้มเหลว

ในทำนองเดียวกันถ้าเครื่องระบบปฏิบัติการ 32 บิตนี้มีไฟล์ 2GB RAM และ 2GB หน้าการเพิ่มขนาดไฟล์หน้าจะไม่ช่วยประสิทธิภาพ มันเป็นเรื่องจริงเหรอ?


2
หากคุณมี RAM มากกว่า 4GB และมีระบบปฏิบัติการ 32 บิตคุณสามารถสร้าง RAM Disk ได้ นี่เป็นฮาร์ดไดรฟ์ใน RAM ของคุณและคุณสามารถใช้ RAM ที่ไม่ได้ใช้ / ไม่ได้ใส่เพื่อวางไว้ในนั้น
Simon Verbeke

10
คุณทำไม่ได้ ยังคงต้องสร้าง ramdisk ด้วยระบบปฏิบัติการหากระบบปฏิบัติการไม่สามารถใช้หน่วยความจำได้คุณจะไม่สามารถสร้าง ramdisk ได้เช่นกัน (ยกเว้นว่าประวัติของคุณสามารถสร้าง ramdisk ซึ่งหายาก)
AVee

1
คำตอบสั้น ๆ คือ "ใช่" แม้ว่าโดยทั่วไปกระบวนการจะให้พื้นที่ 32 บิตสำหรับการใช้งาน แต่ OS เองก็สามารถใช้งานได้มากกว่านั้น (ไม่ว่าจะเป็นการสลับโดยธนาคารอย่างที่เราเคยทำในยุค 80 หรือโรงเรียนสอนเทคนิคการต่อเติมที่อยู่เป็น PAE ของ Intel เช่นกัน หนึ่งโปรแกรมในแต่ละครั้งซึ่งอาจประกอบด้วยมากกว่าหนึ่งกระบวนการ (Chrome วางแท็บในกระบวนการที่แตกต่างกัน) และ OS เองจะใช้หน่วยความจำสำหรับสิ่งต่าง ๆ เช่นการแคชข้อมูลจากดิสก์ถาวรภายในเพื่อให้คุณได้รับข้อมูลที่เร็วขึ้นแล้ว ใช้แล้ว
rbanffy

คำตอบ:


145

สิ่งที่ฉันเข้าใจเกี่ยวกับระบบปฏิบัติการ 32 บิตคือที่อยู่จะแสดงเป็น 32 บิตดังนั้นส่วนใหญ่ระบบปฏิบัติการสามารถใช้พื้นที่หน่วยความจำ 2 ^ 32 = 4GB

มากที่สุดว่ากระบวนการสามารถอยู่เป็น 4GB คุณยังอาจทำให้เกิดความสับสนหน่วยความจำที่มีพื้นที่ที่อยู่ กระบวนการสามารถมีหน่วยความจำมากกว่าพื้นที่ที่อยู่ เป็นสิ่งที่ถูกกฎหมายและเป็นเรื่องธรรมดาในการประมวลผลวิดีโอและแอพพลิเคชั่นที่ใช้หน่วยความจำมาก กระบวนการสามารถจัดสรรหน่วยความจำได้หลายสิบ GB และสลับไปมาระหว่างที่อยู่ที่ต้องการ เพียง 2 GB เท่านั้นที่สามารถเข้าไปในพื้นที่ที่อยู่ของผู้ใช้ในแต่ละครั้ง

หากคุณมีโรงจอดรถสี่คันที่บ้านของคุณคุณยังสามารถเป็นเจ้าของรถยนต์ห้าสิบคันได้ คุณไม่สามารถเก็บทุกอย่างไว้ในโรงรถของคุณ คุณต้องมีที่เก็บข้อมูลสำรองไว้ที่อื่นเพื่อจัดเก็บอย่างน้อย 46 แห่ง รถคันไหนที่คุณเก็บไว้ในโรงรถของคุณและรถคันไหนที่คุณเก็บไว้ในลานจอดรถตามถนนขึ้นอยู่กับคุณ

สิ่งนี้หมายความว่าระบบปฏิบัติการ 32 บิตใด ๆ ไม่ว่าจะเป็น Windows หรือ unix หากเครื่องมีไฟล์ RAM + หน้าบนฮาร์ดดิสก์มากกว่า 4GB เช่น 8GB RAM และไฟล์หน้า 20GB จะไม่มี "หน่วยความจำหมด" หรือไม่?

แน่นอนมันไม่ได้หมายความว่า กระบวนการเดียวอาจใช้หน่วยความจำมากกว่านั้น! ปริมาณหน่วยความจำที่กระบวนการใช้อีกครั้งนั้นแทบไม่เกี่ยวข้องกับปริมาณพื้นที่ที่อยู่เสมือนที่กระบวนการใช้ เช่นเดียวกับจำนวนรถยนต์ที่คุณเก็บไว้ในโรงรถของคุณนั้นไม่เกี่ยวข้องกับจำนวนรถยนต์ที่คุณเป็นเจ้าของ

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

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

หากเครื่อง OS 32 บิตนี้มีไฟล์ 2GB RAM และ 2GB เพจการเพิ่มขนาดไฟล์หน้าจะไม่ช่วยให้ประสิทธิภาพดีขึ้น มันเป็นเรื่องจริงเหรอ?

คุณมีรถยนต์ห้าสิบคันและโรงจอดรถสี่คันและที่จอดรถ 100 คันตามถนน คุณเพิ่มขนาดของลานจอดรถเป็น 200 จุด รถคันใดของคุณเร็วขึ้นเพราะคุณมีที่จอดรถเพิ่ม 150 คันแทนที่จะเป็นที่จอดรถเพิ่ม 50 คันหรือไม่?


26
ฉันพบว่าคำตอบนี้ไม่ได้ตอบคำถามในมือและเกือบจะหลอกลวงที่จุด
Rig

48
@Rig: ยอดเยี่ยมฉันดีใจที่ได้ยินคำวิจารณ์ที่สร้างสรรค์ของคุณ ตอนนี้เป็นโอกาสของคุณที่จะเขียนคำตอบที่ดีกว่าและแสดงให้เราเห็นคำตอบที่คุณคิดว่าหลอกลวงน้อยลงและตรงประเด็นมากขึ้น
Eric Lippert

4
@BlueRaja: ฉันสงสัยว่าคุณมีความสับสนหน่วยความจำกายภาพที่มีหน่วยความจำ หน่วยความจำกายภาพเป็นเพียงการเพิ่มประสิทธิภาพที่อนุญาตให้เข้าถึงหน่วยความจำได้เร็วขึ้น เช่นเดียวกับแคชของโปรเซสเซอร์คือการเพิ่มประสิทธิภาพที่อนุญาตให้เข้าถึงหน่วยความจำได้เร็วขึ้น หน่วยความจำมีไว้สำหรับ intents และพื้นที่วัตถุประสงค์ทั้งหมดที่สงวนไว้ในไฟล์หน้า ไม่ว่าเพจที่ระบุในไฟล์เพจจะเป็น (1) ที่แมปไปยังที่อยู่หน่วยความจำเสมือนหรือ (2) คัดลอกจากดิสก์ไปยังหน่วยความจำกายภาพไม่เกี่ยวข้องกับคำถามที่ว่ามีการจัดสรรหรือไม่
Eric Lippert

4
@BlueRaja: บทความของ Raymond Chen เกี่ยวกับเรื่องนี้อาจช่วยได้ เขาแสดงวิธีการจัดสรร 4GB จากไฟล์หน้า; ที่เป็นหน่วยความจำที่กระบวนการเป็นเจ้าของ กระบวนการไม่สามารถจัดการกับสิ่งทั้งหมดได้ในครั้งเดียว แต่สามารถจัดการที่อยู่ของหน้าใดก็ได้โดยการจับคู่หน้ากับหน้า VM ที่ไม่ได้ใช้งานใช้สักระยะหนึ่งแล้วทิ้งไป blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert

3
คำตอบนี้จะชัดเจนยิ่งขึ้น Eric ถ้าคุณระบุอย่างชัดเจนว่า Windows (และระบบปฏิบัติการอื่น ๆ ) อนุญาตให้คุณ "สำรอง" หน่วยความจำโดยไม่ต้องเก็บไว้ในพื้นที่ที่อยู่เสมือนของคุณจริง ๆ แล้วตอบคำถามที่ชัดเจน "จากนั้น อยู่หรือไม่” ฉันคิดว่าคำตอบคือ“ มี Page ID บางประเภทที่คุณใช้ในการอ้างถึงเพื่อจัดหน้าในพื้นที่ที่อยู่เสมือนและจากนั้นคุณสามารถระบุได้ที่นั่น” แต่ฉันไม่รู้และ คำตอบของคุณไม่ได้บอก :)
Timwi

67

เป็นความจริงที่ว่า CPU สามารถระบุ RAM ได้สูงสุด 4Gb เท่านั้น อย่างไรก็ตาม CPU ปัจจุบันใช้ MMU ( หน่วยจัดการหน่วยความจำ ) เพื่อแปลที่อยู่หน่วยความจำเฉพาะกระบวนการเป็นที่อยู่หน่วยความจำทางกายภาพ

MMU นี้ใช้สำหรับเทคนิคที่แตกต่างกันทุกประเภทตั้งแต่การแยกหน่วยความจำ (กระบวนการ A ไม่สามารถจัดการกับหน่วยความจำของกระบวนการ B) ไปจนถึงการแบ่งปันหน่วยความจำ (กระบวนการ A สามารถเข้าถึงภูมิภาคหน่วยความจำกายภาพเดียวกันกับกระบวนการ B และสามารถแลกเปลี่ยนข้อมูลด้วยวิธีนี้)

แม้ว่า 32 บิตของ CPU เพียง แต่สนับสนุนหน่วยความจำ 4GB ต่อกระบวนการก็สามารถอยู่ได้ถึง 64 กิกะไบต์แรมเมื่อใช้ส่วนขยายที่อยู่ทางกายภาพ สิ่งนี้อนุญาตให้กระบวนการ A ใช้หน่วยความจำ 4Gb แรกในขณะที่กระบวนการ B ใช้ 4Gb ถัดไป โดยรวมแล้วมากกว่าหน่วยความจำ 4GB ทางกายภาพจะใช้แต่จำนวนของหน่วยความจำขั้นตอนเดียวใช้ยังคงปกคลุมที่ 4Gb

รองรับ PAE บน Linux ตั้งแต่เคอร์เนลเวอร์ชั่น 2.3.23 และ Windows Server 32 บิตบางส่วน แต่ไม่ใช่ใน Windows XP, Vista หรือ 7

หาก CPU ของคุณไม่รองรับ PAE คุณจะถูก จำกัด ให้อยู่ที่ 4GB ของหน่วยความจำกายภาพ (หรือน้อยกว่านั้นขึ้นอยู่กับปัจจัยอื่น ๆ )

โปรดทราบว่าระบบปฏิบัติการของคุณยังคงสามารถขับไล่หน่วยความจำกายภาพบางส่วนไปยังดิสก์ (ไฟล์หน้า) โดยไม่คำนึงถึง CPU ที่รองรับ PAE สิ่งนี้ทำให้แน่ใจว่าคุณสามารถเริ่มกระบวนการหลายกระบวนการที่ใช้มากกว่า 4Gb รวมกัน PAE ที่มีผลกระทบอย่างเดียวคือคุณสามารถเก็บ 4Gb ของกระบวนการ B ไว้ในหน่วยความจำกายภาพในขณะที่ใช้กระบวนการ A


มันหมายความว่าถ้ามันไม่สนับสนุนแล้วสิ่งที่ฉันพูดไปถูกต้องหรือไม่

10
Windows XP ไม่รองรับ PAE (เริ่มจาก SP2 ฉันคิดว่า) แต่ไม่สนใจ RAM เกิน 4GB แม้ในขณะที่เครื่องรองรับ PAE; ดูที่นี่ มันใช้สำหรับการป้องกันการประมวลผลข้อมูลที่ใช้ฮาร์ดแวร์ - บิต NX / XD มีให้เฉพาะในรายการตารางเพจ PAE ไม่ใช่รายการตารางเพจ "ปกติ"
Wyzard

ชิปเซ็ตสามารถเป็นปัจจัย จำกัด ของจำนวนหน่วยความจำที่สามารถรองรับ / ใช้งานได้ไม่ว่าคุณจะเลือกระบบปฏิบัติการหรือแฮ็คใดก็ตาม
Moab

5
ฉันต้องการเพิ่มว่าสาเหตุที่รุ่น 32 บิตสำหรับผู้บริโภคไม่รองรับ RAM ขนาด 4GB นั้นเป็นเพราะไดรฟ์ฮาร์ดแวร์จำนวนมากพบว่าทำงานไม่ถูกต้องกับหน่วยความจำขนาดใหญ่ และตั้งแต่เวลานั้น> RAM 4GB นั้นหายากมากนอกเซิร์ฟเวอร์ / เวิร์คสเตชั่นระดับไฮเอนด์ซึ่ง บริษัท ส่วนใหญ่ที่ดูแลไดรเวอร์ไม่ได้ใช้จ่ายเงินเพื่ออัพเดทไดรเวอร์ที่จะใช้เพียง 0.1% ของฐานลูกค้าของพวกเขา
Dan Neely

6
@DanNeely ระบบปฏิบัติการไม่ได้รับการสนับสนุนสำหรับหน่วยความจำก็ จำกัดเนื่องจากปัญหาการออกใบอนุญาต แม้ว่าฉันจะเห็นด้วยว่านี่เป็นแฮ็คของบุคคลที่สาม แต่สำหรับผู้ใช้ Windows รุ่นต่างๆเท่านั้น การแจกแจงของ Windows บนเซิร์ฟเวอร์ที่เริ่มต้นจากWindows 2000ได้รองรับหน่วยความจำมากกว่า 4GB (อ้างอิงลิงก์แรก)
Breakthrough

15

โดยเฉพาะอย่างยิ่งเกี่ยวกับรุ่นของ Windows 32 บิตพวกเขาได้รับการสนับสนุน RAM มากกว่า 4GB ตั้งแต่รุ่นต่างๆของ Windows 2003 (และคุณยังสามารถรับแฮ็กเคอร์เนลสำหรับ Windows 7เพื่อให้คุณใช้ RAM ทั้งหมดใน 32 บิต) อย่างไรก็ตามสิ่งนี้มีค่าใช้จ่ายตามที่คุณได้ระบุไว้ในส่วนแรกของคำถาม

ในระบบปฏิบัติการแบบ 32 บิตขนาดของตัวชี้ (ที่อยู่หน่วยความจำ) จะเหมือนกับความยาวของคำของ CPU คือ 32- บิตซึ่งจะช่วยให้ (ตามที่คุณกล่าวไว้) พื้นที่หน่วยความจำ 2 ^ 32 = 4GB Windows ยังใช้แนวทาง "หน่วยความจำเสมือน" สำหรับแอปพลิเคชันดังนั้นแต่ละแอปพลิเคชันมีพื้นที่หน่วยความจำของตัวเอง

เนื่องจากตัวชี้แต่ละตัวมีความกว้าง 32 บิตเท่านั้นตัวชี้ของแอปพลิเคชันแต่ละตัวสามารถจัดการหน่วยความจำได้สูงสุด 4GB ถึงแม้ว่าระบบสามารถรองรับ RAM ได้มากกว่า 4GB เท่าที่ฉันรู้นี่เป็นข้อแม้เดียวที่ใช้ RAM มากกว่า 4GB ในระบบปฏิบัติการ 32 บิต โดยรวมแล้วคุณสามารถมีแอพพลิเคชั่นจำนวนมากที่ใช้ RAM รวมกันมากกว่า 4GB แต่กระบวนการใดกระบวนการหนึ่งสามารถจัดสรร / เข้าถึงได้สูงสุด 4GB


กลับไปที่คำถามของคุณสมมติว่าคุณมีโปรแกรมที่ใช้ RAM 2GB หากคุณมี 10 อินสแตนซ์ของโปรแกรมนี้นั่นคือ 20GB RAM 8GB ของคุณทั้งหมดจะถูกใช้หมดรวมทั้งไฟล์เพจอีก 12GB ดังนั้นใช่ภายใต้ระบบปฏิบัติการ 32 บิตมันเป็นไปได้มากกว่าที่จะใช้หน่วยความจำนี้

หากเครื่อง OS 32 บิตนี้มีไฟล์ 2GB RAM และ 2GB เพจการเพิ่มขนาดไฟล์หน้าจะไม่ช่วยให้ประสิทธิภาพดีขึ้น จริงหรือ

การเพิ่มขนาดไฟล์เพจจะไม่เพิ่มประสิทธิภาพ (เว้นแต่ว่า RAM และเพจไฟล์ของคุณจะถูกตั้งค่าไว้ที่ค่าต่ำสุดที่แน่นอน อย่างไรก็ตามมันจะป้องกันคอมพิวเตอร์ของคุณไม่ให้ใช้หน่วยความจำ (เสมือน) เมื่อใดก็ตามสิ่งที่จะต้องมีการล้างเพื่อ pagefile คุณอยู่แล้วการใหญ่ตีประสิทธิภาพ (ตั้งแต่ฮาร์ดไดรฟ์เป็นคำสั่งของขนาดช้าลงแล้ว RAM ของคุณ)


จากพื้นที่ที่อยู่ 4GB ที่แต่ละกระบวนการได้รับมีเพียง 2GB เท่านั้นที่สามารถใช้งานโปรแกรมได้ 2GB อื่น ๆ ที่สงวนไว้สำหรับใช้โดยเคอร์เนล / 3GBตัวเลือกการบูตสามารถอนุญาตให้บางโปรแกรมที่จะใช้ RAM มากกว่า
Wyzard

1
@Breakthrough: "การเพิ่มขนาดไฟล์เพจจะไม่เพิ่มประสิทธิภาพ" ฉันไม่คิดว่านี่เป็นเรื่องจริง ตัวอย่างเช่นหากมีการสลับมากขึ้นระบบปฏิบัติการสามารถสลับข้อมูลโปรแกรมที่ไม่ได้ใช้อย่างจริงจังมากขึ้นและใช้ RAM ฟรีเช่นการแคชดิสก์ ในการกำหนดค่าบางอย่างอาจทำให้ประสิทธิภาพดีขึ้น มีคำตอบที่ดีเกี่ยวกับ ServerFault ว่าเพราะเหตุใด pagefile จึงมีความสำคัญซึ่งต้องเผชิญกับปัญหาเหล่านี้: serverfault.com/questions/23621//
sleske

2
ระวังคำสั่งแบบครอบคลุมเช่น"การเพิ่มขนาดไฟล์เพจจะไม่เพิ่มประสิทธิภาพการทำงาน"เป็นไปได้อย่างสมบูรณ์แบบสำหรับไฟล์เพจที่เล็กเกินไปที่จะส่งผลให้ดิสก์กระตุกมากกว่าการมีไฟล์เพจขนาดใหญ่! ดูคำตอบและความคิดเห็นในคำถามนี้
Mark Booth

1
@sleske จุดที่ดีฉันปรับปรุงให้เป็นประเภท "มักจะไม่" มากกว่า ในขณะที่ฉันยอมรับมันอาจสร้างความแตกต่างอย่างมากในเซิร์ฟเวอร์สำหรับคนส่วนใหญ่จุดที่ฉันพยายามข้ามคือพวกเขาจะดีกว่าแค่รับ RAM เพิ่มเติม (เนื่องจากเมื่อคุณเพจเพจประสิทธิภาพจะค่อนข้างช้า ตามที่จะได้รับ)
Breakthrough

-1

เมื่อตัวประมวลผลถูกกล่าวถึงเป็น 32- บิตหมายความว่ามันสามารถทำงานกับตัวเลข 32- บิตโดยใช้คำสั่งเดียว สิ่งนี้เกี่ยวข้องกับความกว้างของแอดเดรสบัสเพียงเล็กน้อยซึ่งในสถาปัตยกรรม Intel นั้นมีขนาด 36 บิตนับตั้งแต่Pentium Proเปิดตัวในปี 1995

ข้อ จำกัด ขนาด 4GB ที่มีชื่อเสียงนั้นมาจากความจริงที่ว่าซอฟต์แวร์พีซีส่วนใหญ่ใช้หน่วยความจำแบบแบนโดยที่ตัวชี้แต่ละไบต์สามารถแก้ไขได้ เนื่องจากตัวชี้ควรพอดีกับการลงทะเบียนที่จะใช้และการลงทะเบียนมีความกว้าง 32 บิตคุณจึง จำกัด เพียง 4GB


สิ่งนี้ไม่ถูกต้องตามที่ระบุไว้ในคำตอบก่อนหน้าอื่น ๆ ข้างต้น
ChrisInEdmonton

คุณช่วยชี้ให้เห็นข้อเท็จจริงที่ฉันผิดได้ไหม?
Dmitry Grigoryev

1
กระบวนการเดียวสามารถใช้มากกว่า 4 GB โดยเฉพาะคำตอบก่อนหน้าชี้ให้เห็น "กระบวนการสามารถมีหน่วยความจำมากกว่าพื้นที่ที่อยู่"
ChrisInEdmonton

2
ดูตัวอย่างblog.superuser.com/2011/04/23/…ตอนนี้แน่นอนคุณไม่สามารถใช้มากกว่า 4 GB พร้อมกัน แต่กระบวนการเดียวสามารถยกเลิกการแมปและแมปหน่วยความจำเพื่อให้สามารถใช้ประโยชน์ได้มากกว่า 4 GB ในขั้นตอนเดียวมีการทำบัญชีเพียงเล็กน้อย โพสต์บล็อกนั้นค่อนข้างเฉพาะ Windows ฉันใช้เซิร์ฟเวอร์ฐานข้อมูลด้วยการจัดสรรหน่วยความจำ> 4 GB ในการติดตั้ง Linux แบบ 32 บิต แน่นอนว่าวันนี้คุณแค่เรียกใช้ Linux 64 บิต
ChrisInEdmonton

1
ตกลงขอโทษด้วย ฉันไม่ได้คิดถึงความเป็นไปได้ที่จะmmapเพิ่มหน่วยความจำ
Dmitry Grigoryev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.