ระบบปฏิบัติการ - การจัดการหน่วยความจำ
การจัดการหน่วยความจำคือการทำงานของระบบปฏิบัติการที่จัดการหรือจัดการหน่วยความจำหลักและย้ายกระบวนการไปมาระหว่างหน่วยความจำหลักและดิสก์ระหว่างการดำเนินการ การจัดการหน่วยความจำจะติดตามตำแหน่งหน่วยความจำแต่ละตำแหน่งไม่ว่าจะถูกจัดสรรให้กับกระบวนการบางอย่างหรือไม่ก็ตาม ตรวจสอบจำนวนหน่วยความจำที่จะจัดสรรให้กับกระบวนการ เป็นการตัดสินใจว่ากระบวนการใดจะได้รับหน่วยความจำในช่วงเวลาใด มันติดตามเมื่อใดก็ตามที่หน่วยความจำบางส่วนได้รับอิสระหรือไม่ได้รับการจัดสรรและจะอัปเดตสถานะตามนั้น
บทช่วยสอนนี้จะสอนแนวคิดพื้นฐานที่เกี่ยวข้องกับการจัดการหน่วยความจำ
ประมวลผลพื้นที่ที่อยู่
พื้นที่แอดเดรสของกระบวนการคือชุดของที่อยู่แบบลอจิคัลที่กระบวนการอ้างอิงในโค้ดของมัน ตัวอย่างเช่นเมื่อใช้การกำหนดแอดเดรสแบบ 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สำหรับทุกกระบวนการและรายการบล็อกหน่วยความจำว่างพร้อมกับหมายเลขเซ็กเมนต์ขนาดและตำแหน่งหน่วยความจำที่เกี่ยวข้องในหน่วยความจำหลัก สำหรับแต่ละเซ็กเมนต์ตารางจะเก็บที่อยู่เริ่มต้นของเซ็กเมนต์และความยาวของเซ็กเมนต์ การอ้างอิงตำแหน่งหน่วยความจำประกอบด้วยค่าที่ระบุเซ็กเมนต์และค่าชดเชย