หน่วยความจำเสมือน Virtual Memory
Virtual Memory เป็นการสร้างภาพให้ OS มองเห็น RAM มีมากแบบไม่จำกัด แต่ในความเป็นจริง RAM อาจจะมีน้อยก็ได้ ดังนั้น จะนำเอาสื่อสำรองข้อมูลหรือ Harddisk มาช่วยในการทำงานนั่นเอง Magic... Plenty of RAM RAM O.S. +
หลักการ หาก RAM พอก็ใช้ RAM หากเต็มก็ใช้ Disk วิเคราะห์ Hey! Give me some places หาก RAM พอก็ใช้ RAM หากเต็มก็ใช้ Disk วิเคราะห์ ลองวิเคราะห์เหตุการณ์ดังนี้ ว่าจะเกิดอะไรขึ้น 1. มี RAM มากและเปิดโปรแกรมมาน้อย 2. มี RAM มากและเปิดโปรแกรมมาก 3. มี RAM น้อยและเปิดโปรแกรมมาก Where ? Little RAM
Demand Paging เป็นวิธีที่นิยมมากที่สุด ทำงานได้ดี (Performance ดี) หลักการ แบ่งโปรเซสออกเป็น Page และแบ่งพื้นที่ RAM ออกเป็น Frame ส่วน Harddisk ก็จะแบ่งเป็น Page เช่นกัน Disk Physical Memory Logical Address Of process Frame Page Page
Logical Address เป็นมุมมองที่โปรเซสมองเห็น Address ของตนเอง จะใช้หลักการของ Paging โดยจะเริ่ม Page แรกที่ Page 0 Page A B 1 C 2
Page Table เก็บข้อมูลว่า Page แต่ละ Page นั้น Valid หรือไม่ Valid = อยู่ใน Physical Memory แล้ว Invalid = ไม่อยู่ใน Physical Memory Page Frame Valid-Invalid bit 4 V I 3 1 2 ดูหน้าต่อไป ->
จาก Page Table 1 Physical Memory 2 C 3 4 A 5
Page Fault เป็นหลักการที่บอกว่า “ขณะนี้ Page นี้ไม่อยู่ใน RAM” จะมีการส่งสัญญาณ Interrupt ไปที่ CPU เพื่อโหลดข้อมูลที่ต้องการนั้นลงไป Logical Address It’s not in RAM Page A Page Fault Running B 1 C 2
ยามปกติ มันก็คือไฟล์ นั่นเอง ข้อมูลทั้งหมดของโปรเซสจะอยู่ใน Disk ก่อนการ Run ในลักษณะของ Page แต่ละ Page มีขนาดที่เท่ากัน (ขนาดเท่ากับเฟรม) มันก็คือไฟล์ นั่นเอง A B C D E F
เมื่อถูกเรียกให้ทำงาน จะเริ่ม Run ที่ Page แรกก่อน ใน Logical Address ซึ่งจริงๆแล้วอยู่ใน Disk ดังนั้น Page แรกก็จะเกิด Page Fault ทันที จะโหลด Page แรกมาอยู่ใน RAM และทำงานต่อไป หากมี Page Fault ก็จะทำแบบเดิม ในความเป็นจริง งานไม่จำเป็นต้องเรียงลำดับของ Page เช่น 0->1->2 เพราะอาจมีการกระโดดข้ามเพจได้ หรือบางเพจอาจไม่ถูกเรียกเลยก็ได้
หาก RAM เต็ม Victim จะทำการเลือกหา “เหยื่อ” (Victim) O จะทำการเลือกหา “เหยื่อ” (Victim) เพื่อทำการแทนที่ Page นั้น (Page Replacement) K 1 Physical Memory S 2 Hey the victim You must go out now! C 3 4 A Victim R 5 Another page coming
เกมจับกลุ่ม Tu ให้ น.ศ. แบ่งกลุ่ม 5 คน แล้วสอนทบทวนเรื่องนี้ต่อกัน โดยสอนกันคนละ 2 นาที สลับกันไปเรื่อยๆ ระหว่างสอนสามารถมีการถามได้ ใครสอนติดขัดจะถูกจดประวัติไว้ เมื่อครบ 20 นาที ใครถูกจดแต้มสูงสุดจะต้องออกมาทำท่า “เดินเป็ด” หน้าห้อง
แบบฝึกหัด จงทำแบบฝึกหัดดังนี้ แล้วส่งอาจารย์ (เขียนลงกระดาษ) 1. มีข้อมูลดังนี้ 2. การเลือก Victim Page น่าจะมีหลัการคิดอย่างไร Page Table *จงวาดรูปแสดงแผนภาพของ RAM ให้ 1 page มีขนาด 500 Bytes Page Frame Valid-invalid bit 8 V 4 I 3 *หากลำดับการทำงานของ Page เป็นดังนี้ 0->2->3->1 แต่ละ Page ใช้เวลาทำงาน Page ละ 10 ms จะเกิด Page Fault ขึ้นที่เวลาเท่าไรจากเมื่อเริ่มทำงาน 1 2 3
ทดลอง 1. ลองเปิดโปรแกรมขึ้นมาเป็นจำนวนมาก 2. คลิ้กที่ไอคอนของโปรแกรมที่ Task Bar สลับไปสลับมาอย่างรวดเร็ว 3. สังเกตที่ไฟฮาร์ดดิสก์ 4. ไป Download File ที่เว็บอาจารย์ ชื่อไฟล์ Coolsysteminfo.exe 5. เปิดโปรแกรม ทำซ้ำข้อที่ 1->2 แล้วดูที่การทำงานของโปรแกรม 6. สรุปผลแล้วส่งรายงานการทดลอง
อัลกอริธึมของการหาเหยื่อ จากที่กล่าวมาแล้วว่า หาก RAM เต็มจะต้องทำการแทนที่ Page นั้น เราจะมีวิธีการใดบ้างในการเลือกเพจเหยื่อที่จะถูกแทนที่ 1. FIFO 2. LRU 3. Optimal
อัลกอริธึม FIFO ย่อมาจาก First-in First-out หรือ มาก่อน ออกก่อน เพจใดเข้ามาใน RAM ก่อน เมื่อ RAM เต็มก็ต้องออกจาก RAM ก่อนเช่นกัน
อัลกอริธึม Optimal เป็นอัลกอริธึมที่ดีที่สุดในทางอุดมคติ แต่ในทางปฏิบัติทำได้ยาก หลักการ => เพจใดจะใช้อีกในอนาคตอันใกล้ ก็จะเก็บเพจนั้นไว้
อัลกอริธึม LRU ย่อมาจาก Least Recently Used เป็นอัลกอริธึมที่เหมาะสมที่สุด ในทางปฏิบัติ หลักการ => ที่ผ่านมาเพจใดถูกเรียกใช้เป็นปัจจุบันน้อยที่สุด จะต้องกลายเป็นเหยื่อ
ภาวะ Thrashing เป็นภาวะที่ระบบหยุดการทำงานไปชั่วขณะ เกิดจากมี Page Fault เกิดขึ้นตลอดเวลา ทำให้มีการ Swap in และ Swap out เป็นจำนวนมาก เกิด Thrashing CPU Utilization ยิ่งสลับโปรแกรมมาก ยิ่งเสี่ยงต่อ Thrashing Degree of multiprogramming
สาเหตุของการเกิด Thrashing การทำงานของโปรแกรมจะมีธรรมชาติของมัน อย่างที่กล่าวมาแล้วว่าโปรแกรมสามารถกระโดดไป-มาได้ เมื่อกระโดดไป-มา หากข้อมูลของโปรเซสนั้นไม่อยู่ใน RAM ก็ต้อง Swap in เข้ามา ส่วนใหญ่แล้ว พื้นที่ไหนถูกเรียกก็จะทำงานอยู่ในบริเวณใกล้ๆกัน เรียกว่า การอ้างถึงใกล้ๆ (Locality of Reference) ดังนั้น ถ้าเรารู้ Locality of Reference ของแต่ละโปรเซสเราก็สามารถ Plan การใช้งาน RAM ของมันได้
Working Set Model เป็นวิธีการที่จะหาขอบเขตการทำงานของกลุ่มย่อยๆ (Locality of Reference) ภายในโปรเซส เริ่มโดยการเขียน Reference String ก่อน Reference String ก็คือหมายเลขของ Page ทั้งหมดที่โปรเซสจะเรียกใช้เรียงตามลำดับ ตัวอย่าง 2 6 1 5 7 7 7 7 5 1 6 2 3 4 1 2 3 4 1 2 3 4 4 4 3 4 4 4 4 1 3 2 หลังจากนั้น มองหา Working Set 2 6 1 5 7 7 7 7 5 1 6 2 3 4 1 2 3 4 1 2 3 4 4 4 3 4 4 4 4 1 3 2 Working Set เหมือนเป็นหน้าต่าง จะเลื่อนไปทางด้านข้าง เพื่อหากลุ่มของ Page ที่จะโหลดเข้ามาใน RAM พร้อมกัน ดังนั้น หากขนาดของ Working Set ไม่พอดีจะเกิดการ Swap มาก
Demand Segmentation เป็นการพัฒนาจาก Demand Paging เริ่มทำงานที่ Main Segment เมื่อเกิด Segment Fault ก็จะ Swap in เอา Segment ที่ต้องการเข้ามาใน RAM หลังจากนั้นจะทำงานต่อไป วิธีนี้จะใช้ RAM มากกว่าแบบ Demand Paging แต่การ Thrashing จะเกิดขึ้นได้ยาก