การแบ่งหน่วยความจำขนาดไม่คงที่
ผู้ออกแบบระบบ OS ได้ตระหนักถึงข้อเสียของการแบ่งหน่วยความจำขนาดคงที่ จึงคิดว่า ควรปรับปรุงการแบ่งหน่วยความจำให้ดีขึ้น เขาจึงเปลี่ยนวิธีแบ่งหน่วยความจำใหม่คือ OS จะ ยินยอมให้โปรแกรมครอบครองหน่วยความจำมากเท่าที่ต้องการ ไม่มีการจำกัด วิธีการนี้เรียก ว่า การแบ่งหน่วยความจำขนาดไม่คงที่ ดังรูปที่แสดง
![](10000-8582/memory1.gif)
การแบ่งหนวยความจำแบบขนาดไม่คงที่ยังคงเป็นการจัดสรรหน่วยความจำแบบต่อ เนื่อง การแบ่งหน่วยความจำชนิดนี้จะวางโปรแกรมติดกัน เพื่อไม่ให้เกิดพื้นที่ว่าง การสูญเสีย เนื้อที่มีอยู่ 2 กรณี คือ 1. เกิดจากพื้นที่เหลือในส่วนสุดท้ายอาจเหลือเพียงเล็กน้อยไม่เพียงพอสำหรับโปรแกรม ใดๆ 2. เมื่อโปรแกรมทำงานเสร็จสิ้นแล้วโปรแกรมออกจากระบบ ต้องคืนพื้นที่หน่วยความจำ ที่มันครอบครองอยู่ให้กับระบบ ดังนั้นจึงเกิดเป็นพื้นที่ว่างขึ้น เนื้อที่ว่างเหล่านี้เรียกว่า ช่องโหว่ หรือโฮล (Hole) ดังรูปที่แสดง
![](10000-8582/memory2.gif)
ยุทธวิธีการวาง เมื่อโปรแกรมใหม่ถูกส่งมาในระบบหน่วยความจำมีโฮลเกิดขึ้นกระจายไปทั่ว เราควร จะวางโปรแกรมใหม่นี้ลงบนโฮลไหนดี การตัดสินใจขึ้นอยู่กับ "ยุทธวิธีการวาง" (Placement strategy) ซึ่งมีอยู่ 3 ประเภทคือ 1. เลือกโฮลที่พบก่อน (first - fit) OS จะทำการตรวจค้นโฮลต่างๆ ในหน่วยความจำ เมื่อใดที่มันพบโฮลที่มีขนาดใหญ่พอ ที่จะ วางโปรแกรมใหม่นี้ลงไปมันจะเลือกเอาโฮลนั้น ซึ่งทำให้การเลือกโฮลทำได้รวดเร็ว 2. เลือกโฮลที่เหมาะสมที่สุด (Best - fit) OS จะตรวจสอบโฮลต่างๆ ทั้งหมดที่มีอยู่ในหน่วยความจำ แล้วเลือกเอาโฮลที่เมื่อวาง โปรแกรมเข้าไปแล้วเกิดโฮลขนาดเล็กที่สุด 3. เลือกโฮลที่ใหญ่ที่สุด (Worst - fit) การเลือกโฮลแบบนี้จะตรงข้ามกับแบบที่ 2 OS จะเลือกเอาโฮลที่เมื่อวางโปรแกรมใหม่ ลงไปแล้วจะเกิดโฮลขนาดใหญ่ที่สุด หรืออีกนัยหนึ่งเลือกโฮลที่มีขนาดใหญ่ที่สุด นั้นเอง ผู้ที่คิด วิธีนี้ให้เหตุผลว่า การทำเช่นนี้สามารถลดโอกาสที่เกิดโฮลขนาดเล็กๆ
![](10000-8582/memory3.gif)
การวางโฮล
การรวมโฮล เมื่อมีโฮล 2 โฮลติดกันในหน่วยความจำ OS ควรมีความสามารถที่จะรวมโฮลทั้ง 2 นี้เป็นโฮลใหญ่เดียว เรียกว่า การรวมโฮล (Coalescing Holes) ดังรูปที่แสดง
![](10000-8582/memory4.gif)
ในกรณีของรูปที่แสดงนั้น โฮลขนาด 2 K และ 5 K อยู่ติดกัน OS ยุบโฮลทั้ง 2 รวมกัน เป็นโฮลใหญ่ 1 โฮล ขนาด 1 K (k คือ กิโลไบต์)
การอัดโฮล ถึงแม้ว่าจะมีการรวมโฮล แต่โฮลต่างๆ ที่ไม่อยู่ติดกันก็ยังคงมีกระจายอยู่ทั่วไปในหน่วย ความจำ ถ้ามีโฮลขนาดเล็กๆ หลายๆ โฮล เมื่อรวมกันแล้วอาจเป็นหน่วยความจำปริมาณมาก ก็ได้ ซึ่งบางครั้งมากพอสำหรับโปรแกรม 1 โปรแกรมได้ แต่ถ้ามันกระจายอยู่ทั่วไปโปรแกรมก็ ไม่สามารถนำไปใช้งานได้ วิธีการนี้เรียกว่า การอัดหน่วยความจำ (Storage compaction) สามารถแก้ ปัญหาได้โดยการย้ายเอาหน่วยความจำบริเวณที่ถูกครอบครองโปรแกรมต่างๆ ไปอยู่ติดกันที่ ด้านใดด้านหนึ่ง ซึ่งจะทำให้เกิดโฮลใหญ่เพียงโฮลเดียว โปรแกรมใหม่ที่รอเนื้อที่ว่างในหน่วย ความจำก็สามารถถูกโหลดเข้ามาได้ แต่ขนาดของหน่วยความจำที่มันต้องการไม่มากไปกว่า โฮลใหญ่นี้ เทคนิคนี้บางครั้งเรียกว่า การรวบรวมขยะ (Grabage collection)
|