ใครช่วยบอกฉันให้ชัดเจนว่าความแตกต่างระหว่างหน่วยความจำเสมือนกับswap spaceคืออะไร?
แล้วทำไมเราถึงบอกว่าสำหรับเครื่อง 32 บิตหน่วยความจำเสมือนสูงสุดที่สามารถเข้าถึงได้คือ 4 GB เท่านั้น?
ใครช่วยบอกฉันให้ชัดเจนว่าความแตกต่างระหว่างหน่วยความจำเสมือนกับswap spaceคืออะไร?
แล้วทำไมเราถึงบอกว่าสำหรับเครื่อง 32 บิตหน่วยความจำเสมือนสูงสุดที่สามารถเข้าถึงได้คือ 4 GB เท่านั้น?
คำตอบ:
มีการอธิบายที่ยอดเยี่ยมของหน่วยความจำเสมือนบนsuperuser superuser
พูดง่ายๆก็คือหน่วยความจำเสมือนคือการรวมกันของ RAM และพื้นที่ดิสก์ที่กระบวนการทำงานสามารถใช้ได้
Swap space คือส่วนของหน่วยความจำเสมือนที่อยู่ในฮาร์ดดิสก์ซึ่งใช้เมื่อ RAM เต็ม
สำหรับสาเหตุที่ CPU 32 บิตถูก จำกัด ไว้ที่หน่วยความจำเสมือน 4gb จึงได้รับการแก้ไขที่นี่ :
ตามความหมายโปรเซสเซอร์ 32 บิตใช้ 32 บิตเพื่ออ้างถึงตำแหน่งของหน่วยความจำแต่ละไบต์ 2 ^ 32 = 4.2 พันล้านซึ่งหมายถึงที่อยู่หน่วยความจำที่มีความยาว 32 บิตสามารถอ้างถึงตำแหน่งที่ไม่ซ้ำกันได้ 4.2 พันล้านตำแหน่งเท่านั้น (เช่น 4 GB)
มีความสับสนเกี่ยวกับคำว่า Virtual Memory และจริงๆแล้วหมายถึงแนวคิดที่แตกต่างกันสองประการต่อไปนี้
Swap space OTOH เป็นชื่อของส่วนของดิสก์ที่ใช้เก็บเพจ RAM เพิ่มเติมเมื่อไม่ได้ใช้งาน
สิ่งสำคัญที่ต้องทำให้เป็นจริงคืออดีตเป็นไปได้อย่างโปร่งใสเนื่องจากการสนับสนุนฮาร์ดแวร์และระบบปฏิบัติการของรุ่นหลัง
เพื่อให้เข้าใจถึงสิ่งเหล่านี้ได้ดีขึ้นคุณควรพิจารณาว่า CPU และ OS รองรับ "หน่วยความจำเสมือน" (ตามคำจำกัดความ 2) อย่างไร
สมมติว่าคุณมีตัวชี้ 32 บิต (จุด 64 บิตเหมือนกัน แต่ใช้กลไกที่แตกต่างกันเล็กน้อย) เมื่อเปิดใช้งาน "หน่วยความจำเสมือน" แล้วโปรเซสเซอร์จะถือว่าตัวชี้นี้ถูกสร้างเป็นสามส่วน
ตอนนี้เมื่อซีพียูพยายามเข้าถึงเนื้อหาของตัวชี้อันดับแรกจะให้คำปรึกษากับตาราง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
หวังว่านี่จะทำให้ทุกอย่างชัดเจนขึ้น
IMHO เป็นเรื่องที่ทำให้เข้าใจผิดอย่างมากที่จะใช้แนวคิดของพื้นที่แลกเปลี่ยนเทียบเท่ากับหน่วยความจำเสมือน VM เป็นแนวคิดทั่วไปมากกว่า swap space เหนือสิ่งอื่นใด VM อนุญาตให้กระบวนการอ้างอิงที่อยู่เสมือนในระหว่างการดำเนินการซึ่งแปลเป็นที่อยู่ทางกายภาพด้วยการสนับสนุนฮาร์ดแวร์และตารางเพจ ดังนั้นกระบวนการจึงไม่เกี่ยวข้องกับจำนวนหน่วยความจำกายภาพของระบบหรือตำแหน่งที่คำสั่งหรือข้อมูลอยู่ในลำดับชั้นของหน่วยความจำกายภาพ VM อนุญาตการแมปนี้ รายการอ้างอิง (คำสั่งหรือข้อมูล) อาจอยู่ใน L1 หรือ L2 หรือ RAM หรือสุดท้ายบนดิสก์ซึ่งในกรณีนี้จะถูกโหลดลงในหน่วยความจำหลัก
Swap space เป็นเพียงสถานที่ในหน่วยความจำรองที่จัดเก็บเพจเมื่อไม่ได้ใช้งาน หากมี RAM ไม่เพียงพอระบบปฏิบัติการอาจตัดสินใจสลับหน้าของกระบวนการเพื่อให้มีที่ว่างสำหรับหน้ากระบวนการอื่น ๆ โปรเซสเซอร์ไม่เคยรันคำสั่งหรืออ่าน / เขียนข้อมูลโดยตรงจาก swap space
สังเกตว่าจะมีการสลับพื้นที่ในระบบที่ไม่มี VM นั่นคือกระบวนการที่เข้าถึงที่อยู่จริงโดยตรงยังคงมีบางส่วนของมันในดิสก์
แม้ว่ากระทู้จะค่อนข้างเก่าและได้รับคำตอบแล้ว ยังคงต้องการแชร์ลิงก์นี้เนื่องจากนี่เป็นคำอธิบายที่ง่ายที่สุดที่ฉันพบ ลิงค์ด้านล่างมีไดอะแกรมเพื่อการแสดงภาพที่ดีขึ้น
ความแตกต่างที่สำคัญ: หน่วยความจำเสมือนเป็นนามธรรมของหน่วยความจำหลัก ขยายหน่วยความจำที่มีอยู่ของคอมพิวเตอร์โดยการจัดเก็บส่วนที่ไม่ได้ใช้งานของ RAM เนื้อหาบนดิสก์ เมื่อใดก็ตามที่จำเป็นต้องใช้เนื้อหาก็จะดึงกลับไปที่ RAM หน่วยความจำ Swap หรือพื้นที่แลกเปลี่ยนเป็นส่วนหนึ่งของฮาร์ดดิสก์ไดรฟ์ที่ใช้สำหรับหน่วยความจำเสมือน ดังนั้นทั้งสองจึงใช้แทนกันได้
หน่วยความจำเสมือนเงียบแตกต่างจากหน่วยความจำกายภาพ โปรแกรมเมอร์สามารถเข้าถึงหน่วยความจำเสมือนได้โดยตรงแทนที่จะเป็นหน่วยความจำกายภาพ หน่วยความจำเสมือนเป็นนามธรรมของหน่วยความจำหลัก ใช้เพื่อซ่อนข้อมูลของหน่วยความจำกายภาพจริงของระบบ ขยายหน่วยความจำที่มีอยู่ของคอมพิวเตอร์โดยการจัดเก็บส่วนที่ไม่ได้ใช้งานของเนื้อหาของ RAM ไว้ในดิสก์ เมื่อต้องการเนื้อหาก็จะดึงข้อมูลกลับไปที่ RAM หน่วยความจำเสมือนสร้างภาพลวงตาของพื้นที่ที่อยู่ทั้งหมดโดยมีที่อยู่ที่ขึ้นต้นด้วยศูนย์ ส่วนใหญ่เป็นที่ต้องการสำหรับคุณสมบัติการเพิ่มประสิทธิภาพซึ่งจะช่วยลดความต้องการพื้นที่ ประกอบด้วย RAM และพื้นที่ดิสก์ที่มีอยู่
หน่วยความจำ Swap มักเรียกว่า swap space Swap space หมายถึงส่วนของหน่วยความจำเสมือนซึ่งสงวนไว้เป็นที่เก็บชั่วคราว พื้นที่ Swap จะถูกใช้เมื่อ RAM ที่มีอยู่ไม่สามารถตอบสนองความต้องการของหน่วยความจำของระบบได้ ตัวอย่างเช่นในระบบหน่วยความจำ Linux เคอร์เนลจะค้นหาแต่ละเพจในหน่วยความจำฟิสิคัลหรือในพื้นที่แลกเปลี่ยน เคอร์เนลยังเก็บรักษาตารางซึ่งข้อมูลเกี่ยวกับการสลับเพจและเพจในหน่วยความจำฟิสิคัลจะถูกเก็บไว้ เพจที่ไม่ได้รับการเข้าถึงมาเป็นเวลานานจะถูกส่งไปยังพื้นที่ swap space กระบวนการนี้เรียกว่าการแลกเปลี่ยน ในกรณีที่จำเป็นต้องใช้เพจเดียวกันเพจนั้นจะถูกสลับในหน่วยความจำฟิสิคัลโดยการสลับเพจอื่น ด้วยประการฉะนี้
"หน่วยความจำเสมือน" เป็นคำทั่วไป ใน Windows เรียกว่าเป็นเพจจิ้งหรือการแบ่งหน้า ในลินุกซ์เรียกว่า Swap