ฉันเข้าใจว่าหน่วยความจำเสมือนเสียโปรแกรมโดยการแสดงหน่วยความจำมากกว่าที่มีอยู่จริง
แต่ในท้ายที่สุดมันจะต้องแมปโลจิคัลแอดเดรสกับฟิสิคัลแอดเดรสจริง ตอนนี้มันจะเพิ่มหน่วยความจำได้อย่างไร
ฉันเข้าใจว่าหน่วยความจำเสมือนเสียโปรแกรมโดยการแสดงหน่วยความจำมากกว่าที่มีอยู่จริง
แต่ในท้ายที่สุดมันจะต้องแมปโลจิคัลแอดเดรสกับฟิสิคัลแอดเดรสจริง ตอนนี้มันจะเพิ่มหน่วยความจำได้อย่างไร
คำตอบ:
มันไม่ได้เพิ่มหน่วยความจำทางกายภาพเลย จุดประสงค์ของมันคืออย่างอื่นทั้งหมด สิ่งที่สามารถทำได้คือทำให้มีร้านค้าสำรองอื่น ๆ ที่อนุญาตให้โปรแกรมใช้หน่วยความจำมากกว่าที่มีอยู่จริง
หน่วยความจำเสมือนถูกใช้เพื่อแยกและแยกกระบวนการออกจากกันและยังอนุญาตให้เข้าถึงหน่วยความจำเพื่อเบี่ยงเบนไปยังตำแหน่งอื่น
หน่วยความจำเสมือนช่วยให้ระบบสามารถให้พื้นที่หน่วยความจำของตัวเองทุกกระบวนการแยกจากกระบวนการอื่น ด้วยโปรแกรมที่ทำงานอย่างมีประสิทธิภาพในพื้นที่ของตัวเองทำให้พวกเขาสามารถเข้าถึงพื้นที่ที่อยู่ทั้งหมดได้อย่างเต็มที่แทนที่จะต้องทำงานกับโปรแกรมอื่นซึ่งอาจจำเป็นต้องใช้ที่อยู่ "เดียวกัน" สิ่งนี้มีผลข้างเคียงของการเพิ่มความน่าเชื่อถือและความปลอดภัยเนื่องจากกระบวนการไม่สามารถแทรกแซงซึ่งกันและกันได้อย่างง่ายดาย
พื้นที่หน่วยความจำเสมือนของแอปพลิเคชันถูกสร้างขึ้นตามต้องการ แอปพลิเคชั่นดูเหมือนว่าจะอยู่ในบล็อกของหน่วยความจำที่ต่อเนื่องกัน แต่จริงๆแล้วอาจกระจัดกระจายไปทั่วในหน่วยความจำกายภาพ
หน่วยความจำเสมือนยังอนุญาตให้เข้าถึงหน่วยความจำที่ถูกดักจับและเบี่ยงเบนความสนใจซึ่งทำให้เราสามารถใช้คุณสมบัติเช่นไฟล์สลับ สิ่งนี้หมายความว่าเราสามารถผลักดันส่วนต่าง ๆ ของหน่วยความจำที่ไม่ได้ใช้งานดิสก์และตั้งค่าตัวชี้ที่ระบุว่า "บล็อกหน่วยความจำนี้อยู่ในไฟล์ x ที่ตำแหน่ง y" จากนั้นเราสามารถเพิ่มหน่วยความจำกายภาพ พื้นที่สำหรับใช้งานโดยแอปพลิเคชันอื่น เมื่อแอปพลิเคชันต้องการหน่วยความจำนั้นสามารถอ่านกลับจากดิสก์ได้วางไว้ที่ตำแหน่งของ RAM จริง (อาจแตกต่างจากที่เคยเป็นมาก่อน) และแมปกลับไปยังตำแหน่งเดียวกันของหน่วยความจำเสมือนเหมือนเดิม
ในทำนองเดียวกับที่ใช้ไฟล์เพจหน่วยความจำเสมือนสามารถอนุญาตให้ระบบปฏิบัติการทำสิ่งที่มีประสิทธิภาพในการโหลด "ขี้เกียจ" ของไลบรารีที่แบ่งใช้สำหรับโปรแกรม เมื่อโปรแกรมหลักบอกระบบปฏิบัติการว่าต้องการใช้ไลบรารีเฉพาะระบบปฏิบัติการจะสามารถประหยัดเวลาได้โดยการตรวจสอบข้อกำหนดของไลบรารีการจัดสรรพื้นที่ในพื้นที่หน่วยความจำเสมือนสำหรับแอปพลิเคชัน แต่แทนที่จะโหลดทั้งไลบรารี ในมันสามารถเลื่อนการโหลดหน้าของห้องสมุดในจากดิสก์จนกว่าพวกเขาจะต้องการจริง ด้วยวิธีนี้มีเพียงบางส่วนของไลบรารีที่โหลดลงใน RAM คือชิ้นส่วนที่ใช้งานจริงโดยโปรแกรมส่วนที่ไม่เคยใช้ไม่เคยโหลดและไม่ต้องเสีย RAM
การใช้เทคนิคเหล่านี้เราปรับปรุงเสถียรภาพของระบบและอนุญาตให้กระบวนการทำงานในพื้นที่ จำกัด โดยไม่ส่งผลกระทบซึ่งกันและกันอย่างไม่เหมาะสม มันไม่ได้ "เพิ่มหน่วยความจำ" แต่ให้เราใช้สิ่งที่เรามีอย่างมีประสิทธิภาพแทน
ไฟล์ swap ถูกเปิดใช้งานโดยระบบหน่วยความจำเสมือน แต่ในอดีตที่ผ่านมาสับสนว่าเป็นหน่วยความจำเสมือน
ระบบจะมีการ map แต่ละที่อยู่เสมือนที่อยู่ทางกายภาพเมื่อหน่วยความจำที่ใช้ แต่หน่วยความจำไม่ทั้งหมดจะถูกนำมาใช้ในเวลาเดียวกัน ตัวอย่างเช่นสมมติว่าคุณมี 20 แท็บในเบราว์เซอร์ของคุณแต่ละหน่วยความจำ 1GB ในระบบปฏิบัติการที่ไม่มีการสนับสนุนหน่วยความจำเสมือนคุณจะต้องใช้ RAM 20GB เพื่อให้สามารถใช้งานได้ เคล็ดลับคือคุณไม่เรียกดูแท็บทั้งหมด 20 แท็บในเวลาเดียวกันดังนั้นระบบปฏิบัติการที่มีหน่วยความจำเสมือนจะช่วยให้คุณใช้เบราว์เซอร์ของคุณเช่นนั้นด้วย RAM เพียงสอง GB, การสลับแท็บที่ไม่ใช้งานไปยังดิสก์
หน่วยความจำเสมือนไม่ได้ใช้เพื่อแลกเปลี่ยนเท่านั้น วัตถุประสงค์หลักคือเพื่อหลีกเลี่ยงการแตกแฟรกเมนต์ RAM ซึ่งเป็นปัญหาใหญ่ในระบบที่ไม่มีการจัดการหน่วยความจำเสมือน: คุณอาจมี RAM ฟรี 1GB แต่ถ้ามีหน่วยเป็น 10MB แอปพลิเคชันที่ร้องขอ 100MB จะไม่สามารถทำงานได้ .
เมื่อเวลาผ่านไปหน่วยความจำเสมือนพบว่ามีการใช้งานมากขึ้นการเข้าถึงไฟล์แบบสุ่มโดยเฉพาะ: แอปพลิเคชันจำนวนมากเช่นฐานข้อมูลจะช้าลงอย่างเจ็บปวดหากถูกบังคับให้อ่านไฟล์ตามลำดับและทำงานเร็วขึ้นมากหากระบบปฏิบัติการอนุญาตให้แกล้งไฟล์ทั้งหมด ) หน่วยความจำและปรับแต่งดิสก์ IO และแคชตามรูปแบบการเข้าถึง
หน่วยความจำเสมือนไม่เพิ่มหน่วยความจำในความเป็นจริงเพิ่มฮาร์ดแวร์หน่วยความจำหลักเพิ่มเติม แต่สามารถเพิ่มช่วงของที่อยู่ที่ใช้งานได้ ดังนั้นหนึ่งอาจมีโปรแกรมที่ทำงานอยู่ซึ่งประกอบด้วยส่วนรหัสและส่วนข้อมูล (กอง & กอง) และทั้งสองนี้สามารถครอบครองช่วงของที่อยู่เสมือนขนาดใหญ่กว่าช่วงของที่อยู่ทางกายภาพที่จัดทำโดยพื้นที่เก็บข้อมูลจริงทางกายภาพของ เครื่อง เคล็ดลับคือว่ามีเพียงส่วนเล็ก ๆ ของที่อยู่เสมือนผู้ที่ได้รับการสนับสนุนจากทางหลักหน่วยความจำในช่วงเวลาใด[ แต่ทุกอย่างได้รับการสนับสนุนโดยในท้ายที่สุดการจัดเก็บดิสก์] สิ่งนี้ใช้งานได้เนื่องจากปรากฏการณ์ของสถานที่อ้างอิง: ทุกเวลาคำสั่งในส่วนเล็ก ๆ ที่ต่อเนื่องกันของส่วนโปรแกรมจะถูกดำเนินการและมีเพียงข้อมูลในส่วนต่อเนื่องขนาดเล็กหนึ่งส่วนหรือมากกว่าของส่วนข้อมูลที่มีการดำเนินการตาม[แน่นอนพฤติกรรมจริงซับซ้อนมากขึ้น แต่มันจะเป็นไปตามรูปแบบนี้ในเวลาส่วนใหญ่]
ฉันเข้าใจว่าหน่วยความจำเสมือนเสียโปรแกรมโดยการแสดงหน่วยความจำมากกว่าที่มีอยู่จริง
แรงจูงใจดั้งเดิมสำหรับหน่วยความจำเสมือนเป็นรูปแบบหนึ่งของการจัดการหน่วยความจำเพื่อให้มีพื้นที่ที่อยู่มากกว่าหน่วยความจำกายภาพ
ซอฟต์แวร์สามารถใช้พื้นที่ที่อยู่เต็มของ CPU (เช่นพื้นที่ที่อยู่ 2 ^ 32) ในขณะที่หน่วยความจำกายภาพที่ติดตั้งจริงเป็นเพียงเศษเสี้ยวของจำนวนนั้น
โปรแกรมขนาดใหญ่สามารถพกพาได้ในคอมพิวเตอร์ที่ใช้หน่วยความจำเสมือนโดยไม่ต้องมีข้อกำหนดของหน่วยความจำขนาดใหญ่ (ติดตั้ง)
การใช้หน่วยความจำเสมือนนี้กลับมาในวันที่คอมพิวเตอร์เมนเฟรมและหน่วยความจำแกนเฟอร์ไรต์ (ซึ่งมีความหนาแน่นต่ำทางร่างกายและมีราคาแพง)
แต่ในท้ายที่สุดมันจะต้องแมปโลจิคัลแอดเดรสกับฟิสิคัลแอดเดรสจริง ตอนนี้มันจะเพิ่มหน่วยความจำได้อย่างไร
หน่วยความจำเสมือนได้รับการพัฒนาจากเทคนิคที่ให้พื้นที่ที่อยู่เพิ่มเติมสำหรับโปรแกรม
หน่วยความจำเสมือนเป็นองค์ประกอบสำคัญในการรักษาความปลอดภัยให้กับแต่ละกระบวนการในระบบปฏิบัติการที่ทันสมัยเพื่อให้กระบวนการไม่สามารถเข้าไปยุ่งเกี่ยวกับกระบวนการอื่นและไม่ถูกบุกรุกโดยกระบวนการอื่น
แต่ multiprocessing (อย่าสับสนกับ multiprocess ORS ) กับหน่วยความจำเสมือนยังไม่ให้หน่วยความจำที่ชัดเจนมากขึ้นกว่าระบบหน่วยความจำกายภาพ
แต่ละกระบวนการที่สร้างขึ้นมาพร้อมกับพื้นที่ที่อยู่เสมือนของตนเองเช่นหน่วยความจำเสมือนของตนเอง
จำนวนหน่วยความจำกายภาพที่ใช้จริง (และแมปกับหน่วยความจำเสมือน) กับแต่ละกระบวนการนั้นเป็นแบบไดนามิก โดยทั่วไปแล้วหน่วยความจำเสมือนที่มีรหัส (อาคาข้อความ) และหน้าข้อมูล / เซ็กเมนต์เพื่อดำเนินการประมวลผลจะถูกแมปกับหน่วยความจำกายภาพ (aka resident ในหน่วยความจำ)
รหัสที่ไม่จำเป็น (เนื่องจากไม่ได้ดำเนินการในปัจจุบัน) และข้อมูล (เนื่องจากไม่ได้อ้างอิง / ประมวลผล) จึงไม่จำเป็นต้องมีหน่วยความจำอยู่ตลอดเวลา รหัสและ / หรือหน้าข้อมูล / เซ็กเมนต์สามารถ "สลับออก" ไปยังที่เก็บข้อมูลสำรอง (เช่นพื้นที่สว็อปหรือไฟล์หน้าบน HDD หรือ SSD) และ "สลับ (ย้อนกลับ) ในภายหลัง" ตามต้องการ (aka "ตามต้องการ" )
หน่วยความจำเสมือนช่วยให้การใช้งานหน่วยความจำกายภาพ จำกัด อย่างมีประสิทธิภาพระหว่างกระบวนการต่าง ๆ แต่ละกระบวนการมีพื้นที่ที่อยู่เสมือนที่มีการป้องกันของตัวเอง ผลรวมของหน่วยความจำเสมือนเหล่านี้โดยทั่วไปจะมีขนาดใหญ่กว่าหน่วยความจำกายภาพที่ติดตั้ง
ตอนนี้ "หน่วยความจำที่เพิ่มขึ้น" มาจากมุมมองของระบบไม่ใช่เฉพาะมุมมองของโปรแกรม
หน่วยความจำเสมือนเพิ่มจำนวนข้อมูลที่โปรแกรมสามารถจัดการได้ จากมุมมองของซอฟต์แวร์เรา (โดยทั่วไป) ไม่สนใจว่าจะเก็บข้อมูลไว้ที่ไหน มันสามารถเก็บไว้ในหน่วยความจำ DRAM ทางกายภาพมันสามารถเก็บไว้ในแฟลชไดรฟ์ที่เสียบเข้ากับเครื่องหรือมันอาจถูกเก็บไว้ในแผ่นเสียงหมุน สิ่งที่ซอฟต์แวร์ใส่ใจคือเมื่อขอให้เข้าถึงข้อมูลนั้นจะประสบความสำเร็จ
ในทางปฏิบัติเรายังต้องการให้โปรแกรมทำงานอย่างรวดเร็ว สำหรับการพิจารณาความเร็วเราจะดูแลว่าข้อมูลอยู่ที่ไหน เราต้องการข้อมูลที่เราเข้าถึงบ่อยที่สุดเพื่อเก็บไว้ในฮาร์ดแวร์ซึ่งอนุญาตการเข้าถึงที่เร็วที่สุด โปรแกรมของเราต้องการใช้งาน DRAM โดยสิ้นเชิง อย่างไรก็ตามเรามักจะมี DRAM ไม่เพียงพอที่จะทำเช่นนี้ หน่วยความจำเสมือนเป็นทางออก
ด้วยหน่วยความจำเสมือนระบบปฏิบัติการ "ข้อมูล" ออกจากข้อมูลที่ไม่ได้ใช้ในขณะที่เก็บไว้ในฮาร์ดดิสก์ สิ่งนี้ยังคงเข้าถึงได้เพียงช้า หากโปรแกรมร้องขอข้อมูลที่อยู่บนฮาร์ดดิสก์ระบบปฏิบัติการจะต้องใช้เวลาในการอ่านข้อมูลออกจากดิสก์และย้ายกลับไปที่ DRAM
ในทางทฤษฎีมันสามารถอ่านข้อมูลโดยตรงจากดิสก์ อย่างไรก็ตามมีเหตุผลที่ไม่ได้ทำเช่นนั้น โปรแกรมไม่ต้องการที่จะต้องตระหนักถึงภาวะแทรกซ้อนเหล่านี้ทั้งหมด เราสามารถและเขียนซอฟต์แวร์ซึ่งวางข้อมูลลงบนดิสก์อย่างชาญฉลาด (เรียกว่าแคช) อย่างไรก็ตามมันต้องใช้เวลามากในการทำงาน วิธีที่เร็วที่สุดที่เราสามารถทำได้ในโค้ดคือ:
if data is not in memory
read data from disk into memory
operate on data
ผู้อ่านที่ชาญฉลาดจะสังเกตเห็นว่าแม้ว่าข้อมูลนั้นอยู่ในหน่วยความจำเราต้องมีเงื่อนไขในการตรวจสอบว่ามีข้อมูลอยู่หรือไม่ ช้ากว่าการใช้งานหน่วยความจำโดยตรง
หน่วยความจำเสมือนแก้ปัญหานี้ได้ด้วยการทำฮาร์ดแวร์เช็คอินบน CPU ซีพียูอยู่ในตำแหน่งที่จะทำการดำเนินการหน่วยความจำเสมือนนี้อย่างรวดเร็วมากเพราะสามารถอุทิศฮาร์ดแวร์ให้กับมัน ความพยายามใด ๆ ในการทำสิ่งนี้ในซอฟต์แวร์เพียงอย่างเดียวจะต้องใช้ชิ้นส่วนวัตถุประสงค์ทั่วไปของ CPU ซึ่งช้ากว่าทรานซิสเตอร์โดยเฉพาะ
สิ่งนี้นำไปสู่สาเหตุที่เราหน้าข้อมูลกลับเข้าไปในหน่วยความจำมากกว่าเพียงแค่อ่านจากดิสก์และปล่อยไว้ที่นั้น เราแบ่งหน่วยความจำออกเป็น "หน้า" ซึ่งแต่ละอันถูกทำเครื่องหมายว่ามีอยู่หรือไม่อยู่ในหน่วยความจำ ระบบปฏิบัติการรักษาตารางนี้ในรูปแบบที่สะดวกสำหรับ CPU ที่จะใช้โดยตรง เมื่อใดก็ตามที่โปรแกรมเข้าถึงข้อมูลที่มีอยู่ฮาร์ดแวร์บน CPU จะช่วยให้พวกเขาสามารถเข้าถึงข้อมูลใน DRAM ได้โดยตรง เมื่อไม่มีข้อมูลจะมีการออก "page fault" โดยบอกให้ระบบปฏิบัติการโหลดหน้านั้นออกจากดิสก์ไปยังหน้าหน่วยความจำบางหน้าและอัพเดตตารางเพื่อชี้ CPU ไปที่หน้าทางกายภาพใหม่นี้
กุญแจสำคัญของปัญหานี้คือการลดการใช้งานให้น้อยที่สุด ในทางปฏิบัติเราพบว่าระบบปฏิบัติการดีมากในการเลือกข้อมูลที่จะเก็บไว้ในหน่วยความจำและข้อมูลใดที่จะนำหน้าออกสู่ดิสก์ดังนั้นหน่วยความจำส่วนใหญ่จึงเข้าใช้งานได้โดยไม่ทำให้เกิดความผิดพลาดหน้า
มันทำได้โดยการทำรายการแผนที่ชั่วคราว
เมื่อโปรแกรมเข้าถึงที่อยู่แบบลอจิคัลซีพียูจะค้นหาแผนที่ทางกายภาพสำหรับที่อยู่ทางกายภาพที่สอดคล้องกัน หากพบการเข้าถึงหน่วยความจำดำเนินการตามที่คาดไว้; หากไม่พบจะต้องจัดสรรที่อยู่จริงและเนื้อหาที่โหลดจากที่เก็บข้อมูลอื่น - "พื้นที่สว็อป" หากที่อยู่ทางกายภาพทั้งหมดได้รับการจัดสรรไปยังที่อยู่ทางตรรกะบางแห่งแล้วที่อยู่ทางตรรกะบางแห่งจะต้อง "สลับออก" (เนื้อหาที่บันทึกไว้กลับไปที่พื้นที่สว็อป) เพื่อให้ที่อยู่ทางกายภาพพร้อมใช้งาน
หน่วยความจำที่จัดสรรสูงสุดคือขนาดของพื้นที่สว็อปซึ่งอาจใหญ่กว่าหน่วยความจำที่ติดตั้งมาก อาจเป็นประโยชน์หากคิดว่าพื้นที่สว็อปเป็นหน่วยความจำ "ของจริง" และ RAM เป็นแคชความเร็วสูงสำหรับพื้นที่สว็อป
(นี่ยังห่างไกลจากคำอธิบายที่ละเอียดมีจุดมุ่งหมายเพื่อตอบคำถามทันทีโดยไม่ต้องลงรายละเอียดที่เกี่ยวข้อง แต่ไม่จำเป็น)
แนวคิดพื้นฐานนั้นอาศัยความจริงที่ว่า CPU สมัยใหม่สามารถจัดการตารางการแปลที่ติดตาม "ช่วงที่อยู่ใดที่มีกระบวนการบางอย่างที่ถูกจัดสรรให้ใช้งานและที่อยู่ทางกายภาพใด (คิดว่า A00 ..Axx บรรทัดบนบัสหน่วยความจำ) ปัจจุบันใช้เพื่อจัดเก็บข้อมูลจริง ๆ "ถ้ามี" เพราะ "ไม่มีเลย" เป็นสถานะที่เป็นไปได้และเป็นที่ยอมรับ: ในกรณีนี้เงื่อนไขข้อผิดพลาด (ที่เรียกว่า "page fault") จะถูกยกระดับฮาร์ดแวร์ - และข้อผิดพลาดนี้จะทริกเกอร์ตัวจัดการระดับ OS ที่สามารถโหลดเนื้อหาหน่วยความจำที่เขียนไปยังไฟล์ swap กลับไปยังตำแหน่งว่างในหน่วยความจำกายภาพ (ในกรณีที่อ่าน) หรือค้นหาตำแหน่งที่แท้จริงเพื่อใส่สิ่งของ (ใน กรณีของการเขียน) อัปเดตตารางการแปลข้างต้นและมีเพียงมือควบคุมกลับไปยังกระบวนการที่พยายามเข้าถึงหน่วยความจำนั้น .. และจะไม่มีใครรู้ว่าเกิดอะไรขึ้น
หน่วยความจำเสมือน:
1) อนุญาตให้มีการแมปพื้นที่ที่อยู่เสมือนขนาดใหญ่กับหน่วยความจำฟิสิคัลจำนวนน้อยโดยมี "การสลับ" กับดิสก์หรือ SSD ส่วนเกินหรือ NVRAM และอุปกรณ์อื่น ๆ
2) อนุญาตให้พื้นที่ที่อยู่เสมือนที่ใหญ่กว่า (เช่น 64- บิต) ถูกแมปกับพื้นที่ที่อยู่ทางกายภาพที่เล็กลง (เช่น 32 หรือ 64 บิต)
3) อนุญาตให้พื้นที่ที่อยู่เสมือนที่เล็กกว่า (เช่น 32 บิต) ถูกแมปกับพื้นที่ที่อยู่ทางกายภาพที่ใหญ่ขึ้น (เช่น 40 บิต) และทำให้แอปพลิเคชันรุ่นเก่าสามารถใช้ประโยชน์จาก DRAM ทางกายภาพได้มากกว่า
4) ช่วยให้หน่วยความจำกายภาพที่เราแยกส่วนและไม่ติดกันในพื้นที่ที่อยู่ทางกายภาพที่จะแสดงผลต่อเนื่องกันในพื้นที่ที่อยู่เสมือน
5) ช่วยให้กระบวนการที่จะได้รับพื้นที่ที่อยู่เสมือนของตัวเองและด้วยเหตุนี้จะแยกออกจากกัน
6) ช่วยให้ที่อยู่เสมือนที่แตกต่างกันที่เกิดขึ้นเพื่อแบ่งปันค่าข้อมูลเดียวกันในการจัดสรรหน้าทางกายภาพเดียว
สิ่งนี้สามารถเกิดขึ้นได้ในกระบวนการเดียวหรือระบบปฏิบัติการ - ระบบปฏิบัติการ BSD UNIX ส่วนใหญ่มีหน้าเป็นศูนย์แบบอ่านอย่างเดียวที่สามารถแมปเข้ากับหน้าเสมือนใด ๆ ที่ไม่เติมศูนย์โดยทั่วไปคือ COW (คัดลอกเมื่อเขียน - อ่านอย่างเดียว และหน้ายกเลิกการแบ่งปันและเขียนได้)
มันสามารถเกิดขึ้นระหว่างกระบวนการ - เช่น UNIX fork () สร้างกระบวนการลูกที่ใช้หน่วยความจำเสมือนเกือบทั้งหมดในลักษณะวัว
มันสามารถเกิดขึ้นได้ระหว่าง OS ต่างๆเช่นเกสต์เกสต์บนโฮสต์เครื่องเสมือนสามารถมีหน้าที่ซ้ำซ้อน COW ที่ใช้ร่วมกัน ฯลฯ (การโจมตีด้านความปลอดภัยล่าสุดบางครั้งใช้ประโยชน์จากสิ่งนี้)
7) หน่วยความจำเสมือนสามารถอนุญาตให้บางส่วนของพื้นที่ที่อยู่เสมือนถูกแมปไปยังไฟล์หรือหน่วยความจำที่แมปกับโปรเซสเซอร์อื่น ๆ ไม่ว่าจะในระบบมัลติโปรเซสเซอร์เดียวกันหรือทั่วอินเทอร์เน็ต