การจัดการหน่วยความจำ (memory management)
สารบัญ :: #1 :: #2 :: #3 :: #4 :: #5 :: #6 :: #7 :: #8 :: #9 :: #10 :: #11 :: #12 :: Linux ::
การจัดการหน่วยความจำ

สาระการเรียนรู้
1. กระบวนการจัดการหน่วยความจำ
2. หน่วยความจำหลัก
3. การแบ่งเป็นหน้า
4. การสับเปลี่ยนหน้า
5. การแบ่งเป็นเซ็กเมนต์

จุดประสงค์การสอน
1. เข้าใจกระบวนการจัดการหน่วยความจำ
2. สามารถบอกได้ว่ากระบวนการจัดการหน่วยความจำมีอะไรบ้าง
3. เข้าใจหน่วยความจำหลัก
4. เข้าใจการแบ่งเป็นหน้า
5. เข้าใจการสับเปลี่ยนหน้า
6. เข้าใจการแบ่งเป็นเซ็กเมนต์
7. สามารถวาดภาพแสดงการสับเปลี่ยนหน้าแต่ละแบบได้

แนะนำบทเรียน
หน่วยความจำหลัก (RAM = Random Access Memory เป็น Primary Memory) จะทำงานได้เร็วและอยู่ใกล้หน่วยประมวลผล (CPU) ทุกครั้งที่เรียกใช้โปรแกรม หน่วยประมวลผลก็จะโหลดโปรแกรมและข้อมูลจากหน่วยความจำสำรอง (Secondary Memory) มาไว้ในหน่วยความจำหลัก เมื่อข้อมูลมีมากเกินกว่าหน่วยความจำหลักจะรับได้ ก็จะต้องเวียนกันเข้าออกโดยอัตโนมัติ หากหน่วยความจำหลักมีขนาดเล็กก็มักจะทำให้เครื่องคอมพิวเตอร์ทำงานช้า เช่น การเล่นเกมขับเครื่องบินที่ต้องแสดงผลเร็ว ก็จะมีการ์ดจอภาพที่มีหน่วยความจำพิเศษ มาเพิ่มความสามารถในการเก็บข้อมูลและแสดงผลที่รวดเร็วกว่าเดิมมาก

บทนำ ระบบคอมพิวเตอร์ถูกพัฒนาให้สามารถรันโปรแกรมได้หลาย ๆ โปรแกรมโดยแต่ละโปรแกรมจะแย่งกันใช้หน่วยความจำ ปัญหาที่ตามมาก็คือ ไม่มีหน่วยความจำมากเพียงพอสำหรับโปรแกรม วิธีแก้ปัญหาก็คือเพิ่มหน่วยความจำเข้าไปในระบบ แต่จะทำให้เสียค่าใช้จ่ายมากการแก้ปัญหาวิธีนี้ก็คงยังไม่เพียงพอสำหรับการใช้งาน นักคอมพิวเตอร์จึงหาวิธีอื่นที่จะแก้ปัญญาหน่วยความจำไม่เพียงพอ วิธีที่นิยมใช้ก็คือ การทำหน่วยความจำเสมือน (Virtual Memory)
5.1 กระบวนการจัดการหน่วยความจำ 5.1.1 การย้ายตำแหน่ง (Relocation)
ระบบปฏิบัติการในปัจจุบัน ยอมให้โปรแกรมทำงานพร้อมกันได้หลายงานแบบ multiprogramming ซึ่งโปรเซสต่าง ๆ เข้าใช้งานหน่วยความจำร่วมกัน จึงต้องมีการสลับโปรแกรมให้เข้าออกหน่วยความจำได้ รวมถึงการเปลี่ยนแปลงค่าตำแหน่งในหน่วยความจำที่อ้างถึงในโปรแกรม ให้ถูกต้องตามตำแหน่งจริงในหน่วยความจำ เช่นโปรแกรม a อ้างถึงตำแหน่งที่ 1000 และโปรแกรม b ก็อ้างถึงตำแหน่งที่ 1000 เช่นกัน
ค่า address แบ่งได้ 2 ค่า
1. Absolute address หมายถึง ตำแหน่งจริงของโปรเซสที่อยู่ในหน่วยความจำ
2. Relative address หมายถึง ตำแหน่งของคำสั่ง หรือโปรแกรมของโปรเซสหลังจากการ compile

