ระบบปฏิบัติการ - การจัดการหน่วยความจำ

การจัดการหน่วยความจำคือการทำงานของระบบปฏิบัติการที่จัดการหรือจัดการหน่วยความจำหลักและย้ายกระบวนการไปมาระหว่างหน่วยความจำหลักและดิสก์ระหว่างการดำเนินการ การจัดการหน่วยความจำจะติดตามตำแหน่งหน่วยความจำแต่ละตำแหน่งไม่ว่าจะถูกจัดสรรให้กับกระบวนการบางอย่างหรือไม่ก็ตาม ตรวจสอบจำนวนหน่วยความจำที่จะจัดสรรให้กับกระบวนการ เป็นการตัดสินใจว่ากระบวนการใดจะได้รับหน่วยความจำในช่วงเวลาใด มันติดตามเมื่อใดก็ตามที่หน่วยความจำบางส่วนได้รับอิสระหรือไม่ได้รับการจัดสรรและจะอัปเดตสถานะตามนั้น

บทช่วยสอนนี้จะสอนแนวคิดพื้นฐานที่เกี่ยวข้องกับการจัดการหน่วยความจำ

ประมวลผลพื้นที่ที่อยู่

พื้นที่แอดเดรสของกระบวนการคือชุดของที่อยู่แบบลอจิคัลที่กระบวนการอ้างอิงในโค้ดของมัน ตัวอย่างเช่นเมื่อใช้การกำหนดแอดเดรสแบบ 32 บิตแอดเดรสอาจอยู่ในช่วงตั้งแต่ 0 ถึง 0x7fffffff นั่นคือ 2 ^ 31 จำนวนที่เป็นไปได้สำหรับขนาดทางทฤษฎีทั้งหมด 2 กิกะไบต์

ระบบปฏิบัติการดูแลการแม็พโลจิคัลแอดเดรสกับฟิสิคัลแอดเดรสในช่วงเวลาของการจัดสรรหน่วยความจำให้กับโปรแกรม มีที่อยู่สามประเภทที่ใช้ในโปรแกรมก่อนและหลังการจัดสรรหน่วยความจำ -

SN ที่อยู่หน่วยความจำและคำอธิบาย
1

Symbolic addresses

ที่อยู่ที่ใช้ในซอร์สโค้ด ชื่อตัวแปรค่าคงที่และป้ายคำสั่งเป็นองค์ประกอบพื้นฐานของพื้นที่แอดเดรสเชิงสัญลักษณ์

2

Relative addresses

ในช่วงเวลาของการคอมไพเลอร์คอมไพเลอร์จะแปลงที่อยู่เชิงสัญลักษณ์เป็นที่อยู่แบบสัมพันธ์

3

Physical addresses

ตัวโหลดจะสร้างแอดเดรสเหล่านี้ในเวลาที่โหลดโปรแกรมลงในหน่วยความจำหลัก

ที่อยู่เสมือนและฟิสิคัลจะเหมือนกันในโครงร่างการผูกแอดเดรสเวลาคอมไพล์และเวลาโหลด ที่อยู่เสมือนและฟิสิคัลแตกต่างกันในรูปแบบการผูกแอดเดรสเวลาดำเนินการ

ชุดของที่อยู่ตรรกะทั้งหมดที่สร้างโดยโปรแกรมเรียกว่าไฟล์ logical address space. ชุดของที่อยู่ทางกายภาพทั้งหมดที่สอดคล้องกับที่อยู่ตรรกะเหล่านี้เรียกว่า aphysical address space.

การแม็พรันไทม์จากแอดเดรสเสมือนไปยังฟิสิคัลจะกระทำโดยหน่วยจัดการหน่วยความจำ (MMU) ซึ่งเป็นอุปกรณ์ฮาร์ดแวร์ MMU ใช้กลไกต่อไปนี้เพื่อแปลงที่อยู่เสมือนเป็นที่อยู่จริง

  • ค่าในรีจิสเตอร์ฐานจะถูกเพิ่มให้กับทุกแอดเดรสที่สร้างโดยกระบวนการของผู้ใช้ซึ่งถือว่าเป็นออฟเซ็ตเมื่อถูกส่งไปยังหน่วยความจำ ตัวอย่างเช่นถ้าค่ารีจิสเตอร์ฐานคือ 10000 ความพยายามของผู้ใช้ในการใช้ตำแหน่งแอดเดรส 100 จะถูกจัดสรรใหม่แบบไดนามิกไปยังตำแหน่ง 10100

  • โปรแกรมผู้ใช้เกี่ยวข้องกับที่อยู่เสมือน มันไม่เคยเห็นที่อยู่จริงทางกายภาพ

การโหลดแบบคงที่และแบบไดนามิก

