กลับไปหน้าบทความ

อ่าน 6 นาที

หน้า (หน่วยความจำคอมพิวเตอร์)

หน้า หน่วย ความจำ หรือ หน้าเสมือน คือบล็อก หน่วยความจำเสมือน ที่มีความยาวคงที่ต่อเนื่องกัน ซึ่งอธิบายโดยรายการเดียวใน ตารางหน้า...

หน้า (หน่วยความจำคอมพิวเตอร์)

หน้าหน่วยความจำหรือหน้าเสมือนคือบล็อกหน่วยความจำเสมือน ที่มีความยาวคงที่ต่อเนื่องกัน ซึ่งอธิบายโดยรายการเดียวในตารางหน้าเป็นหน่วยข้อมูลที่เล็กที่สุดสำหรับการจัดการหน่วยความจำในระบบปฏิบัติการที่ใช้หน่วยความจำเสมือน ในทำนองเดียวกันเฟรมหน้า คือบล็อก หน่วยความจำทางกายภาพที่มีความยาวคงที่ต่อเนื่องกันที่เล็กที่สุดซึ่งระบบปฏิบัติการจะแมปหน้าหน่วยความจำเข้าไป[ 1 ] [ 2 ] [ 3 ]

การถ่ายโอนหน้าระหว่างหน่วยความจำหลักและหน่วยเก็บข้อมูลเสริม เช่นฮาร์ดดิสก์ไดรฟ์เรียกว่าเพจจิ้งหรือสวอปปิ้ง[ 4 ]

คำอธิบาย

หน่วยความจำคอมพิวเตอร์ถูกแบ่งออกเป็นหน้าๆ เพื่อให้สามารถค้นหาข้อมูลได้รวดเร็วยิ่งขึ้น

แนวคิดนี้ตั้งชื่อตามการเปรียบเทียบกับหน้าหนังสือที่พิมพ์ หากผู้อ่านต้องการค้นหาคำที่ 5,000 ในหนังสือ พวกเขาสามารถนับจากคำแรกได้ ซึ่งจะเสียเวลามาก จะเร็วกว่ามากหากผู้อ่านมีรายการจำนวนคำในแต่ละหน้า จากรายการนี้ พวกเขาสามารถระบุได้ว่าคำที่ 5,000 ปรากฏอยู่ในหน้าใด และต้องนับจำนวนคำในหน้านั้น รายการคำต่อหน้าของหนังสือเล่มนี้เปรียบได้กับตารางหน้า ของ ระบบไฟล์คอมพิวเตอร์[ 5 ]

ขนาดหน้ากระดาษ

การแลกเปลี่ยนขนาดหน้ากระดาษ

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

ขนาดตารางหน้า

ระบบที่มีขนาดหน้าหน่วยความจำเล็กกว่าจะใช้หน้าหน่วยความจำมากกว่า ทำให้ต้องใช้ตารางหน้าหน่วยความจำที่ใช้พื้นที่มากขึ้น ตัวอย่างเช่น หากพื้นที่แอดเดรสเสมือน ขนาด 2³²ถูกแมปไปยังหน้าหน่วยความจำขนาด 4  กิโลไบต์ ( 2¹²ไบต์) จำนวนหน้าหน่วยความจำเสมือนจะเป็น2²⁰  = ( 2³²  / 2¹² ) อย่างไรก็ตาม หากเพิ่มขนาดหน้าหน่วยความจำเป็น 32 กิโลไบต์ (2¹⁵ ไบต์ ) จะต้องการเพียง2¹⁷หน้าหน่วยความจำเท่านั้น อัลกอริทึมการแบ่งหน้าหน่วยความจำแบบหลายระดับสามารถลดต้นทุนหน่วยความจำในการจัดสรรตารางหน้าหน่วยความจำขนาดใหญ่สำหรับแต่ละกระบวนการได้ โดยการแบ่งตารางหน้าหน่วยความจำออกเป็นตารางย่อยๆ ซึ่งเป็นการแบ่งตารางหน้าหน่วยความจำอย่างมีประสิทธิภาพ

