ใบงานที่ 5 ระบบหน่วยความจำเสมือน
ประเภทของการจัดการหน่วยความจำ
การจัดการหน่วยความจำ
ระบบหน่วยความจำเสมือน (Virtual Memory)
การจัดการหน่วยความจำสามารถแบ่งออกเป็น 2 ประเภทใหญ่ ๆ
1.ระบบหน่วยความจำจริง
ขนาดของโปรแกรมจะต้องไม่ใหญ่กว่าขนาดของหน่วยความจำที่มีอยู่ ลบด้วยขนาดของหน่วยความจำที่เป็นส่วนของ OS
2.ระบบหน่วยความจำเสมือน
ขนาดของโปรแกรมจะมีขนาดเท่าใดก็ได้
ขนาดของโปรแกรมจะต้องไม่ใหญ่กว่าขนาดของหน่วยความจำที่มีอยู่ ลบด้วยขนาดของหน่วยความจำที่เป็นส่วนของ OS
2.ระบบหน่วยความจำเสมือน
ขนาดของโปรแกรมจะมีขนาดเท่าใดก็ได้
หน่วยความจำเสมือนมีขนาดใหญ่กว่าหน่วยความจำจริง
แนวคิดของหน่วยความจำเสมือน
- ผู้เขียนโปรแกรมหรือผู้ใช้จะไม่ถูกจำกัดในเรื่องของขนาดของหน่วยความจำอีกต่อไป
- OS จะจัดการให้ผู้ใช้สามารถใช้หน่วยความจำได้มากกว่าหน่วยความจำจริงที่มีอยู่
- โปรแกรมทั้งโปรแกรมโดยส่วนใหญ่ไม่ได้ถูกใช้งานพร้อมกันทั้งหมด ซึ่งการทำงานของโปรแกรมจะเริ่มทำงานจากส่วนต้นโปรแกรม แล้วค่อย ๆ เลื่อนลงมาจนกระทั่งถึงท้ายโปรแกรม
- ในขณะที่โปรแกรมกำลังทำงานอยู่ที่ส่วนต้นโปรแกรม ที่ปลายโปรแกรมก็ยังไม่ถูกใช้งาน เมื่อโปรแกรมทำงานมาถึงส่วนท้าย ๆ โปรแกรม ส่วนต้น ๆ โปรแกรมก็ไม่ถูกใช้งาน
- ดังนั้นในช่วงที่โปรแกรมทำงานอยู่ที่ส่วนต้น ๆ ก็ไม่มีความจำเป็นต้องโหลดเอาส่วนท้าย ๆ โปรแกรมลงไปในหน่วยความจำให้เปลืองเนื้อที่
- เมื่อโปรแกรมทำงานมาจนถึงส่วนที่ยังไม่ได้โหลดเข้าไปในหน่วยความจำ OS จะจัดการดึงเอาส่วนนั้นมาจากหน่วยความจำรอง
- โดยที่อาจจะโหลดไปทับส่วนต้น ๆ ของโปรแกรมที่อยู่ในหน่วยความจำ หรือโหลดลงไปในส่วนอื่น ๆ ของหน่วยความจำก็ได้
- จากหลักการดังกล่าวเราจึงสามารถรันโปรแกรมที่มีขนาดใหญ่กว่าหน่วยความจำที่มีอยู่ได้
การแปลงแอดเดรส (Address Mapping)
- เนื่องจากขนาดของโปรแกรมมีขนาดใหญ่กว่าขนาดของหน่วยความจำ ดังนั้นจึงต้องมีการอ้างอิงแอดเดรสระหว่างแอดเดรสของหน่วยความจำจริงกับแอดเดรสของโปรแกรม
- แอดเดรสจริง (Real Address หรือ Physical Address) หมายถึงแอดเดรสในหน่วยความจำจริงเท่านั้น
- แอดเดรสเสมือน (Virtual Address หรือ Logical Address) หมายถึงแอดเดรสที่โปรแกรมอ้างถึง
- ดังนั้นจึงต้องมีกลไกการแปลงแอดเดรสจากแอดเดรสเสมือนให้เป็นแอดเดรสจริง ณ.ตำแหน่งที่โปรแกรมส่วนนั้นถูกวางลงไป ซึ่งเราเรียกว่าการแปลงส่งแอดเดรส (Address Mapping)
- เทคนิคการแปลงแอดเดรสมีอยู่หลายวิธี แต่วิธีที่นิยมใช้กันอย่างแพร่หลายคือ dynamic address translation (DAT)
- วิธีการที่จะจัดการหน่วยความจำจริงให้สามารถทำงานโปรแกรมที่มีขนาดใหญ่ จะใช้หลักการแบ่งโปรแกรมออกเป็นส่วนย่อย ๆ หลาย ๆ ส่วนเรียกว่าบล็อก (Block)
- ขนาดของบล็อกแบ่งออกเป็น 2 แบบคือทุกบล็อกมีขนาดเท่ากัน หรือบล็อกมีขนาดไม่เท่ากัน ดังนั้นระบบหน่วยความจำเสมือนจึงแบ่งได้เป็น 2 แบบ
2.หน่วยความจำเสมือนระบบเซกเมนต์ (Segment system)
ระบบหน่วยความจำเสมือนจึงแบ่งได้เป็น 2 แบบ
1.หน่วยความจำเสมือนระบบหน้า (Paging system)
2.หน่วยความจำเสมือนระบบเซกเมนต์ (Segment system)
การแปลงส่งแอดเดรส
1.การแปลงส่งแบบตรง (direct mapping)2.การแปลงส่งแบบสาระ(associative mapping)
3.การแปลงส่งแบบผสมระหว่างสาระและแบบตรง combined associative/direct mapping
หน่วยความจำเสมือนระบบหน้า (Paging system)
- เป็นการจัดแบ่งโปรแกรมออกเป็นบล็อกที่มีขนาดเท่า ๆ กันทุกบล็อก โดยจะเรียกบล็อกแต่ละบล็อกว่าหน้า (Page)
- ตัวอย่างการทำงานในระบบหน้า
-ต้องการรันโปรแกรมที่มีขนาด 1000 Kbyte = 1,000,000
- โปรแกรมของผู้ใช้ไม่ว่าจะมีขนาดใหญ่เท่าใด จะต้องถูกเก็บอยู่ในหน่วยความจำรอง ซึ่งโดยส่วนมากได้แก่ ดิสก์ เนื่องจากมีความจุสูง
- เมื่อผู้ใช้สั่งรันโปรแกรม OS จะโหลดเอาโปรแกรมจากดิสก์เข้าไปในหน่วยความจำครั้งละ 1 หน้า นั่นคือ 1 หน้าในโปรแกรมก็จะเข้าไปใช้เนื้อที่ในหน่วยความจำ 1 หน้าเช่นกัน
- เมื่อโปรแกรมหนึ่งครอบครองหน้าใดในหน่วยความจำแล้ว โปรแกรมอื่นจะใช้หน้านั้นอีกไม่ได้
- โปรแกรมจะครอบครองหน่วยความจำจริงเป็นจำนวนเต็มของหน้า
- ดังนั้นต้องมีวิธีการแปลงแอดเดรสจากแอดเดรสเสมือนเป็นแอดเดรสจริง
การแปลงแอดเดรสในระบบหน้า
- OS จะสร้างตารางไว้สำหรับโปรเซส คือ ตารางหน้า (Page table)
- สมมุติว่าหน่วยความจำเสมือนมีขนาด 1000 หน้า และหน่วยความจำจริงมีขนาด 100 หน้า
- ตารางหน้าก็จะมีขนาด 1000 ช่อง ได้แก่ช่องที่ 000-999
ช่องที่ 001 สำหรับหน้าที่ 001
ความคิดเห็น
แสดงความคิดเห็น