SlideShare a Scribd company logo
1 of 50
หน่วยความจาหลัก (MainMemory)
หน่วยความจาหลัก เป็นพื้นที่ที่ใช้เก็บข้อมูลในการ
ประมวลผล โดยหน่วยความจาหลักจะมี ลักษณะการจัดเก็บ
ข้อมูลเป็นไบต์ (Bite) หรือจัดเก็บเป็นตัวอักขระ ซึ่งข้อมูลแต่ละ
ไบต์จะมีหมายเลขตาแหน่ง (Address) ระบุไว้ หน่วยความจาที่ดี
ต้องมีความเร็วสูง และมีเสถียรภาพ ปัจจุบันนี้การใช้ งาน
คอมพิวเตอร์ยังมีข้อจากัดในเรื่องขนาดของหน่วยความจาหลัก
ดังนั้นเพื่อประสิทธิภาพในการทางาน จึงจาเป็นต้องมีการบริหาร
จัดการหน่วยความจาที่ดี
ส่วนของระบบปฏิบัติการที่ใช้ในการจัดการหน่วยความจา
เรียกว่า ตัวจัดการหน่วยความจา (Memory Manager) มี
หน้าที่ ดังนี้
1. ตรวจสอบว่าส่วนใดของหน่วยความจาที่กาลังถูกใช้
งานส่วนใดว่างอยู่
2. จัดสรรหน่วยความจาให้กับโปรเซสที่ทางาน
3. เก็บหน่วยความจาคืนสู่ระบบเมื่อโปรเซสทางานเสร็จ
สิ้น
4. จัดการสลับหน่วยความจาหลักกับพื้นที่ในดิสก์ เมื่อ
หน่วยความจาหลักมีขนาดเล็กเกินไป
กระบวนการในการจัดการหน่วยความจา
การจัดการหน่วยความจา โดยทั่วๆ ไปสามารถแบ่งออกได้ 5 ประเภท
ดังนี้
1. การย้ายตาแหน่ง (Relocation)
2. การป้ องกันพื้นที่ (Protaction)
3. การใช้พื้นที่ร่วมกัน (Sharing)
4. การจัดการแบ่งโปรแกรมย่อย (Logical Organization)
5. การจัดการแบ่งทางกายภาพ (Physical Organization)
การย้ายตาแหน่ง (Relocation)
การทางานหลาย ๆ โปรแกรมพร้อมกันจะต้องมีการใช้ทรัพยากร
ต่างๆ ร่วมกันด้วย และเมื่อมีการนาโปรเซสเข้าไปยังหน่วยความจาหลายๆ
งานพร้อมกันจะต้องมีการจัดการที่ดี เพราะจะมีการนางานเข้าและออก
จากหน่วยความจาบ่อยครั้ง ซึ่งการน่าโปรเซสเข้านั้นไม่สามารถคาดเดาได้
ว่า โปรเซสนั้นจะใช้หน่วยความจาไปเท่าใดเพราะบางครั้งหลังจากที่นา
โปรเซสเข้าไปในหน่วยความจาแล้ว อาจมีโปรเซสของโปรแกรมเดิมเข้ามา
เพิ่มเติมอีก
ดังนั้นระบบจึงต้องมีการจัดการว่าโปรเซสใดเข้ามาที่ตาแหน่งใด
และโปรเซสใดออกไปแต่ยังทางานไม่เสร็จ และโปรเซสนั้นทางานได้แค่ไหน
แล้ว
เมื่อโปรเซสนั้นกลับมาทางานอีกจะสามารถทางานเดิมต่อไปได้ เพื่อ
แก้ปัญหาในการเปลี่ยนตาแหน่งของโปรเซสจึงได้มีการกาหนดแอดเดรสขึ้น
1. Compile Time
กรณีที่ทราบว่าโปรเซสหรือโปรแกรมจะทางานที่ตาแหน่งใดใน
หน่วยความจา ตัวแปล ภาษาจะสามารถแปลโปรแกรมโดยใช้ตาแหน่งสัมบูรณ์
(Absolute Code) หรือกาหนดตาแหน่งจริงได้เลย
ตัวอย่างเช่น กรณีที่กาหนดให้โปรเซสของผู้ใช้ เริ่มต้นที่ตาแหน่ง T ตัว
แปลภาษาก็ สามารถกาหนดตาแหน่งให้ทับคาสั่งต่างๆ ได้ โดยเริ่มจากตาแหน่ง
T เป็นตันไป ถ้ามีการเปลี่ยนตาแหน่งเริ่มต้นจะต้องทาการแปลโปรแกรมนั้นใหม่
2. Load Time
ในขณะที่แปลโปรแกรมไม่ทราบว่าโปรแกรมจะทางานที่ตาแหน่ง
ใดในหน่วยความจาหลัก ตัวแปลภาษาจะต้องกาหนดตาแหน่งเป็นแบบย้าย
ได้ (Relocatable Code) และตาแหน่งจริงจะถูก กาหนดขึ้นเมื่อนา
โปรแกรมลงสู่หน่วยความจา และถ้ามีการเปลี่ยนตาแหน่งเริ่มตัน ทาไดโดย
การนา โปรแกรมนั้นลงสู่หน่วยความจาใหม่
3. Execution Time
กรณีที่โปรเซสสามารถย้ายตาแหน่งได้ในขณะทางาน ดังนั้นจึงไม่
สามารถกาหนดตาแหน่ง ค่าจริงได้ การกาหนดตาแหน่งต้องทาในขณะ
ทางานเท่านั้น ซึ่งการกาหนดตาแหน่งวิธีนี้จะต้องมีอุปกรณ์พิเศษช่วยในการ
ทางาน
การใช้พื้นที่ร่วมกัน (Sharing)
ถึงแม้จะมีการป้ องกันพื้นที่ แต่ยังมีงานบางอย่างที่
อาจจะอนุญาตให้โปรเซสอื่นเข้ามาเรียกใช้ข้อมูลได้เพราะใน
บางครั้งอาจมีโปรเซสหลายโปรเซสที่มีการทางาน หรือมีหน้าที่
คล้ายๆ กัน ดังนั้นการที่จะใช้โปรเซสที่เหมือนทันมาเพียงโปรเซส
เดียว แล้วให้โปรเซสที่จะเรียกใช้มาเรียกใช้จากโปรเซสนี้ร่วมทัน
ทาให้ประหยัดเนื้อที่หน่วยความจาไปได้ แต่การที่โปรเซสใช้พื้นที่
ร่วมทัน ไม่ควรมีการเข้าไปแก้โขโปรเซสเพราะจะส่งผลให้โปรเซส
อื่นทางานผิดพลาดได้
การจัดการแบ่งโปรแกรมย่อย (Logical Organization)
เป็นการแบ่งโปรแกรมออกเป็นโมดูลย่อย ๆ ซึ่งหากโมดูล
ย่อยใดที่ไม่ถูกเรียกใช้ก็จะไม่ถูกนาไปเก็บในหน่วยความจา เมื่อ
ต้องการเรียกใช้งานจึงค่อยตรวจสอบว่ามีโมดูลย่อยนั้นหรือยัง ถ้า
ยังไม่มีจึงค่อยนาไปเก็บในหน่วยความจา
ข้อดีของการจัดการแบ่งโปรแกรมย่อย คือ
1. หากโปรแกรมย่อยใดไม่ถูกใช้งานจะไม่ถูกนาไปเก็บใน
หน่วยความจา ทาให้ประหยัดเนื้อที่ และใช้หน่วยความจาน้อยกว่าขนาด
โปรแกรมทั้งหมด
2. แต่ละโปรแกรมย่อยสามารถเรียกใช้ และคอมไพล์แยกกันได้
3. แต่ละโปรแกรมย่อย จะมีการป้ องกันที่แตกต่างกันได้ เช่น การ
อ่าน เขียน ร่วมกัน
4. โปรแกรมหลักสามารถเรียกใช้โปรแกรมย่อยเหล่านี้ร่วมกันได้
เครื่องมือที่ใช้ในการจัดการเกี่ยวกับการทางานของโปรแกรมย่อยนี้คือ การ
แบ่งเป็นเซ็กเมนต์ (Segmentation) ซึ่งเป็นเทคนิคหนึ่งของการจัดการ
หน่วยความจา
การจัดการหน่วยความจาหลัก (MemoryManagement)
การจัดการหน่วยความจา สามารถทาได้หลายวิธีเริ่มตั้งแต่วิธีแบบ
พื้นฐาน จนถึงวิธีแบบซับช้อน ซึ่งแต่ละวิธีมีข้อดีและข้อด้อยต่างกัน และ
เหมาะสมในการน่าไปใช้กับคอมพิวเตอร์ต่าง ประเภทกัน ดังนี้
1. ระบบโปรแกรมเดียว (Monoprogramming)
2. ระบบหลายโปรแกรมที่กาหนดขนาดพาร์ติชันคงที่
(Multiprogramming with Fixed Partition)
3. ระบบที่กาหนดขนาดของพาร์ติชันให้เปลี่ยนแปลงได้
(Dunamic Partition)
4.ระบบบัดดี้(Buddy System)
ระบบโปรแกรมเดียว (Monoprogramming)
เป็นระบบที่ทางานเพียงอย่างเดียวในเวลาใดเวลาหนึ่ง
ดังนั้นการใช้งานหน่วยความจาจะมี เพียงโปรแกรมของผู้ใช้ที่
ทางานอยู่กับระบบปฏิบัติการเท่านั้น เป็นระบบที่ใช้ในสมัยก่อน ซึ่ง
ปัจจุบันไม่ค่อยมีแล้ว เช่น ระบบ MS-DOS เป็นต้นระบบหลาย
โปรแกรมที่กาหนดขนาดพาร์ติชั่นคงที่
เป็นการแบ่งหน่วยความจาออกเป็นส่วน ๆ ที่มีขนาดคงที่
เรียกว่า พาร์ติชั่น (Partition) เมื่อมีการน่าโปรเซสเข้าไปเก็บใน
หน่วยความจา ระบบปฏิบัติการจะเลือกส่วนที่มีขนาดพอดีกับ
โปรเซสนั้นมากที่สุด แต่วิธีนี้จะทาให้เกิดพื้นที่ว่างในแต่ละส่วน
บางครั้งพาร์ติชันขนาดใหญ่อาจจะถูกนามาใช้กับงานขนาดเล็กๆ
ทาให้สูญเสียเนื้อที่ในหน่วยความจา และบางงานมีขนาดเล็กมาก
ๆ จะไม่ยอมให้นาไปเก็บในหน่วยความจาที่มีขนาดใหญ่ โดยจะมี
การมองข้ามไปทาให้งานนั้นอาจไม่มีโอกาสทางานเลย
แต่มีวิธีการแก้ปัญหาดังกล่าว คือสร้างพาร์ติชันขนาดเล็ก
ขึ้นมา และให้ใช้ไต้กับงานขนาดเล็กเท่านั้นกาหนดว่าการเลือกงาน
เข้ามาเก็บในหน่วยความจา จะต้องถูกมองข้ามไม่เกินกี่ครั้งระบบที่
กาหนดขนาดของพาร์ติชันให้เปลี่ยนแปลงได้ไม่มีการกาหนดขนาด
พาร์ติชัน โดยจะมองว่าถ้ามีพื้นที่ว่างตรงส่วนใดที่สามารถน่า
โปรเซสลงไปเก็บได้ก็จะใส่โปรเซสลงไปทันที โดยพาร์ติชันจะมีการ
ปรับให้พอดีกับโปรเซสที่นาไปเก็บ แต่วิธีนี้จะทางานได้ดีใน
ช่วงแรกๆ แต่เมื่อทางานไปนานๆ จะเกิดช่องว่างเล็กๆ ขึ้น
โดยมีขนาดเล็กจนไม่สามารถน่างานใดๆ เข้าไปเก็บได้
เราเรียกช่องว่างเหล่านี้ว่า การสูญเปล่าของพื้นที่ย่อยภายนอก
(External Fragmentation)ซึ่งเราสามารถแก้ปัญหาได้โดย
การ บีบอัดพื้นที่สูญเปล่า (Compact) โดยเลื่อนโปรเซสต่างๆ
ให้เลื่อนมาชิดติดกัน แต่การบีบอัดค่อนข้างจะยุ่งยากและใช้
เวลานาน เพราะต้องย้ายข้อมูลในแต่ละแอดเดรสไปไว้ยัง
แอดเดรสใหม่เกือบทั้งหมด
ระบบบัดดี้
เป็นการนาระบบการแบ่งพาร์ติชันแบบคงที่และไม่คงที่มารวมกัน
โดยในการแบ่งพาร์ติชันจะพิจารณาว่าโปรเซสมีขนาดเท่าใด หากโปรเซสมี
ขนาดน้อยกว่าครึ่งหนึ่งของจานวนหน่วยความจา จะทาการแบ่งพาร์ติชั่นให้
ได้ขนาดครึ่งหนึ่งของพาร์ติชั่นเดิม หากโปรเซสยังมีขนาดน้อยกว่าครึ่งหนึ่ง
ของพาร์ติชั่นที่แบ่งออกมา ก็จะทาการแบ่งไปเรื่อย ๆ จนกว่าขนาดโปรเซส
ใหญ่กว่าครึ่งหนึ่งของ พาร์ติชั่น แต่ไม่ใหญ่กว่าพาร์ติชันจึงหยุดแบ่งจากนั้น
จึงนาโปรเซสนั้นบรรจุลงในพาร์ติชั่น และเมื่อโปรเซสใดถูกนาออกไปจาก
หน่วยความจา พาร์ติชั่นก็จะถูกรวมกลับเข้าเหมือนเดิม
การตรวจสอบเนื้อที่ของหน่วยความจา
เมื่อมีการจัดหน่วยความจาแบบพารีติชันไม่คงที่ ดังนั้นจึงต้องมี
วิธีการตรวจสอบว่ามีเนื้อที่ ส่วนใดบ้างที่ใช้งานอยู่และส่วนใดว่าง
โดยวิธีการตรวจสอบสามารถท่าได้ ดังนี้
1. การจัดการแบบบิตแมพ(Memory Management
withBitmap)
2. การจัดการแบบลิงค์ลิสต์ (Memory Management
withLink List)
บิตที่ใช้แทนค่าแต่ละยูนิตในหน่วยความจานี้เรียกว่าบิตแมพ มีค่าที่
เป็นไปได้ คือ 0 และ 1 ถ้ายูนิตใดมีข้อมูลอยู่ บิตของยูนิตนั้นจะมีค่า
เป็น 1 ถ้ายูนิตนั้นว่างบิตของยูนิตนั้นจะมีค่าเป็น 0 การจัดการแบบ
นี้จะตรวจสอบง่าย เพราะมีจานวนบิตคงที่ แต่จะมีข้อเสียคือ
1. เกิดการสูญเสียพื้นที่ภายในยูนิตสุดท้ายของโปรเซสได้
2. เกิดการสูญเสียพื้นที่ภายนอก สามารถดูได้จากค่า 0 ที่
กระจายอยู่ในตารางบิตแมพ
3. การนาโปรเซสขนาด n ยูนิตเข้าไปเก็บในหน่วยความจา
ระบบจะต้องทาการค้นหาบิตที่เป็น 0ติดต่อกัน n บิตให้ได้ก่อน ซึ่ง
ทาให้เสียเวลาในการค้นหา
การจัดการแบบบิตแมพ(Memory Management with
Bitmap)
การจัดการแบบนี้ทาได้โดยการแบ่งหน่วยความจา
ออกเป็นส่วนๆเรียกว่ายูนิต(unit)ซึ่งแต่ละยูนิตมีขนาดเท่าใดก็
ได้
แต่ละยูนิตแทนค่าด้วย 1 บิต ดังนั้น ถ้าหน่วยความจาแบ่ง
ออกเป็น 1,000 ยูนิต จะต้องมีจานวนบิตที่ใช้แทนค่า 1,000
บิต
การจัดการแบบลิงค์ลิสต์ (Memory ManagementwithLink
List)
การจัดการแบบลิงค์ลิสต์ ทาได้โดยใช้ลิงค์ลิสต์เก็บข้อมูล
ของพาริติชันในหน่วยความจาที่ว่าง หรือหน่วยความจาที่ถูกใช้
งาน จะมีการระบุการใช้พื้นที่หน่วยความจาว่า แต่ละโปรเซส
เริ่มต้นอยู่ที่ ตาแหน่งใด และมีความยาวของโปรเซสเท่าใด โดยมี
รูปแบบการจัดเก็บข้อมลในลิงค์ลิสต์ ดังนี้
เมื่อมีการนาโปรเซสเข้าไปเก็บในหน่วยความจา จะมีการ
เลือกว่าโปรเซสใดควรจะเข้าไปอยู่ใน พื้นที่ว่างส่วนใด
โดยมีวิธีในการตัดเลือก ดังนี้
* ในส่วนแรก หากเป็นพื้นที่วางจะแสดงด้วยตัวอักษร H (Hold)
ถ้าเป็นช่วงที่มีโปรเซสจะ ขึ้นต้นด้วย p (Process)
* ส่วนที่ 2 จะบอกแอดเดรสที่ส่วนนั้น (ที่ว่าง หรือโปรเซส) เริ่มต้น
*ส่วนที่ 3 เป็นความยาวของพื้นที่
*ส่วนที่ 4 เป็นส่วนที่ชี้ไปยังข้อมูลของพื้นที่ส่วนต่อไป
รูป แสดงการเก็บข้อมูลในลิงค์ลิสต์
เมื่อมีการนาโปรเซสเข้าไปเก็บในหน่วยความจา จะมีการเลือก
ว่าโปรเซสใดควรจะเข้าไปอยู่ใน พื้นที่ว่างส่วนใด โดยมีวิธีใน
การคัดเลือก ดังนี้
1. First Fit
เป็นวิธีที่ง่ายที่สุด คือเลือกเอาพื้นที่ในตาแหน่งแรกสุดที่
สามารถนาโปรเซสเข้าไปเก็บได้ ซึ่งวิธีนี้มีประสิทธิภาพไม่มาก
นัก เพราะโปรเซสเล็ก ๆ อาจจะถูกเอาไปไว้ในพื้นที่ว่างขนาด
ใหญ่ทาให้สูญเสียหน่วยความจาไปมาก
2. NextFit
เป็นการเลือกเอาพื้นที่ที่สามารถเก็บโปรเซสได้ โดยเริ่ม
จากพื้นที่ที่อยู่ถัดไปจากการนาโปรเซสไปเก็บลงใน
หน่วยความจาครั้งล่าสุดเท่านั้น
3. Best Fit
ทาการค้นหาพื้นที่ว่างที่มีทั้งหมด แล้วเลือกพื้นที่ที่พอดี
กับโปรเซสมากที่สุด วิธีนี้จะช่วยให้ใช้พื้นที่ได้อย่างมี
ประสิทธิภาพแต่เสียเวลาในการด้นหาพื้นที่ทั้งหมดก่อนจึงจะ
ทาการเลือกพื้นที่ๆ จะนาโปรเซสไปเก็บในหน่วยความจา
4. Worst Fit
ทาการค้นหาพื้นที่ว่างที่มีทั้งหมด แล้วเลือกใช้พื้นที่ว่างมาก
ที่สุดเพื่อหลีกเลี่ยงการเกิดปัญหาช่องว่างๆ เล็ก แต่ก็มีข้อเสียเหมือน
วิธี Best Fit
5. QuickFit
เป็นการสร้างลิงค์ลิสต์ขึ้นมามากกว่า 1 ลิงค์ลิสต์ โดยแต่ละ
ลิงค์ลิสต์จะมีขนาดของโหนด แตกต่างกัน แต่ภายในลิงค์ลิสต์
เดียวกันจะมีขนาดเท่ากัน เมื่อมีโปรเซสเข้ามาจะดูว่าโปรเซสนั้นมี
ขนาดเท่าใด จากนั้นจึงนาโปรเซสนั้นไปใส่ลงในลิงค์ลิสต์ที่มีขนาด
โหนดเหมาะสมที่สุด
หน่วยความจาเสมือน (VirtualMemory)
หน่วยความจาเสมือน หมายถึง การนาหน่วยความจา
สารองเข้ามาทาหน้าที่เหมือนกับเป็น หน่วยความจาหลัก เช่น การ
นาพื้นที่บางส่วนของฮาร์ดดิสก์มาทางานเป็นหน่วยความจาหลัก
วิธีการเช่นนี้ทาให้ระบบมีพื้นที่หน่วยความจาเพิ่มขึ้นกว่าปกติ
สามารถท่างานได้มากขึ้น แต่มีข้อจากัดคือ ความเร็วในการอ่าน
ข้อมูลจากหน่วยความจาเสมือนจะช้ากว่าหน่วยความจาหลัก
เพราะเป็นการอ่าน จากฮาร์ดดิสก์
รูปแสดงตัวอย่างหน่วยความจาเสมือน
การแบ่งหน้า
การแบ่งหน้า เป็นการแบ่งพื้นที่ของหน่วยความจาหลักออกเป็นส่วน
ๆ หรือแบ่งพื้นที่ออก เป็นพาร์ติชันขนาดเล็กๆ ที่มีขนาดเท่ากัน เรา
เรียกว่า เฟรม (Frame) และมีการแบ่งโปรแกรม ในดิสค์ที่จะเข้ามา
ใช้งานหน่วยความจาออกเป็นส่วนเล็ก ๆ เรียกว่า หน้า (Page)โดย
ทุกหน้าจะมี ขนาดเท่ากัน โดยมีเงื่อนไขในการแบ่งหน้า ดังนี้
1. ขนาดของ 1 หน้า จะต้องเท่ากับขนาดของ 1 เฟรมเสมอ
2. ในหน่วยความจาหลัก 1 เฟรม จะต้องบรรจุเพียง 1หน้า
เท่านั้น
หน่วยความจาหลัก
รูปแสดงการแบ่งเฟรมในหน่วยความจาหลัก และ
การโหลดโปรเซส P ซึ่งมี 5 หน้าเข้าไปในหน่วยความจา
หลัก
ตารางหน้า (Page Table)
เพื่อความสะดวกในการค้นหาหน้า จึงต้องมีการแมพหน้าทั้งหมด โดย
สร้างตารางหน้า (Page Table) ขึ้นมา ในตารางหน้าจะมีข้อมูล ดังนี้
1. Page Frame Number
เป็นส่วนที่สาคัญที่สุดจะเก็บข้อมูลว่าหน้านี้ไปอยู่ที่เฟรมหมายเลข
อะไรในหน่วยความจาหลัก
2. Present /Absent
มีขนาด 1 บิต ใช้บอกว่าหน้าปัจจุบัน อยู่ (Present) หรือไม่อยู่
(Absent) ในหน่วยความ จาหลัก ถ้าอยู่จะมีค่าเป็น 1 ถ้าไม,อยู่จะมีค่าเป็น 0
3. Protection
เก็บข้อมูลการป้ องกัน เซ่น กาหนดว่าให้อ่านได้อย่างเดียว อ่านและ
เขียนได้ หรือประมวล ผลได้ (Execute) โดยจะใช้เพียง 3 บิต คือบิตการอ่าน
เขียน
และประมวลผล (R, W, E)
การสับเปลี่ยนหน้า (Page Replacement Algorithm)
เมื่อมีหน้า (Page) ที่ต้องการน่าเช้ามาในหน่วยความจาหลัก แต่ภายใน
หน่วยความจาหลักมี พื้นที่ว่างไม่พอสาหรับหน้านั้น จึงต้องมีการสลับกับหน้าเดิม
ที่อยู่ในหน่วยความจาหลัก ซึ่งในการ ลับเปลี่ยนหน้ามีวิธีการตัดสินใจหลายวิธี
ดังนี้
1. วิธีสับเปลี่ยนแบบมาก่อน-ออกก่อน (First In-First Out Algorithm:
FIFO)
2. วิธีสับเปลี่ยนแบบให้โอกาสครั้งที่สอง (Second Chance Page
Replacement Algorithm)
3. วิธีการสับเปลี่ยนแบบวงรอบนาฬิกา (Clock Page
Replacement Algorithm)
4. วิธีสับเปลี่ยนแบบดีทีสุด (Optimal Page Replacement
Algorithm)
5. วิธีลับเปลี่ยนแบบที่ไม่ได้ใช้งาน -ออกก่อน (Not Recently Used:
NRU)
6. การทางานแบบใช้งานน้อยที่สุด-ออกก่อน (Least Recently
Used: LRU)
วิธีสับเปลี่ยนแบบมาก่อน-ออกก่อน (First In-FirstOut
Algorithm: FIFO)
* เป็นการพิจารณาลับเปลี่ยนกับหน้าที่อยู่ในหน่วยความจา
หลักนานที่สุด
* การพัฒนาการใช้งาน ทาได้เลยการสร้างคิวแบบมาก่อนออก
ก่อน (FIFO) สาหรับเก็บ หมายเลขหน้าที่อยู่ในหน่วยความจาหลัก
* เมื่อมีการลับเปลี่ยนหน้าให้น่าหมายเลขหน้าที่อยู่หัวคิวออก
จากหน่วยความจา และน่า หมายเลขหน้าใหม่ที่ต้องการนาไปเก็บ
ในหน่วยความจาไปต่อที่ปลายคิว
วิธีสับเปลี่ยนแบบให้โอกาสครั้งที่สอง (SecondChance Page
Replacement Algorithm)
* วิธีนี้ได้รับการปรับปรุงมาจากวิธีแบบมาก่อน-ออกก่อน เพื่อเป็นการป้ องกัน
การเปลี่ยน หน้าที่ถูกเรียกใช้งานบ่อยออกไปจากหน่วยความจา
* ขั้นตอนการทางาน โดยการตรวจสอบที่ Referenced Bit
* ถ้า Referenced Bit มีค่าเป็น 0 แสดงว่าหน้านั้นเข้ามานานและไม่ถูก
เรียกใช้งาน ระบบ สามารถทาการสับเปลี่ยนหน้าได้ทันที
* ถ้า Referenced Bit มีค่าเป็น 1 แสดงว่าหน้านั้นเคยถูกเรียกใช้
งาน ให้เปลี่ยนค่า Referenced Bit เป็น 0 แล้วน่าหน้านั้นกลับไปต่อคิว
ใหม่ พร้อมทั้งเปลี่ยนค่าเวลาการเข้าสู่หน่วยความจาหลัก ใหม่เสมือนว่า
หน้านั้นเพิ่งเข้าสู่หน่วยความจาหลัก
* ทาการค้นหาหน้าที่จะถูกลับเปลี่ยนหน้าโดยวิธีแบบมา
ก่อน-ออกก่อนต่อไป
วิธีการสับเปลี่ยนแบบวงรอบนาฬิกา (Clock Page Replacement
Algorithm)
* วิธีนี้มีการทางานคล้ายวิธีให้โอกาสคงที่สอง ต่างกันที'มีการจัด
เฟรมให้อยู่ในลักษณะเป็น วงกลม มีการกาหนดตัวชี้ที่เหมือนเข็มนาฬิกา
* ถ้าเข็มนี้ชี้ไปที่เฟรมใด จะมีการตรวจสอบ Reference Bit ว่าหน้า
นั้นมีการเรียกใช้หรือไม่ ถ้ามีค่า 0 (ไม่เคยถูกเรียกใช้) ให้สับเปลี่ยนหน้านั้น
ออกไปและนาหน้าใหม่เข้ามาแทนที่ในตาแหน่ง เดิม แล้วเลื่อนเข็มไปอีก 1
ตาแหน่ง
* ถ้า Referenced Bit มีค่าเป็น 1 ให้ทาการเปลี่ยนคาขอ)
Referenced Bit เป็น 0 แล้ว เลื่อนเข็มไปอีก 1 ตาแหน่ง
วิธีสับเปลี่ยนแบบที่ไม่ได้ใช้งาน-ออกก่อน (Not RecentlyUsed
: NRU)
วิธีนี่คล้ายกับวิธีการลับเปลี่ยนแบบวงรอบนาฬิกา แต่มีการเพิ่มส่วน
เก็บข้อมูลการใช้งาน หน้าต่างๆ เพิ่มขึ้นมา โดยส่วนนี้จะเก็บข้อมูลว่าหน้านั้นๆ
ถูกเรียกใช้งาน และมีการเปลี่ยนแปลง มากแค่ไหน โดยแบ่งออกได้ 4 กลุ่ม
กลุ่ม 0 : ไม่ถูกเรียกใช้งาน และไม่มีการเปลี่ยนแปลงค่า
กลุ่ม 1 : ไม่ถูกเรียกใช้งาน แต่มีการเปลี่ยนแปลงค่า
กลุ่ม 2 : ถูกเรียกใช้งาน แต่ไม'มีการเปลี่ยนแปลงค่า
กลุ่ม 3 : ถูกเรียกใช้งาน และมีการเปลี่ยนแปลงค่า
การเรียกใช้งานจะพยายามเรียกหน้าที่อยู่ในกลุ่มแรกๆมาใช้ก่อน ซึ่งวิธีแบบนี้
เข้าใจง่ายและทางานได้ดี (แต่ไม่เท่าแบบวิธีแบบดีที่สุด)
วิธีสับเปลี่ยนแบบดีที่สุด (Optimal Page Replacement Algorithm)
เป็นการเลือกลับเปลี่ยนหน้า โดยเสือกหน้าที่ไม่ถูกเรียกใช้งาน และมี
เวลารอการเรียกใช้ งานนานที่สุดวิธีนี้เป็นวิธีที่มีประสิทธิภาพมากที่สุด
การทางานแบบใช้งานน้อยที่สุด-ออกก่อน ( Least Recently Used: LRU)
เป็นการตรวจสอบว่ามีหน้าใดในหน่วยความจาหลักที่ไม่ถูกใช้งานนาน
ที่สุดเมื่อมีการสับเปลี่ยนหน้าจะลับเปลี่ยนกับหน้าที่ไม่ถูกใช้งานนานที่สุดวิธีนี้ต้อง
มีการเพิ่มส่วนการเก็บข้อมูลการเรียกใช้งานในหน่วยความจาหลัก
การแบ่งเป็ นเซ็กเมนต์(Segmentation)
การแบ่งหน่วยความจาหลักเป็นเซ็กเมนต์เป็นการทางานที่
เหมือนกับการแบ่งหน้า แต่การแบ่งเซ็กเมนต์นั้นจะเป็นการแบ่งโปรเซส
หรือโปรแกรมออกเป็นส่วนๆ โดยแต่ละส่วนไม่จาเป็นต้อง มีขนาดเท่ากัน
โดยมีข้อมูลที่สาคัญ 2 ส่วน คือ เลขที่ของเซ็กเมนต์ และระยะเริ่มต้นของ
เซ็กเมนต์นั้น (Offset) การที่ขนาดเซ็กเมนต์สามารถเปลี่ยนแปลงได้ทาให้
ช่วยลดปัญหาการสูญเสียพื้นที่ภายใน และการสูญเสียพื้นที่ภายนอกของ
หน่วยความจาหลัก
ข้อดีของการแบ่งเป็ นเซ็กเมนฅ์
1. การจัดการกับการเพิ่มโครงสร้างของข้อมูลในโปรแกรม
สามารถทาได้ง่าย ถ้าโปรแกรมเมอร์ ไม่สามารถทราบได้ว่าโครงสร้างใน
อนาคตของข้อมูลมีขนาดเท่าใดซึ่งการใช้เซ็กเมนต์นั้นจะช่วยให้ย่อ หรือ
ขยายโครงสร้างของข้อมูลให้เหมาะสมได้
2. วิธีนี้สามารถทาการเปลี่ยนแปลง หรือคอมไพล์โปรแกรมแยก
ออกเป็นส่วนๆ ได้ โดยไม่จาเป็นต้องให้โปรแกรมย่อย ๆ เหล่านั้นถูกโหลด
ขึ้นมาใหม่ หรือเชื่อมโยงกัน
3. การแบ่งเป็นเซ็กเมนต์จะอนุญาตให้มีการแบ่งปันข้อมูล
ระหว่างโปรเซสหลาย ๆ โปรเซสเช่น โปรแกรมเมอร์สามารถนาโปรแกรมยู
ทีลิตี้หรือข้อมูลที่เป็นประโยชน์ ใส่ลงไปในส่วนของ เซ็กเมนต์หนึ่งๆ ที่
สามารถถูกอ้างอิงโดยโปรเซสอื่นๆได้
4. การแบ่งพื้นที่ลักษณะนี้อนุญาตให้มีการป้ องกันข้อมูลด้วย
ตัวเองได้เพราะส่วนของเซ็กเมนต์หนึ่ง ๆ นั้นจะถูกสร้างขึ้นมาเพื่อใส่
โปรแกรมหรือข้อมูลที่ได้รับการนิยามมาอย่างดีแล้ว ซึ่งโปรแกรมเมอร์ที่
เป็นผู้ดูแลระบบสามารถกาหนดสิทธิในการเข้าถึงข้อมลในส่วนนั้นได้
การทาโอเวอร์เลย์(Overlay)
การใช้หน่วยความจาของโปรแกรมผู้ใช้ที่กล่าวมาไม่ว่าจะเป็น
ระบบโปรแกรมเดี่ยวหรือระบบ หลายโปรแกรม เราจะสังเกตได้ว่าขนาด
ของโปรแกรมต้องมีขนาดเล็กกว่าขนาดของหน่วยความจา ในส่วนของผู้ใช้
ถ้าโปรแกรมมีขนาดโตกว่าไม่ว่าเราจะใช้วิธีการจัดการหน่วยความจาชนิด
ใดก็ตาม เราไม่สามารถจะรันโปรแกรมนั้นได้ ถ้าโปรแกรมของผู้ใช้มีขนาด
โตกว่าหน่วยความจานี้จะทาอย่างไร วิธี การแก้ปัญหาอาจแยกเป็น 2 กรณี
คือ กรณีของโปรแกรมเดี่ยว และกรณีของหลายโปรแกรม
วิธีที่จะทาให้โปรแกรมที่มีขนาดใหญ่กว่าขนาดหน่วยความจารัน
ได้ ในระบบคือการทา โอเวอร์เลย์ (Overlay) การทาโอเวอร์เลย์ นี้เป็น
หน้าที่ของผู้เขียนโปรแกรม ระบบปฏิบัติการไม่ได้จัดการให้วิธีการทาอาจ
แตกต่างกันไปบ้างแต่มีหลักการทาที่คล้ายๆ กันคือ ผู้เขียนโปรแกรมแบ่ง
โปรแกรม ออกเป็นส่วนย่อยหลายส่วน แต่ละส่วนจะต้องมีขนาดเล็กกว่า
ขนาดของหน่วยความจา อาศัยหลักที่ว่าโปรแกรมจะทางานเป็นส่วน ๆ ไป
ไม่ได้ทาพร้อมกันหมดทั้งโปรแกรม ผู้เขียนโปรแกรมจะใช้หลักการนี้เป็น
แนวทางในการแบ่งส่วนของโปรแกรม เมื่อเริ่มรันโปรแกรมบางส่วนของ
โปรแกรมจะ ถูกโหลดเข้าไปในหน่วยความจา
ส่วนที่ถูกโหลดเข้าไปนี้จะถูกแบ่งแยกออกเป็น 2 ส่วน คือ ในส่วนแรกจะ
เป็นส่วนของโปรแกรมที่อยู่ในหน่วยความจาตลอดไปตั้งแต่แรกจนกระทั่งเสร็จสิ้น
การทางานของโปรแกรม เมื่อโปรแกรมรันไปจนถึงส่วนที่ไม่ได้อยู่ในหน่วยความจา
(ไม่ได้ถูกโหลดเข้ามา) ตัว โปรแกรมเองจะจัดการโหลดเอาส่วนที่มันต้องการเข้ามา
ในหน่วยความจา โดยไปทับเอาส่วนที่ 2 ที่ อยู่ในหน่วยความจาและรันต่อ นั้นคือ
ส่วนที่ 2 นี้จะเป็นบริเวณที่มีการโหลดเอาส่วนย่อยต่าง ๆ ของ โปรแกรมเข้ามา
เพื่อให้โปรแกรมทางานได้ ส่วนที่ถูกโหลดเข้ามาเป็นส่วนที่โปรแกรมต้องการใช้งาน
และส่วนที่ถูกทับนี้เป็นส่วนที่ไม่มีความจาเป็นต้องใช้แล้ว แต่ถ้าต้องการใช้อีกก็
สามารถโหลดเข้ามา ใหม่ได้ ซึ่งโปรแกรมเป็นผู้จัดการเอง ดังนั้นส่วนแรกของ
โปรแกรมในหน่วยความจา ซึ่งอยู่ตั้งแต่ เริ่มโปรแกรมจนกระทั่งจบโปรแกรมนั้น
จะต้องมีส่วนควบคุมการโหลดส่วนย่อยอื่น ๆ ของ โปรแกรมไปกับอีกส่วนหนึ่งของ
โปรแกรมในหน่วยความจา