5.1.2 การป้องกันพื้นที่ (Protection)
ระบบปฏิบัติการควรสามารถป้องกันโปรเซส จากการถูกรบกวน ทั้งทางตรง และทางอ้อม ดังนั้นก่อนให้โปรเซสใดเข้าครอบครองหน่วยความจำ จะต้องมีการตรวจสอบก่อน และใช้เวลาค้นหาเพื่อตรวจสอบตลอดเวลา

5.1.3 การใช้พื้นที่ร่วมกัน (Sharing)
การป้องกันเพียงอย่างเดียว อาจทำให้การใช้ทรัพยากรไม่คุ้ม จึงต้องมีการจัดสรรให้ใช้พื้นที่ของหน่วยความจำร่วมกันอย่างยืดหยุ่น

5.1.4 การจัดการแบ่งโปรแกรมย่อย (Logical organization)
ระบบปฏิบัติการจะแบ่งโปรแกรมเป็นโปรแกรมหลัก และโปรแกรมย่อย โดยนำเฉพาะโปรแกรมหลักลงในหน่วยความจำ แต่นำโปรแกรมย่อยลงหน่วยความจำเฉพาะเมื่อมีการเรียกใช้เท่านั้น
ประโยชน์ที่ได้จากการจัดการแบ่งโปรแกรมออกเป็นโปรแกรมย่อย มีดังนี้
1. โปรแกรมย่อยที่ไม่ได้ใช้งาน จะไม่นำลงหน่วยความจำหลัก
2. โปรแกรมย่อยแต่ละตัวสามารถถูกเขียน และแปลแยกกันได้
3. โปรแกรมย่อยแต่ละตัวมีระดับการป้องกันแต่กต่างกัน
4. โปรแกรมหลักสามารถเรียกใช้โปรแกรมย่อยเหล่านี้ร่วมกันได้

5.1.5 การจัดการแบ่งทางกายภาพ (Physical organization)
หน่วยความจำแบ่งเป็น 2 ส่วนคือ หน่วยความจำหลัก และหน่วยความจำสำรอง ลักษณะของหน่วยความจำหลักจะมีราคาแพง ทำงานได้เร็ว แต่เลือนหายได้ ในการทำงานจริง จึงต้องมีการเคลื่อนย้ายทางกายภาพระหว่างหน่วยความจำทั้ง 2 ตลอดเวลา ซึ่งเป็นหน้าที่ของระบบที่ต้องจัดสรรให้ให้สอดคล้องกับการทำงานแบบ multiprogramming
5.2 หน่วยความจำหลัก (Main memory) การจัดการหน่วยความจำมีหลายระบบ เริ่มจากแบบไม่ซับซ้อน ไปถึงซับซ้อน ในบทนี้จะเรียนรู้แบบไม่ซับซ้อน ซึ่งไม่ถูกนำมาใช้งานในระบบปฏิบัติการปัจจุบัน แต่อาจใช้ในคอมพิวเตอร์ขนาดเล็กอยู่ การเรียนรู้เรื่องนี้อาจ นำไปประยุกต์ในการพัฒนางานด้าน software อื่น ๆ ได้
5.2.1 ระบบโปรแกรมเดียว (Monoprogramming)
เป็นวิธีการจัดการที่ง่ายที่สุด โดยกำหนดเพียง 1 โปรแกรม ให้ทำงานในหน่วยความจำเพียงโปรแกรมเดียว

