More Related Content Similar to Slide10 memory management Similar to Slide10 memory management (20) Slide10 memory management6. การจัดการหน่วยความจา (Memory Management)
หน่วยความจาหลักเป็นศูนย์กลางของการทางานต่าง ๆ
ของระบบคอมพิวเตอร์ในปัจจุบัน
หน่วยความจาหลักคือพื้นที่เก็บข้อมูลขนาดใหญ่
ประกอบด้วย
พื้นที่เก็บข้อมูลย่อย มีหน่วยเป็น Byte
ตาแหน่งหรือที่อยู่ของพื้นที่ย่อย (Address)
Memory
1
2
3
7. การจัดการหน่วยความจา (Memory Management)….ต่อ
ส่วนของ OS ที่ทาหน้าที่จัดการกับหน่วยความจาได้แก่ ตัว
จัดการหน่วยความจา (Memory Manager) ซึ่งมีหน้าที่ต่าง ๆ
ดังนี้
ตรวจสอบว่าส่วนใดของหน่วยความจาที่กาลังถูกใช้งาน ส่วนใดว่าง
จัดหน่วยความจาให้กับงานที่ทางาน
ส่งหน่วยความจาคืนสู่ระบบเมื่องานเสร็จ
จัดการสลับหน่วยความจาหลัก กับพื้นที่ฮาร์ดดิสก์ เมื่อ
หน่วยความจาหลักมีขนาดเล็กเกินไปที่จะให้งานทางานได้
9. การจัดการหน่วยความจา
(MEMORY MANAGEMENT) … ต่อ
•การจัดสรรหน่วยความจาแบบต่อเนื่อง
•โปรแกรมหนึ่ง ๆ จะถูกโหลดลงหน่วยความจาได้ก็ต่อเมื่อ
มีหน่วยความจาขนาดใหญ่ที่จะวางโค้ดของโปรแกรมนั้น
ลงไปทั้งโปรแกรม
•โปรแกรมจะอยู่ติดต่อกันในหน่วยความจาหลักเป็นผืน
เดียวกัน ไม่มีส่วนหนึ่งของโปรแกรมแยกจากกัน
•ถ้ามีพื้นที่ว่างไม่พอก็จะรอจนกว่าจะมีหน่วยความจาว่าง
เหลือพอ
10. การจัดการหน่วยความจา
(MEMORY MANAGEMENT) … ต่อ
•การจัดสรรหน่วยความจาแบบไม่ต่อเนื่อง
•โปรแกรมจะถูกแบ่งออกเป็นกลุ่มหรือส่วนย่อย ๆ
หลาย ๆ ส่วน เมื่อรันโปรแกรมจะโหลดลง
หน่วยความจาที่ไหนก็ได้ที่มีที่ว่างพอ แต่ละส่วนไม่
จาเป็นต้องเรียงต่อเป็นผืนเดียว
10
12. ระบบโปรแกรมเดี่ยว
Monoprogramming or Single program
เป็นวิธีการจัดการหน่วยความจาที่ง่ายที่สุด เนื่องจากจะมีโปรแกรม
เพียง 1 โปรแกรมทางานในขณะใดขณะหนึ่ง
ดังนั้นการใช้งานหน่วยความจาจะมีเพียงโปรแกรมนั้น ๆ กับ
ระบบปฏิบัติการเท่านั้น ดังรูป OS
โปรแกรมของ
ผู้ใช้
ว่าง
14. ระบบโปรแกรมเดี่ยว
Monoprogramming or Single program … ต่อ
จากรูปเราอาจแบ่งหน่วยความจาหลักออกเป็น 2 ส่วนคือ
ส่วนของ OS เป็นหน่วยความจาที่ถูกครอบครองโดย OS
ส่วนของผู้ใช้ (User area) คือส่วนที่สามารถนาโปรแกรมของ
ผู้ใช้ลงไปวางได้ ซึ่งก็คือหน่วยความจาหลักทั้งหมดที่เหลือจาก
ส่วนของ OS
15. 15
ระบบโปรแกรมเดี่ยว
Monoprogramming or Single program … ต่อ
เมื่อหน่วยความจาหลักถูกแบ่งออกเป็น 2 ส่วนแล้ว ตัว
OS จึงจาเป็นต้องมีวิธีการป้องกันไม่ให้โปรแกรมของ
ผู้ใช้รุกล้าเข้ามาในส่วนของ OS
ถ้า OS ปล่อยให้ผู้ใช้เข้ามาใช้หน่วยความจาที่ OS ใช้อยู่
โปรแกรมของผู้ใช้อาจทาลายตัวโปรแกรมของ OS
เสียหายจนระบบทางานไม่ได้
16. ระบบโปรแกรมเดี่ยว
MONOPROGRAMMING OR SINGLE PROGRAM … ต่อ
•วิธีที่นิยมในการป้องกันการรุกล้าได้แก่การสร้างรีจีสเตอร์ขึ้นมาในซีพียู
เรียกว่ารีจีสเตอร์ขอบเขต (BOUNDARY REGISTER)
•รีจีสเตอร์จะทาหน้าที่เก็บค่าแอสเดรสที่เป็นรอยต่อระหว่างส่วนของ OS
และส่วนของผู้ใช้
18. 18
ระบบหลายโปรแกรม Multiple program
การแบ่งหน่วยความจาสาหรับระบบหลาย
โปรแกรมมี 2 แบบ
การแบ่งหน่วยความจาขนาดคงที่ (Fixed partition
multi-programming)
การแบ่งหน่วยความจาขนาดไม่คงที่ (Variable
partition multi-programming)
21. การแปลงและโหลดด้วยค่าสัมบูรณ์
Absolute translation and loading
ค่าแอดเดรสสัมบูรณ์ คือค่าแอดเดรสจริง ๆ ในหน่วยความจา
หน่วยความจาหลักจะถูกแบ่งออกเป็นส่วนที่มีขนาดคงที่ และ
แต่ละส่วนจะมีแอดเดรสที่เป็นขอบเขตบน และล่างอยู่ ดังนั้น
เมื่องานต้องการใช้หน่วยความจาหลักในส่วนย่อยใดก็ตาม
OS จะต้องกาหนดแอดเดรสจริงให้กับงาน เพื่อให้งานเข้าไป
ครอบครองหน่วยความจาหลักในส่วนที่ถูกต้อง
นิยมใช้กับคิวงานที่เป็นแบบ Multiple queues
23. การแปลงและโหลดด้วยค่าสัมบูรณ์
Absolute translation and loading … ต่อ
ข้อเสียของวิธีนี้คือ ถ้างานพร้อมจะรันแล้ว แต่ส่วนของ
หน่วยความจาหลักที่ต้องการ กาลังถูกใช้โดยงานอื่น ก็ต้องรอจนกว่า
งานที่ใช้หน่วยความจาที่ต้องการทางานเสร็จสิ้น ถึงแม้ว่าส่วนอื่น ๆ จะ
ว่างอยู่ก็ตาม ทาให้สูญเสียหน่วยความจาในส่วนอื่นโดยเปล่า
ประโยชน์
ถ้างานส่วนใหญ่เป็นงานที่มีขนาดเล็ก คิวของส่วนที่มีขนาดเล็กจะเต็ม
อยู่ตลอดเวลา ในขณะที่คิวของส่วนที่มีขนาดใหญ่ยังคงว่างอยู่ ทาให้
งานที่มีขนาดเล็กจะต้องรอในคิว ในขณะที่หน่วยความจาหลักยัง
เหลืออยู่มาก
24. การแปลงและโหลดด้วยค่าสัมพัทธ์
Relocatable translation and loading
เพื่อแก้ปัญหาที่เกิดขึ้นในการแปลงและโหลดด้วยค่าสัมบูรณ์ จึงทาให้เกิด
วิธีการที่เรียกว่าการแปลงและโหลดด้วยค่าสัมพัทธ์
งานจะถูกแปลงให้ได้แอดเดรสเป็นค่าสัมพัทธ์กับจุดเริ่มต้นของงาน จุดเริ่มต้น
ของงานก็คือแอดเดรส 0 นั่นเอง
ถ้างานมีขนาด 100 byte เมื่องานถูกโหลดลงในหน่วยความจาหลักจะไม่รอให้
แอดเดรส 0 ถึง 100 ว่าง แต่จะโหลดลงส่วนที่มีขนาดมากกว่าหรือเท่ากับขนาด
ของงาน
ดังนั้นคิวงานจึงไม่จาเป็นต้องเป็น Multiple Queues ใช้เป็น Single Queues
25. การแปลงและโหลดด้วยค่าสัมพัทธ์
Relocatable translation and loading … ต่อ
วิธีการจัดคิวใช้วิธี FCFS คืองานใดมาก่อนก็มีสิทธิ์โหลดลง
ในส่วนของหน่วยความจาหลักที่ชี้อยู่
แต่ถ้าขนาดของงานมีขนาดใหญ่กว่าส่วนของหน่วยความจา
หลักที่ชี้อยู่ OS จะข้ามงานนั้นไปทาให้กับงานอื่น ๆ ที่อยู่ถัดไป
สาหรับงานที่ถูกข้ามก็จะต้องคอยอยู่ในคิว ซึ่ง OS จะกาหนด
ว่างานจะถูกมองข้ามได้ไม่เกินจานวนครั้งที่กาหนด ถ้าเกิน
ระบบจะต้องเลือกงานนั้นเข้าไปทางาน
27. การแปลงและโหลดด้วยค่าสัมพัทธ์
RELOCATABLE TRANSLATION AND LOADING … ต่อ
• การป้องกัน OS ในระบบหลายโปรแกรมประเภทแบ่งหน่วยความจานิยมใช้รีจีสเตอร์
ขอบเขตหลาย ๆ ตัว ส่วนย่อยแต่ละส่วนจะใช้รีจีสเตอร์ขอบเขต 2 ตัว ในการแยกแยะส่วนแต่
ละส่วน เรียกว่ารีจีสเตอร์ขอบเขตบน (HIGH BOUNDARY REGISTER) และรีจีสเตอร์
ขอบเขตล่าง (LOW BOUNDARY REGISTER)
•โปรแกรมของผู้ใช้สามารถข้ามเข้าไปในขอบเขตของ OS ได้โดยผ่านทางคาสั่งเรียกระบบ
30. การแบ่งหน่วยความจาขนาดไม่คงที่
Variable partition multi-programming
จากปัญหาที่พบของการทางานของการแบ่งหน่วยความจา
ขนาดคงที่ ผู้ออกแบบ OS จึงได้ทาการปรับปรุงการแบ่ง
หน่วยความจาให้ดีขึ้น
โดยระบบจะกาหนดให้มีการแบ่งหน่วยความจาตามความ
ต้องการของงาน และไม่มีการจากัดขอบเขตของ
หน่วยความจาหลัก
การแบ่งหน่วยความจาแบบนี้เรียกว่า การแบ่ง
หน่วยความจาขนาดไม่คงที่
37. การแบ่งหน่วยความจาขนาดไม่คงที่
Variable partition multi-programming … ต่อ
จากรูปจะเห็นว่าเมื่อระบบทางานไปได้สักระยะหนึ่ง เราจะพบ
ช่องว่างเกิดขึ้นอย่างมากมายในหน่วยความจาหลัก ซึ่งจะทา
ให้การใช้งานหน่วยความจาหลักมีประสิทธิภาพลดลง
เราเรียกช่องว่างเล็ก ๆ เหล่านี้ว่า การแตกกระจายภายนอก
(External fragmentation)
ดังนั้นการที่จะวางโปรเซสลงในหน่วยความจาหลักนั้นจะต้อง
มีการตัดสินใจที่ดี ซึ่ง OS เรียกว่า การจัดยุทธวิธีการวาง
43. การรวมโฮล (Coalescing Holes)
เมื่อมีช่องว่าง 2 ช่องติดกันในหน่วยความจา OS สามารถที่จะรวม
ช่องว่างทั้ง 2 นี้เป็นช่องว่างขนาดใหญ่ช่องเดียว ซึ่งเราเรียกว่า การ
รวมโฮล (Coalescing Holes) แสดงดังรูป
OS
โปรแกรมอื่น ๆ
2 K
โปรแกรม A 5 K
โปรแกรมอื่น ๆ
OS
โปรแกรมอื่น ๆ
2 K
5 K
โปรแกรมอื่น ๆ
โปรแกรม
A จบ
OS
โปรแกรมอื่น ๆ
7 K
โปรแกรมอื่น ๆ
44. การบีบอัดหน่วยความจา (Storage Compaction)
ถึงแม้ว่าจะมีการรวมโฮลเกิดขึ้น แต่ช่องว่างที่ไม่อยู่ติดกันก็ยังคงมีกระจายอยู่ใน
หน่วยความจา
ซึ่งการมีช่องว่างขนาดเล็ก ๆ หลายช่อง เมื่อนามารวมกันก็จะทาให้เกิดช่องว่าง
ขนาดใหญ่ซึ่งมากพอสาหรับ 1 โปรเซสได้
OS จะต้องสามารถที่จะทาการบีบอัดหน่วยความจา โดยย้ายเอาหน่วยความจาที่
ถูกครอบครองโดยโปรเซสต่าง ๆ ไปอยู่ชิดติดกันที่ด้านใดด้านหนึ่ง ซึ่งจะทาให้เกิด
ช่องว่างใหญ่เพียงช่องเดียว จึงทาให้โปรเซสอื่น ๆ สามารถเข้ามาใช้หน่วยความจาที่
เหลือได้
46. การบีบอัดหน่วยความจา (Storage Compaction) … ต่อ
ข้อเสียของการบีบอัดหน่วยความจา
ระบบจะต้องหยุดการทางานของโปรเซสทุกโปรเซสไว้
ชั่วขณะหนึ่งเพื่อที่จะทาการบีบอัด
ซึ่งอาจจะต้องใช้เวลามากทาให้การทางานของระบบ
ช้าลง โดยเฉพาะกับการทางานในระบบโต้ตอบ
(Interactive)
47. ระบบหลายโปรแกรมแบบสลับหน่วยความจา
(MULTIPROGRAMMING WITH STORAGE SWAPPING)
•เป็นการสลับโปรแกรมไปสู่หน่วยความจาสารองเมื่อโปรแกรมไม่ต้องการหน่วยความจาหลัก
เรียกว่าการสลับออก (SWAPPED OUT) และนาโปรแกรมเข้ามาใช้หน่วยความจาใหม่
เมื่อต้องการใช้หน่วยความจาเรียกว่าการสลับเข้า (SWAPPED IN)
•โปรแกรมจะอยู่ในหน่วยความจาและถูกสลับออกเมื่อเกิดเหตุการณ์ 3 กรณี คือ
•โปรแกรมจบ
•โปรแกรมต้องการใช้งานอินพุต-เอาต์พุต
•หมดเวลาควอนตัม
54. แบบฝึกหัด
4 .การรวมโฮล (COALESCING HOLES) มีวิธีการทางานอย่างไร จงอธิบาย
5. การแตกกระจาย (FRAGMENTATION) เกิดขึ้นได้อย่างไร จงอธิบาย
6. การจะจัดว่าโปรเซสควรจะวางไว้ในช่องว่างใดในหน่วยความจามีหลักการทางานอย่างไร จงอธิบาย
7. การแปลงและโหลดด้วยค่าสัมบูรณ์ และการแปลงและโหลดด้วยค่าสัมพัทธ์ แตกต่างกันอย่างไร
8. การป้องกันไม่ให้โปรแกรมล่วงล้ามายังส่วนของ OS ภายในหน่วยความจา ใช้วิธีการใด
9. การบีบอัดหน่วยความจา (STORAGE COMPACTION) มีหลักการทางานอย่างไร
10. HOLES เกิดขึ้นได้อย่างไร อธิบายมาพอเข้าใจ
54