Please enable JavaScript.
Coggle requires JavaScript to display documents.
บทที่ 7 การจัดการหน่วยความจำ - Coggle Diagram
บทที่ 7 การจัดการหน่วยความจำ
บทที่ 7 การจัดการหน่วยความจำ
ประเภทของหน่วยความจำ
หน่วยความจำหลัก
เป็นหน่วยความจำความเร็วสูงใช้สำหรับเก็บคำสั่งและข้อมูลระหว่างการทำงาน โดยเป็นหน่วยความจำที่ซีพียูสามารถเข้าถึงได้โดยตรงและรวดเร็ว
หน่วยความจำสำรอง
เป็นหน่วยความจำที่มีความเร็วน้อยกว่าหน่วยความจำสองประเภทแรก ใช้สำหรับเก็บข้อมูลที่มีขนาดใหญ่ และเป็นข้อมูลที่ยังไม่ต้องการนำมาประมวลผล
หน่วยความจำภายใน
ประกอบด้วยรีจีสเตอร์ความเร็วสูง โดยหน่วยความจำส่วนนี้ถูกใช้สำหรับเก็บคำสั่ง และข้อมูลที่ต้องการทำงานด้วยความเร็วสูง และเป็นหน่วยความจำที่ซีพียูสามารถเข้าถึงได้โดยตรงและเร็ว
แนวคิดพื้นฐานการจัดการหน่วยความจำหลัก
หน้าที่ของระบบปฏิบัติการในการจัดการกับหน่วยความจำหลัก
ตัดสินใจว่าควรจัดสรรหน่วยความจำหลักขนาดเท่าไหร่ ให้กับงานใด ณ ตำแหน่งใดของหน่วยความจำหลัก
จัดสรรหน่วยความจำหลักให้งานที่ได้เลือกแล้ว
ควบคุมดูแลสถานะของแต่ละตำแหน่งของหน่วยความจำหลัก
ปลดปล่อยหน่อยความจำหลักให้ว่าง เมื่อทำงานเสร็จแล้ว
คำสั่งที่ถูกดำเนินการได้โดยซีพียู จะต้องถูกดึงมาและเก็บที่ตำแหน่งในหน่วยความจำ รูปแบบการทำงานของรอบคำสั่งเครื่องและการปฏิบัติงานตามคำสั่ง จะมีขั้นตอนการทำงานดังนี้
ขั้นตอนที่ 2 ถอดรหัส(Decode) คือ การทำงานต่อจากขั้นตอนที่ 1 โดยนำคำสั่งนี้ไปทำการถอดรหัส ซึ่งอาจจะได้ตัวดำเนินการหรือข้อมูล เพื่อใช้กับคำสั่งถัดไป
ขั้นตอนที่ 3 กระทำการ(Execution) คือ การทำงานต่อจากขั้นตอนที่ 2 ซึ่งหลังจากนั้นคำสั่งจะทำงานตามตัวดำเนินการที่ได้
ขั้นตอนที่ 1 ไปนำมา(Fetch) คือ การเริ่มต้นการทำงานซึ่งระบบจะทำการดึงคำสั่งแรกจากหน่วยความจำ
ขั้นตอนที่ 4 จัดเก็บ(Store) ผลลัพธ์จะถูกเก็บกลับไปในหน่วยความหลักต่อไป
หน่วยความจำหลัก
เป็นศูนย์กลางของการทำงานต่างๆของระบบคอมพิวเตอร์ในปัจจุบันประกอบไปด้วยอาร์เรย์ขนาดใหญ่(Large array) ซึ่งภายในประกอบไปด้วยเวิร์ด(Words)และไบต์(Bytes) โดยแต่ละไปไบต์จะมีแอดเดรส(Address) บอกตำแหน่งของตัวเอง
การเชื่อมโยงตำแหน่ง
จำแนกการเชื่อมโยงของคำสั่งและตำแหน่งของข้อมูล การกำหนดเลขที่อยู่ของโปรแกรม เพื่อแปลงไปเป็นเลขที่อยู่ในหน่วยความจำหลก สามารถทำได้ในช่วงเวลาต่างๆของการทำงานของโปรแกรมมีขั้นตอนดังนี้
เวลาโหลดโปรแกรม
โหลดเดอร์ เป็นซอฟต์แวร์ระบบที่จะนำโปรแกรมที่ต้องการเข้ามาบรรจุหน่วยความจำหลัก ดังนั้นทุกครั้งที่ทำการโหลดโปรแกรมมาใช้งาน โหลดเดอร์จะต้องหาตำแหน่งของหน่วยความจำหลักที่จะโหลดโปรแกรมเข้ามาโดยโหลดเดอร์ต้องติดต่อกับระบบปฏิบัติการ หากมีการเรียกใช้โปรแกรมหลายครั้ง โหลดเดอร์จำเป็นต้องหาตำแหน่งของหน่วยความจำหลักทุกครั้ง โดยไม่จำเป็นต้องเป็นตำแหน่งเดิม
เวลากระทำงาน
โปรแกรมต้นฉบับถูกแบ่งออกเป็นส่วนๆ โดยแต่ละส่วนถูกใช้งานไม่พร้อมกัน เมื่อนำโปรแกรมผ่านตัวคอมไพเลอร์ จะได้ออบเจ็กโปรแกรมที่อ้างถึงตำแหน่งที่อยู่ในหน่วยความจำหลักด้วยเลขเชิงสัมพัทธ์ และเก็บไว้ในหน่วยความจำสำรอง เมื่อต้องการใช้งานจะมีโหลดเดอร์แบบไอนามิก ที่จะโหลดเฉพาะส่วนของโปรแกรมที่ต้องการใช้
เวลาแปลโปรแกรม
เมื่อนำโปรแกรมต้นฉบับที่มีการระบุตำแหน่งของหน่วยความจำหลักด้วยเลขที่อยู่สัมบูรณ์มาผ่านการแปลด้วยคอมไพเลอร์ จะได้อ๊อบเจ็กโปรแกรมที่มีการอ้างถึงตำแหน่งของหน่วยความจำหลักด้วยเลขที่อยู่สัมบูรณ์ เมื่อต้องการให้โปรแกรมส่วนนี้ทำงาน ระบบสามารถเรียกโหลดเดอร์สัมบูรณ์ เพื่อทำหน้าที่โหลดเพียงอย่างเดียว
Dynamic Loading
Routine จะไม่ถูกโหลดจนกระทั่งถูกเรียกใช้งาน เป็นการใช้หน่วยความจำเป็นประโยชน์มากกว่า โปรแกรมย่อยที่ไม่ได้ใช้ จะไม่ถูกโหลด
Dynamic Linking and Shared Libraries
Linking จเลื่อนออกไปจนกระทั่งอยู่ในช่วง Execution time มีชุดคำสั่งเล็กๆ เรียกว่า Stub ใช้สำหรับ Locate ไลบรารีของโปรแกรมย่อยที่เหมาะสมในหน่วยความจำหลัก Stub จะแทนที่ตัวเองด้วยแอดเดรสของโปรแกรมย่อยและจะทำตามโปรแกรมย่อยนั้น
ระบบปฏิบัติการจำเป็นต้องตรวจดูว่าโปรแกรมย่อยนั้นต้องอยู่ภายใต้แอดเดรสของโฑรเซสในหน่วยความจำ
Dynamic linking มีประโยชน์โดยเฉพาะอย่างยิ่งสำหรับการใช้ประโยชน์สำหรับการใช้ระบบไลบรารีในการแบ่งปันไลบรารี
ทำหน้าที่เก็บชนิดกระบวนการในการประมวลผลคำสั่ง เพื่อให้หน่วยประมวลผลกลาง นำไปใช้ในการประมวลแล้วจึงทำการส่งผลลัพธ์ของคำสั่งนั้นๆ กลับมาจัดเก็บไว้ในหน่วยความจำหลักอีกที
ตำแหน่งที่ว่างทางกายภาพกับตำแหน่งที่ว่างทางตรรกะ
ตำแหน่งที่ถูกสร้างโดยซีพียูมักหมายถึงตำแหน่งทางตรรกะ
ตำแหน่งในหน่วยความจำ หมายถึง Physical address เป็นตำแหน่งหน่วยความจำคือ ตำแหน่งทางกายภาพ Logical และ Physical address เป็นตำแหน่งเดีนวกันกับ Compile time และ Load time การเชื่อมโยง Logical address เข้ากับแต่ละ Physical address ถือเป็นหัวใจในการจัดการหน่วยความจำหลัก
ช่วง Execution time จะมีตำแหน่งทางตรรกะและทางกายภาพต่างกัน ด้วยเหตุนี้เราจึงมักกอ้างถึงตำแหน่งทางตรรกะว่า
ตำแหน่งเสมือน
กลุ่มของตำแหน่งทางตรรกะทั้งหมดที่ถูกสร้างโดยโปรแกรมถูกเรียกว่า
ตำแหน่งที่ว่างทางตรรกะ
คือ ตำแหน่งที่เสมือนที่อ้างอิงโดยโปรแกรม
ตำแหน่งที่ว่างทางกายภาพที่เกี่ยวข้องกับตำแหน่งทางตรรกะ เรียกว่า
ตำแหน่งที่ว่างทางกายภาพ
การย้ายเลขที่อยู่
คือ เมื่อบรรจะกระบวนการเช้ามาในหน่วยความจำ Logical address จะต้องถูกแปลงเป็น Physical address
การจับคู่ของตำแหน่งเสมือนกับตำแหน่งจริงทางกายภาพจะถูกทำโดยหน่วยความจำ
การจัดการหน่วยความจำ
หน้าที่ของระบบปฏิบัติการในการจัดการกับหน่วยความจำหลัก คือ การควบคุมสถานะแต่ละตำแหน่งของหน่วยความจำหลัก พร้อมตัดสินว่าควรจัดสรรหน่วยความจำหลักขนาดเท่าไหร่ให้กับตำแหน่งและโพรเซสใด และจัดสรรหน่วยความจำหลักให้โพรเซสมราได้เลือกแล้วปลดปล่อยหน่วยความจำหลักให้ว่างเมื่อทำงานเสร็จแล้ว
วิธีการซ้อนทับ
โพรเซสที่จะทำงานด้วยวิธีนี้ จะต้องถูกแบ่งออกเป็นส่วนย่อยที่อิสระต่อกัน คือแต่ละส่วนไม่จำเป็นต้องถูกเรียกใช้งานพร้มกัน โดยระบบจะนำเฉพาะส่วนของโพรเซสที่ต้องการใช้เข้ามาบรรจุในหน่วยความจำหลัก ส่วนอื่นๆของโพรเซสจะเก็บไว้ที่หน่อยความจำสำรอง
วิธีการสับเปลี่ยน
หน่วยความจำหลักมีขนาดพื้นที่จำกัด ในบางครั้งระบบมีพื้นที่หน่วยความจำไม่เพียงพอกับการใช้งาน ทำให้จำเป็นต้องนำบางโพรเซสออกจากหน่วยความจำหลักก่อน เพื่อนที่จะให้หน่วยความจำมีพื้นที่ว่างพอสำหรับบรรจุโพรเซสอื่น เป็นการสับเปลี่ยนให้โพรเซสอื่นทำงาน
การจัดสรรหน่วยความจำแบบต่อเนื่อง
การจัดสรรพื้นที่แบบขนาดคงที่
หรือเรียกอีกอย่างหนึ่งว่า แบบส่วนเดียว วิธีนี้หน่วยความจำจะไม่ถูกแบ่งพื้นที่ โดยเกี่ยวข้องกับรีจิสเตอร์ย้ายตำแหน่ง ในการแยกโพรเซสในส่วนของผู้ใช้ออกจากส่วนของระบบปฏิบัติการ
ข้อดี
ความง่ายในการจัดสรรหน่วยความจำหลัก ทำให้ลดความซ้ำซ้อนของระบบปฏิบัติการลงและง่ายในการเขียนโปรแกรม
ข้อเสีย
หน่วยความจำหลักไม่ได้ถูกใช้งานอย่างเต็มที่ เพราะเแม้จะมีพื้นที่ว่างบางส่วนที่เหลือใจากการช้งานก็ต้องทิ้งไปไม่สามารถนำมาจัดสรรให้งานอื่นได้ และคอมพิวเตอร์ต้องทำงานเพียงครั้งละ 1 งาน ทำให้มีบางส่วนที่ซีพียูว่างเพราะต้องรออุปกรณ์รับเข้า/ส่งออกทำงานรับส่งข้อมูล
การแบ่งหน่วยความจำออกเป็นพาร์ติชั่น
ข้นเสีย
คอมพิวเตอร์สามารถทำงานได้ครั้งละ 1 งาน เพื่อเป็นการเพิ่มประสิทธิภาพของซีพียู จึงมีการพัฒนาให้สามารถทำได้หลายงานพร้อมกัน เรียกว่า
การทำงานมันติโปรแกรมมิ่ง
วิธีพื้นฐาน
คือ
การแบ่งหน่วยความจำหลักออกเป็นส่วนย่อยๆหรือแบ่งออกเป็นพาร์ติชั่น แต่ละพาร์ติชั่นถูกใช้สำหรับงาน ๅ งาน จำนวนงานที่สามารถทำงานได้พร้อมกันจะถูกกำหนดด้วยพาร์ติชั้น การแบ่งหน่วยความจำออกเป็นพาร์ติชั้นทำได้ 2 วิธี
การกำหนดขนาดพาร์ติชั่นคงที่
วิธีนี้ก่อนจะทำงานใดๆหน่วยความจำหลักต้องถูกจัดสรรแบ่งออกเป็นส่วนๆที่มีขนาดแน่นอน ซึ่งการแบ่งส่วนอาจกำหนดโดยโอเปอเรเตอร์ของระบบคอมพิวเตอร์หรือกำหนดโดยระบบปฏิบัติการ
วิธีนี้เหมาะสำหรับกรณีที่ระบบรู้ขนาดของโพรเซสล่วงหน้า ทั้งนี้เพื่อระบบจะได้กำหนดขนาดของแต่ละส่วนของหน่วยความจำหลักที่เหมาะสมได้
การกำหนดขนาดของพาร์ติชั่นให้เปลี่ยนแปลงได้
วิธีนี้เป็นการแบ่งส่วนของหน่วยความจำหลับแบบไดนามิก ที่มีการจัดสรรหน่วยความจำหลักให้โพรเซสต่างๆตามขนาดที่ผู้ใช้ร้องขอเมื่อมีการขอให้ใช้หน่วยความจำหลัก ระบบปฏิบัติการจะตรวจสอบขนาดของโพรเซส และจัดสรรหน่อยความจำหลักให้แก่โพรเซสเป็นขนาดเท่ากันกับขนาดของโพรเซสนั้นๆ เมื่อโพรเซสทำงานเสร็จเรียบร้อย ระบบปฏิบัติการจะเรียกเอาหน่วยความจำทั้งหมดคือจากโพรเซส
ข้อเสีย
ของวิธีนี้คือ เกิดปัญหาการแตกกระจาย เป็นปัญหาที่เกิดขึ้นหลังจากที่มีการใช้หน่วยความจำไประยะหนึ่งแล้ว ทำให้มีพื้นที่ว่างที่มีขนาดเล็กกระจายอยู่ทั่งไป โดยพื้นที่แต่ละส่วนนั้นมีขนาดไม่เพียงพอที่จะบรรจุโพรเซสได้ แต่เมื่อรวมหลายๆพื้นที่ว่างเข้าด้วยกันแล้วจะมีขนาดมากกว่าขนาดของโพรเซส
หน่วยความจำหลักถูกแบ่งออกเป็น 2 ส่วน
หน่วยความจำระดับบน
ซึ่งเป็นส่วนที่ใช้ติดต่อกับส่วนผู้ใช้
หน่วยความจำระดับล่าง
ซึ่งเป็นส่วนของระบบปฏิบัติการ
การจัดการหน่วยความจำหลักแบบพาร์ติชั่นและย้ายที่อยู่
แก้ปัญหาเรื่องการแตกกระจายด้วยการรวบรวมพื้นที่ว่างที่มีอยู่นั้นให้ติดกัน เรียกว่า
การอัดแน่น
แต่การเครื่องย้ายโพรเซสที่บรรจุอยู่ในพาร์ติชั่นต่างๆเข้าไปอยู่ในพื้นที่บริเวณที่ติดกัน ทำให้ตำแหน่งสำคัญต่างๆถูกเปลี่ยนไปด้วย จำเป็นต้องปรับเลขที่อยู่ของตำแหน่งด้วยการย้ายที่อยู่
วิธีปรับเลขที่อยู่ตำแหน่งด้วยการย้ายที่อยู่
เอาไปผ่านโหลดเดอร์อีกครั้งหนึ่งเพื่อให้โหลดเดอร์ทำการย้ายที่อยู่ วิธีนี้ระบบจะเสียเวลาโหลดโปรแกรมใหม่ทั้งหมดและมีบางส่วนไม่ได้รับผลกระทบจากการอัดแน่น และไม่จำเป็นต้องย้ายที่อยู่ แต่ถูกย้ายที่อยู่ใหม่อีกครั้ง
ปัญหาการจัดสรรหน่วยเก็บแบบพลวิต
วิธีการวาง(Placement) เพื่อใช้แก้ปัญหาการเกิดพื้นที่ว่างในหน่วยความจำ
Best-Fit
เลือกช่องโหว่ที่เหมาะสมที่สุด ต้องกาเนื้อที่ว่างโดยต้องตรวจดูพื้นที่ว่างทั้งหมด เพื่อหาเนื้อที่ว่างที่มีขนาดเท่ากันหรือใกล้เคียง
ข้อเสีย
ใช้เวลานานเพราะว่าต้องนำพื้นที่ว่างทุกรายการเปรียบเทียบกับโพรเซสเพื่อหาขนาดที่เหมาะสม และทำให้เกิดช่องว่างเล็กภายในหน่วยความจำเป็นจำนวนมาก
วิธีที่แก้ปัญหานี้ คือ การเรียงรายการตามลำดับจากขนาดเล็กไปใหญ่ จึงจะประหยัดเวลาไม่ต้องนำโพรเซสไปเปรียบเทียบกับทุกพื้นที่ว่างและจะทำให้เหลือพื้นที่เล็กที่สุด ดีกว่าแบบ Worst-fit ในแง่ของเวลาที่ลดลงและประสิทธิผลในการใช้ที่เก็บข้อมูล
Worst-Fit
เลือกช่องโหว่ที่ใหญ่ที่สุด เป็นวิธีป้องกันไม่ให้เกิดปัญหาการเกิดเนื้อที่ว่างเล็กๆเป็นจำนวนมากเหมือน Best-Fit เริ่มต้นเนื้อที่ว่างโดยต้องตรวจดูพื้นที่ว่างทั้งหมดในระบบและหาช่องว่างที่มีขนาดใหญ่ที่สุด
เพื่อใส่โพรเซสเข้ามา
First-Fit
เลือกช่องโหว่แรกที่พบและมีขนาดเพียงพอกับพื้นที่ที่ต้องการ
วิธีนี้ง่ายที่สุดและเสียเวลาน้อยที่สุด ดีกว่าแบบ Worst-fit ในแง่ของเวลาที่ลดลงและประสิทธิผลในการใช้ที่เก็บข้อมูล
ปัญหาของการจัดการหน่วยความจำ
ปัญหาที่เกิดจากการจัดสรรพื้นที่ที่ตามมาคือ พื้นที่ของหน่วยความจำที่ว่างเป็นช่วงๆมีขนาดเล็กไปสำหรับงานที่รอคอยอยู่ประเภทปัญหาของการจัดการหน่วยความจำมีดังนี้
การแก้ปัญหาการสูญเปล่าของพื้นที่ย่อยภานนอก
ทำได้โดยย้ายตำแหน่งของพื้นที่ใช้งานให้เลื่อนมาติดกัน ซึ่งเรียกว่า Compaction แต่การทำแบบนี้ต้องแลกด้วยต้นทุน(Cost) คือ ค่าใช้จ่ายที่ระบบต้องเสียไปในการทำงาน ซึ่งทั้งหมดนี้จะมีผลต่องานที่ทำอยู่และการทำ Compaction คือการกระชับหน่วยความจำเพื่อให้พื้นที่ว่างรวมกันเป็นผืนเดียว
การสูญเปล่าของพื้นที่ย่อยภายใน
ปัญหาที่เกิดจากการจองพื้นที่หนวยความจำมากกว่าขนาดข้อมูล พื้นที่ที่จองเกิดนั้นจะเกิดเป็นช่องว่างของพื้นที่สูญเปล่าเพราะถูกจองไว้แต่ไม่ได้ใช้ เป็นปัญหาที่เกิดข้นภายในพื้นที่ที่จองไว้
การสูญเปล่าของพื้นที่ย่อยภายนอก
การที่ระบบมีพื้นที่ว่างพอแต่ไม่สามารถไม่สามารถนำใช้งานได้ เพราะพื้นที่ว่างถูกพื้นที่ใช้งานแบ่งเป็นพื้นที่ย่อยๆมากจนเกินไปจนไม่สามารถนำมาใช้งานได้
การแบ่งพื้นที่เป็นหน้า
เป็นการจัดสรรพื้นที่ว่างบนหน่อยความจำ โดยทำให้โพรเซสที่อยู่บนหน่ยความจำได้โดยไม่ต้องเรียงต่อเนื่องกันทั้งโพรเซส แบ่งออกเป็น 2 ประเภท
การจัดสรรหน่วยความจำทางกายภาพ
เป็นวิธีการแบ่งพื้นที่ให้มีขนาดคงที่(Fixed-size block) เรียกพื้นที่ส่วนนี้ว่า เฟรม(Frames) โดยที่ขนาดของเพจถูกกำหนดโดยฮาร์ดแวร์ ขนาดของเพจเป็นขนาดยกกำลัง 2 มีขนาดอยู่ระหว่าง 512 ไบต์ถึง 16 MB/เพจ ขึ้นอยู่กับสถาปัตยกรรมของคอมพิวเตอร์
การจัดสรรหน่วยความจำทางตรรกะ
เป็นวิธรการแบ่งพื้นที่แบบบล็อก เรียกพื้นที่ส่วนนี้ว่า เพจ โดยกำหนดขนาดเพจเท่ากับขนาดเฟรมทุกๆตำแหน่งจะถูกจัดสรรโดยหน่วยประมวลผลกลาง โดยแบ่งออกเป็น 2 ส่วน
หมายเลขเพจ
โดยหมายเลขเพจจะใช้ดรรชนีเพื่อชี้ไปยังตารางเพจ
ขอบเขตเพจ
คือ ตำแหน่งจริงในหน่วยความจำ ที่นำมารวมกับตำแหน่งเริ่มต้นที่ได้จากตารางเพจ เพื่อใช้คำนวณหาตำแหน่งของหน่วยความจำทางกายภาพ
การทำงานของ Paging
Paging สามารถใช้จำนวนหน้าที่ไม่ติดกันได้ และในการจองพื้นที่ก็จะไม่เหลือพื้นที่ว่างคั้นไว้ จึงทำให้ไม่เกิดปัญหา External fragmentation
ฮาร์ดแวร์กับการสนับสนุนการแบ่งหน้า
การนำฮาร์ดแวร์กับการสนับสนุนการจัดการตารางเพจทำได้หลายทาง ซึ่งการเข้าถึงตำแหน่งในหน่วยความจำแต่ละครั้ง จะต้องอ่านข้อมูลจากหน่วยความจำทางกายภาพถึงสองครั้ง ทำให้เสียเวลาและการเข้าถึงหน่วยความจำล่าช้า
การป้องกันหน่วยความจำ
จำนวบิตที่เก็บอยู๋ในตารางเพจสามารถกำหนดบิตเพื่อใช้ตรวจสอบและกำหนดเพจในการอ่าน-เขียนหรืออ่านข้อมูล ซึ่งเรียนว่า
กลุ่มบิตป้องกัน
ให้กับทุกๆเฟรมที่อยู่ในหน่วยความจำ ซึ่งแบ่งสถานะออกเป็น 2 บิตคือ
บิตใช้งานได้
เป็นบิตสถานะที่บอกว่าข้อมูลในเพจถูกอ่านเข้าสู่หน่วยความจำทางกายภาพแล้ว และสามารถนำไปใช้งานได้ทันที
บิตใช้งานไม่ได้
เป็นบิตสถานะที่บอกว่าข้อมูลในเพจนั้นไม่มีอยู่ในหน่วยความจำทางกายภาพแล้ว และไม่สามารถนำไปใช้งานได้ ข้อมูลของเพจที่ต้องการอ่านนั้นถูกสลับออกจากหน่วยความจำแล้ว เรียกว่า
การผิดหน้า(Page fault)
จึงจำเป็นต้องโหลดเพจข้อมูลเข้ามาสู่หน่วยความจำก่อน และจึงเปลี่ยนค่าของบิตใช้งานไม่ได้ให้เป็นบิตใช้งานได้ แล้วจึงทำการประมวลผลข้อมูลนั้นใหม่อีกครั้ง
การใช้เพจร่วมกัน
โครงสร้างของตารางเพจ
โครงสร้างแบบตารางเฮซ
ต้องมีตำแหน่งขนาดพื้นที่มากกว่า 32 บิต
ข้อมูลแต่ละหน่วยประกอบไปด้วย
ค่าดรรชนีที่ชี้ไปยังเฟรมเพจ
ค่าของพอบเตอร์ ที่ชี้ไปยังหน่วยเชื่อมโยงในลิงก์ลิสต์
ค่าหมายเลขเพจเสมือน
โครงสร้างเพจแบบผกผัน
ระบบคอมพิวเตอร์ที่จะใช้โครงสร้างแบบนี้ ต้องมีคุณสมบัติกำหนดโดยตารางเพจ จะมีเพียงหนึ่งโพรเซสใช้งานพื้นที่หน่อยความจำ โดยโปรแกรมหรือข้อมูลจะประกอบไปด้วยตำแหน่งของเพจเสมือน ที่เก็บอยู่ในหน่วยความจำจริง
โครงสร้างแบบลำดับชั้น
หมายเลขเพจ
ขอบเขตเพจ
Paging และการแก้ไขปัญหา External Fragmentation
การจองพื้นที่ในเพจจิ้งจะจองเป็น nPage เสมอโดยค่า n จะเป็นจำนวนเต็ม และ Page คือปริมาณข้อมูลใน 1 หน้ากระดาษ
การแก้ปัญหา Internal Fragmentation
ปัญหา Internal fragmentation คือ การใช้งานพื้นที่ไม่คุ้มค่า จากหลักการของเพจจิ้ง จะมีน้อยครั้งมากที่ขนาดของข้อมูลกับขนาดหน้าจะเท่ากันพอดี
วิธีแก้ปัญหา
ต้องเลือกขนาดหน้าให้เล็กที่สุดเพื่อลดการสูญเสียพื้นที่เปล่า แต่ไม่ควรเลือกเล็กจนเกินไป
การแบ่งส่วน
การแบ่งหน่วยความจำเป็นหน้าทำหน้าทำให้เกิดหน่วยความจำทางตรรกะ แตกต่างไปจากลักษณธของหน่วยของหน่วยความจำจริง โดยมีระบบแปลงตำแหน่งทางตรรกะให้เป็นตำแหน่งจริงทำให้ระบบทำงานได้ถูกต้อง แม้ว่าทั้งสองภาพจะมีความแตกต่างกันก็ตาม
วิธีพื้นฐาน
จัดสรรพื้นที่ในหน่วยความจำหลักออกเป็นส่วนๆตามขนาดของโพรแกรมหรือโมดูลย่อย
ฮาร์ดแวร์
แม้ว่าผู้ใช้สามารถอ้างอิงส่วนต่างๆของโปรแกรมโดยใช้ตำแหน่งแบบ 2 มิติ แต่หน่วยความจำจริงยังคงมีมิติเดียว คือเป็นแถวเรียงต่อกันไป จึงต้องมีวิธีการจับคู่ตำแหน่งทางตรรกะแบบสองมิติ ให้เป็นตำแหน่งจริงมิติเดียว โดยใช้ตารางเลขตอน รูปต่อไป แสดงวิธีใช้ ตารางเลข
การสร้างตารางเลขตอน
การแบ่งเป็นตอน คล้ายกับการแบ่งหน่วยความจำหลักออกเป็นส่วนๆ การแบ่งเป็นตอนมีความซับซ้อนกว่า
การอ่านหน่วยความจำ 2 ครั้งต่อการอ้างอิงตำแหน่งครั้งหนึ่ง ทำให้ระบบทำงานช้าลง 2 เท่า จึงมีการใช้รีจิสเตอร์เสริมหลายตัวช่วยเก็บค่าที่เพิ่งจะใช้ไปและเช่นเดียวกันเราใช้รีจิสเตอร์เสริมไม่มากนัก ก็สามารถลดเวลาเฉลี่ยในการอ้างอิงหน่วยความจำลงเป็นไม่เกิน 10 หรือ 25 % จากการอ้างอิงแบบตรง
การป้องกันและการใช้ตอร่วมกัน
ข้อดี คือ
สามารถผนวกการป้องกันไปกับแต่ละตอนได้เพราะแต่ละตอนคือส่วนต่างๆของโปรแกรมที่มีลักษณะต่างๆกัน ข้อมูลในตอนเดียวกันมักจะมีการใช้งานเหมือนๆกัน
สามารถใช้ข้อมูลหรือโปรแกรมร่วมกันได้สะดวก
การสูญเปล่าพื้นที่ย่อย
เกิดพื้นที่ว่างอยู่กระจัดกระจายกัน และแต่ละพื้นที่มีขนาดเล็กไป สำหรับกระบวนการหนึ่งๆกระบวนการอาจรอจนมีพื้นที่ว่างพอหรือระบบอาจบีบอัดหน่วยความจำเพื่อให้เกิดพื้นที่ว่างต่อเนื่องขนาดใหญ่พอเพียง