SlideShare a Scribd company logo
1 of 15
บทที่ 7
หน่วยความจาเสมือน
ประเภทของการจัดการหน่วยความจา
ในระบบโปรแกรมเดี่ยว
การจัดการหน่วยความจาแบบหน่วยความจาจริงก็คือ การใช้
หน่วยความจาแบบธรรมดาโดยที่โปรแกรมของผู้ใช้จะต้องไม่โตเกิน
กว่าขนาดของหน่วยความจาที่มีอยู่ (ในส่วนของผู้ใช้เท่านั้นไม่รวม
ส่วนของระบบปฏิบัติการ)
ในระบบหลายโปรแกรม การจัดการหน่วยความจาแบบ
หน่วยความจาจริงนั้น แบ่งเป็นการจัดการแบบแบ่งพื้นที่ใน
หน่วยความจา และไม่ได้แบ่งหน่วยความจา การแบ่งหน่วยความจา
ยังแบ่งย่อยเป็น 2 ประเภท คือ ส่วนแบ่งย่อยมีขนาดคงที่แน่นอน
และขนาดไม่คงที่
แนวคิดของหน่วยความจาเสมือน
แนวคิดของการทาหน่วยความจาเสมือนนี้มีลักษณะเช่นเดียวกับการ
ทาโอเวอร์เลย์นั่นคือโปรแกรมทั้งโปรแกรมไม่ได้ถูกใช้งานพร้อม
กันทั้งหมด เช่น โปรแกรมทั่ว ๆ ไปจะเริ่มทางานจากส่วนต้น
โปรแกรม ค่อย ๆ เลื่อนลงมาจนกระทั่งถึงท้ายโปรแกรมในขณะที่
โปรแกรมกาลังทางานอยู่ที่ส่วนต้นโปรแกรมที่ปลายของโปรแกรม
ก็ยังไม่ถูกใช้เมื่อโปรแกรมทางานมาถึงส่วนท้าย ๆ โปรแกรมส่วน
ต้น ๆ โปรแกรมก็ไม่ถูกใช้งาน
จะจัดการดึงเอาส่วนนั้นมาจากหน่วยความจารอง (ส่วนใหญ่จะใช้
ดิสก์) ซึ่งเก็บโปรแกรมทั้งโปรแกรมไว้โดยที่อาจจะโหลดไปทับ
ส่วนต้น ๆ ของโปรแกรมก็ได้(เพราะขณะนี้ส่วนต้น ๆ ของ
โปรแกรมไม่ได้ถูกใช้) จาหลักการนี้เราจึงสามารถรันโปรแกรมที่มี
ขนาดใหญ่กว่าหน่วยความจาที่มีอยู่ได้ข้อแตกต่างของระบบ
หน่วยความจาเสมือนกับการทาโอเวอร์เลย์คือ แบบโอเวอร์เลย์ผู้ใช้
จะต้องเขียนโปรแกรมจัดการเอง ส่วนระบบหน่วยความจาเสมือน
ระบบปฏิบัติการ จะจัดการให้ทั้งหมด ผู้ใช้ไม่ต้องรับรู้การทางาน
ในส่วนนี้
หน่วยความจาเสมือนระบบหน้า (Paging System)
ในระบบที่แบ่งบล็อกเป็นหน้า มีการทางานที่ค่อนข้างง่าย
เหมาะแก่การที่จะใช้อธิบายให้เกิดความเข้าใจในการทางาน และ
เพื่อให้เข้าใจการทางานของระบบปฏิบัติการในระบบหน้าง่ายยิ่งขึ้น
จึงสมมติระบบหน้าขึ้นมาระบบหนึ่ง
สมมติว่าในระบบมีหน่วยความจาอยู่ 100 กิโลไบต์แต่อาศัย
ระบบหน่วยความจาเสมือนทาให้ผู้ใช้สามารถรันหรือเขียน
โปรแกรมที่มีขนาดโตได้ถึง 1,000 กิโลไบต์ดังนั้น แอดเดรส
เสมือนจะเป็นเลข 6 หลัก ส่วนแอดเดรสจริงมีเพียง 5 หลัก สมมติว่า
ระบบปฏิบัติการกาหนดให้ 1 หน้าที่ขนาด 1 กิโลไบต์ถ้าจะอ้างถึง
แอดเดรสต่าง ๆ ภายในหน้า 1 หน้า จะต้องใช้เลข 3 หลัก
การแปลงส่งแบบสาระ (Associative Mapping)
วิธีการแปลงส่งแอดเดรส เรียกอีกอย่างว่า เป็นการแปลงส่งแบบ
ตรง (Direct Mapping) แต่ยังมีวิธีการแปลงแอดเดรสอีกวิธีหนึ่งซึ่งมี
ความเร็วสูงกว่ามาก เรียกว่าการแปลงส่งแบบสาระ (Associative
Mapping) วิธีการแปลงคือ หมายเลขหน้าจากแอดเดรสเสมือนถูกส่งเข้า
ไปตรวจสอบในตารางที่เรียกว่า ตารางหน้าแบบสาระ (Associative Pa
Table) พร้อมกันทุกช่อง และจะได้ค่าแอดเดรสเริ่มต้นของหน้าใน
หน่วยความจาจริงที่เก็บหน้านี้เอาไว้ออกมาทันที แอดเดรสที่ได้นี้ก็จะ
นาไปบวกกับดีสเพลซเมนต์ ผลลัพธ์ที่ได้ก็คือแอดเดรสจริงใน
หน่วยความจา แต่ถ้าเกิดความผิดพลาดของหน้า
ระบบการใช้หน้าร่วม (Sharing Page System)
ในการทางานของระบบผู้ใช้หลายคน ณ ขณะใดขณะหนึ่ง ผู้ใช้
แต่ละคนอาจเรียกใช้โปรแกรมเดียวพร้อมกันก็ได้เช่น นาย A, B
และ C เรียกใช้โปรแกรมเอดิเตอร์ (Editor) โปรแกรมเดียวกันพร้อม
กันทั้ง 3คน ในกรณีเช่นนี้ ระบบปฏิบัติการ จะต้องนาโคด
โปรแกรมเอดิเตอร์ตัวเดียวกัน โหลดเข้าไปในหน่วยความจาถึง 3
ครั้ง โปรแกรมเอดิเตอร์ก็จะปรากฏอยู่ในหน่วยความจาถึง 3 แห่ง
แต่ถ้าผู้ใช้ทั้ง 3 คนสามารถใช้โคดโปรแกรมร่วมกันได้เราก็จะ
สามารถประหยัดเนื้อที่ของหน่วยความจาไปได้มาก เพราะโครต
ของโปรแกรมเอดิเตอร์จะปรากฏอยู่ในหน่วยความจาเพียงแห่งเดียว
หน่วยความจาเสมือนระบบเซ็กเมนต์ (Segmentation
System)
หน่วยความจาเสมือนระบบเซ็กเมนต์ มีลักษณะการทางานคล้ายกับ
ระบบหน้ามาก ต่างกันที่ขนาดของบล็อกไม่จาเป็นต้องเท่ากัน จึงทา
ให้มีความซับซ้อนในการทางานเพิ่มขึ้น ตารางเซ้กเมนต์ (Segment
Table) ซึ่งทาหน้าที่เช่นเดียวกับตารางหน้า จะมีคอลัมน์เพิ่มขึ้นจาก
ตารางหน้าอีก 1 คอลัมน์เป็นคอลัมน์ที่เก็บขนาดของเซ็กเมนต์เอาไว้
ทั้งนี้เพื่อให้ระบบปฏิบัติการ ทราบว่าแต่ละเซ็กเมนต์มีขนาดเท่าใด
การอ่านหรือเขียนข้อมูลจากหน่วยความจารองและการหาเนื้อที่ใน
หน่วยความจาจริงจะกระทาตามขนาดของเซ็กเมนต์ เช่น ถ้าเซ็ก
เมนต์นั้นมีขนาด 5 กิโลไบต์การโหลดจากดิสก์ก็ต้องโหลดข้อมูล
ขึ้นมา 5 กิโลไบต์
หน่วยความจาเสมือนระบบผสมหน้าและเซ็กเมนต์
วิธีการทาหน่วยความจาเสมือนแบบผสม (Combined
Paging/Segmentation System) นี้ได้รวบรวมเอาลักษณะการทางาน
ของระบบหน้าและระบบเซ็กเมนต์เข้าด้วยกัน กล่าวคือ ระบบจะ
แบ่งหน่วยความจาออกเป็นหน้าที่มีขนาดเท่ากัน ในโปรแกรมของ
ผู้ใช้จะถูกแบ่งออกเป็นเซ็กเมนต์ภายในเซ็กเมนต์จะถูกแบ่ง
ออกเป็นหลาย ๆ หน้า ดังนั้น ขนาดของเซ็กเมนต์จะเป็นจานวนเท่า
ของหน้าแต่ละเซ็กเมนต์ของโปรแกรมไม่จาเป็นต้องอยู่เรียงกันใน
หน่วยความจา และแต่ละหน้าภายในเซ็กเมนต์เดียวกันก็ไม่
จาเป็นต้องอยู่เรียงติดกันในหน่วยความจาจริง
อัลกอริทึมการแทนที่
เมื่อเกิด Page Fault ของหน้าในระบบหน้า และในหน่วยความจาไม่
มีหน้าใดว่างอยู่เลย ก่อนที่ระบบปฏิบัติการจะโหลดเอาหน้าใหม่เข้า
มาในหน่วยความจานั้น ระบบปฏิบัติการ ต้องตัดสินใจก่อนว่าควร
จะเลือกใครหน้าใดเพื่อที่จะวางหน้าใหม่ทับลงไป สิ่งที่
ระบบปฏิบัติการใช้ในการตัดสินใจเลือกหน้าเรียกว่า อัลกอริทึมการ
แทนที่ (Replacement Strategy) ซึ่งมีอยู่ 5 วิธีด้วยกัน คือ
1. แบบสุ่ม (Random) เลือกโดยการสุ่มเดา ทุกหน้ามีโอกาสถูกเลือก
เท่ากันหมด
2. FIFO (First In First Out) หน้าใดที่ถูกโหลดเข้ามาใน
หน่วยความจาก่อนก็จะถูกเลือกออกไปก่อนเรียงตามลาดับเวลา
3. NFU (Not Frequently Used) เลือกหน้าที่ถูกใช้น้อยครั้งที่สุด
ทั้งนี้เพราะหน้าที่ถูกใช้น้อยโอกาสที่ถูกใช้เวลาต่อมาก็จะน้อยด้วย
ดังนั้น จึงควรเอาออกจากหน่วยความจาแต่วิธีนี้อาจจะทาให้หน้าที่
พึ่งถูกโหลดเข้ามาถูกเลือกออกไปได้เพราะหน้าที่พึงถูกโหลดเข้า
มาอยู่ใหม่จานวนการใช้ย่อมน้อยกว่าหน้าซึ่งอยู่มานานแล้ว
4. LRU (Least Recently Used) แต่ละหน้าจะมีการบันทึกเวลาใน
การใช้ครั้งหลังสุดไว้หน้าใดที่ไม่ได้ถูกใช้มานานมากที่สุดจะถูก
เลือก วิธีนี้จะเป็นผลเสียต่อโปรแกรมที่มีการทางานแบบวนรอบ
(Loop) และวนรอบมีขนาดใหญ่มาก ๆ (หลาย ๆ หน้า)
5. NUR (Not Used Recently) แต่ละหน้าจะมีบิตกากับอยู่2 บิตคือ
บิตอ้างอิง (Referent Bit) และบิตแก้ไข (Modify Bit) เมื่อหน้าถูก
โหลดเข้าไปในหน่วยความจา 2 บิตนี้จะเป็น 0 เมื่อใดที่มีการอ้างถึง
หน้าใดบิตอ้างอิงของหน้านั้นจะเป็น 1 และเมื่อหน้านั้นถูกแก้ไข
อะไรบางอย่างภายในหน้าบิตแก้ไขจะเป็น 1 ทุก ๆ ช่วงเวลาหนึ่ง
เช่น 10 มิลลิวินาที บิตอ้างอิงของทุก ๆ หน้า จะถูกเปลี่ยนเป็น 0
หมด
อัลกอริทึมการเฟตซ์
อัลกอริทึมการเฟตซ์ (Fetch Strategy) หมายถึง วิธีการโหลดหน้า
หรือเซ็กเมนต์จากดิสก์เข้าไปในหน่วยความจา แบ่งออกเป็น 2 วิธี
1. การเฟตซ์แบบต้องการ (Demand Fetch) วิธีนี้
ระบบปฏิบัติการ จะโหลดเฉพาะหน้าหรือเซ็กต์เมนต์ ที่ต้องการใช้
เท่านั้นเข้าไปในหน่วยความจา
2. การเฟตซ์แบบคาดเดา (Anticipate Fetch) ระบบปฏิบัติการ
จะมีการคาดเดาว่าหน้า หรือ เซ็กเมนต์ไหนจะถูกใช้เป็นหน้าหรือ
เซ็กเมนต์ต่อไป และจะโหลดหน้าหรือเซ็กเมนต์นั้นเข้าไปไว้
หน่วยความจาล่วงหน้า
ลาดับชั้นของหน่วยความจา
ระบบหน่วยความจาเสมือน สามารถทาให้ผู้ใช้ใช้หน่วยความจา
ขนาดใหญ่กว่าหน่วยความจาจริงได้ก็จะเพราะอาศัยการเก็บข้อมูล
(หรือโปรแกรม) ไว้ในหน่วยความจารอง ลักษณะการเคลื่อนย้าย
ข้อมูลจะมีการส่งไปมาระหว่างหน่วยความจารอง กับ
หน่วยความจาหลัก ลักษณะเช่นนี้เรียกว่าหน่วยความจา 2 ระดับ
หมายถึงว่าข้อมูลมีการขนย้ายจากหน่วยความจาประเภทหนึ่งไปยัง
หน่วยความจาอีกประเภทหนึ่ง