การใช้งาน TLB

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

การแตกตัวภายใน

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

ยกตัวอย่างเช่น สมมติว่าขนาดหน้าหน่วยความจำคือ 1024 ไบต์ หากกระบวนการหนึ่งจัดสรรพื้นที่ 1025 ไบต์ จะต้องใช้สองหน้าหน่วยความจำ ทำให้เหลือพื้นที่ว่าง 1023 ไบต์ (โดยหน้าหน่วยความจำหนึ่งใช้พื้นที่ทั้งหมด 1024 ไบต์ และอีกหน้าหนึ่งใช้เพียง 1 ไบต์)

การเข้าถึงดิสก์

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

การรับขนาดหน้าเว็บโดยใช้โปรแกรม

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

ระบบปฏิบัติการที่คล้ายยูนิกซ์

ระบบ ที่คล้าย Unixsysconf() อาจใช้ ฟังก์ชันระบบ[ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ]ดังที่แสดงในตัวอย่างต่อไปนี้ที่เขียนด้วยภาษาการเขียนโปรแกรม C

#include <stdio.h> #include <unistd.h> /* sysconf(3) */int main ( void ) { printf ( "ขนาดหน้าหน่วยความจำสำหรับระบบนี้คือ %ld ไบต์\n " , sysconf ( _SC_PAGESIZE )); /* _SC_PAGE_SIZE ก็ใช้ได้เช่นกัน */ส่งคืนค่า0 ; }

ในระบบที่คล้าย Unix หลายระบบgetconfสามารถใช้ยูทิลิตี้บรรทัดคำสั่งได้[ 12 ] [ 13 ] [ 14 ] ตัวอย่างเช่นgetconf PAGESIZEจะส่งคืนขนาดหน้าเป็นไบต์

ระบบปฏิบัติการที่ใช้ Windows

ระบบปฏิบัติการที่ใช้ Win32เช่น ระบบปฏิบัติการในตระกูล Windows 9xและWindows NTอาจใช้ฟังก์ชันระบบGetSystemInfo()[ 15 ] [ 16 ]จากkernel32.dll

#include <stdio.h> #include <windows.h>int main ( void ) { SYSTEM_INFO si ; GetSystemInfo ( & si );printf ( "ขนาดหน้ากระดาษสำหรับระบบนี้คือ %u ไบต์\n " , si . dwPageSize );ส่งคืนค่า0 ; }

ขนาดหน้าหลายขนาด

สถาปัตยกรรมชุดคำสั่งบางแบบสามารถรองรับขนาดเพจได้หลายขนาด รวมถึงเพจที่มีขนาดใหญ่กว่าขนาดเพจมาตรฐานอย่างมาก ขนาดเพจที่ใช้งานได้นั้นขึ้นอยู่กับสถาปัตยกรรมชุดคำสั่ง ประเภทของโปรเซสเซอร์ และโหมดการทำงาน (การกำหนดแอดเดรส) ระบบปฏิบัติการจะเลือกขนาดหนึ่งขนาดหรือมากกว่าจากขนาดที่สถาปัตยกรรมรองรับ โปรดทราบว่าไม่ใช่ทุกโปรเซสเซอร์ที่จะใช้งานขนาดเพจขนาดใหญ่ที่กำหนดไว้ทั้งหมด การรองรับเพจขนาดใหญ่ (ที่รู้จักกันในชื่อ "huge pages" ในLinux , "superpages" ในFreeBSDและ "large pages" ใน ศัพท์เฉพาะของ Microsoft WindowsและIBM AIX ) ช่วยให้ได้ "ข้อดีของทั้งสองโลก" คือ ลดภาระของแคช TLB (บางครั้งเพิ่มความเร็วได้มากถึง 15%) สำหรับการจัดสรรขนาดใหญ่ ในขณะที่ยังคงใช้หน่วยความจำในระดับที่เหมาะสมสำหรับการจัดสรรขนาดเล็ก

