1 / 46

ระบบหน่วยความจำเสมือน

บทที่ 7 (ต่อ). ระบบหน่วยความจำเสมือน. (Virtual Memory). ประเภทของการจัดการหน่วยความจำ. การจัดการหน่วยความจำ. ระบบหน่วยความจำเสมือน (Virtual Memory). การจัดการหน่วยความจำสามารถแบ่งออกเป็น 2 ประเภทใหญ่ ๆ ระบบหน่วยความจำจริง

Download Presentation

ระบบหน่วยความจำเสมือน

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 7 (ต่อ) ระบบหน่วยความจำเสมือน (Virtual Memory)

  2. ประเภทของการจัดการหน่วยความจำประเภทของการจัดการหน่วยความจำ

  3. การจัดการหน่วยความจำ

  4. ระบบหน่วยความจำเสมือน (Virtual Memory) • การจัดการหน่วยความจำสามารถแบ่งออกเป็น 2 ประเภทใหญ่ ๆ • ระบบหน่วยความจำจริง • ขนาดของโปรแกรมจะต้องไม่ใหญ่กว่าขนาดของหน่วยความจำที่มีอยู่ ลบด้วยขนาดของหน่วยความจำที่เป็นส่วนของ OS • ระบบหน่วยความจำเสมือน • ขนาดของโปรแกรมจะมีขนาดเท่าใดก็ได้

  5. ระบบหน่วยความจำเสมือน (Virtual Memory) หน่วยความจำเสมือนมีขนาดใหญ่กว่าหน่วยความจำจริง

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

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

  8. การแปลงแอดเดรส (Address Mapping) • เนื่องจากขนาดของโปรแกรมมีขนาดใหญ่กว่าขนาดของหน่วยความจำ ดังนั้นจึงต้องมีการอ้างอิงแอดเดรสระหว่างแอดเดรสของหน่วยความจำจริงกับแอดเดรสของโปรแกรม • แอดเดรสจริง (Real Address หรือ Physical Address)หมายถึงแอดเดรสในหน่วยความจำจริงเท่านั้น • แอดเดรสเสมือน (Virtual Address หรือ Logical Address)หมายถึงแอดเดรสที่โปรแกรมอ้างถึง • ดังนั้นจึงต้องมีกลไกการแปลงแอดเดรสจากแอดเดรสเสมือนให้เป็นแอดเดรสจริง ณ.ตำแหน่งที่โปรแกรมส่วนนั้นถูกวางลงไป ซึ่งเราเรียกว่าการแปลงส่งแอดเดรส(Address Mapping)

  9. ตำแหน่งที่ ต่อเนื่องกัน การแปลงแอดเดรส หน่วยความจำจริง หน่วยความจำเสมือน การแปลงแอดเดรส (Address Mapping) … ต่อ

  10. การแปลงแอดเดรส (Address Mapping) … ต่อ • เทคนิคการแปลงแอดเดรสมีอยู่หลายวิธีแต่วิธีที่นิยมใช้กันอย่างแพร่หลายคือDynamic Address Translation (DAT) • วิธีการที่จะจัดการหน่วยความจำจริงให้สามารถทำงานโปรแกรมที่มีขนาดใหญ่ จะใช้หลักการแบ่งโปรแกรมออกเป็นส่วนย่อย ๆ หลาย ๆ ส่วนเรียกว่าบล็อก (Block) • ขนาดของบล็อกแบ่งออกเป็น 2 แบบคือทุกบล็อกมีขนาดเท่ากัน หรือบล็อกมีขนาดไม่เท่ากัน ดังนั้นระบบหน่วยความจำเสมือนจึงแบ่งได้เป็น 2 แบบ • หน่วยความจำเสมือนระบบหน้า (Paging system) • หน่วยความจำเสมือนระบบเซกเมนต์ (Segment system)

  11. การแปลงแอดเดรส (Address Mapping) … ต่อ • ระบบหน่วยความจำเสมือนจึงแบ่งได้เป็น 2 แบบ • หน่วยความจำเสมือนระบบหน้า (Paging system) • หน่วยความจำเสมือนระบบเซกเมนต์ (Segment system)

  12. การแปลงส่งแอดเดรส • การแปลงส่งแบบตรง (direct mapping) • การแปลงส่งแบบสาระ(associative mapping) • การแปลงส่งแบบผสมระหว่างสาระและแบบตรง combined associative/direct mapping

  13. โปรแกรมขนาด 1000 KByte หน่วยความจำขนาด 100 Kbyte หน่วยความจำเสมือนระบบหน้า (Paging system) • เป็นการจัดแบ่งโปรแกรมออกเป็นบล็อกที่มีขนาดเท่า ๆ กันทุกบล็อก โดยจะเรียกบล็อกแต่ละบล็อกว่าหน้า (Page) • ตัวอย่างการทำงานในระบบหน้า (Page) • ระบบมีหน่วยความจำขนาด 100 Kbyte = 100,000 Byte = 105 Byte • ต้องการรันโปรแกรมที่มีขนาด 1000 Kbyte = 1,000,000 Byte = 106 Byte

  14. 0 0 0 0 0 0 0 0 0 9 9 9 หน้าที่ 000 0 0 1 0 0 0 0 0 1 9 9 9 หน้าที่ 001 0 0 2 0 0 0 0 0 2 9 9 9 หน้าที่ 002 9 9 8 0 0 0 9 9 8 9 9 9 หน้าที่ 998 9 9 9 0 0 0 9 9 9 9 9 9 หน้าที่ 999 หน่วยความจำเสมือนระบบหน้า (Paging system) … ต่อ • สมมุติ OS แบ่งโปรแกรมออกเป็นหน้าย่อย โดยที่แต่ละหน้า (Page) มีขนาด 1 Kbyte = 1,000 Byte = 103 Byte • ต้องการรันโปรแกรม 1000 Kbyte ดังนั้นโปรแกรมจะถูกแบ่งออกเป็น 1000 หน้า (1000 Page) ดังรูป แอดเดรสเสมือน แอดเดรสภายในหน้า Displacement เลขหน้า Page Number แอดเดรสเสมือน แอดเดรสเริ่มต้นของหน้า แอดเดรสสุดท้ายของหน้า

  15. หมายเลขหน้า ดิสเพลซเมนต์ แอดเดรสเสมือน หน่วยความจำเสมือนระบบหน้า (Paging system) … ต่อ • จากรูปเราสามารถแบ่งแอดเดรสเสมือนออกเป็น 2 ส่วน • ส่วนที่ 1 จะเป็นค่าที่บ่งบอกหมายเลขหน้า • ส่วนที่ 2 จะเป็นค่าที่บ่งบอกค่าแอดเดรสภายในหน้านั้น ๆ ซึ่งมีชื่อเรียกว่าดิสเพลซเมนต์ (Displacement) • ตัวอย่างเช่น แอดเดรสเสมือนที่ 243765 มีความหมายว่าอยู่ในหน้าที่ 243 และมีดิสเพลสเมนต์เป็น 765

  16. 0 0 0 0 0 0 0 9 9 9 หน้าที่ 00 0 1 0 0 0 0 1 9 9 9 หน้าที่ 01 0 2 0 0 0 0 2 9 9 9 หน้าที่ 02 9 8 0 0 0 9 8 9 9 9 หน้าที่ 98 9 9 0 0 0 9 9 9 9 9 หน้าที่ 99 หน่วยความจำเสมือนระบบหน้า (Paging system) … ต่อ • สำหรับในหน่วยความจำจริง OS จะแบ่งออกเป็นหน้าย่อยเหมือนกัน โดยที่แต่ละหน้า (Page) มีขนาดเท่ากับหน้าของหน่วยความจำเสมือนคือ 1 Kbyte = 1,000 Byte = 103 Byte • ดังนั้นหน่วยความจำจริงจะถูกแบ่งออกเป็น 100 หน้า (100 Page) ดังรูป แอดเดรสภายในหน้า Displacement เลขหน้า Page Number แอดเดรสเสมือน แอดเดรสเริ่มต้นของหน้า แอดเดรสสุดท้ายของหน้า

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

  18. การแปลงแอดเดรสในระบบหน้าการแปลงแอดเดรสในระบบหน้า • OS จะสร้างตารางไว้สำหรับโปรเซส คือตารางหน้า (Page table) • สมมุติว่าหน่วยความจำเสมือนมีขนาด 1000 หน้า และหน่วยความจำจริงมีขนาด 100 หน้า • ตารางหน้าก็จะมีขนาด 1000 ช่อง ได้แก่ช่องที่ 000-999 • ช่องที่ 000 สำหรับหน้าที่ 000 • ช่องที่ 001 สำหรับหน้าที่ 001 • ในตารางหน้าจะมี 3 คอลัมน์

  19. หมายเลขหน้า แอดเดรสในดิสก์ 0/1 แอดเดรสในหน่วยความจำจริง 001 002 003 998 999 Page Table การแปลงแอดเดรสในระบบหน้า … ต่อ

  20. การแปลงแอดเดรสในระบบหน้า … ต่อ • คอลัมน์ที่ 1 จะบอกแอดเดรสของหน้านั้น ๆ ที่อยู่ในดิสก์เพื่อที่จะได้รู้ว่าหน้าต่าง ๆ ของโปรแกรมเก็บไว้ที่หน้าใดของดิสก์ • คอลัมน์ที่ 2 จะบอกว่าหน้านั้น ๆ อยู่ในหน่วยความจำจริงหรือไม่ • ถ้าค่าเป็น 0 หมายถึง หน้านั้นไม่ได้อยู่ในหน่วยความจำจริง (อยู่ในหน่วยความจำสำรอง) • ถ้าค่าเป็น 1 หมายถึง หน้านั้นอยู่ในหน่วยความจำจริง • คอลัมน์ที่ 3 จะบอกถึงแอดเดรสเริ่มต้นของหน้าในหน่วยความจำจริง คือหมายเลขหน้าในหน่วยความจำจริงตามด้วยดิสเพรสเมนต์

  21. การแปลงแอดเดรสในระบบหน้า … ต่อ ถ้าต้องการทราบว่าแอดเดรสเสมือน 123983 ไปอยู่ ณ. ตำแหน่งใดในหน่วยความจำจริง 1. OS จะนำเอาแอดเดรสเสมือนมาหาค่าหมายเลขหน้าและดิสเพลซเมนต์ในกรณีนี้ หมายเลขหน้าคือ 123 และดิสเพลซเมนต์คือ 983 2. OS จะตรวจสอบที่ตารางหน้าในช่องที่ 123 3. อ่านค่าคอลัมน์ที่ 2 ในตารางหน้าช่องที่ 123 ว่ามีค่า 1 หรือ 0 ในกรณีนี้มีค่าเป็น 1 (แสดงว่าเก็บอยู่ในหน่วยความจำจริง)

  22. การแปลงแอดเดรสในระบบหน้า … ต่อ ถ้าต้องการทราบว่าแอดเดรสเสมือน 123983 ไปอยู่ ณ. ตำแหน่งใดในหน่วยความจำจริง 4. OS จะอ่านค่าในคอลัมภ์ที่ 3 ของตารางหน้าเพื่อหาแอดเดรสเริ่มต้นของหน้าในหน่วยความจำจริง ซึ่งค่าคอลัมภ์ 3 คือ 54000 5. นำเอาค่าในคอลัมภ์ที่ 3 มารวมกับดิสเพรสเมนต์ จะได้แอดเดรสในหน่วยความจำจริงที่ตรงกับแอดเดรสเสมือน (ซึ่งค่าคอลัมน์ที่3 คือ 54000 ค่าดิสเพรสเมนต์คือ 983 ค่าที่ได้คือ 54000+983=54983 6. ดังนั้น แอดเดรสเสมือน 123983 จะอยู่ที่ หน้า 54 ของหน่วยความจำจริง และมี ค่าดิสเพรสเมนต์ คือ 983

  23.     

  24. การแปลงแอดเดรสในระบบหน้า … ต่อ กรณีข้อมูลไม่ได้อยู่ในหน่วยความจำจริง (อยู่ในหน่วยความจำสำรอง) 1. OS จะนำเอาแอดเดรสเสมือนมาหาค่าหมายเลขหน้าและดิสเพลซเมนต์ในกรณีนี้ หมายเลขหน้าคือ 123 และดิสเพลซเมนต์คือ 983 OS จะตรวจสอบที่ตารางหน้าในช่องที่ 123 2. อ่านค่าคอลัมภ์ที่ 2 ในตารางหน้าช่องที่ 123 ว่ามีค่า 1 หรือ 0 ในกรณีนี้มีค่าเป็น 0 (แสดงว่าเก็บอยู่ในหน่วยความจำสำรอง) 3. OS จะอ่านค่าคอลัมน์ที่ 1 ซึ่งเป็นแอดเดรสในดิสก์ ในดิสก์เป็นจำนวน 1 หน้า (1 Kbyte ) (ค่าแอดเดรสในดิสก์คือ 5146789) 4. OS จะไปหาหน้าที่ว่างในหน่วยความจำจริง (หน้าที่ว่างคือหน้าที่ 03000)

  25. การแปลงแอดเดรสในระบบหน้า … ต่อ กรณีข้อมูลไม่ได้อยู่ในหน่วยความจำจริง (อยู่ในหน่วยความจำสำรอง) 5. นำข้อมูลที่อ่านมาจากดิสก์ไปวางไว้ในหน่วยความจำจริง 6. OS จะทำการแก้ไขข้อมูลในตารางหน้าช่องที่ 123 โดยเปลี่ยนค่าคอลัมน์ที่ 2 เป็น 1 7. ใส่ค่าหน้าที่หามาได้ของหน่วยความจำจริงบวกกับตำแหน่งเริ่มต้น (000) ขอดิสเพรสเมนต์ลงในคอลัมน์ที่ 3 ของตารางหน้า (ค่าแอดเดรสจริง 03983 (03000+983) ซึ่งตรงกับแอดเดรสเสมือน 123983

  26. แอดเดรสเสมือน 123 983 000 000 001 001 0 1 123 123 5146789 5146789 ตารางหน้า ตารางหน้า   ไปอ่านข้อมูลในแอดเดรส 5146789 ในดิสก์  โหลดลง หน่วยความจำจริง 00  01   02 03000 03000 หน่วยความจำจริง  ค่าแอดเดรสจริง 03983 (03000+983) ซึ่งตรงกับแอดเดรสเสมือน 123983

  27. การแปลงแอดเดรสในระบบหน้า … ต่อ • กรณีถ้าไม่มีหน้าว่างในหน่วยความจำจริง OS ต้องเลือกเอาหน้าหนึ่งออกจากหน่วยความจำจริง • หน้าใดจะถูกเลือกออก OS จะมีวิธีการที่เรียกว่า การสับเปลี่ยนหน้า (Page Replacement) • หน้าที่ถูกเลือกออก OS จะทำการบันทึกข้อมูลและสถานะปัจจุบันของหน้านั้นกลับลงในดิสก์ ณ.ตำแหน่งแอดเดรสของดิสก์ตามตารางหน้า จากนั้นจึงโหลดหน้าใหม่ทับลงไป • แก้ไขข้อมูลในตารางหน้าของทั้งของหน้าที่ถูกเขียนทับและหน้าที่โหลดเข้าไปใหม่

  28. การสับเปลี่ยนหน้า (Page Replacement) • เมื่อเกิดความบกพร่องของหน้าในระบบหน้า และหน่วยความจำไม่มีหน้าใดว่างอยู่เลย • ก่อนที OS จะโหลดเอาหน้าใหม่เข้ามาในหน่วยความจำนั้น OS ต้องตัดสินใจก่อนว่าควรจะเลือกหน้าใดเพื่อที่จะวางหน้าใหม่ทับลงไป • สิ่งที่ OS ใช้ในการตัดสินใจเลือกหน้าเรียกว่า การสับเปลี่ยนหน้า Page Replacementหรือยุทธวิธีการแทนที่(replacement strategy)

  29. การสับเปลี่ยนหน้า (Page Replacement) • การสับเปลี่ยนหน้ามีวิธีการ 5 วิธีดังนี้ • การสับเปลี่ยนหน้าแบบสุ่ม(Random) ทุกหน้ามีโอกาสถูกเลือกเท่ากันหมด • การสับเปลี่ยนหน้าแบบมาก่อนออกก่อน(First in First out :FIFO) • การสับเปลี่ยนหน้าแบบหน้าที่ถูกใช้น้อยที่สุดออกก่อน(Not frequently used :NFU) • การสับเปลี่ยนหน้าแบบหน้าใดที่ไม่ถูกใช้นานที่สุดออกก่อน (Least recently used :LRU) • การสับเปลี่ยนหน้าแบบหน้าใดไม่ได้ถูกใช้งานออกก่อน (Not recently used :NUR)

  30. การแปลงแอดเดรสในระบบ Segment • หมายเลขหน้าจากแอดเดรสเสมือนถูกส่งเข้าไปตรวจสอบในตารางที่เรียกว่า ตารางหน้าแบบสาระ(associative page table)พร้อมกันทุกช่อง • จะได้ค่าแอดเดรสเริ่มต้นของหน้าในหน่วยความจำจริงที่เก็บหน้านี้เอาไว้ออกมาทันที • แอดเดรสที่ได้นี้ก็จะนำไปบวกดิสเพลซเมนต์ผลลัพธ์ที่ได้ก็คือแอดเดรสจริงในหน่วยความจำ

  31. ตารางหน้าแบบสาระ(associative page table)

  32. การแปลงส่งแบบผสมระหว่างแบบสาระและแบบตรง (combined associative/direct mapping)

  33. หน่วยความจำเสมือนระบบเซกเมนต์(Segment System) • มีลักษณะการทำงานคล้ายกับระบบหน้า (Page System) ต่างกันตรงที่ขนาดของบล็อกไม่จำเป็นต้องเท่ากัน • ตารางเซกเมนต์ (Segment table) จะมีคอลัมน์มากกว่าตารางหน้าอยู่ 1 คอลัมน์ใช้เก็บขนาดของเซกเมนต์นั้นไว้ เพื่อให้ OS ทราบว่าแต่ละเซกเมนต์มีขนาดเท่าใด • การอ่านหรือเขียนข้อมูลจากหน่วยความจำสำรองและการหาเนื้อที่ในหน่วยความจำจริงจะกระทำตามขนาดของเซกเมนต์ เช่นถ้าเซกเมนต์มีขนาด 5 Kbytes การโหลดจากดิสก์ต้องโหลดข้อมูลขึ้นมา 5 Kbytes ในขณะเดียวกันก็ต้องหาเนื้อที่ว่างในหน่วยความจำที่มีขนาด 5 Kbytes ด้วยเช่นกัน

  34. แอดเดรสในหน่วยความจำจริงแอดเดรสในหน่วยความจำจริง ขนาดเซกเมนต์ หมายเลขหน้า แอดเดรสในดิสก์ 0/1 001 002 003 998 999 Segment Table หน่วยความจำเสมือนระบบเซกเมนต์(Segment System)…ต่อ

  35. หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์ • ระบบจะแบ่งหน่วยความจำออกเป็นหน้าที่มีขนาดเท่ากัน • ในโปรแกรมของผู้ใช้ จะถูกแบ่งออกเป็นเซกเมนต์ • ภายในเซกเมนต์จะถูกแบ่งออกเป็นหลายๆหน้า • ดังนั้นขนาดของเซกเมนต์จะเป็นจำนวนเท่าของหน้า • แต่ละเซกเมนต์ของโปรแกรมไม่จำเป็นต้องอยู่เรียงกันในหน่วยความจำ • แต่ละหน้าในเซกเมนต์เดียวกันก็ไม่จำเป็นต้องอยู่เรียงติดกันใน หน่วยความจำจริง

  36. หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์ • การผสมเอาระบบหน้าและเซกเมนต์เข้าด้วยกันทำให้ประสิทธิภาพ การทำงานของระบบดีขึ้น • ระบบผสมนี้ แอดเดรสเสมือนจะแบ่งออกเป็น 3 ส่วน คือ หมายเลขเซกเมนต์ หมายเลขหน้า และดิสเพลซเมนต์

  37. หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์ • นำหมายเลขเซกเมนต์ (S)ของแอดเดรสเสมือนไปหาแอดเดรสของตารางหน้าที่เก็บอยู่ในตารางเซกเมนต์ • เมื่อทราบว่าตารางหน้าอยู่ที่ใดในหน่วยความจำแล้ว • ใช้หมายเลขหน้า P เพื่อหาแอดเดรสของหน้า P’ในหน่วยความจำ • นำค่าแอดเดรสนี้บวกกับดิสเพลซเมนต์ก็จะได้แอดเดรสจริงในหน่วยความจำ

  38. หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์

  39. หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์ • สมมุติว่าโปรเซสหนึ่งมี 3 เซกเมนต์ (0-2) • เซกเมนต์ 0 และ 1 มี 5 หน้า และเซกเมนต์ 2 มี 10 หน้า แต่ละหน้ามีขนาด 100 ไบต์ (00-99) ดังนั้นดิสเพลซเมนต์เป็นเลข 2 หลัก • สมมติว่าต้องการแปลงแอดเดรสเสมือน 1490 เป็นแอดเดรสจริง • หมายเลขเซกเมนต์คือ 1 หมายเลขหน้าคือ 4 ดิสเพลซเมนต์คือ 90

  40. หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์ 5. ขั้นแรกอ่านค่าที่เก็บไว้ในช่อง 1 ของตารางเซกเมนต์ ได้ค่า 900 หมายความว่าตารางหน้าของเซกเมนต์ 1 อยู่ที่แอดเดรส 900 6. ต่อมาตรวจสอบค่าในช่องที่ 4 ของตารางหน้าที่แอดเดรส 900 เพื่อหาดูว่าหน้า 4 ของเซกเมนต์ 1 เก็บอยู่ที่ใดในหน่วยความจำ 7. เมื่อได้ค่าแอดเดรสหน้าในหน่วยความจำแล้ว (500)ก็นำไปบวกกับดิสเพลซเมนต์ก็จะได้ค่าแอดเดรสจริงในหน่วยความจำ คือ 590

  41. หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์หน่วยความจำเสมือนระบบผสมหน้าและเซกเมนต์      

  42. ยุทธวิธีการเฟตซ์ • ยุทธวิธีการเฟตซ์ (Fetch Strategy) หมายถึงการโหลดหน้าหรือเซกเมนต์จากดิสก์เข้าไปในหน่วยความจำ แบ่งออกได้เป็น 2 วิธี คือ • การเฟตซ์แบบต้องการ (demand fetch)OS จะโหลดเฉพาะหน้าหรือเซกเมนต์ ที่ต้องการใช้เท่านั้นเข้าไปในหน่วยความจำ • การเฟตซ์แบบคาดเดา (anticipatefetch)จะมีการคาดเดาว่าหน้าหรือ เซกเมนต์ไหนจะถูกใช้เป็นหน้าหรือเซกเมนต์ต่อไป และจะโหลดหน้าหรือเซกเมนต์นั้นเข้าไปไว้ในหน่วยความจำล่วงหน้า (ก่อนเกิดการใช้งานจริง)ทำให้โปรแกรมทำงานได้เร็วขึ้น

  43. STORAGE DEVICE CPU RAM ระดับ 1 ระดับ 2 ลำดับชั้นของหน่วยความจำ • ระบบหน่วยความจำเสมือนสามารถทำให้ผู้ใช้ใช้หน่วยความจำขนาดใหญ่กว่าหน่วยความจำจริงได้ ก็เพราะอาศัยการเก็บข้อมูล(หรือโปรแกรม)ไว้ในหน่วยความจำสำรอง ลักษณะการเคลื่อนย้ายข้อมูลจะมีการส่งไปมาระหว่างหน่วยความจำสำรอง กับหน่วยความจำหลัก ลักษณะเช่นนี้เรียกว่าหน่วยความจำ 2 ระดับหมายถึงว่าข้อมูลมีการขนย้ายจากหน่วยความจำประเภทหนึ่งไปยังหน่วยความจำอีกประเภทหนึ่ง

  44. ลำดับชั้นของหน่วยความจำลำดับชั้นของหน่วยความจำ • มีการพัฒนาหน่วยความจำให้เป็นลำดับขั้นมากกว่า 1 หรือ 2 ระดับ • หน่วยความจำแคช(cache memory)จึงได้ถูกพัฒนาขึ้นมาใช้งาน แคชมีความเร็วกว่าหน่วยความจำแรมหลายเท่า แคชจะอยู่ระหว่างซีพียูกับหน่วยความจำหลัก • เมื่อซีพียูต้องการข้อมูล • ซีพียูกำหนดตำแหน่งของข้อมูลที่ต้องการด้วยแอดเดรส ค่าแอดเดรสนี้จะถูกนำไปตรวจสอบในแคชด้วยความเร็วสูง • ถ้าในแคชมีข้อมูลในตำแหน่งที่บ่งโดยแอดเดรสซีพียูก็จะได้รับข้อมูลในแอดเดรสนั้นจากแคชทันที • แต่ถ้าไม่มีข้อมูลนั้นจะถูกส่งมาจากหน่วยความจำหลักมาเก็บลงในแคชก่อนแล้วค่อยส่งไปให้ซีพียู

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

  46. CPU Cache Main memory Secondary memory ลำดับชั้นของหน่วยความจำ • ระบบหน่วยความจำ 3 ระดับ โดยใช้ Cache

More Related