More Related Content

More from maysasithon

บทที่ 9
บทที่ 9บทที่ 9
บทที่ 9maysasithon
 
บทที่ 8
บทที่ 8บทที่ 8
บทที่ 8maysasithon
 
บทที่ 8
บทที่ 8บทที่ 8
บทที่ 8maysasithon
 
บทที่ 6
บทที่ 6บทที่ 6
บทที่ 6maysasithon
 
บทที่ 6
บทที่ 6บทที่ 6
บทที่ 6maysasithon
 
บทที่ 5
บทที่ 5บทที่ 5
บทที่ 5maysasithon
 
บทที่ 4
บทที่ 4บทที่ 4
บทที่ 4maysasithon
 
บทที่ 3
บทที่ 3บทที่ 3
บทที่ 3maysasithon
 
บทที่ 2
บทที่ 2บทที่ 2
บทที่ 2maysasithon
 
บทที่ 1
บทที่ 1บทที่ 1
บทที่ 1maysasithon
 

More from maysasithon (10)

บทที่ 9
บทที่ 9บทที่ 9
บทที่ 9
 
บทที่ 8
บทที่ 8บทที่ 8
บทที่ 8
 
บทที่ 8
บทที่ 8บทที่ 8
บทที่ 8
 
บทที่ 6
บทที่ 6บทที่ 6
บทที่ 6
 
บทที่ 6
บทที่ 6บทที่ 6
บทที่ 6
 
บทที่ 5
บทที่ 5บทที่ 5
บทที่ 5
 
บทที่ 4
บทที่ 4บทที่ 4
บทที่ 4
 
บทที่ 3
บทที่ 3บทที่ 3
บทที่ 3
 
บทที่ 2
บทที่ 2บทที่ 2
บทที่ 2
 
บทที่ 1
บทที่ 1บทที่ 1
บทที่ 1
 

บทที่ 7