ทางเลือกระหว่างการโหลดแบบคงที่หรือแบบไดนามิกจะต้องทำในช่วงเวลาของการพัฒนาโปรแกรมคอมพิวเตอร์ หากคุณต้องโหลดโปรแกรมของคุณแบบคงที่จากนั้นในช่วงเวลาของการคอมไพล์โปรแกรมทั้งหมดจะถูกคอมไพล์และเชื่อมโยงโดยไม่ทิ้งโปรแกรมภายนอกหรือการพึ่งพาโมดูลใด ๆ ตัวเชื่อมโยงรวมโปรแกรมอ็อบเจ็กต์เข้ากับโมดูลอ็อบเจ็กต์ที่จำเป็นอื่น ๆ ในโปรแกรมสัมบูรณ์ซึ่งรวมถึงที่อยู่แบบลอจิคัลด้วย

หากคุณกำลังเขียนโปรแกรมโหลดแบบไดนามิกคอมไพเลอร์ของคุณจะคอมไพล์โปรแกรมและสำหรับโมดูลทั้งหมดที่คุณต้องการรวมแบบไดนามิกจะให้เฉพาะการอ้างอิงเท่านั้นและงานที่เหลือจะดำเนินการในขณะดำเนินการ

ในขณะโหลดด้วย static loadingโปรแกรมสัมบูรณ์ (และข้อมูล) จะถูกโหลดลงในหน่วยความจำเพื่อให้การดำเนินการเริ่มต้นขึ้น

หากคุณกำลังใช้ dynamic loadingรูทีนไดนามิกของไลบรารีจะถูกเก็บไว้ในดิสก์ในรูปแบบที่สามารถเคลื่อนย้ายได้และจะถูกโหลดลงในหน่วยความจำเฉพาะเมื่อจำเป็นโดยโปรแกรมเท่านั้น

การเชื่อมโยงแบบคงที่และแบบไดนามิก

ดังที่ได้อธิบายไว้ข้างต้นเมื่อใช้การเชื่อมโยงแบบคงที่ตัวเชื่อมโยงจะรวมโมดูลอื่น ๆ ทั้งหมดที่จำเป็นโดยโปรแกรมไว้ในโปรแกรมปฏิบัติการเดียวเพื่อหลีกเลี่ยงการพึ่งพารันไทม์

เมื่อใช้การเชื่อมโยงแบบไดนามิกไม่จำเป็นต้องเชื่อมโยงโมดูลหรือไลบรารีจริงกับโปรแกรม แต่จะมีการอ้างอิงถึงโมดูลไดนามิกในช่วงเวลาของการคอมไพล์และการลิงก์ Dynamic Link Libraries (DLL) ใน Windows และ Shared Objects ใน Unix เป็นตัวอย่างที่ดีของไดนามิกไลบรารี

การแลกเปลี่ยน

การสลับเป็นกลไกที่สามารถเปลี่ยนกระบวนการออกจากหน่วยความจำหลักชั่วคราว (หรือย้าย) ไปยังหน่วยความจำสำรอง (ดิสก์) และทำให้หน่วยความจำนั้นพร้อมใช้งานสำหรับกระบวนการอื่น ๆ ในเวลาต่อมาระบบจะเปลี่ยนกระบวนการจากหน่วยความจำสำรองไปเป็นหน่วยความจำหลัก

แม้ว่าโดยปกติประสิทธิภาพจะได้รับผลกระทบจากกระบวนการแลกเปลี่ยน แต่ก็ช่วยในการรันกระบวนการหลาย ๆ อย่างและใหญ่ควบคู่กันและนั่นคือเหตุผล Swapping is also known as a technique for memory compaction.

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

สมมติว่ากระบวนการของผู้ใช้มีขนาด 2048KB และบนฮาร์ดดิสก์มาตรฐานที่การแลกเปลี่ยนจะเกิดขึ้นมีอัตราการถ่ายโอนข้อมูลประมาณ 1 MB ต่อวินาที การถ่ายโอนจริงของกระบวนการ 1000K ไปยังหรือจากหน่วยความจำจะใช้เวลา

2048KB / 1024KB per second
= 2 seconds
= 2000 milliseconds

ตอนนี้เมื่อพิจารณาถึงเวลาเข้าและออกจะใช้เวลาทั้งหมด 4000 มิลลิวินาทีบวกกับค่าใช้จ่ายอื่น ๆ ที่กระบวนการแข่งขันกันเพื่อฟื้นหน่วยความจำหลัก

การจัดสรรหน่วยความจำ

หน่วยความจำหลักมักจะมีสองพาร์ติชัน -

  • Low Memory - ระบบปฏิบัติการอยู่ในหน่วยความจำนี้

  • High Memory - กระบวนการของผู้ใช้ถูกเก็บไว้ในหน่วยความจำสูง

