เครื่องระบบปฏิบัติการ 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.