5.2.2 ระบบหลายโปรแกรมที่กำหนดขนาดพาร์ติชั่นคงที่ (Multiprogramming with fixed partition)
ปัจจุบันระบบปฎิบัติการยอมให้มีหลายโปรเซสทำงานพร้อมกันได้ หมายความว่าขณะที่โปรเซสหนึ่งทำเสร็จ อีกโปรเซสที่รอ ก็เข้าใช้หน่วยความจำทันที โดยแบ่งหน่วยความจำออกเป็น partition การแบ่งเห็นแต่ละ partition แบบตายตัว มีจุดบกพร่อง จึงมีการจัดการหน่วยความจำแบบ FCFS : first come first serve การจัดการแบบนี้ย่อมมีปัญหา จึงเป็นหน้าที่ของระบบปฏิบัติการ ที่ต้องจัดการ

5.2.3 ระบบที่กำหนดขนาดของพาร์ติชั่นให้เปลี่ยนแปลงได้ (Dynamic partition)
เพื่อแก้ปัญหาของการกำหนดแบบคงที่ จึงออกแบบการกำหนด partition แบบเปลี่ยนแปลงได้ ซึ่งมีความซับซ้อน มากขึ้น ตามโปรเซสที่เข้าใช้หน่วยความจำ

5.2.4 การจัดการแบบระบบบัดดี้ (Buddy system)
ระบบจัดการหน่วยความจำแบบคงที่ และเปลี่ยนแปลงได้ อาจมีข้อจำกัดเรื่องการรองรับจำนวนโปรเซส และใช้พื้นที่ไม่เต็มประสิทธิภาพได้ ส่วนการแบ่งแบบเปลี่ยนแปลงได้ก็มีความซับซ้อนในทางปฏิบัติ และใช้ทรัพยากร จึงมีการผสมระหว่าง 2 ระบบนี้เข้าด้วยกัน ระบบนี้จะแบ่งพื้นที่เป็น 2 ส่วน และตรวจสอบว่าพอจะแบ่งให้กับโปรเซสล่าสุดได้หรือไม่ ถ้าแบ่งแล้วเข้าไม่ได้ ก็จะแบ่งขนาดเท่าก่อนหน้าที่ถูกแบ่ง และจัดเรียงพื้นที่เป็นแบบ link list ไว้รอการเข้าใช้ของโปรเซส

