ความแตกต่างระหว่าง "หน่วยความจำเสมือน" และ "พื้นที่แลกเปลี่ยน" คืออะไร


85

ใครช่วยบอกฉันให้ชัดเจนว่าความแตกต่างระหว่างหน่วยความจำเสมือนกับswap spaceคืออะไร?

แล้วทำไมเราถึงบอกว่าสำหรับเครื่อง 32 บิตหน่วยความจำเสมือนสูงสุดที่สามารถเข้าถึงได้คือ 4 GB เท่านั้น?



@startblue ลิงก์ที่คุณให้มาเป็นคำตอบสำหรับคำถามของฉันได้อย่างไร ..
algo-geeks

@ algo-geeks - อันที่จริงมันไม่ใช่คำตอบ แต่ฉันคิดว่ามันเชื่อมโยงไปยังคำตอบที่อาจมีประโยชน์มากสำหรับหัวข้อนี้ และเขียนไว้ในความคิดเห็นตรงที่ควรจะเป็น imho :)
Muhamed Huseinbašić

คำตอบ:


113

มีการอธิบายที่ยอดเยี่ยมของหน่วยความจำเสมือนบนsuperuser superuser

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

Swap space คือส่วนของหน่วยความจำเสมือนที่อยู่ในฮาร์ดดิสก์ซึ่งใช้เมื่อ RAM เต็ม

สำหรับสาเหตุที่ CPU 32 บิตถูก จำกัด ไว้ที่หน่วยความจำเสมือน 4gb จึงได้รับการแก้ไขที่นี่ :

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


1
เพื่อให้เป็นจริง RAM = เสมือน - แลกเปลี่ยน?
user48956

4
คำตอบนี้ผิดอย่างสิ้นเชิง บุคคลสามารถแมปไฟล์ 1GB ได้ 100 ครั้งและใช้หน่วยความจำเสมือน 100GB บนเครื่องที่มี RAM เพียง 1GB ไม่มีวิธีใดในการเพิ่ม RAM และพื้นที่ดิสก์เพื่อให้ได้หน่วยความจำเสมือน 100GB ที่จะใช้งานได้
David Schwartz

@DavidSchwartz ไม่ได้จริงๆ การแมปหน่วยความจำไฟล์ไม่โหลดลงในหน่วยความจำ ดังนั้นเพียงแค่ mmap-ing ไฟล์ 1GB 100 ครั้งจะไม่ใช้ 100GB อะไรเลย
Felix

1
@ เฟลิกซ์คุณคิดผิด เมื่อคุณพูดว่า "ไม่โหลดลงในหน่วยความจำ" คุณกำลังใช้คำว่า "หน่วยความจำ" เพื่อหมายถึงหน่วยความจำกายภาพนั่นคือ RAM เรากำลังพูดถึงหน่วยความจำเสมือนไม่ใช่หน่วยความจำกายภาพ โดยทั่วไปหน่วยความจำเสมือนจะถูกสร้างขึ้นเมื่อใดและตามที่จำเป็นไม่ได้นำมาจากพูลคงที่เนื่องจากหน่วยความจำฟิสิคัลเป็น
David Schwartz

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

60

มีความสับสนเกี่ยวกับคำว่า Virtual Memory และจริงๆแล้วหมายถึงแนวคิดที่แตกต่างกันสองประการต่อไปนี้

  1. การใช้ดิสก์เพจเพื่อขยายจำนวนแนวคิดของหน่วยความจำฟิสิคัลที่คอมพิวเตอร์มี - คำที่ถูกต้องสำหรับสิ่งนี้คือเพจจิ้ง
  2. สิ่งที่เป็นนามธรรมที่ใช้โดย OS / CPU ต่างๆเพื่อสร้างภาพลวงตาของแต่ละกระบวนการที่ทำงานในพื้นที่แอดเดรสที่แยกจากกัน

Swap space OTOH เป็นชื่อของส่วนของดิสก์ที่ใช้เก็บเพจ RAM เพิ่มเติมเมื่อไม่ได้ใช้งาน

