พื้นที่ที่อยู่เสมือน

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา
พื้นที่ที่อยู่เสมือนและความสัมพันธ์ของพื้นที่ที่อยู่จริง.svg

ในคอมพิวเตอร์ซึ่งเป็นพื้นที่ที่อยู่เสมือน ( VAS ) หรือพื้นที่ที่อยู่เป็นชุดของช่วงของที่อยู่เสมือนว่าระบบปฏิบัติการทำให้สามารถใช้ได้กับกระบวนการ[1]ช่วงของที่อยู่เสมือนมักจะเริ่มต้นที่ที่อยู่ต่ำและสามารถขยายไปยังที่อยู่สูงสุดที่อนุญาตโดยสถาปัตยกรรมชุดคำสั่งของคอมพิวเตอร์และรองรับโดยการใช้ขนาดตัวชี้ของระบบปฏิบัติการซึ่งสามารถเป็น 4 ไบต์สำหรับ32 บิตหรือ 8 ไบต์สำหรับเวอร์ชันระบบปฏิบัติการ64 บิตซึ่งให้ประโยชน์หลายประการ ซึ่งหนึ่งในนั้นคือการรักษาความปลอดภัยผ่านแยกกระบวนการสมมติว่าแต่ละขั้นตอนจะได้รับการแยกพื้นที่ที่อยู่

ตัวอย่าง

ในคำอธิบายต่อไปนี้ คำศัพท์ที่ใช้จะเฉพาะกับระบบปฏิบัติการWindows NTแต่แนวคิดนี้ใช้ได้กับระบบปฏิบัติการหน่วยความจำเสมือนอื่นๆ

เมื่อมีการเรียกใช้แอปพลิเคชันใหม่บนระบบปฏิบัติการ32 บิตกระบวนการจะมี4 GiB VAS: ที่อยู่หน่วยความจำแต่ละที่อยู่ (ตั้งแต่ 0 ถึง 2 32 -1) ในพื้นที่นั้นสามารถมีไบต์เดียวเป็นค่าได้ ในขั้นต้น ไม่มีค่าใดเลย ('-' หมายถึงไม่มีค่า) การใช้หรือการตั้งค่าในเช่น VAS จะทำให้เกิดข้อยกเว้นหน่วยความจำ

           0 4 GiB
VAS |----------------------------------------------------------|

จากนั้นไฟล์ปฏิบัติการของแอปพลิเคชันจะถูกแมปเข้ากับ VAS ที่อยู่ในกระบวนการ VAS จะจับคู่กับไบต์ในไฟล์ exe ระบบปฏิบัติการจัดการการทำแผนที่:

           0 4 GiB
VAS |---vvv -------------------------------------|
การทำแผนที่ |||
ไฟล์ไบต์ app

โวลต์มีค่าจากไบต์ในไฟล์แมป จากนั้นไฟล์DLL ที่จำเป็นจะถูกแมป (ซึ่งรวมถึงไลบรารีที่กำหนดเองเช่นเดียวกับไฟล์ระบบ เช่นkernel32.dllและuser32.dll ):

           0 4 GiB
VAS |---vvv --------vvvvvv---vvvv-------------------|
การทำแผนที่ ||| |||||||| ||||
ไฟล์ไบต์ผู้ใช้เคอร์เนลแอป

กระบวนการจะเริ่มดำเนินการไบต์ในไฟล์ exe อย่างไรก็ตาม วิธีเดียวที่กระบวนการสามารถใช้หรือตั้งค่า '-' ใน VAS ได้คือการขอให้ระบบปฏิบัติการจับคู่ค่าเหล่านี้กับไบต์จากไฟล์ วิธีการทั่วไปที่จะใช้หน่วยความจำเสริมในลักษณะนี้คือการ map ไปยังแฟ้มเพจ ไฟล์เพจเป็นไฟล์เดียว แต่สามารถจับคู่ชุดไบต์ต่อเนื่องกันหลายชุดใน VAS ได้:

           0 4 GiB
VAS |---vvv --------vvvvvv---vvvv ----vv---v ----vvv--|
การทำแผนที่ ||| |||||||| |||| || | |||
ไฟล์ไบต์ผู้ใช้เคอร์เนลแอป system_page_file

และส่วนต่างๆ ของไฟล์เพจสามารถจับคู่กับ VAS ของกระบวนการต่างๆ ได้:

           0 4 GiB