การจองพื้นที่ในหน่วยความจำหลัก มี 4 รูปแบบ
1. Single-user contiguous memory allocation ยุคแรกมีผู้ใช้คนเดียว โหลดไปไว้ในหน่วยความจำหลักหมด
2. Fixed Partitions ยุคมัลติโปรแกรมมิ่ง จะแบ่งส่วนที่ต้องอยู่ กับส่วนที่เคลื่อนย้ายได้ โดยจัดการผ่าน Partition Manager มีปัญหา อาทิ เกิดพื้นที่ว่างใน Internal fragmentation มีขนาดใหญ่ เป็นต้น
3. Dynamic Partitions จะเปิดให้งานเข้าจองหน่วยความจำในขนาดที่ต้องการได้ แต่ก็ยังมีปัญหาขนาด External fragmentation เกิดขึ้น โดยแบ่งการจองพื้นที่เป็น 3 แบบ คือ First-fit, Best fit (เลือกพื้นที่ว่างเล็กสุด) และ worst-fit (เลือกพื้นที่ว่างใหญ่สุด)
4. Relocationable Dynamic Partitons จะมี Memory manager คอยจัดการขยับตำแหน่งการอ้างอิง ทำให้เหลือ block ใหญ่ที่เดียว เรียกว่า Compaction หรือ Garbage collection หรือ Defragmentation
หลักการของ Overlay คือ การแบ่งส่วนงานออกเป็นหลายส่วนตามการทำงาน นำเข้าหน่วยความจำหลักในเวลาที่ต้องใช้ และทับหน่วยความจำหลักเดิมที่ไม่ใช้ ซึ่งเป็นหลักการที่ใช้ใน Single-user contiguous memory allocation
Bound register คือ การเก็บตำแหน่งหน่วยความจำที่เก็บตำแหน่งสูงสุด หรือต่ำสุดที่มีการใช้งานหน่วยความจำหลัก แล้วอ้างอิงไปใช้ใน memory manager ไม่ให้ใช้เกินขอบเขตที่กำหนดไว้
Relocation register คือ การเก็บตำแหน่งงานว่างานถูกเปลี่ยนไปจากตำแหน่งเดิมเท่าใด หากต้องการรู้ตำแหน่งปัจจุบันต้องใช้ตำแหน่งเดิม และตำแหน่ง Relocation register เพื่อใช้อ้างอิงในการนำมาใช้ต่อไป
Internal Fragmentation คือ งานที่มีขนาดใหญ่ เมื่อใช้ไปสักระยะ จะกินพื้นที่เล็กลง พื้นที่ ๆ เหลือ เรียกว่า การแตกกระจายภายใน (Internal Fragmentation)
External Fragmentation คือ งานที่ครอบครองหน่วยความจำ เมื่อใช้งานเสร็จ และเลิกใช้ พื้นที่นั่นจะว่าง เรียกว่า การแตกกระจายภายนอก (External Fragmentation)
5.3 การแบ่งเป็นหน้า (Paging) ระบบที่ใช้หน่วยความจำเสมือน (Virtual memory) มักใช้เทคนิคที่เรียกว่า การแบ่งหน้า หรือเพจจิ่ง(Paging) เพื่อเชื่อมระหว่างตำแหน่งทางตรรก กับเลขของเฟรมในหน่วยความจำหลัก
5.3.1 ตารางหน้า (Page table)
หมายถึงการรับค่าตำแหน่งทางตรรกเป็นค่านำเข้า แล้วหาเลขของเฟรมในหน่วยความจำหลักออกมา เทคนิคตารางหน้า(Page table) มักมีขนาดใหญ่ และต้องทำด้วยความเร็วสูง หากสรุปแล้วตารางหน้า ก็คือตารางที่เก็บอาร์เรย์ของรีจิสเตอร์นั่นเอง