ขนาดหน้าในสถาปัตยกรรมต่างๆ[ 17 ]
สถาปัตยกรรมขนาดหน้าเว็บที่เล็กที่สุดขนาดหน้าเว็บที่ใหญ่ขึ้น
IA-32 (32 บิตx86 ) [ 18 ]4 กิโลไบต์MiBในโหมด PSE , 2 MiB ในโหมด PAE [ 19 ]
x86-64 [ 18 ]4 กิโลไบต์2 MiB, 1  GiB (เฉพาะเมื่อ CPU มีPDPE1GBแฟล็ก)
IA-64 ( อิทาเนียม ) [ 20 ]4 กิโลไบต์8 กิโลไบต์, 64 กิโลไบต์, 256 กิโลไบต์, 1 กิโลไบต์, 4 กิโลไบต์, 16 กิโลไบต์, 256 กิโลไบต์[ 19 ]
พาวเวอร์ ISA [ 21 ]4 กิโลไบต์64 กิโลไบต์, 16 มิไบต์, 16 กิกะไบต์
SPARC v8 พร้อม SPARC Reference MMU [ 22 ]4 กิโลไบต์256 กิโลไบต์, 16 มิไบต์
สถาปัตยกรรม UltraSPARC 2007 [ 23 ]8 กิโลไบต์64 กิโลไบต์, 512 กิโลไบต์ (ไม่บังคับ), 4 มิลลิไบต์, 32 มิลลิไบต์ (ไม่บังคับ), 256 มิลลิไบต์ (ไม่บังคับ), 2 กิกะไบต์ (ไม่บังคับ), 16 กิกะไบต์ (ไม่บังคับ)
ARMv7 [ 24 ]4 กิโลไบต์64 กิโลไบต์, 1 มิไบต์ ("ส่วน"), 16 มิไบต์ ("ส่วนย่อย") (กำหนดโดยการใช้งานเฉพาะ)
AArch64 [ 25 ]4 กิโลไบต์16 กิกะบิต, 64 กิกะบิต, 2 เมกะไบต์, 32 เมกะไบต์, 512 เมกะไบต์, 1 กิกะบิต
RISCV32 [ 26 ]4 กิโลไบต์ 4 เมกะไบต์ ("เมกะเพจ")
RISCV64 [ 26 ]4 กิโลไบต์ 2 MiB ("เมกะเพจ"), 1 GiB ("กิกะเพจ"), 512 GiB ("เทราเพจ", สำหรับซีพียูที่มีพื้นที่แอดเดรส 43 บิตขึ้นไปเท่านั้น), 256 TiB ("เพตาเพจ", สำหรับซีพียูที่มีพื้นที่แอดเดรส 57 บิตขึ้นไปเท่านั้น)

เริ่มจากPentium ProและAMD Athlonโปรเซสเซอร์x86รองรับเพจขนาด 4 MiB (เรียกว่าPage Size Extension ) (เพจขนาด 2 MiB หากใช้PAE ) นอกเหนือจากเพจขนาด 4 KiB มาตรฐาน โปรเซสเซอร์ x86-64 รุ่นใหม่กว่า เช่นโปรเซสเซอร์ AMD64 รุ่นใหม่กว่าของAMD และโปรเซสเซอร์ Westmere [ 27 ]และXeon รุ่นหลังๆ ของIntelสามารถใช้เพจขนาด 1 GiB ในโหมด long modeได้IA-64รองรับขนาดเพจได้มากถึงแปดขนาด ตั้งแต่ 4 KiB จนถึง 256 MiB และสถาปัตยกรรมอื่นๆ บางส่วนก็มีคุณสมบัติที่คล้ายกัน

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