More Related Content

More from Nu Mai Praphatson

การจัดการอุปกรณ์จัดเก็บข้อมูล
การจัดการอุปกรณ์จัดเก็บข้อมูลการจัดการอุปกรณ์จัดเก็บข้อมูล
การจัดการอุปกรณ์จัดเก็บข้อมูลNu Mai Praphatson
 
การติดต่อสื่อสารระหว่างโปรเซส
การติดต่อสื่อสารระหว่างโปรเซสการติดต่อสื่อสารระหว่างโปรเซส
การติดต่อสื่อสารระหว่างโปรเซสNu Mai Praphatson
 
การจัดเวลาโปรเซส
การจัดเวลาโปรเซสการจัดเวลาโปรเซส
การจัดเวลาโปรเซสNu Mai Praphatson
 
องค์ประกอบคอมพิวเตอร์
องค์ประกอบคอมพิวเตอร์องค์ประกอบคอมพิวเตอร์
องค์ประกอบคอมพิวเตอร์Nu Mai Praphatson
 

More from Nu Mai Praphatson (12)

การจัดการอุปกรณ์จัดเก็บข้อมูล
การจัดการอุปกรณ์จัดเก็บข้อมูลการจัดการอุปกรณ์จัดเก็บข้อมูล
การจัดการอุปกรณ์จัดเก็บข้อมูล
 
B7
B7B7
B7
 
B5
B5B5
B5
 
B4
B4B4
B4
 
B3
B3B3
B3
 
B2
B2B2
B2
 
บทที่ 1
บทที่ 1บทที่ 1
บทที่ 1
 
B1
B1B1
B1
 
การติดต่อสื่อสารระหว่างโปรเซส
การติดต่อสื่อสารระหว่างโปรเซสการติดต่อสื่อสารระหว่างโปรเซส
การติดต่อสื่อสารระหว่างโปรเซส
 
การจัดเวลาโปรเซส
การจัดเวลาโปรเซสการจัดเวลาโปรเซส
การจัดเวลาโปรเซส
 
องค์ประกอบคอมพิวเตอร์
องค์ประกอบคอมพิวเตอร์องค์ประกอบคอมพิวเตอร์
องค์ประกอบคอมพิวเตอร์
 
หน่วยที่ 1
หน่วยที่ 1หน่วยที่ 1
หน่วยที่ 1
 

B6