Memory Management

Download Report

Transcript Memory Management

Memory
Management
จัดทำโดย
นำงสำวสิ รินิภำ สิ งหเลิศ
493050416-4
Memory Management
memory management เป็ นกระบวนกำรจัดกำร
หน่ วยควำมจำ ให้ สำมำรถรองรับโปรแกรมทุกโปรแกรมที่ Run
ขึน้ มำ นักคอมพิวเตอร์ จงึ หำวิธีที่จะแก้ ปัญญำหน่ วยควำมจำไม่
เพียงพอ วิธีที่นิยมใช้ กค็ อื การทาหน่ วยความจาเสมือน (Virtual
Memory) กระบวนการจัดการหน่ วยความจา ทาได้ หลายวิธี
ดังนี้
1. กำรย้ ำยตำแหน่ ง (Relocation)
ระบบปฏิบตั ิการในปัจจุบนั ยอมให้โปรแกรมทางานพร้อม
กันได้หลายงานแบบ multiprogramming ซึ่งโปรเซสต่าง ๆ เข้า
ใช้งานหน่วยความจาร่ วมกัน จึงต้องมีการสลับโปรแกรมให้เข้า
ออกหน่วยความจาได้ และการเปลี่ยนแปลงค่าตาแหน่งใน
หน่วยความจาที่อา้ งถึงในโปรแกรม ถูกต้องตามตาแหน่งจริ งใน
หน่วยความจา
เช่ น
- โปรแกรม a อ้ างถึงตาแหน่ งที่ 1000 และโปรแกรม b ก็อ้างถึง
ตาแหน่ งที่ 1000 เช่ นกัน
ค่ ำ address แบ่ งได้ 2 ค่ ำ
- Absolute address หมายถึง ตาแหน่งจริ งของโปรเซสที่อยูใ่ น
หน่วยความจา
- Relative address หมายถึง ตาแหน่งของคาสัง่ หรื อโปรแกรมของ
โปรเซสหลังจากการ compile
2. กำรป้ องกันพืน้ ที่ (Protection)
ระบบปฏิบตั ิการควรสามารถป้ องกันโปรเซส จากการถูก
รบกวน ทั้งทางตรง และทางอ้อม ดังนั้นก่อนให้โปรเซสใดเข้า
ครอบครองหน่วยความจา จะต้องมีการตรวจสอบก่อน และใช้เวลา
ค้นหา เพื่อตรวจสอบตลอดเวลา
3. กำรใช้ พนื้ ที่ร่วมกัน (Sharing)
การป้ องกันเพียงอย่างเดียว อาจทาให้การใช้ทรัพยากรไม่คุม้
จึงต้องมีการจัดสรรให้ใช้พ้นื ที่ของหน่วยความจาร่ วมกันอย่าง
ยืดหยุน่
4. กำรจัดกำรแบ่ งโปรแกรมย่ อย (Logical organization)
ระบบปฏิบตั ิการจะแบ่งโปรแกรมเป็ นโปรแกรมหลัก และ
โปรแกรมย่อย โดยนาเฉพาะโปรแกรมหลักลงในหน่วยความจา
แต่นาโปรแกรมย่อยลงหน่วยความจาเฉพาะเมื่อมีการเรี ยกใช้
เท่านั้น
ประโยชน์ ที่ได้ จากการจัดการแบ่ งโปรแกรมโปรแกรมย่ อย มีดังนี ้
1. โปรแกรมย่อยที่ไม่ได้ใช้งาน จะไม่นาลงหน่วยความจาหลัก
2. โปรแกรมย่อยแต่ละตัวสามารถถูกเขียน และแปลแยกกันได้
3. โปรแกรมย่อยแต่ละตัวมีระดับการป้ องกันแตกต่างกัน
4. โปรแกรมหลักสามารถเรี ยกใช้โปรแกรมย่อยเหล่านี้ร่วมกันได้
5. กำรจัดกำรแบ่ งทำงกำยภำพ (Physical organization)
หน่วยความจาแบ่งเป็ น 2 ส่ วนคือ หน่ วยความจาหลัก และ
หน่ วยความจาสารอง ลักษณะของหน่วยความจาหลัก คือ มีราคา
แพง ทางานได้ เร็ ว แต่ เลือนหายได้ ในการทางานจริ ง จึงต้องมี
การเคลื่อนย้ายทางกายภาพระหว่างหน่วยความจาทั้ง 2
ตลอดเวลา ซึ่งเป็ นหน้าที่ของระบบที่ตอ้ งจัดสรรให้ให้
สอดคล้องกับการทางานแบบ multiprogramming
หน่ วยควำมจำหลัก (Main memory)
การจัดการหน่วยความจามีหลายระบบ เริ่ มจากแบบไม่
ซับซ้อน ไปถึงซับซ้อน แบบไม่ซบั ซ้อน จะไม่ถูกนามาใช้งาน
ในระบบปฏิบตั ิการปั จจุบนั แต่อาจใช้ในคอมพิวเตอร์ ขนาดเล็ก
อยู่ การเรี ยนรู้เรื่ องนี้อาจ นาไปประยุกต์ในการพัฒนางานด้าน
software อื่น ๆ ได้
- ระบบโปรแกรมเดียว (Monoprogramming)
• เป็ นวิธีการจัดการที่ง่ายที่สุด โดยกาหนดเพียง 1 โปรแกรม ให้ทางานใน
หน่วยความจาเพียงโปรแกรมเดียว
- ระบบหลำยโปรแกรมทีก่ ำหนดขนำดพำร์ ติชั่นคงที่
(Multiprogramming with fixed partition)
• ปัจจุบนั ระบบปฏิบตั ิการยอมให้มีหลายโปรเซสทางานพร้อมกันได้
หมายความว่าขณะที่โปรเซสหนึ่งทาเสร็ จ อีกโปรเซสที่รอ ก็เข้าใช้
หน่วยความจาทันที โดยแบ่งหน่วยความจาออกเป็ น partition การแบ่ง
เห็นแต่ละ partition แบบตายตัว มีจุดบกพร่ อง จึงมีการจัดการ
หน่วยความจาแบบ FCFS : first come first serve การจัดการแบบนี้ยอ่ มมี
ปัญหา จึงเป็ นหน้าที่ของระบบปฏิบตั ิการ ที่ตอ้ งจัดการ
- ระบบทีก่ ำหนดขนำดของพำร์ ติชั่นให้ เปลีย่ นแปลงได้
(Dynamic partition)
• เพื่อแก้ปัญหาของการกาหนดแบบคงที่ จึงออกแบบการกาหนด
partition แบบเปลี่ยนแปลงได้ ซึ่งมีความซับซ้อน มากขึ้น ตาม
โปรเซสที่เข้าใช้หน่วยความจา
- กำรจัดกำรแบบระบบบัดดี้ (Buddy system)
• ระบบจัดการหน่วยความจาแบบคงที่ และเปลี่ยนแปลงได้ อาจมี
ข้อจากัดเรื่ องการรองรับจานวนโปรเซส และใช้พ้นื ที่ไม่เต็ม
ประสิ ทธิ ภาพได้ ส่ วนการแบ่งแบบเปลี่ยนแปลงได้กม็ ีความ
ซับซ้อนในทางปฏิบตั ิ และใช้ทรัพยากร จึงมีการผสมระหว่าง 2
ระบบนี้เข้าด้วยกัน
กำรแบ่ งเป็ นหน้ ำ (Paging)
• ระบบที่ใช้หน่วยความจาเสมือน (Virtual memory) มักใช้เทคนิคที่
เรี ยกว่า การแบ่งหน้า หรื อเพจจิง(Paging) เพื่อเชื่อมระหว่างตาแหน่ง
ทางตรรก กับเลขของเฟรมในหน่วยความจาหลัก
1. ตารางหน้า (Page table) หมายถึงการรับค่าตาแหน่งทางตรรก
เป็ นค่านาเข้า แล้วหาเลขของเฟรมในหน่วยความจาหลักออกมา
2. บัฟเฟอร์คน้ หาที่อยู่ (TLB : Translation lookaside buffer) ทุกครั้งที่
เรี ยกใช้หน่วยความจาเสมือน ย่อมเรี ยกใช้หน่วยความจาหลัก 2 ครั้ง คือ การ
อ่านตารางหน้า และอ่านข้อมูลจริ งจากหน่วยความจาหลัก ดังนั้นการทางาน
แบบนี้จึงใช้เวลาถึง 2 เท่า
กำรสั บเปลีย่ นหน้ ำ (Page replacement algorithms)
1. วิธีสบั เปลี่ยนแบบมาก่อน-ออกก่อน (FIFO : First in first out algorithm)
2. วิธีสบั เปลี่ยนแบบให้โอกาสครั้งที่สอง (Second change page
replacement algorithm)
3. วิธีสับเปลี่ยนแบบวงรอบนาฬิกา (Clock page replacement algorithm)
4. วิธีสบั เปลี่ยนแบบที่ดีสุด (Optimal page replacement algorithm)
5. การสับเปลี่ยนแบบที่ไม่ได้ใช้งานออกก่อน (NRU : Not recently used)
6. การสับเปลี่ยนแบบใช้งานน้อยที่สุดออกก่อน (LRU : Least recently
used) ใช้ขอ้ มูลในอดีตประมาณการณ์อนาคต
กำรแบ่ งเป็ นเซ็กเมนต์ (Segmentation)
การแบ่งหน้าจะแบ่งให้มีขนาดเท่ากัน แต่การแบ่งเป็ นเซ็กเมนต์จะ
แบ่งโปรแกรมออกเป็ นส่ วน ๆ ไม่เท่ากัน และมีการใช้ตาแหน่งทางตรรก
อ้างอิงตาแหน่งจริ งเช่นกัน และมีการใช้ขอ้ มูล 2 ส่ วนคือ เลขที่เซ็กเมนต์
และระยะเริ่ มต้นของเซ็กเมนต์(Offset) สาหรับผลของการแบ่งเซ็กเมนต์
ทาให้เกิดชิ้นส่ วนไม่เท่ากัน (Dynamic partitioning) ซึ่งลดปั ญหาการ
สูญเสี ยพื้นที่ (Internal fragmentation )
1. การนาวิธีการแบ่งเป็ นเซ็กเมนต์มาใช้ในหน่วยความจาเสมือน
2. การรวมวิธีการแบ่งเป็ นหน้ากับการแบ่งเป็ นเซ็กเมนต์เข้าด้วยกัน