Transcript ch5

บทที่ 5
ระบบหน่ วยความจาเสมือน
(Virtual Memory)
ประเภทของการจัดการหน่ วยความจา
การจัดการหน่ วยความจา
ระบบหน่ วยความจาเสมือน (Virtual Memory)
• การจัดการหน่วยความจาสามารถแบ่งออกเป็ น 2
ประเภทใหญ่ ๆ
– ระบบหน่ วยความจาจริง
ขนาดของโปรแกรมจะต้องไม่ใหญ่กว่าขนาดของ
หน่วยความจาที่มีอยู่ ลบด้วยขนาดของหน่วยความจาที่เป็ น
ส่ วนของ OS
– ระบบหน่ วยความจาเสมือน
ขนาดของโปรแกรมจะมีขนาดเท่าใดก็ได้
ระบบหน่ วยความจาเสมือน (Virtual Memory)
หน่วยความจาเสมือนมีขนาดใหญ่กว่าหน่วยความจาจริง
แนวคิดของหน่ วยความจาเสมือน
• ผูเ้ ขียนโปรแกรมหรื อผูใ้ ช้จะไม่ ถูกจากัดในเรื่องของขนาดของหน่ วยความจา
อีกต่อไป
• OS จะจัดการให้ผใู ้ ช้สามารถใช้หน่ วยความจาได้ มากกว่ าหน่ วยความจาจริง
ทีม่ ีอยู่
• โปรแกรมทั้งโปรแกรมโดยส่ วนใหญ่ไม่ได้ถูกใช้งานพร้อมกันทั้งหมด ซึ่ง
การทางานของโปรแกรมจะเริ่มทางานจากส่ วนต้ นโปรแกรม แล้วค่ อย ๆ
เลือ่ นลงมาจนกระทั่งถึงท้ ายโปรแกรม
• ในขณะที่โปรแกรมกาลังทางานอยูท่ ี่ส่วนต้นโปรแกรม ที่ปลายโปรแกรมก็
ยังไม่ถูกใช้งาน เมื่อโปรแกรมทางานมาถึงส่ วนท้าย ๆ โปรแกรม ส่ วนต้น ๆ
โปรแกรมก็ไม่ถูกใช้งาน
แนวคิดของหน่ วยความจาเสมือน … ต่ อ
• ดังนั้นในช่วงที่โปรแกรมทางานอยูท่ ี่ส่วนต้น ๆ ก็ไม่มีความจาเป็ นต้อง
โหลดเอาส่ วนท้าย ๆ โปรแกรมลงไปในหน่วยความจาให้เปลืองเนื้อที่
• เมื่อโปรแกรมทางานมาจนถึงส่ วนที่ยงั ไม่ได้โหลดเข้าไปในหน่วยความจา
OS จะจัดการดึงเอาส่ วนนั้นมาจากหน่วยความจารอง
• โดยที่อาจจะโหลดไปทับส่ วนต้น ๆ ของโปรแกรมที่อยูใ่ นหน่วยความจา
หรื อโหลดลงไปในส่ วนอื่น ๆ ของหน่วยความจาก็ได้
• จากหลักการดังกล่าวเราจึงสามารถรันโปรแกรมที่มีขนาดใหญ่กว่า
หน่วยความจาที่มีอยูไ่ ด้
การแปลงแอดเดรส (Address Mapping)
• เนื่องจากขนาดของโปรแกรมมีขนาดใหญ่กว่าขนาดของหน่วยความจา
ดังนั้นจึงต้องมีการอ้างอิงแอดเดรสระหว่างแอดเดรสของหน่วยความจา
จริ งกับแอดเดรสของโปรแกรม
• แอดเดรสจริง (Real Address หรือ Physical Address) หมายถึง
แอดเดรสในหน่วยความจาจริ งเท่านั้น
• แอดเดรสเสมือน (Virtual Address หรือ Logical Address) หมายถึง
แอดเดรสที่โปรแกรมอ้างถึง
• ดังนั้นจึงต้องมีกลไกการแปลงแอดเดรสจากแอดเดรสเสมือนให้เป็ น
แอดเดรสจริ ง ณ.ตาแหน่งที่โปรแกรมส่ วนนั้นถูกวางลงไป ซึ่งเราเรี ยกว่า
การแปลงส่ งแอดเดรส (Address Mapping)
การแปลงแอดเดรส (Address Mapping) … ต่ อ
ตาแหน่งที่
ต่อเนื่องกัน
การแปลงแอดเดรส
หน่วยความจาจริ ง
หน่วยความจาเสมือน
การแปลงแอดเดรส (Address Mapping) … ต่ อ
• เทคนิคการแปลงแอดเดรสมีอยูห่ ลายวิธี แต่วิธีที่นิยมใช้กนั อย่างแพร่ หลาย
คือ dynamic address translation (DAT)
• วิธีการที่จะจัดการหน่วยความจาจริ งให้สามารถทางานโปรแกรมที่มีขนาด
ใหญ่ จะใช้หลักการแบ่งโปรแกรมออกเป็ นส่ วนย่อย ๆ หลาย ๆ ส่ วน
เรี ยกว่าบล็อก (Block)
• ขนาดของบล็อกแบ่งออกเป็ น 2 แบบคือทุกบล็อกมีขนาดเท่ากัน หรื อ
บล็อกมีขนาดไม่เท่ากัน ดังนั้นระบบหน่วยความจาเสมือนจึงแบ่งได้เป็ น 2
แบบ
– หน่วยความจาเสมือนระบบหน้า (Paging system)
– หน่วยความจาเสมือนระบบเซกเมนต์ (Segment system)
การแปลงแอดเดรส (Address Mapping) … ต่ อ
• ระบบหน่ วยความจาเสมือนจึงแบ่ งได้ เป็ น 2 แบบ
– หน่วยความจาเสมือนระบบหน้า (Paging system)
– หน่วยความจาเสมือนระบบเซกเมนต์ (Segment system)
การแปลงส่ งแอดเดรส
1. การแปลงส่งแบบตรง (direct mapping)
2. การแปลงส่งแบบสาระ(associative mapping)
3. การแปลงส่งแบบผสมระหว่างสาระและแบบตรง
combined associative/direct mapping
หน่ วยความจาเสมือนระบบหน้ า (Paging system)
• เป็ นการจัดแบ่งโปรแกรมออกเป็ นบล็อกที่มีขนาดเท่า ๆ กันทุกบล็อก โดย
จะเรี ยกบล็อกแต่ละบล็อกว่าหน้า (Page)
• ตัวอย่างการทางานในระบบหน้า
– ระบบมีหน่วยความจาขนาด 100 Kbyte = 100,000 Byte = 105 Byte
– ต้องการรันโปรแกรมที่มีขนาด 1000 Kbyte = 1,000,000 Byte = 106 Byte
โปรแกรมขนาด
1000 KByte
หน่วยความจาขนาด
100 Kbyte
หน่ วยความจาเสมือนระบบหน้ า (Paging system) … ต่ อ
• สมมุติ OS แบ่งโปรแกรมออกเป็ นหน้าย่อย โดยทีแ
่ ตละหน
่
้ า (Page) มี
ขนาด 1 Kbyte = 1,000 Byte = 103 Byte
• ต้ องการรันโปรแกรม 1000 Kbyte ดังนั้นโปรแกรมจะถูกแบ่งออกเป็ น 1000 หน้า
(1000 Page) ดังรู ป
แอดเดรสเสมือน
0 0 0 0 0 0 แอดเดรสภายในหน้า
หน้าที่ 000 0 0 0 9 9 9
Displacement
0
0
1
0
0
0
เลขหน้า
หน้าที่ 001 0 0 1 9 9 9
Page Number
002 000
หน้าที่ 002 0 0 2 9 9 9
แอดเดรสเสมือน
หน้าที่ 998
หน้าที่ 999
998
998
999
999
000
999
000
999
แอดเดรสเริ่ มต้นของหน้า
แอดเดรสสุ ดท้ายของหน้า
หน่ วยความจาเสมือนระบบหน้ า (Paging system) … ต่ อ
• จากรู ปเราสามารถแบ่งแอดเดรสเสมือนออกเป็ น 2 ส่ วน
– ส่ วนที่ 1 จะเป็ นค่าที่บ่งบอกหมายเลขหน้า
– ส่ วนที่ 2 จะเป็ นค่าที่บ่งบอกค่าแอดเดรสภายในหน้านั้น ๆ ซึ่งมีชื่อ
เรี ยกว่าดีสเพลซเมนต์ (Displacement)
• ตัวอย่างเช่น แอดเดรสเสมือนที่ 243765 มีความหมายว่าอยูใ่ น
หน้าที่ 243 และมีดีสเพลสเมนต์เป็ น 765
หมายเลขหน้า ดีี สเพลซเมนต์
แอดเดรสเสมือน
หน่ วยความจาเสมือนระบบหน้ า (Paging system) … ต่ อ
• สาหรับในหน่วยความจาจริ ง OS จะแบ่งออกเป็ นหน้าย่อยเหมือนกัน โดยทีแ
่ ต่
ละหน้า (Page) มีขนาดเท่ากับหน้าของหน่วยความจาเสมือนคือ 1 Kbyte = 1,000
Byte = 103 Byte
• ดังนั้นหน่วยความจาจริงจะถูกแบ่งออกเป็ น 100 หน้า (100 Page) ดังรู ป
เลขหน้า
Page Number
หน้าที่ 02
00 000
00 999
0 1 000
0 1 999
0 2 000
0 2 999
หน้าที่ 98
หน้าที่ 99
9
9
9
9
หน้าที่ 00
หน้าที่ 01
8
8
9
9
000
999
000
999
แอดเดรสภายในหน้า
Displacement
แอดเดรสเสมือน
แอดเดรสเริ่ มต้นของหน้า
แอดเดรสสุ ดท้ายของหน้า
หน่ วยความจาเสมือนระบบหน้ า(Paging system)… ต่ อ
• โปรแกรมของผูใ้ ช้ไม่วา่ จะมีขนาดใหญ่เท่าใด จะต้องถูกเก็บอยูใ่ น
หน่วยความจารอง ซึ่งโดยส่ วนมากได้แก่ ดิสก์ เนื่องจากมีความจุสูง
• เมื่อผูใ้ ช้สงั่ รันโปรแกรม OS จะโหลดเอาโปรแกรมจากดิสก์เข้าไปใน
หน่วยความจาครั้งละ 1 หน้า นัน่ คือ 1 หน้าในโปรแกรมก็จะเข้าไป
ใช้เนื้อที่ในหน่วยความจา 1 หน้าเช่นกัน
• เมื่อโปรแกรมหนึ่งครอบครองหน้าใดในหน่วยความจาแล้ว โปรแกรมอื่น
จะใช้หน้านั้นอีกไม่ได้
• โปรแกรมจะครอบครองหน่วยความจาจริ งเป็ นจานวนเต็มของหน้า
• ดังนั้นต้องมีวิธีการแปลงแอดเดรสจากแอดเดรสเสมือนเป็ นแอดเดรสจริ ง
การแปลงแอดเดรสในระบบหน้ า
• OS จะสร้างตารางไว้สาหรับโปรเซส คือ ตารางหน้า
(Page table)
• สมมุติวา่ หน่วยความจาเสมือนมีขนาด 1000 หน้า และ
หน่วยความจาจริ งมีขนาด 100 หน้า
• ตารางหน้าก็จะมีขนาด 1000 ช่อง ได้แก่ช่องที่ 000-999
– ช่องที่ 000 สาหรับหน้าที่ 000
– ช่องที่ 001 สาหรับหน้าที่ 001
• ในตารางหน้าจะมี 3 คอลัมภ์
การแปลงแอดเดรสในระบบหน้ า … ต่ อ
หมายเลขหน้า
001
002
003
แอดเดรสในดิสก์ 0/1 แอดเดรสในหน่วยความจาจริ ง
998
999
Page Table
การแปลงแอดเดรสในระบบหน้ า … ต่ อ
• คอลัมภ์ ที่ 1 จะบอกแอดเดรสของหน้านั้น ๆ ที่อยูใ่ นดิสก์
เพื่อที่จะได้ ร้ ูวา่ หน้ าต่าง ๆ ของโปรแกรมเก็บไว้ ที่หน้ าใดของดิสก์
• คอลัมภ์ ที่ 2 จะบอกว่าหน้านั้น ๆ อยูใ่ นหน่วยความจาจริ ง
หรื อไม่
– ถ้าค่าเป็ น 0 หมายถึง หน้านั้นไม่ได้อยูใ่ นหน่วยความจาจริ ง (อยูใ่ น
หน่วยความจาสารอง)
– ถ้าค่าเป็ น 1 หมายถึง หน้านั้นอยู่ในหน่ วยความจาจริง
• คอลัมภ์ ที่ 3 จะบอกถึงแอดเดรสเริ่ มต้นของหน้าใน
หน่วยความจาจริ ง คือหมายเลขหน้าในหน่วยความจาจริ งตาม
ด้วยดีสเพรสเมนต์
การแปลงแอดเดรสในระบบหน้ า … ต่ อ
ถ้ าต้ องการทราบว่ าแอดเดรสเสมือน 123983 ไปอยู่ ณ.
ตาแหน่ งใดในหน่ วยความจาจริง
1. OS จะนาเอาแอดเดรสเสมือนมาหาค่าหมายเลขหน้าและดีสเพลซ
เมนต์ ในกรณี น้ ี หมายเลขหน้าคือ 123 และดีสเพลซเมนต์คือ
983
2. OS จะตรวจสอบที่ตารางหน้าในช่องที่ 123
3. อ่านค่าคอลัมภ์ที่ 2 ในตารางหน้าช่องที่ 123 ว่ามีคา่ 1 หรื อ 0
ในกรณีนี ้มีค่าเป็ น 1 (แสดงว่ าเก็บอยู่ในหน่ วยความจาจริง)
การแปลงแอดเดรสในระบบหน้ า … ต่ อ
ถ้ าต้ องการทราบว่ าแอดเดรสเสมือน 123983 ไปอยู่ ณ. ตาแหน่ งใดใน
หน่ วยความจาจริง
4. OS จะอ่านค่าในคอลัมภ์ที่ 3 ของตารางหน้าเพื่อหาแอดเดรสเริ่ มต้นของ
หน้าในหน่วยความจาจริ ง ซึง่ ค่าคอลัมภ์ 3 คือ 54000
5. นาเอาค่าในคอลัมภ์ที่ 3 มารวมกับดีสเพรสเมนต์ จะได้แอดเดรสใน
หน่วยความจาจริ งที่ตรงกับแอดเดรสเสมือน (ซึง่ ค่าคอลัมภ์ที่3 คือ 54000
ค่าดีสเพรสเมนต์คือ 983 ค่าที่ได้ คือ 54000+983=54983
6. ดังนัน้ แอดเดรสเสมือน 123983 จะอยูท่ ี่
หน้ า 54 ของหน่ วยความจาจริง และมี
ค่ าดีสเพรสเมนต์ คือ 983






การแปลงแอดเดรสในระบบหน้ า … ต่ อ
กรณีข้อมูลไม่ ได้ อยู่ในหน่ วยความจาจริง (อยู่ในหน่ วยความจาสารอง)
1. OS จะนาเอาแอดเดรสเสมือนมาหาค่าหมายเลขหน้าและดีสเพลซเมนต์ ในกรณี น้ ี
หมายเลขหน้าคือ 123 และดีสเพลซเมนต์คือ 983 OS จะตรวจสอบที่ตารางหน้า
ในช่องที่ 123
2. อ่านค่าคอลัมภ์ที่ 2 ในตารางหน้าช่องที่ 123 ว่ามีคา่ 1 หรื อ 0 ในกรณีนี ้มีค่าเป็ น 0
(แสดงว่ าเก็บอยู่ในหน่ วยความจาสารอง)
3. OS จะอ่านค่าคอลัมภ์ที่ 1 ซึ่ งเป็ นแอดเดรสในดิสก์ ในดิสก์เป็ นจานวน 1 หน้า (1
Kbyte ) (ค่ าแอดเดรสในดิสก์ คือ 5146789)
4. OS จะไปหาหน้าที่วา่ งในหน่วยความจาจริ ง (หน้ าที่วา่ งคือหน้ าที่ 03000)
การแปลงแอดเดรสในระบบหน้ า … ต่ อ
กรณีข้อมูลไม่ ได้ อยู่ในหน่ วยความจาจริง (อยู่ในหน่ วยความจาสารอง)
5. นาข้อมูลที่อ่านมาจากดิสก์ไปวางไว้ในหน่วยความจาจริ ง
6. OS จะทาการแก้ไขข้อมูลในตารางหน้าช่องที่ 123 โดยเปลี่ยนค่าคอลัมภ์ที่
2 เป็ น 1
7. ใส่ ค่าหน้าที่หามาได้ของหน่วยความจาจริ งบวกกับตาแหน่งเริ่ มต้น (000) ของ
ดีี สเพรสเมนต์ลงในคอลัมภ์ที่ 3 ของตารางหน้า (ค่าแอดเดรสจริง
03983 (03000+983) ซึง่ ตรงกับแอดเดรสเสมือน 123983
แอดเดรสเสมือน
123
000
001
983

ไปอ่านข้อมูลในแอดเดรส
5146789 ในดิสก์
123 5146789 0

โหลดลง
หน่วยความจาจริ ง
00

01
02
03000
หน่วยความจาจริ ง

ตารางหน้า
000
001


123 5146789 1 03000

ค่าแอดเดรสจริ ง 03983 (03000+983) ซึง่ ตรงกับแอดเดรสเสมือน 123983
เปลี่ยนจาก 0 เป็ น 1
โหลดมายังหน่วยความจา
ตารางหน้า
การแปลงแอดเดรสในระบบหน้ า … ต่ อ
• กรณี ถา้ ไม่มีหน้าว่างในหน่วยความจาจริ ง OS ต้องเลือกเอาหน้า
หนึ่งออกจากหน่วยความจาจริ ง
• หน้าใดจะถูกเลือกออก OS จะมีวธิ ีการที่เรี ยกว่า การสับเปลี่ยน
หน้า (Page Replacement)
• หน้าที่ถูกเลือกออก OS จะทาการบันทึกข้อมูลและสถานะปัจจุบนั
ของหน้านั้นกลับลงในดิสก์ ณ.ตาแหน่งแอดเดรสของดิสก์ตาม
ตารางหน้า จากนั้นจึงโหลดหน้าใหม่ทบั ลงไป
• แก้ไขข้อมูลในตารางหน้าของทั้งของหน้าที่ถูกเขียนทับและหน้าที่
โหลดเข้าไปใหม่
การสับเปลี่ยนหน้ า (Page Replacement)
• เมื่อเกิดความผิดพร่องของหน้ าในระบบหน้ า และ
หน่วยความจาไม่มีหน้ าใดว่างอยูเ่ ลย
• ก่อนที OS จะโหลดเอาหน้ าใหม่เข้ ามาในหน่วยความจานัน้
OS ต้ องตัดสินใจก่อนว่าควรจะเลือกหน้ าใดเพื่อที่จะวาง
หน้ าใหม่ทบั ลงไป
• สิ่งที่ OS ใช้ ในการตัดสินใจเลือกหน้ าเรี ยกว่า การสับเปลี่ยน
หน้ า Page Replacement หรื อยุทธวิธีการแทนที่
(replacement strategy)
การสั บเปลีย่ นหน้ า (Page Replacement)
• การสับเปลี่ยนหน้ามีวิธีการ 5 วิธีดงั นี้
– การสับเปลี่ยนหน้าแบบสุ่ ม (Random) ทุกหน้ ามีโอกาสถูกเลือกเท่ากัน
หมด
– การสับเปลี่ยนหน้าแบบมาก่อนออกก่อน (First in First out :FIFO)
– การสับเปลี่ยนหน้าแบบหน้าที่ถูกใช้นอ้ ยที่สุดออกก่อน (Not frequently
used :NFU)
– การสับเปลี่ยนหน้าแบบหน้าใดที่ไม่ถูกใช้นานที่สุดออกก่อน (Least
recently used :LRU)
– การสับเปลี่ยนหน้าแบบหน้าใดไม่ได้ถูกใช้งานออกก่อน (Not recently
used :NUR)
การแปลงแอดเดรสในระบบ Segment
• หมายเลขหน้ าจากแอดเดรสเสมือนถูกส่งเข้ าไปตรวจสอบ
ในตารางที่เรี ยกว่า ตารางหน้ าแบบสาระ(associative
page table)พร้ อมกันทุกช่อง
• จะได้ คา่ แอดเดรสเริ่ มต้ นของหน้ าในหน่วยความจาจริ งที่เก็บ
หน้ านี ้เอาไว้ ออกมาทันที
• แอดเดรสที่ได้ นี ้ก็จะนาไปบวกดีสเพลซเมนต์ผลลัพธ์ที่ได้ ก็
คือแอดเดรสจริ งในหน่วยความจา
ตารางหน้ าแบบสาระ(associative page table)
การแปลงส่ งแบบผสมระหว่ างแบบสาระและแบบตรง
(combined associative/direct mapping)
หน่ วยความจาเสมือนระบบเซกเมนต์ (Segment System)
• มีลกั ษณะการทางานคล้ายกับระบบหน้า (Page System) ต่างกัน
ตรงที่ขนาดของบล็อกไม่จาเป็ นต้องเท่ากัน
• ตารางเซกเมนต์ (Segment table) จะมีคอลัมน์มากกว่าตารางหน้า
อยู่ 1 คอลัมน์ใช้เก็บขนาดของเซกเมนต์น้ นั ไว้ เพื่อให้ OS ทราบว่า
แต่ละเซกเมนต์มีขนาดเท่าใด
• การอ่านหรื อเขียนข้อมูลจากหน่วยความจารองและการหาเนื้อที่ใน
หน่วยความจาจริ งจะกระทาตามขนาดของเซกเมนต์ เช่นถ้าเซกเมนต์
มีขนาด 5 Kbytes การโหลดจากดิสก์ตอ้ งโหลดข้อมูลขึ้นมา 5
Kbytes ในขณะเดียวกันก็ตอ้ งหาเนื้อที่วา่ งในหน่วยความจาที่มีขนาด
5 Kbytes ด้วยเช่นกัน
หน่ วยความจาเสมือนระบบเซกเมนต์ (Segment System)…ต่ อ
หมายเลขหน้า
แอดเดรสในดิสก์
0/1ขนาดเซกเมนต์
001
002
003
998
999
Segment Table
แอดเดรสในหน่วยความจาจริ ง
หน่ วยความจาเสมือนระบบผสมหน้ าและเซกเมนต์
• ระบบจะแบ่งหน่วยความจาออกเป็ นหน้ าที่มีขนาดเท่ากัน
• ในโปรแกรมของผู้ใช้ จะถูกแบ่งออกเป็ นเซกเมนต์
• ภายในเซกเมนต์จะถูกแบ่งออกเป็ นหลายๆหน้ า
• ดังนันขนาดของเซกเมนต์
้
จะเป็ นจานวนเท่าของหน้ า
• แต่ละเซกเมนต์ของโปรแกรมไม่จาเป็ นต้ องอยูเ่ รี ยงกันในหน่วยความจา
• แต่ละหน้ าในเซกเมนต์เดียวกันก็ไม่จาเป็ นต้ องอยูเ่ รี ยงติดกันใน
หน่วยความจาจริ ง
หน่ วยความจาเสมือนระบบผสมหน้ าและเซกเมนต์
• การผสมเอาระบบหน้ าและเซกเมนต์เข้ าด้ วยกันทาให้ ประสิทธิภาพ
การทางานของระบบดีขึ ้น
• ระบบผสมนี ้ แอดเดรสเสมือนจะแบ่งออกเป็ น 3 ส่วน คือ หมายเลข
หน้ าเซกเมนต์ หมายเลขหน้ า และดีสเพลซเมนต์
หมายเลขเซกเมนต์ หมายเลขหน้ า
ดีสเพลซเมนต์
หน่ วยความจาเสมือนระบบผสมหน้ าและเซกเมนต์
• นาหมายเลขเซกเมนต์ (S)ของแอดเดรสเสมือนไปหาแอดเดรส
ของตารางหน้ าที่เก็บอยูใ่ นตารางเซกเมนต์
• เมื่อทราบว่าตารางหน้ าอยูท่ ี่ใดในหน่วยความจาแล้ ว
• ใช้ หมายเลขหน้ า P เพื่อหาแอดเดรสของหน้ า P’ในหน่วยความจา
• นาค่าแอดเดรสนี ้บวกกับดีสเพลซเมนต์ก็จะได้ แอดเดรสจริ งใน
หน่วยความจา
หน่ วยความจาเสมือนระบบผสมหน้ าและเซกเมนต์
หน่ วยความจาเสมือนระบบผสมหน้ าและเซกเมนต์
1. สมมุติวา่ โปรเซสหนึง่ มี 3 เซกเมนต์ (0-2)
2. เซกเมนต์ 0 และ 1 มี 5 หน้ า และเซกเมนต์ 2 มี 10 หน้ า แต่ละหน้ ามี
ขนาด 100 ไบต์ (00-99) ดังนันดี
้ สเพลซเมนต์เป็ นเลข 2 หลัก
3. สมมติวา่ ต้ องการแปลงแอดเดรสเสมือน 1490 เป็ นแอดเดรสจริง
4. หมายเลขเซกเมนต์คือ 1 หมายเลขหน้ าคือ 4 ดีสเพลซเมนต์คือ 90
หน่ วยความจาเสมือนระบบผสมหน้ าและเซกเมนต์
5. ขันแรกอ่
้
านค่าที่เก็บไว้ ในช่อง 1 ของตารางเซกเมนต์ ได้ คา่ 900
หมายความว่าตารางหน้ าของเซกเมนต์ 1 อยูท่ ี่แอดเดรส 900
6. ต่อมาตรวจสอบค่าในช่องที่ 4 ของตารางหน้ าที่แอดเดรส 900 เพื่อหาดู
ว่าหน้ า 4 ของเซกเมนต์ 1 เก็บอยูท่ ี่ใดในหน่วยความจา
7. เมื่อได้ คา่ แอดเดรสหน้ าในหน่วยความจาแล้ ว (500)ก็นาไปบวกกับดีส
เพลซเมนต์ก็จะได้ คา่ แอดเดรสจริงในหน่วยความจา คือ 590
หน่ วยความจาเสมือนระบบผสมหน้ าและเซกเมนต์






ยุทธวิธีการเฟตซ์
• ยุทธวิธีการเฟตซ์ (Fetch Strategy) หมายถึงการโหลดหน้าหรื อ
เซกเมนต์จากดิสก์เข้าไปในหน่วยความจา แบ่งออกได้เป็ น 2 วิธี คือ
– การเฟตซ์ แบบต้ องการ (demand fetch) OS จะโหลดเฉพาะหน้า
หรื อเซกเมนต์ ที่ตอ้ งการใช้เท่านั้นเข้าไปในหน่วยความจา
– การเฟตซ์ แบบคาดเดา (anticipate fetch) จะมีการคาดเดาว่าหน้ า
หรื อ เซกเมนต์ไหนจะถูกใช้ เป็ นหน้ าหรื อเซกเมนต์ตอ่ ไป และจะ
โหลดหน้ าหรื อเซกเมนต์นนเข้
ั ้ าไปไว้ ในหน่วยความจาล่วงหน้ า
(ก่อนเกิดการใช้ งานจริง)ทาให้ โปรแกรมทางานได้ เร็วขึ ้น
ลาดับชัน้ ของหน่ วยความจา
• ระบบหน่ วยความจาเสมือน สามารถทาให้ผูใช
้ ้ใช้
หน่วยความจาขนาดใหญ่กว่าหน่วยความจาจริ งได้ ก็เพราะอาศัยการเก็บ
ข้อมูล(หรื อโปรแกรม)ไว้ในหน่วยความจารอง ลักษณะการเคลื่อนย้าย
ข้อมูลจะมีการส่ งไปมาระหว่างหน่วยความจารอง กับหน่วยความจาหลัก
ลักษณะเช่ นนีเ้ รียกว่ าหน่ วยความจา 2 ระดับ หมายถึงวาข
่ อมู
้ ล
มีการขนย้ายจากหน่วยความจาประเภทหนึ่งไปยังหน่วยความจาอีก
ประเภทหนึ่ง
CPU
RAM
ระดับ 1
STORAGE
DEVICE
ระดับ 2
ลาดับชัน้ ของหน่ วยความจา
• มีการพัฒนาหน่วยความจาให้ เป็ นลาดับขันมากกว่
้
า 1 หรื อ 2 ระดับ
• หน่ วยความจาแคช(cache memory) จึงได้ ถกู พัฒนาขึ ้นมาใช้ งาน แคชมี
ความเร็วกว่าหน่วยความจาแรมหลายเท่า แคชจะอยูร่ ะหว่างซีพียกู บั
หน่วยความจาหลัก
• เมื่อซีพียูต้องการข้ อมูล
– ซีพียกู าหนดตาแหน่งของข้ อมูลที่ต้องการด้ วยแอดเดรส ค่าแอดเดรสนี ้จะถูกนาไป
ตรวจสอบในแคชด้ วยความเร็วสูง
– ถ้ าในแคชมีข้อมูลในตาแหน่งที่บง่ โดยแอดเดรสซีพียกู ็จะได้ รับข้ อมูลในแอดเดรสนัน้
จากแคชทันที
– แต่ถ้าไม่มีข้อมูลนันจะถู
้ กส่งมาจากหน่วยความจาหลักมาเก็บลงในแคชก่อนแล้ ว
ค่อยส่งไปให้ ซีพียู
ลาดับชัน้ ของหน่ วยความจา
• การขนย้ ายข้ อมูลระหว่ างแคชกับแรม
– มีลกั ษณะการทางานเหมือนกับการขนย้ ายข้ อมูลระหว่างดิสก์กบั
แรมในระบบหน่วยความจาเสมือน
• ความแตกต่ างกันระหว่ างแคชกับแรม
– ในการขนย้ ายข้ อมูลเป็ นไปโดยวงจรทางฮาร์ ดแวร์ ไม่มีสว่ น
เกี่ยวข้ องกับโปรแกรมใดๆทังสิ
้ ้น(รวมทัง้ OS เองด้ วย)ซีพียบู างตัว
ถูกสร้ างขึ ้นโดยมีแคชติดมาด้ วย ทาให้ การทางานของซีพียมู ี
ความเร็วสูงขึ ้น
ลาดับชั้นของหน่ วยความจา
• ระบบหน่วยความจา 3 ระดับ โดยใช้ Cache
CPU
Cache
Main memory
Secondary memory
แบบทดสอบ
1. การจัดการหน่วยความจาเสมือนกับหน่วยความจาหลัก
แตกต่างกันอย่างไร
2. จงเปรี ยบเทียบการทาหน่วยความจาเสมือนระบบหน้ า
และหน่วยความจาเสมือนระบบเซกเมนต์
3. นักศึกษาคิดว่าทาไมจึงต้ องทาหน่วยความจาเสมือน
4. หน่วยความจา cache มีประโยชน์อย่างไร
แบบทดสอบ
5. ระบบการแบ่งหน่วยความจาเสมือนระบบ page กับ
ระบบ Segment แตกต่างกันอย่างไร
6. การแปลงส่งแอดเดรส address Mapping คืออะไร
7. การสับเปลี่ยนหน้ ามีกี่แบบอะไรบ้ าง
8. ระบบหน่วยความจาแบบ 2 ระดับกับ 3 ระดับ
แตกต่างกันอย่างไร
9. แอดเดรสเสมือนที่ 123456 มีความหมายอย่างไร
10. จงอธิบายภาพต่อไปนี ้
แอดเดรสเสมือน
678
333
000
001
333
โหลดลง
หน่วยความจาจริ ง
00
01
02
99000
หน่วยความจาจริ ง
1234567 0
ตารางหน้า
000
001
123 1234567 1 99000
ตารางหน้า