ระบบปฏิบัติการใช้กลไกการจัดสรรหน่วยความจำต่อไปนี้

SN การจัดสรรหน่วยความจำและคำอธิบาย
1

Single-partition allocation

ในการจัดสรรประเภทนี้โครงร่างการลงทะเบียนการย้ายตำแหน่งถูกใช้เพื่อปกป้องกระบวนการของผู้ใช้จากกันและจากการเปลี่ยนรหัสและข้อมูลของระบบปฏิบัติการ รีจิสเตอร์การย้ายตำแหน่งมีค่าของที่อยู่ทางกายภาพที่เล็กที่สุดในขณะที่ลิมิตรีจิสเตอร์มีช่วงของที่อยู่ตรรกะ ที่อยู่โลจิคัลแต่ละรายการต้องมีค่าน้อยกว่าการลงทะเบียนขีด จำกัด

2

Multiple-partition allocation

ในการจัดสรรประเภทนี้หน่วยความจำหลักจะแบ่งออกเป็นพาร์ติชันขนาดคงที่จำนวนหนึ่งซึ่งแต่ละพาร์ติชันควรมีเพียงกระบวนการเดียว เมื่อพาร์ติชันว่างกระบวนการจะถูกเลือกจากคิวอินพุตและโหลดลงในพาร์ติชันว่าง เมื่อกระบวนการสิ้นสุดลงพาร์ติชันจะพร้อมใช้งานสำหรับกระบวนการอื่น

การกระจายตัว

เมื่อกระบวนการโหลดและลบออกจากหน่วยความจำพื้นที่หน่วยความจำที่ว่างจะถูกแบ่งออกเป็นชิ้นเล็ก เกิดขึ้นหลังจากบางครั้งกระบวนการไม่สามารถจัดสรรให้กับบล็อกหน่วยความจำได้เนื่องจากขนาดที่เล็กและบล็อกหน่วยความจำยังคงไม่ได้ใช้ ปัญหานี้เรียกว่า Fragmentation

การกระจายตัวมีสองประเภท -

SN การแยกส่วนและคำอธิบาย
1

External fragmentation

พื้นที่หน่วยความจำทั้งหมดเพียงพอที่จะตอบสนองคำขอหรือเพื่อตั้งกระบวนการในนั้น แต่ไม่ติดกันจึงไม่สามารถใช้งานได้

2

Internal fragmentation

บล็อกหน่วยความจำที่กำหนดให้ประมวลผลมีขนาดใหญ่กว่า หน่วยความจำบางส่วนไม่ได้ใช้งานเนื่องจากกระบวนการอื่นไม่สามารถใช้งานได้

แผนภาพต่อไปนี้แสดงให้เห็นว่าการแยกส่วนสามารถทำให้หน่วยความจำสิ้นเปลืองได้อย่างไรและสามารถใช้เทคนิคการบีบอัดเพื่อสร้างหน่วยความจำที่ว่างมากขึ้นจากหน่วยความจำแบบแยกส่วน -

การแยกส่วนภายนอกสามารถลดลงได้โดยการบีบอัดหรือสับเนื้อหาหน่วยความจำเพื่อวางหน่วยความจำที่ว่างทั้งหมดไว้ด้วยกันในบล็อกขนาดใหญ่เดียว เพื่อให้การบดอัดเป็นไปได้การย้ายตำแหน่งควรเป็นแบบไดนามิก

การแยกส่วนภายในสามารถลดลงได้โดยการกำหนดพาร์ติชันที่เล็กที่สุด แต่มีขนาดใหญ่เพียงพอสำหรับกระบวนการ

เพจ

คอมพิวเตอร์สามารถจัดการกับหน่วยความจำได้มากกว่าจำนวนที่ติดตั้งบนระบบ หน่วยความจำพิเศษนี้เรียกว่าหน่วยความจำเสมือนจริงและเป็นส่วนของฮาร์ดที่ตั้งค่าเพื่อจำลองแรมของคอมพิวเตอร์ เทคนิคการเพจมีบทบาทสำคัญในการใช้หน่วยความจำเสมือน

เพจจิ้งเป็นเทคนิคการจัดการหน่วยความจำซึ่งพื้นที่แอดเดรสของกระบวนการถูกแบ่งออกเป็นบล็อกที่มีขนาดเท่ากันเรียกว่า pages(ขนาดกำลัง 2 ระหว่าง 512 ไบต์ถึง 8192 ไบต์) ขนาดของกระบวนการวัดเป็นจำนวนหน้า