VAS 1 |---vvvv --------vvvvvv---vvvv----vv---v ----vvv--|
การทำแผนที่ |||| |||||||| |||| || | |||
ไฟล์ไบต์ app1 app2 เคอร์เนลผู้ใช้ system_page_file
การทำแผนที่ |||| |||||||| |||| || |
VAS 2 |--------vvvv--vvvvvv---vvvv-------vv---v------|

ในMicrosoft Windows 32 บิต ตามค่าเริ่มต้น จะมีเพียง2 GiBเท่านั้นที่พร้อมใช้งานสำหรับกระบวนการสำหรับการใช้งานของตนเอง [2]อีก2 GiBถูกใช้โดยระบบปฏิบัติการ ใน Microsoft Windows รุ่น 32 บิตที่ใหม่กว่า เป็นไปได้ที่จะขยายพื้นที่ที่อยู่เสมือนของโหมดผู้ใช้เป็น3 GiBในขณะที่เหลือเพียง1 GiBสำหรับพื้นที่ที่อยู่เสมือนของโหมดเคอร์เนลโดยทำเครื่องหมายโปรแกรมเป็น IMAGE_FILE_LARGE_ADDRESS_AWARE และเปิดใช้งานสวิตช์ /3GB ใน ไฟล์ boot.ini [3] [4]

ใน Microsoft Windows 64 บิต ในกระบวนการรันโปรแกรมปฏิบัติการที่เชื่อมโยงกับ /LARGEADDRESSAWARE:NO ระบบปฏิบัติการจะจำกัดส่วนของโหมดผู้ใช้ของพื้นที่ที่อยู่เสมือนของกระบวนการเป็น 2 GiB สิ่งนี้ใช้กับโปรแกรมเรียกทำงานทั้งแบบ 32 และ 64 บิต [5] [6]กระบวนการที่รันโปรแกรมเรียกทำงานที่เชื่อมโยงกับตัวเลือก /LARGEADDRESSAWARE:YES ซึ่งเป็นค่าเริ่มต้นสำหรับ Visual Studio 2010 รุ่น 64 บิตและใหม่กว่า[7]มีสิทธิ์เข้าถึงพื้นที่ที่อยู่เสมือนมากกว่า2 GiB : ขึ้น สูงสุด4 GiBสำหรับไฟล์สั่งการ 32 บิต สูงสุด8 TiBสำหรับไฟล์เรียกทำงาน 64 บิตใน Windows จนถึง Windows 8 และสูงสุด128 TiBสำหรับไฟล์สั่งการ 64 บิตใน Windows 8.1 และใหม่กว่า [4][8]

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

ลินุกซ์

สำหรับx86ซีพียูลินุกซ์ 32 บิตช่วยให้แยกผู้ใช้และที่อยู่เคอร์เนลช่วงในรูปแบบที่แตกต่างกัน: 3G / 1G ผู้ใช้ / เคอร์เนล (เริ่มต้น), 1G / 3G ผู้ใช้ / เคอร์เนลหรือ2G / 2G ผู้ใช้ [9]

ดูเพิ่มเติม

หมายเหตุ

  1. ^ ไอบีเอ็ม คอร์ปอเรชั่น "ช่องว่างที่อยู่คืออะไร" . สืบค้นเมื่อ24 สิงหาคม 2013 .
  2. ^ "พื้นที่ที่อยู่เสมือน" . เอ็มเอสดีเอ็น ไมโครซอฟต์.
  3. ^ "โครงสร้าง LOADED_IMAGE" เอ็มเอสดีเอ็น ไมโครซอฟต์.
  4. ^ "4 กิกะไบต์ Tuning: bcdedit และ Boot.ini" เอ็มเอสดีเอ็น ไมโครซอฟต์.
  5. ^ "/LARGEADDRESSAWARE (จัดการที่อยู่ขนาดใหญ่)" . เอ็มเอสดีเอ็น ไมโครซอฟต์.
  6. ^ "พื้นที่ที่อยู่เสมือน" . เอ็มเอสดีเอ็น ไมโครซอฟต์.
  7. ^ "/LARGEADDRESSAWARE (จัดการที่อยู่ขนาดใหญ่)" . เอ็มเอสดีเอ็น ไมโครซอฟต์.
  8. ^ "/LARGEADDRESSAWARE (จัดการที่อยู่ขนาดใหญ่)" . เอ็มเอสดีเอ็น ไมโครซอฟต์.
  9. ^ "เคอร์เนลลินุกซ์ - x86: การแยกหน่วยความจำ" .

อ้างอิง