สิ่งสำคัญที่ต้องทำให้เป็นจริงคืออดีตเป็นไปได้อย่างโปร่งใสเนื่องจากการสนับสนุนฮาร์ดแวร์และระบบปฏิบัติการของรุ่นหลัง

เพื่อให้เข้าใจถึงสิ่งเหล่านี้ได้ดีขึ้นคุณควรพิจารณาว่า CPU และ OS รองรับ "หน่วยความจำเสมือน" (ตามคำจำกัดความ 2) อย่างไร

สมมติว่าคุณมีตัวชี้ 32 บิต (จุด 64 บิตเหมือนกัน แต่ใช้กลไกที่แตกต่างกันเล็กน้อย) เมื่อเปิดใช้งาน "หน่วยความจำเสมือน" แล้วโปรเซสเซอร์จะถือว่าตัวชี้นี้ถูกสร้างเป็นสามส่วน

  • 10 บิตสูงสุดคือPage Directory Entry
  • 10 บิตต่อไปนี้เป็นรายการตารางหน้า
  • 12 บิตสุดท้ายประกอบเป็นPage Offset

ตอนนี้เมื่อซีพียูพยายามเข้าถึงเนื้อหาของตัวชี้อันดับแรกจะให้คำปรึกษากับตารางPage Directoryซึ่งเป็นตารางที่ประกอบด้วย 1024 รายการ (ในสถาปัตยกรรม X86 ซึ่งเป็นตำแหน่งที่รีจิสเตอร์ CR3 ชี้ไปที่) Page Directory Entry 10 บิตเป็นดัชนีในตารางนี้ซึ่งชี้ไปที่ตำแหน่งทางกายภาพของตารางเพจตารางหน้าในทางกลับกันนี่คือตารางอื่นของ 1024 รายการซึ่งแต่ละรายการเป็นตัวชี้ในหน่วยความจำกายภาพและบิตควบคุมที่สำคัญหลายตัว (เราจะติดต่อกลับในภายหลัง) เมื่อพบเพจแล้ว 12 บิตสุดท้ายจะถูกใช้เพื่อค้นหาแอดเดรสในเพจนั้น

มีหลายรายละเอียดเพิ่มเติม (TLBs หน้าขนาดใหญ่, PAE, Selectors ป้องกันหน้า) แต่คำอธิบายสั้น ๆ ข้างต้นจับส่วนสำคัญของสิ่งที่

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

บนนี้หน่วยความจำเสมือน OS ยังอาจเพิ่มแนวคิดของเพจ หนึ่งในบิตควบคุมที่กล่าวถึงก่อนหน้านี้อนุญาตให้ระบุว่ารายการเป็น "ปัจจุบัน" หรือไม่ หากไม่มีอยู่การพยายามเข้าถึงรายการนั้นจะทำให้เกิดข้อยกเว้นPage Fault ระบบปฏิบัติการสามารถจับข้อยกเว้นนี้และดำเนินการตามนั้น ระบบปฏิบัติการที่รองรับการสลับ / การแบ่งหน้าสามารถตัดสินใจที่จะโหลดหน้าจากSwap Spaceแก้ไขตารางการแปลจากนั้นออกการเข้าถึงหน่วยความจำอีกครั้ง

นี่คือที่ที่ทั้งสองคำรวมกันระบบปฏิบัติการที่รองรับ Virtual Memory และ Paging สามารถทำให้กระบวนการมีภาพลวงตาของการมีหน่วยความจำมากกว่าที่มีอยู่จริงโดยการแบ่งหน้า (การสลับ) เพจเข้าและออกจากพื้นที่การแลกเปลี่ยน

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

หวังว่านี่จะทำให้ทุกอย่างชัดเจนขึ้น


12