5.3.2 บัฟเฟอร์ค้นหาที่อยู่ (TLB : Translation lookaside buffer)
ทุกครั้งที่เรียกใช้หน่วยความจำเสมือน ย่อมเรียกใช้หน่วยความจำหลัก 2 ครั้ง คือ การอ่านตารางหน้า และอ่านข้อมูลจริงจากหน่วยความจำหลัก ดังนั้นการทำงานแบบนี้จึงใช้เวลาถึง 2 เท่า จึงมีการใช้ cach memory ซึ่งทำหน้าที่เก็บตารางหน้าที่เคยถูกเรียกใช้ หรือเรียกว่า บัฟเฟอร์ค้นหาที่อยู่ (TLB : Translation Lookaside Buffer) ถ้าพบใน TLB จะเรียก TLB hit ถ้าไม่พบเรียก TLB miss และเข้าไปอ่านตารางหน้า เมื่ออ่านแล้วก็จะนำมาเพิ่มใน TLB สำหรับโอกาสที่จะถูกเรียกในอนาคต
5.4 การสับเปลี่ยนหน้า (Page replacement algorithms)
5.4.1 วิธีสับเปลี่ยนแบบมาก่อน-ออกก่อน (FIFO : First in first out algorithm)
5.4.2 วิธีสับเปลี่ยนแบบให้โอกาสครั้งที่สอง (Second change page replacement algorithm)
5.4.3 วิธีสับเปลี่ยนแบบวงรอบนาฬิกา (Clock page replacement algorithm)
5.4.4 วิธีสับเปลี่ยนแบบที่ดี่สุด (Optimal page replacement algorithm)
5.4.5 การสับเปลี่ยนแบบที่ไม่ได้ใช้งานออกก่อน (NRU : Not recently used)
5.4.6 การสับเปลี่ยนแบบใช้งานน้อยที่สุดออกก่อน (LRU : Least recently used)
ใช้ข้อมูลในอดีตประมาณการณ์อนาคต
5.5 การแบ่งเป็นเซ็กเมนต์ (Segmentation) การแบ่งหน้าจะแบ่งให้มีขนาดเท่ากัน แต่การแบ่งเป็นเซ็กเมนต์จะแบ่งโปรแกรมออกเป็นส่วน ๆ ไม่เท่ากัน และมีการใช้ตำแหน่งทางตรรก อ้างอิงตำแหน่งจริงเช่นกัน และมีการใช้ข้อมูล 2 ส่วนคือ เลขที่เซ็กเมนต์ และระยะเริ่มต้นของเซ้กเมนต์(Offset) สำหรับผลของการแบ่งเซ็กเมนต์ทำให้เกิดชิ้นส่วนไม่เท่ากัน (Dynamic partitioning) ซึ่งลดปัญหาการสูญเสียพื้นที่ (Internal fragmentation)
5.5.1 การนำวิธีการแบ่งเป็นเซ็กเมนต์มาใช้ในหน่วยความจำเสมือน
5.5.2 การรวมวิธีการแบ่งเป็นหน้ากับการแบ่งเป็นเซ็กเมนต์เข้าด้วยกัน
5.6 ปฏิบัติการฝึกเขียนแผนภาพ และฝึกเปลี่ยน RAM
- ฝึกเปลี่ยน RAM บน mainboard และศึกษารุ่นต่าง ๆ ที่มีในปัจจุบัน
- ฝึกเขียนแผนภาพแสดงการสับเปลี่ยนแบบต่าง ๆ
- ค้นคว้าข้อมูลเกี่ยวกับ การจัดการหน่วยความจำ จากอินเทอร์เน็ต แล้วทำรายงาน และส่งตัวแทนนำเสนอหน้าชั้น
ถาม - ตอบ ส่วนหนึ่งเรียบเรียงจากหนังสือของ รศ.ดร.กฤษดา ขันกสิกรรม
ถามการจัดการหน่วยความจำหลักแบบ Single-user contiguous memory allocation มีลักษณะอย่างไร
ตอบไม่แบ่งพื้นที่ในหน่วยความจำหลัก สามารถใช้งานได้เต็มที่คนเดียว
ถามการจัดการหน่วยความจำหลักแบบ Fixed Partitions มีลักษณะอย่างไร
ตอบแบ่งพื้นที่ออกเป็นส่วน และถูกกำหนดขนาดไว้ตายตัว
ถามการจัดการหน่วยความจำหลักแบบ Dynamic Partitions มีลักษณะอย่างไร
ตอบจองพื้นที่ในหน่วยความจำหลักที่ติดกัน และโหลดเข้าไปในขนาดที่ต้องใช้งาน
ถามการจัดการหน่วยความจำหลักแบบ Relocationable Dynamic Partitons มีลักษณะอย่างไร
ตอบมี memory manager ทำให้มีการจัดการหน่วยความจำหลักตลอดเวลา และมีพื้นที่ว่างเพียงพื้นที่เดียว
ถามหลักการของ Overlay จะใช้กับการจองพื้นที่หน่วยความจำหลักแบบใด
ตอบแบบ Single-user contiguous memory allocation ซึ่งกำหนดว่าพื้นที่ใดเป็นพื้นที่เริ่มต้นทำงาน และโหลดมาเขียนทับ เมื่อเริ่มงานใหม่
ถามFirst-Fit มีการทำงานแบบใด
ตอบเลือกพื้นที่แรกที่ว่าง และพื้นที่กว้างมากพอ
ถามBest-Fit มีการทำงานแบบใด
ตอบเลือกพื้นที่ที่เล็กที่สุด และพื้นที่กว้างมากพอ
ถามWorst-Fit มีการทำงานแบบใด
ตอบเลือกพื้นที่ที่ขนาดใหญ่ที่สุด และพื้นที่กว้างมากพอ
ถามBound register คืออะไร
ตอบการเก็บตำแหน่งหน่วยความจำที่เก็บตำแหน่งสูงสุด หรือต่ำสุดที่มีการใช้งานหน่วยความจำหลัก
ถามRelocation register คืออะไร
ตอบการเก็บตำแหน่งงานว่างานถูกเปลี่ยนไปจากตำแหน่งเดิมเท่าใด
ถามInternal Fragmentation คืออะไร
ตอบพื้นที่ที่เหลือว่าง หลังงานใหญ่ลดขนาดการใช้พื้นที่หน่วยความจำลง จึงเกิดพื้นที่ว่าง
ถามExternal Fragmentation คืออะไร
ตอบพื้นที่ที่เหลือว่าง หลังงานนั้นสิ้นสุดลง จึงเกิดพื้นที่ว่าง
ถามหน่วยความจำเสมือน คืออะไร
ตอบVirtual Memory คือหน่วยความจำที่จำลองขึ้นมา เสริมให้ระบบมีหน่วยความจำหลักเพิ่มขึ้น แต่ไม่ใช่หน่วยความจำหลักจริง
ถามประเภทการอ้างอิงหน่วยความจำเสมือนมีกี่แบบ อะไรบ้าง
ตอบแบ่งมี 2 แบบ
1. Virtual Address คือ ตำแหน่งให้โปรเซสอ้างอิงนำไปใช้งาน
2. Real Address หรือ Physical Address คือ ตำแหน่งที่อยู่จริงบนหน่วยความจำหลัก
ถามการทำ Overlay โดยโปรแกรมเมอร์คืออะไร
ตอบโปรแกรมเมอร์ที่ต้องการใช้หน่วยความจำเกินกว่าที่มีอยู่ จะแบ่งงานเป็นส่วน แล้วนำไปแทนที่หน่วยความจำหลักเมื่อต้องการเรียกใช้
ถามระบบปฏิบัติการจะใช้งานหน่วยความจำหลัก และหน่วยความจำเสมือนอย่างไร
ตอบระบบปฏิบัติการจะมีกลไกควบคุมการทำงานร่วมกัน เรียกว่า Dynamic Address Translation (DAT)คือ กลไกการเปลี่ยน Virtual Address เป็น Real Address ซึ่งโปรแกรมเมอร์ไม่จำเป็นต้องรู้ เพราะทั้งหมดบริการโดย DAT
ถามการจองพื้นที่หน่วยความจำเสมือนมีกี่แบบ อะไรบ้าง
ตอบมี 4 แบบ
1. Paged Memory Allocation แบ่งงานออกเป็นเพจ ๆ ละเท่ากัน และวางเพจสลับกันในหน่วยความจำหลักไม่จำเป็นต้องเรียงต่อกันได้ วิธีนี้ไม่ทำให้เกิดปัญหา External Fragmenttation เพราะขนาดที่ว่างเท่ากัน ทำให้เพจสามารถเข้าใช้พื้นที่ว่างได้ทันที
2. Demand Paging คล้าย Paged Memory Allocation แต่เพจจะเก็บในหน่วยความจำสำรองก่อน ไม่ถูกโหลดเข้าหน่วยความจำหลัก จนกว่าจะมีการเรียกใช้ หลักการนี้ทำให้มีจำนวนงานในหน่วยความจำหลักได้มากกว่าแบบแรก
3. Segmented Memory Allocation แบ่งงานออกเป็นเซกเมนต์ แต่ละเซกเมนต์ไม่จำเป็นต้องเท่ากัน เวลาแบ่งอาจแบ่งตามกลุ่มของโค้ดโปรแกรม หรือซับรูทีนได้ วิธีนี้ทำให้เกิดปัญหา External Fragmenttation เพราะขนาดที่ว่างจะไม่เท่ากัน
4. Segmented/Demand Paged Memory Allocation เป็นการรวมข้อดีของ Paged Memory Allocation และ Segmented Memory Allocation เข้าด้วยกัน โดยเริ่มต้นจากการแบ่งงานเป็น Segment จากนั้นนำ Segment มาแบ่งเป็น Page ที่มีขนาดเท่ากัน
ถามอัลกอริทึมการแทนที่เพจ มีกี่แบบ อะไรบ้าง
ตอบมี 3 อัลกอริทึม
1. Optimal Algorithm (Optimal Algorithm) มองไปในอนาคตว่าเพจไหน เพจไหนจะไม่ถูกใช้นานที่สุด ก็จะออกไป ให้เพจอื่นมาแทนที่
2. First In First Out (FIFO Algorithm) มองว่าเข้าก่อน ก็ออกก่อน
3. Least Recently Used (LRU Algorithm) มองว่าเพจใดอยู่ในหน่วยความจำนานที่สุด ให้ออกไป
ถามPage Fault คืออะไร ในอัลกอริทึมการแทนที่เพจ
ตอบปรากฎการณ์ที่มีการเรียก เพจ แต่ไม่พบเพจในหน่วยความจำ ก็จะต้องย้ายเพจออกจากหน่วยความจำหลัก ไปเข้าคิวใหม่ เกิดปัญหาที่เรียกว่า Thrashing คือ หน่วยความจำหลักถูกจองจนเต็ม แต่มีเพจรอประมวลผลอยู่มาก ทำให้มีการดึงเพจระหว่างหน่วยความจำหลัก และหน่วยความจำสำรองบ่อยเกินไป
ถามอัลกอริทึมการสับเปลี่ยนหน้า (Page replacement algorithms) มีกี่แบบ อะไรบ้าง
ตอบมี 6 แบบ
1. วิธีสับเปลี่ยนแบบมาก่อน-ออกก่อน (FIFO : First in first out algorithm)
2. วิธีสับเปลี่ยนแบบให้โอกาสครั้งที่สอง (Second change page replacement algorithm)
3. วิธีสับเปลี่ยนแบบวงรอบนาฬิกา (Clock page replacement algorithm)
4. วิธีสับเปลี่ยนแบบที่ดี่สุด (Optimal page replacement algorithm)
5. การสับเปลี่ยนแบบที่ไม่ได้ใช้งานออกก่อน (NRU : Not recently used)
6. การสับเปลี่ยนแบบใช้งานน้อยที่สุดออกก่อน (LRU : Least recently used) ใช้ข้อมูลในอดีตประมาณการณ์อนาคต
แนะนำเว็บไซต์ (Website guide) + https://www.tutorialspoint.com/operating_system/os_memory_management.htm
เอกสารอ้างอิง (Reference) [1] Abraham silverschatz, Peter baer galvin, "Operating system concept", John wiley & Sons, New York, 2003.
[2] Milan Milenkovic, "Operating systems: concepts and design", McGraw-Hill inc., New York, 1992.
[3] William stallings, "Operating system", Prentice hall, New York, 1999.
[4] ไพศาล โมลิสกุลมงคล และคณะ, "ระบบปฏิบัติการ", สำนักพิมพ์ดวงกมลสมัย, กรุงเทพฯ, 2545.
[5] พิเชษฐ์ ศิริรัตนไพศาลกุล, "ระบบปฏิบัติการ (Operating system)", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2546.
[6] ดร.ยรรยง เต็งอำนวย, "ระบบปฏิบัติการ (Operating system)", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2541.
[7] ประชา พฤกษ์ประเสริฐ, "ระบบปฏิบัติการ", บริษัท ซัคเซส มีเดีย จำกัด., กรุงเทพฯ, 2549.
[8] วศิน เพิ่มทรัพย์, "คู่มือ MS-DOS", พี.เอ็น.การพิมพ์, กรุงเทพฯ, 2545.
[9] ชนินทร์ เชาวมิตร, "คู่มือยูนิกซ์เดสก์ทอป", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2538.
[10] รศ.ดร.กฤษดา ขันกสิกรรม, "ระบบปฏิบัติการ (Operating Systems)", อาง้วนการพิมพ์, นครสวรรค์, 2555.

http://goo.gl/72BPC