ในทำนองเดียวกันหน่วยความจำหลักจะแบ่งออกเป็นหน่วยความจำ (กายภาพ) ขนาดคงที่ขนาดเล็กที่เรียกว่า frames และขนาดของเฟรมจะยังคงเท่ากับของเพจเพื่อให้ใช้หน่วยความจำหลักได้อย่างเหมาะสมที่สุดและเพื่อหลีกเลี่ยงการแยกส่วนภายนอก

การแปลที่อยู่

เรียกที่อยู่ของเพจ logical address และแสดงโดย page number และ offset.

Logical Address = Page number + page offset

ที่อยู่เฟรมถูกเรียก physical address และแสดงโดย frame number และ offset.

Physical Address = Frame number + page offset

โครงสร้างข้อมูลที่เรียกว่า page map table ใช้เพื่อติดตามความสัมพันธ์ระหว่างเพจของกระบวนการกับเฟรมในหน่วยความจำฟิสิคัล

เมื่อระบบจัดสรรเฟรมให้กับเพจใด ๆ ระบบจะแปลโลจิคัลแอดเดรสนี้เป็นฟิสิคัลแอดเดรสและสร้างรายการลงในตารางเพจเพื่อใช้ตลอดการทำงานของโปรแกรม

เมื่อต้องดำเนินการกระบวนการหน้าที่เกี่ยวข้องจะถูกโหลดลงในเฟรมหน่วยความจำที่มีอยู่ สมมติว่าคุณมีโปรแกรม 8Kb แต่หน่วยความจำของคุณรองรับได้เพียง 5Kb ในช่วงเวลาที่กำหนดจากนั้นแนวคิดการเพจจะกลายเป็นภาพ เมื่อคอมพิวเตอร์หมด RAM ระบบปฏิบัติการ (OS) จะย้ายหน้าที่ว่างหรือหน่วยความจำที่ไม่ต้องการไปยังหน่วยความจำรองเพื่อเพิ่ม RAM สำหรับกระบวนการอื่น ๆ และนำกลับมาเมื่อจำเป็นโดยโปรแกรม

กระบวนการนี้จะดำเนินต่อไปในระหว่างการดำเนินการทั้งหมดของโปรแกรมโดยที่ระบบปฏิบัติการจะลบเพจที่ไม่ได้ใช้งานออกจากหน่วยความจำหลักและเขียนลงในหน่วยความจำรองและนำกลับมาเมื่อโปรแกรมต้องการ

ข้อดีและข้อเสียของการเพจ

นี่คือรายการข้อดีและข้อเสียของการเพจ -

  • การเพจช่วยลดการกระจายตัวของภายนอก แต่ยังต้องทนทุกข์ทรมานจากการแยกส่วนภายใน

  • การเพจทำได้ง่ายและถือว่าเป็นเทคนิคการจัดการหน่วยความจำที่มีประสิทธิภาพ

  • เนื่องจากขนาดของหน้าและเฟรมเท่ากันการสลับจึงทำได้ง่ายมาก

  • ตารางหน้าต้องใช้พื้นที่หน่วยความจำเพิ่มเติมดังนั้นอาจไม่ดีสำหรับระบบที่มี RAM ขนาดเล็ก

การแบ่งกลุ่ม

การแบ่งกลุ่มเป็นเทคนิคการจัดการหน่วยความจำซึ่งแต่ละงานจะแบ่งออกเป็นหลายส่วนที่มีขนาดแตกต่างกันงานหนึ่งสำหรับแต่ละโมดูลที่มีชิ้นส่วนที่ทำหน้าที่เกี่ยวข้องกัน แต่ละส่วนเป็นพื้นที่ที่อยู่ตรรกะที่แตกต่างกันของโปรแกรม

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

การจัดการหน่วยความจำการแบ่งส่วนทำงานคล้ายกับการเพจมาก แต่ที่นี่เซ็กเมนต์มีความยาวตัวแปรโดยที่ในเพจเพจจิ้งมีขนาดคงที่

กลุ่มโปรแกรมประกอบด้วยฟังก์ชันหลักของโปรแกรมฟังก์ชันยูทิลิตี้โครงสร้างข้อมูลและอื่น ๆ ระบบปฏิบัติการรักษาไฟล์segment map tableสำหรับทุกกระบวนการและรายการบล็อกหน่วยความจำว่างพร้อมกับหมายเลขเซ็กเมนต์ขนาดและตำแหน่งหน่วยความจำที่เกี่ยวข้องในหน่วยความจำหลัก สำหรับแต่ละเซ็กเมนต์ตารางจะเก็บที่อยู่เริ่มต้นของเซ็กเมนต์และความยาวของเซ็กเมนต์ การอ้างอิงตำแหน่งหน่วยความจำประกอบด้วยค่าที่ระบุเซ็กเมนต์และค่าชดเชย