การจัดการหน่วยความจำในระบบปฏิบัติการ: หน่วยความจำต่อเนื่อง (Contentuous), หน่วยความจำสลับ (Swap)pingการแตกแยก
⚡ สรุปอย่างชาญฉลาด
การจัดการหน่วยความจำคือกระบวนการของระบบปฏิบัติการในการควบคุมและประสานงานหน่วยความจำของคอมพิวเตอร์ โดยการจัดสรรบล็อกหน่วยความจำให้กับโปรแกรมที่กำลังทำงานอยู่เพื่อเพิ่มประสิทธิภาพการทำงานให้เหมาะสมที่สุด tracคำสั่ง ks จะตรวจสอบตำแหน่งหน่วยความจำทุกตำแหน่ง ย้ายกระบวนการระหว่างหน่วยความจำหลักและดิสก์ และปกป้องกระบวนการจากกันและกัน

การจัดการหน่วยความจำคืออะไร?
การจัดการหน่วยความจำ เป็นกระบวนการควบคุมและประสานงานหน่วยความจำคอมพิวเตอร์ โดยกำหนดส่วนที่เรียกว่าบล็อกให้กับโปรแกรมต่างๆ ที่รันอยู่เพื่อปรับประสิทธิภาพโดยรวมของระบบให้เหมาะสม
การจัดการหน่วยความจำหลักเป็นหน้าที่ที่สำคัญที่สุดของระบบปฏิบัติการ ช่วยให้กระบวนการต่างๆ สามารถย้ายไปมาระหว่างหน่วยความจำหลักและดิสก์ประมวลผลได้ ช่วยให้ระบบปฏิบัติการสามารถรักษาข้อมูลไว้ได้ track ของตำแหน่งหน่วยความจำทุกตำแหน่ง โดยไม่คำนึงว่าตำแหน่งนั้นถูกจัดสรรให้กับกระบวนการใดหรือไม่ หรือยังคงว่างอยู่ก็ตาม
เหตุใดจึงต้องใช้การจัดการหน่วยความจำ
ต่อไปนี้คือเหตุผลที่ต้องใช้การจัดการหน่วยความจำ:
- ช่วยให้คุณสามารถตรวจสอบจำนวนหน่วยความจำที่ต้องจัดสรรให้กับกระบวนการที่ตัดสินใจว่าโปรเซสเซอร์ตัวใดควรได้รับหน่วยความจำในเวลาใด
- Tracks จะแจ้งเตือนทุกครั้งที่สินค้าคงคลังถูกปล่อยว่างหรือไม่ได้จัดสรร และจะอัปเดตสถานะตามนั้น
- จัดสรรพื้นที่ให้กับรูทีนของแอปพลิเคชัน
- นอกจากนี้ยังช่วยให้มั่นใจได้ว่าแอปพลิเคชันเหล่านี้จะไม่รบกวนซึ่งกันและกัน
- ช่วยปกป้องกระบวนการต่างๆ จากกันและกัน
- มันวางโปรแกรมไว้ในหน่วยความจำเพื่อให้หน่วยความจำถูกใช้อย่างเต็มที่
เทคนิคการจัดการหน่วยความจำ
ต่อไปนี้คือเทคนิคการจัดการหน่วยความจำที่สำคัญที่สุดบางส่วน:
การจัดสรรต่อเนื่องกันเดี่ยว
นี่เป็นเทคนิคการจัดการหน่วยความจำที่ง่ายที่สุด ในวิธีนี้ หน่วยความจำทุกประเภทของคอมพิวเตอร์ ยกเว้นส่วนเล็ก ๆ ที่สงวนไว้สำหรับระบบปฏิบัติการ จะถูกใช้สำหรับแอปพลิเคชันเดียว ตัวอย่างเช่น ระบบปฏิบัติการ MS-DOS จัดสรรหน่วยความจำด้วยวิธีนี้ ระบบฝังตัวก็ทำงานบนแอปพลิเคชันเดียวเช่นกัน
การจัดสรรแบบแบ่งพาร์ติชัน
วิธีการนี้แบ่งหน่วยความจำหลักออกเป็นส่วนย่อยๆ หลายส่วน ซึ่งส่วนใหญ่เป็นพื้นที่หน่วยความจำที่ต่อเนื่องกัน แต่ละส่วนย่อยจะเก็บข้อมูลทั้งหมดสำหรับงานหรือภารกิจเฉพาะ วิธีการนี้ประกอบด้วยการจัดสรรส่วนย่อยให้กับงานเมื่อเริ่มต้น และการยกเลิกการจัดสรรส่วนย่อยนั้นเมื่อสิ้นสุดงาน
การจัดการหน่วยความจำเพจ
วิธีการนี้จะแบ่งหน่วยความจำหลักของคอมพิวเตอร์ออกเป็นหน่วยขนาดคงที่ที่เรียกว่าเฟรมหน้า หน่วยจัดการหน่วยความจำฮาร์ดแวร์นี้แมปเพจต่างๆ ลงในเฟรมซึ่งควรได้รับการจัดสรรตามเพจ
การจัดการหน่วยความจำแบบแบ่งส่วน
หน่วยความจำแบบเซ็กเมนต์เป็นวิธีการจัดการหน่วยความจำเดียวที่ไม่ได้จัดเตรียมพื้นที่ที่อยู่เชิงเส้นและต่อเนื่องให้กับโปรแกรมของผู้ใช้
เซ็กเมนต์ต้องการการสนับสนุนฮาร์ดแวร์ในรูปแบบของตารางเซ็กเมนต์ ประกอบด้วยที่อยู่ทางกายภาพของส่วนในหน่วยความจำ ขนาด และข้อมูลอื่นๆ เช่น บิตและสถานะการป้องกันการเข้าถึง
การแลกเปลี่ยนคืออะไรping?
แลกเปลี่ยนping เป็นวิธีการที่กระบวนการหนึ่งจะถูกสลับออกจากหน่วยความจำหลักไปยังหน่วยความจำสำรองชั่วคราว จากนั้นจะถูกนำกลับเข้ามาในหน่วยความจำหลักเพื่อดำเนินการต่อ
พื้นที่จัดเก็บข้อมูลสำรองคือฮาร์ดดิสก์หรืออุปกรณ์จัดเก็บข้อมูลสำรองอื่นๆ ที่ควรมีขนาดใหญ่พอที่จะจัดเก็บสำเนาของภาพหน่วยความจำทั้งหมดสำหรับผู้ใช้ทุกคนได้ นอกจากนี้ยังต้องสามารถเข้าถึงภาพหน่วยความจำเหล่านี้ได้โดยตรงด้วย
ข้อดีของการแลกเปลี่ยนping
นี่คือข้อดี/ประโยชน์หลักๆ ของการแลกเปลี่ยนping:
- มันมีระดับของการเขียนโปรแกรมหลายโปรแกรมที่สูงขึ้น
- อนุญาตให้ย้ายตำแหน่งแบบไดนามิกได้ ตัวอย่างเช่น หากใช้การผูกที่อยู่ ณ เวลาดำเนินการ กระบวนการต่างๆ สามารถสลับไปยังตำแหน่งต่างๆ ได้ ในทางกลับกัน ในกรณีของการผูกที่อยู่ ณ เวลาคอมไพล์และโหลด กระบวนการต่างๆ ควรถูกย้ายไปยังตำแหน่งเดียวกัน
- ช่วยให้สามารถใช้งานหน่วยความจำได้ดีขึ้น
- ลดการสูญเสียเวลา CPU ให้น้อยที่สุดเมื่อเสร็จสิ้นกระบวนการ จึงสามารถนำไปใช้กับวิธีการจัดตารางเวลาตามลำดับความสำคัญได้อย่างง่ายดายเพื่อปรับปรุงประสิทธิภาพ
การจัดสรรหน่วยความจำคืออะไร?
การจัดสรรหน่วยความจำเป็นกระบวนการที่โปรแกรมคอมพิวเตอร์กำหนดหน่วยความจำหรือพื้นที่
ในที่นี้ หน่วยความจำหลักถูกแบ่งออกเป็นสองประเภท:
- หน่วยความจำต่ำ - Operaระบบติ้ง อยู่ในความทรงจำประเภทนี้
- หน่วยความจำสูง – กระบวนการของผู้ใช้จะถูกเก็บไว้ในหน่วยความจำส่วนบน
การจัดสรรพาร์ติชัน
หน่วยความจำแบ่งออกเป็นบล็อกหรือพาร์ติชันต่างๆ แต่ละกระบวนการได้รับการจัดสรรตามความต้องการ การจัดสรรพาร์ติชันเป็นวิธีการที่เหมาะสมที่สุดในการหลีกเลี่ยงการกระจายตัวภายใน
ด้านล่างนี้คือรูปแบบการจัดสรรพาร์ติชันแบบต่างๆ:
- การลองสวมครั้งแรก: ในการจัดสรรแบบนี้ พาร์ติชันจะถูกจัดสรรให้กับบล็อกที่มีพื้นที่เพียงพออันแรกนับจากจุดเริ่มต้นของหน่วยความจำหลัก
- เหมาะสมที่สุด: ระบบจะจัดสรรกระบวนการให้กับพาร์ติชันที่มีขนาดเล็กที่สุดและเพียงพอในบรรดาพาร์ติชันว่างทั้งหมด
- พอดีแย่ที่สุด: ระบบจะจัดสรรกระบวนการไปยังพาร์ติชันที่มีขนาดใหญ่ที่สุดและมีพื้นที่ว่างเพียงพอในหน่วยความจำหลัก
- พอดีถัดไป: โดยส่วนใหญ่แล้วจะคล้ายกับ First Fit แต่ Fit นี้จะค้นหาพาร์ติชันที่เพียงพอแรกจากจุดจัดสรรสุดท้าย
เพจจิ้งคืออะไร?
การแบ่งหน้า (Paging) เป็นกลไกการจัดเก็บข้อมูลที่ช่วยให้ระบบปฏิบัติการสามารถดึงกระบวนการต่างๆ จากหน่วยความจำสำรองกลับมายังหน่วยความจำหลักในรูปแบบของหน้า (page) ในวิธีการแบ่งหน้า หน่วยความจำหลักจะถูกแบ่งออกเป็นบล็อกหน่วยความจำทางกายภาพขนาดเล็กที่มีขนาดคงที่ ซึ่งเรียกว่าเฟรม (frame) ขนาดของเฟรมควรมีขนาดเท่ากับขนาดของหน้าเพื่อให้ใช้หน่วยความจำหลักได้อย่างเต็มประสิทธิภาพและหลีกเลี่ยงการแตกกระจายของหน่วยความจำ (external fragmentation) เพจจิ้ง ใช้เพื่อการเข้าถึงข้อมูลที่รวดเร็วขึ้น และเป็นแนวคิดเชิงตรรกะ
การกระจายตัวคืออะไร?
กระบวนการต่างๆ จะถูกจัดเก็บและลบออกจากหน่วยความจำ ซึ่งจะสร้างพื้นที่ว่างในหน่วยความจำที่มีขนาดเล็กเกินกว่าที่กระบวนการอื่นๆ จะนำไปใช้ได้
เมื่อเวลาผ่านไปสักระยะ กระบวนการเหล่านั้นจะไม่สามารถถูกจัดสรรไปยังบล็อกหน่วยความจำได้เนื่องจากมีขนาดเล็กเกินไป และบล็อกหน่วยความจำเหล่านั้นก็จะว่างเปล่าอยู่เสมอ นี่เรียกว่าการแตกกระจายของหน่วยความจำ (fragmentation) ปัญหาประเภทนี้เกิดขึ้นในระบบการจัดสรรหน่วยความจำแบบไดนามิกเมื่อบล็อกว่างมีขนาดเล็กมาก จึงไม่สามารถตอบสนองคำขอใดๆ ได้
วิธีการแยกส่วนมี 2 วิธีคือ:
- การกระจายตัวภายนอก
- การกระจายตัวภายใน
- การแตกแฟรกเมนต์ภายนอกสามารถลดลงได้โดยการจัดเรียงเนื้อหาหน่วยความจำใหม่เพื่อรวมหน่วยความจำที่ว่างทั้งหมดไว้ด้วยกันในบล็อกเดียว
- สามารถลดปัญหาการแตกกระจายภายในได้โดยการกำหนดพาร์ติชันที่เล็กที่สุด ซึ่งยังคงเพียงพอที่จะรองรับกระบวนการทั้งหมดได้
การแบ่งส่วนคืออะไร?
วิธีการแบ่งส่วน (Segmentation) ทำงานคล้ายกับวิธีการแบ่งหน้า (Paging) มาก ความแตกต่างเพียงอย่างเดียวคือ ส่วนต่างๆ มีความยาวแปรผันได้ ในขณะที่วิธีการแบ่งหน้า หน้าต่างๆ จะมีขนาดคงที่เสมอ
ส่วนโปรแกรมประกอบด้วยฟังก์ชันหลักของโปรแกรม โครงสร้างข้อมูล ฟังก์ชันยูทิลิตี้ ฯลฯ ระบบปฏิบัติการจะรักษาตารางแผนผังส่วนสำหรับกระบวนการทั้งหมด นอกจากนี้ยังรวมถึงรายการบล็อกหน่วยความจำว่างพร้อมทั้งขนาด หมายเลขส่วน และตำแหน่งหน่วยความจำในหน่วยความจำหลักหรือ หน่วยความจำเสมือน.
การโหลดแบบไดนามิกคืออะไร?
การโหลดแบบไดนามิก คือ รูทีนของโปรแกรมซึ่งจะไม่ถูกโหลดจนกว่าโปรแกรมจะเรียกใช้ รูทีนทั้งหมดควรถูกจัดเก็บไว้ในดิสก์ในรูปแบบการโหลดที่สามารถย้ายตำแหน่งได้ โปรแกรมหลักจะถูกโหลดเข้าสู่หน่วยความจำและจะถูกเรียกใช้งาน การโหลดแบบไดนามิกยังช่วยให้ใช้พื้นที่หน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้นด้วย
การเชื่อมโยงแบบไดนามิกคืออะไร?
การเชื่อมโยง (Linking) เป็นวิธีการที่ช่วยให้ระบบปฏิบัติการรวบรวมและผสานโมดูลโค้ดและข้อมูลต่างๆ เข้าเป็นไฟล์ปฏิบัติการเดียว ไฟล์นั้นสามารถโหลดเข้าสู่หน่วยความจำและเรียกใช้งานได้ ระบบปฏิบัติการสามารถเชื่อมโยงไลบรารีระดับระบบเข้ากับโปรแกรมที่รวมไลบรารีเหล่านั้นเข้าด้วยกันในขณะโหลด ในวิธีการเชื่อมโยงแบบไดนามิก (Dynamic linking) ไลบรารีจะถูกเชื่อมโยงในขณะเรียกใช้งาน ดังนั้นขนาดของโค้ดโปรแกรมจึงสามารถคงความเล็กไว้ได้
ความแตกต่างระหว่างการโหลดแบบคงที่และแบบไดนามิก
| กำลังโหลดแบบคงที่ | กำลังโหลดแบบไดนามิก |
|---|---|
| การโหลดแบบคงที่ (Static loading) ใช้เมื่อคุณต้องการโหลดโปรแกรมของคุณแบบตายตัว จากนั้นในระหว่างการคอมไพล์ โปรแกรมทั้งหมดจะถูกเชื่อมโยงและคอมไพล์โดยไม่จำเป็นต้องใช้โมดูลภายนอกหรือโปรแกรมอื่นใดเพิ่มเติม | ในโปรแกรมที่โหลดแบบไดนามิก การอ้างอิงจะถูกจัดเตรียมไว้ และการโหลดจะเกิดขึ้นในขณะที่โปรแกรมกำลังทำงาน |
| ในขณะโหลด โปรแกรมทั้งหมดจะถูกโหลดเข้าสู่หน่วยความจำและเริ่มดำเนินการ | กิจวัตรของไลบรารีจะถูกโหลดลงในหน่วยความจำเมื่อจำเป็นในโปรแกรมเท่านั้น |
ความแตกต่างระหว่างการเชื่อมโยงแบบคงที่และแบบไดนามิก
ต่อไปนี้คือความแตกต่างหลักระหว่างการเชื่อมโยงแบบคงที่ (Static Linking) และการเชื่อมโยงแบบไดนามิก (Dynamic Linking):
| การเชื่อมโยงแบบคงที่ | การเชื่อมโยงแบบไดนามิก |
|---|---|
| การเชื่อมโยงแบบคงที่ (Static linking) ใช้เพื่อรวมโมดูลอื่นๆ ทั้งหมดที่โปรแกรมต้องการเข้าไว้ในโค้ดที่สามารถเรียกใช้งานได้เพียงไฟล์เดียว วิธีนี้ช่วยให้ระบบปฏิบัติการป้องกันการพึ่งพาซึ่งกันและกันในขณะรันไทม์ได้ | เมื่อใช้การเชื่อมโยงแบบไดนามิก โปรแกรมไม่จำเป็นต้องเชื่อมโยงโมดูลหรือไลบรารีจริงเข้ากับโปรแกรม แต่จะใช้การอ้างอิงถึงโมดูลแบบไดนามิกที่ให้มาในระหว่างการคอมไพล์และการเชื่อมโยงแทน |