IMHO เป็นเรื่องที่ทำให้เข้าใจผิดอย่างมากที่จะใช้แนวคิดของพื้นที่แลกเปลี่ยนเทียบเท่ากับหน่วยความจำเสมือน VM เป็นแนวคิดทั่วไปมากกว่า swap space เหนือสิ่งอื่นใด VM อนุญาตให้กระบวนการอ้างอิงที่อยู่เสมือนในระหว่างการดำเนินการซึ่งแปลเป็นที่อยู่ทางกายภาพด้วยการสนับสนุนฮาร์ดแวร์และตารางเพจ ดังนั้นกระบวนการจึงไม่เกี่ยวข้องกับจำนวนหน่วยความจำกายภาพของระบบหรือตำแหน่งที่คำสั่งหรือข้อมูลอยู่ในลำดับชั้นของหน่วยความจำกายภาพ VM อนุญาตการแมปนี้ รายการอ้างอิง (คำสั่งหรือข้อมูล) อาจอยู่ใน L1 หรือ L2 หรือ RAM หรือสุดท้ายบนดิสก์ซึ่งในกรณีนี้จะถูกโหลดลงในหน่วยความจำหลัก

Swap space เป็นเพียงสถานที่ในหน่วยความจำรองที่จัดเก็บเพจเมื่อไม่ได้ใช้งาน หากมี RAM ไม่เพียงพอระบบปฏิบัติการอาจตัดสินใจสลับหน้าของกระบวนการเพื่อให้มีที่ว่างสำหรับหน้ากระบวนการอื่น ๆ โปรเซสเซอร์ไม่เคยรันคำสั่งหรืออ่าน / เขียนข้อมูลโดยตรงจาก swap space

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


5

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

ความแตกต่างที่สำคัญ: หน่วยความจำเสมือนเป็นนามธรรมของหน่วยความจำหลัก ขยายหน่วยความจำที่มีอยู่ของคอมพิวเตอร์โดยการจัดเก็บส่วนที่ไม่ได้ใช้งานของ RAM เนื้อหาบนดิสก์ เมื่อใดก็ตามที่จำเป็นต้องใช้เนื้อหาก็จะดึงกลับไปที่ RAM หน่วยความจำ Swap หรือพื้นที่แลกเปลี่ยนเป็นส่วนหนึ่งของฮาร์ดดิสก์ไดรฟ์ที่ใช้สำหรับหน่วยความจำเสมือน ดังนั้นทั้งสองจึงใช้แทนกันได้

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

หน่วยความจำ Swap มักเรียกว่า swap space Swap space หมายถึงส่วนของหน่วยความจำเสมือนซึ่งสงวนไว้เป็นที่เก็บชั่วคราว พื้นที่ Swap จะถูกใช้เมื่อ RAM ที่มีอยู่ไม่สามารถตอบสนองความต้องการของหน่วยความจำของระบบได้ ตัวอย่างเช่นในระบบหน่วยความจำ Linux เคอร์เนลจะค้นหาแต่ละเพจในหน่วยความจำฟิสิคัลหรือในพื้นที่แลกเปลี่ยน เคอร์เนลยังเก็บรักษาตารางซึ่งข้อมูลเกี่ยวกับการสลับเพจและเพจในหน่วยความจำฟิสิคัลจะถูกเก็บไว้ เพจที่ไม่ได้รับการเข้าถึงมาเป็นเวลานานจะถูกส่งไปยังพื้นที่ swap space กระบวนการนี้เรียกว่าการแลกเปลี่ยน ในกรณีที่จำเป็นต้องใช้เพจเดียวกันเพจนั้นจะถูกสลับในหน่วยความจำฟิสิคัลโดยการสลับเพจอื่น ด้วยประการฉะนี้

ความแตกต่างระหว่างหน่วยความจำเสมือนและหน่วยความจำสลับและ


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

ขอบคุณปรับปรุงโพสต์
ram619

0

"หน่วยความจำเสมือน" เป็นคำทั่วไป ใน Windows เรียกว่าเป็นเพจจิ้งหรือการแบ่งหน้า ในลินุกซ์เรียกว่า Swap

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