การจัดการหน่วยความจำไม่คงที่

การแบ่งหน่วยความจำขนาดไม่คงที่

           ผู้ออกแบบระบบ OS ได้ตระหนักถึงข้อเสียของการแบ่งหน่วยความจำขนาดคงที่ จึงคิดว่า
   ควรปรับปรุงการแบ่งหน่วยความจำให้ดีขึ้น เขาจึงเปลี่ยนวิธีแบ่งหน่วยความจำใหม่คือ OS จะ
   ยินยอมให้โปรแกรมครอบครองหน่วยความจำมากเท่าที่ต้องการ ไม่มีการจำกัด วิธีการนี้เรียก
   ว่า การแบ่งหน่วยความจำขนาดไม่คงที่ ดังรูปที่แสดง

 

 

          การแบ่งหนวยความจำแบบขนาดไม่คงที่ยังคงเป็นการจัดสรรหน่วยความจำแบบต่อ
   เนื่อง การแบ่งหน่วยความจำชนิดนี้จะวางโปรแกรมติดกัน เพื่อไม่ให้เกิดพื้นที่ว่าง การสูญเสีย
   เนื้อที่มีอยู่ 2 กรณี คือ
          1. เกิดจากพื้นที่เหลือในส่วนสุดท้ายอาจเหลือเพียงเล็กน้อยไม่เพียงพอสำหรับโปรแกรม
   ใดๆ
          2. เมื่อโปรแกรมทำงานเสร็จสิ้นแล้วโปรแกรมออกจากระบบ ต้องคืนพื้นที่หน่วยความจำ
   ที่มันครอบครองอยู่ให้กับระบบ ดังนั้นจึงเกิดเป็นพื้นที่ว่างขึ้น เนื้อที่ว่างเหล่านี้เรียกว่า ช่องโหว่
   หรือโฮล (Hole)
ดังรูปที่แสดง

           



   

 ยุทธวิธีการวาง
         เมื่อโปรแกรมใหม่ถูกส่งมาในระบบหน่วยความจำมีโฮลเกิดขึ้นกระจายไปทั่ว เราควร
    จะวางโปรแกรมใหม่นี้ลงบนโฮลไหนดี การตัดสินใจขึ้นอยู่กับ "ยุทธวิธีการวาง" (Placement
    strategy) ซึ่งมีอยู่ 3 ประเภทคือ
        1. เลือกโฮลที่พบก่อน (first - fit)
         OS จะทำการตรวจค้นโฮลต่างๆ ในหน่วยความจำ เมื่อใดที่มันพบโฮลที่มีขนาดใหญ่พอ
    ที่จะ วางโปรแกรมใหม่นี้ลงไปมันจะเลือกเอาโฮลนั้น ซึ่งทำให้การเลือกโฮลทำได้รวดเร็ว

        2. เลือกโฮลที่เหมาะสมที่สุด (Best - fit)
         OS จะตรวจสอบโฮลต่างๆ ทั้งหมดที่มีอยู่ในหน่วยความจำ แล้วเลือกเอาโฮลที่เมื่อวาง
   โปรแกรมเข้าไปแล้วเกิดโฮลขนาดเล็กที่สุด
        3. เลือกโฮลที่ใหญ่ที่สุด (Worst - fit)

          การเลือกโฮลแบบนี้จะตรงข้ามกับแบบที่ 2 OS จะเลือกเอาโฮลที่เมื่อวางโปรแกรมใหม่
   ลงไปแล้วจะเกิดโฮลขนาดใหญ่ที่สุด หรืออีกนัยหนึ่งเลือกโฮลที่มีขนาดใหญ่ที่สุด นั้นเอง ผู้ที่คิด
   วิธีนี้ให้เหตุผลว่า การทำเช่นนี้สามารถลดโอกาสที่เกิดโฮลขนาดเล็กๆ

                   

        การวางโฮล

        การรวมโฮล
          เมื่อมีโฮล 2 โฮลติดกันในหน่วยความจำ OS ควรมีความสามารถที่จะรวมโฮลทั้ง 2 นี้เป็นโฮลใหญ่เดียว เรียกว่า การรวมโฮล (Coalescing Holes) ดังรูปที่แสดง

 

 

          ในกรณีของรูปที่แสดงนั้น โฮลขนาด 2 K และ 5 K อยู่ติดกัน OS ยุบโฮลทั้ง 2 รวมกัน
   เป็นโฮลใหญ่ 1 โฮล ขนาด 1 K (k คือ กิโลไบต์)

          การอัดโฮล
          ถึงแม้ว่าจะมีการรวมโฮล แต่โฮลต่างๆ ที่ไม่อยู่ติดกันก็ยังคงมีกระจายอยู่ทั่วไปในหน่วย
   ความจำ ถ้ามีโฮลขนาดเล็กๆ หลายๆ โฮล เมื่อรวมกันแล้วอาจเป็นหน่วยความจำปริมาณมาก
   ก็ได้ ซึ่งบางครั้งมากพอสำหรับโปรแกรม 1 โปรแกรมได้ แต่ถ้ามันกระจายอยู่ทั่วไปโปรแกรมก็
   ไม่สามารถนำไปใช้งานได้
          วิธีการนี้เรียกว่า การอัดหน่วยความจำ (Storage compaction) สามารถแก้
   ปัญหาได้โดยการย้ายเอาหน่วยความจำบริเวณที่ถูกครอบครองโปรแกรมต่างๆ ไปอยู่ติดกันที่
   ด้านใดด้านหนึ่ง ซึ่งจะทำให้เกิดโฮลใหญ่เพียงโฮลเดียว โปรแกรมใหม่ที่รอเนื้อที่ว่างในหน่วย
   ความจำก็สามารถถูกโหลดเข้ามาได้ แต่ขนาดของหน่วยความจำที่มันต้องการไม่มากไปกว่า
   โฮลใหญ่นี้ เทคนิคนี้บางครั้งเรียกว่า การรวบรวมขยะ (Grabage collection)


ที่มา : เนื้อหาวิชาระบบปฏิบัติการ อ.ยุพดี อินทสร

โดย : นาย monchai petchkaew, สถาบันราชภัฏสงขลา, วันที่ 3 พฤศจิกายน 2545