อย่างไรก็ตามSGI IRIXมีการสนับสนุนทั่วไปสำหรับขนาดหน้าหลายขนาด แต่ละกระบวนการสามารถให้คำแนะนำได้ และระบบปฏิบัติการจะใช้ขนาดหน้าที่ใหญ่ที่สุดที่เป็นไปได้สำหรับพื้นที่แอดเดรสที่กำหนดโดยอัตโนมัติ[ 28 ]งานในภายหลังเสนอการสนับสนุนระบบปฏิบัติการแบบโปร่งใสสำหรับการใช้ขนาดหน้าผสมกันสำหรับแอปพลิเคชันที่ไม่ได้รับการแก้ไขผ่านการจองที่สามารถแย่งชิงได้ การเลื่อนขั้นแบบฉวยโอกาส การลดระดับแบบคาดการณ์ และการควบคุมการแตกกระจาย[ 29 ]

Linuxรองรับ huge pages บนสถาปัตยกรรมหลายแบบมาตั้งแต่ซีรีส์ 2.6 ผ่านทางhugetlbfsระบบไฟล์[ 30 ]และhugetlbfsตั้งแต่เวอร์ชัน 2.6.38 เป็นต้นไป[ 31 ] Windows Server 2003 (SP1 และใหม่กว่า), Windows VistaและWindows Server 2008รองรับ huge pages ภายใต้ชื่อ large pages [ 32 ] Windows 2000และWindows XPรองรับ large pages ภายใน แต่ไม่ได้เปิดเผยให้แอปพลิเคชันใช้งาน[ 33 ]การสำรอง large pages ภายใต้ Windows ต้องใช้สิทธิ์ที่ผู้ดูแลระบบต้องมอบให้แก่ผู้ใช้ เนื่องจาก large pages ไม่สามารถสลับออกได้ภายใต้ Windows ตั้งแต่เวอร์ชัน 9 เป็นต้นไปSolarisรองรับ large pages บนSPARCและ x86 [ 34 ] [ 35 ] FreeBSD 7.2-RELEASE มีคุณสมบัติ superpages [ 36 ]โปรดทราบว่าจนกระทั่งเมื่อไม่นานมานี้ใน Linux แอปพลิเคชันจำเป็นต้องได้รับการแก้ไขเพื่อให้สามารถใช้ huge pages ได้ เคอร์เนลเวอร์ชัน 2.6.38 ได้แนะนำการสนับสนุนการใช้งาน huge pages แบบโปร่งใส[ 31 ]บนเคอร์เนล Linux ที่รองรับ huge pages แบบโปร่งใส รวมถึง FreeBSD และSolarisแอปพลิเคชันจะใช้ประโยชน์จาก huge pages โดยอัตโนมัติ โดยไม่ต้องมีการแก้ไข[ 36 ]

ดูเพิ่มเติม

อ่านเพิ่มเติม

  • Dandamudi, Sivarama P. (2003). พื้นฐานขององค์ประกอบและการออกแบบคอมพิวเตอร์ (ฉบับพิมพ์ครั้งที่ 1). Springer . หน้า  740–741 . ISBN 0-387-95211-X.
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Page_(computer_memory)&oldid=1316594065 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ หน้า (หน่วยความจำคอมพิวเตอร์)

หน้า หน่วย ความจำ หรือ หน้าเสมือน คือบล็อก หน่วยความจำเสมือน ที่มีความยาวคงที่ต่อเนื่องกัน ซึ่งอธิบายโดยรายการเดียวใน ตารางหน้า...

คำอธิบาย

หน่วยความจำคอมพิวเตอร์ถูกแบ่งออกเป็นหน้าๆ เพื่อให้สามารถค้นหาข้อมูลได้รวดเร็วยิ่งขึ้น

การแลกเปลี่ยนขนาดหน้ากระดาษ

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

การรับขนาดหน้าเว็บโดยใช้โปรแกรม

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