1 / 85

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

การจัดการหน่วยความจำ Memory Management. นงลักษณ์ พรมทอง และวิเชษฐ์ พลายมาศ. Learning Objectives. เพื่อศึกษาแนวคิดพื้นฐานเกี่ยวกับการประสานเวลาของซีพียู ปัญหาและวิธีการแก้ไขเกี่ยวกับการประสานเวลา เพื่อเข้าใจเกี่ยวกับการจัดการหน่วยความจำวิธีต่างๆ และขั้นตอนวิธีของการจัดการหน่วยความจำ

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. การจัดการหน่วยความจำMemory Management นงลักษณ์ พรมทอง และวิเชษฐ์ พลายมาศ

  2. Learning Objectives • เพื่อศึกษาแนวคิดพื้นฐานเกี่ยวกับการประสานเวลาของซีพียู ปัญหาและวิธีการแก้ไขเกี่ยวกับการประสานเวลา • เพื่อเข้าใจเกี่ยวกับการจัดการหน่วยความจำวิธีต่างๆ และขั้นตอนวิธีของการจัดการหน่วยความจำ • เพื่อวิเคราะห์เปรียบเทียบข้อดีข้อเสียของวิธีการจัดการวิธีต่างๆ

  3. Agenda • แนวคิดพื้นฐาน (Background) • การสับเปลี่ยน (Swapping) • การจัดสรรหน่วยความจำแบบพื้นที่ติดกัน (Contiguous Allocation) • การสลับหน้า (Paging) • การแบ่งส่วนหรือเซ็กเมนต์ (Segmentation) • การผสมผสานหน่วยความจำการสลับหน้าและการแบ่งส่วน (Segmentation with Paging)

  4. แนวคิดพื้นฐาน Background • คำสั่งที่จะถูกดำเนินการได้โดยซีพียู จะต้องถูกดึงมาและเก็บที่ตำแหน่งในหน่วยความจำ รูปแบบการทำงานของรอบคำสั่งเครื่องและการปฏิบัติงานตามคำสั่ง (instruction-execution cycle) จะมีขั้นตอนการทำงาน ดังนี้ • ไปนำมา (fetch) คือการเริ่มต้นการทำงานซึ่งระบบจะทำการดึงคำสั่งแรกจากหน่วยความจำ • ถอดรหัส (decode) คือการทำงานต่อจากขั้นตอนที่ 1 โดยนำคำสั่งนี้ไปทำการถอดรหัส ซึ่งอาจจะได้ตัวดำเนินการหรือข้อมูล เพื่อใช้กับคำสั่งถัดไป • กระทำการ (execution) คือการทำงานต่อจากขั้นตอนที่ 2 ซึ่งหลังจากนั้นคำสั่งจะทำงานตามตัวดำเนินการที่ได้ • จัดเก็บ (store) ผลลัพธ์จะถูกเก็บกลับไปในหน่วยความจำหลักต่อไป

  5. การกำหนดตำแหน่งBackground (2) • โปรแกรมต้องนำรหัสเครื่อง (machine code) จากหน่วยเก็บเข้ามาไว้ในหน่วยความจำเพื่อให้พร้อมดำเนินการในรูปของกระบวนการ • แถวคอยขาเข้า (Input queue) • การสะสมของกระบวนการในดิสก์ที่รอยคอยอยู่ เพื่อที่จะเข้ามาทำงานในหน่วยความจำหลักเพื่อดำเนินการโปรแกรม • เลือกกระบวนการในแถวคอยขาเข้าและดึงกระบวนการไปไว้ในหน่วยความจำหลักแล้วกระบวนการจะทำงานเข้าถึงคำสั่งและข้อมูล • หลังจากนั้น กระบวนการจะออกจากหน่วยความจำหลัก ทำให้หน่วยความจำหลักว่างลงสำหรับกระบวนการใหม่เข้ามาใช้งานได้

  6. การกำหนดตำแหน่งBackground (3) ภาพที่ 6.1 การกำหนดเลขที่อยู่ให้กับกระบวนการในหน่วยความจำหลัก

  7. การนำคำสั่งและข้อมูลเข้าสู่หน่วยความจำBackground (3) • โปรแกรมผู้ใช้จะต้องทำงานหลายขั้นตอนจนกว่าจะถูกดำเนินการ (run) • การกำหนดเลขที่อยู่ของโปรแกรม (คำสั่งและข้อมูล) เพื่อแปลงไปเป็นเลขที่อยู่ในหน่วยความจำหลัก มีขั้นตอนดังนี้ • ช่วงเวลาแปล (Compile time) • ถ้ารู้จักตำแหน่งหน่วยความจำไว้แล้ว สามารถแปลเลขที่อยู่สัมบูรณ์ (absolute address) ซึ่งเป็นตำแหน่งจริงในหน่วยความจำหลักได้เลย แต่ถ้าตำแหน่งเริ่มต้นเปลี่ยน ก็ต้องเริ่มแปลใหม่ • ช่วงเวลาบรรจุ (Load time) • ถ้ายังไม่รู้ว่าโปรแกรมจะทำงาน ณ เลขที่อยู่ใดในช่วงเวลาขณะที่แปลโปรแกรม จะต้องแปลเลขที่อยู่เป็นแบบย้ายได้ (relocatable) • ช่วงเวลากระทำการ (Execution time) • การผูกเลขที่อยู่จะถูกหน่วงเวลาไว้จนกระทั่งถึงช่วงเวลาดำเนินการ กระบวนการมีการย้ายตลอดการทำงานจากหน่วยความจำหลักตอนหนึ่งไปอีกตอนหนึ่ง • การกำหนดตำแหน่งต้องมีการหน่วงเวลาจนกระทั่งมีการทำงานจริง (run time) จะต้องมีฮาร์ดแวร์เฉพาะเตรียมไว้สำหรับการทำงานลักษณะนี้ด้วย (e.g., base and limit registers)

  8. ภาพที่ 6.2 ขั้นตอนต่างๆ ในการเรียกใช้งานของโปรแกรมผู้ใช้

  9. พื้นที่ว่างของเลขที่อยู่แบบตรรกะและแบบกายภาพLogical vs. Physical Address Space • แนวคิดเกี่ยวกับพื้นที่แบบตรรกะและแบบกายภาพ ถือเป็นแกนกลางของการจัดการหน่วยความจำ • เลขที่อยู่แบบตรรกะ (Logical address) • เลขที่อยู่ที่ถูกสร้างขึ้นโดยซีพียู บางทีเรียกว่า เลขที่อยู่เสมือน (virtual address) • เลขที่อยู่แบบกายภาพ (Physical address) • เลขที่อยู่ซึ่งถูกมองเห็นได้โดยหน่วยความจำ ถูกบรรจุเข้าที่เรจิสเตอร์เลขที่อยู่ของหน่วยความจำ (memory-address register) • ในช่วงเวลาแปลและช่วงเวลาบรรจุ จะมีเลขที่อยู่แบบตรรกะและแบบกายภาพเหมือนกัน แต่ในช่วงเวลากระทำการ เลขที่อยู่ของทั้งสองแบบจะแตกต่างกัน • กลุ่มของเลขที่อยู่แบบตรรกะทั้งหมดที่ถูกสร้างโดยโปรแกรมเรียกว่า พื้นที่ว่างของเลขที่อยู่แบบตรรกะ (logical address space) • กลุ่มของเลขที่อยู่แบบกายภาพที่สอดคล้องกับเลขที่อยู่แบบตรรกะเหล่านั้นจะเรียกว่า พื้นที่ว่างของเลขที่อยู่แบบกายภาพ (physical address space)

  10. หน่วยจัดการหน่วยความจำMemory-Management Unit (MMU) • เมื่อบรรจุกระบวนการเข้ามาในหน่วยความจำ Logical Address จะต้องถูกแปลงไปเป็น Physical Address เรียกวิธีการนี้ว่าการย้ายเลขที่อยู่ (Relocation) • ฮาร์ดแวร์ทำหน้าที่แปลงเลขที่อยู่เสมือนให้เป็นเลขที่อยู่จริงแบบกายภาพคือ MMU • เรจิสเตอร์ฐานทำหน้าที่เป็นเรจิสเตอร์สำหรับย้ายเลขที่อยู่ (relocate register) เพื่อใช้อ้างอิงเลขที่อยู่ในหน่วยความจำทุกครั้ง ต้องนำค่าอ้างอิงที่ได้มาบวกกับค่าเรจิสเตอร์ฐานเสียก่อนจึงจะได้เลขที่อยู่จริง • โปรแกรมผู้ใช้จึงติดต่อกับเลขที่อยู่แบบตรรกะ (logical addresses) เท่านั้น จากนั้น MMUจะทำการแปลงเลขที่อยู่แบบตรรกะไปเป็นแบบกายภาพ(real physical)ให้เอง

  11. ภาพที่ 6.3 การย้ายตำแหน่งแบบพลวัตโดยใช้เรจิสเตอร์ย้ายตำแหน่ง (Dynamic relocation using a relocation register)

  12. การบรรจุแบบพลวัตDynamic Loading • เพื่อให้สามารถใช้หน่วยความจำหลักได้อย่างมีประสิทธิภาพสูงสุด • วิธีการบรรจุแบบพลวัต (dynamic loading) เป็นการนำโปรแกรมไปไว้ในหน่วยความจำแบบสัมพัทธ์ (relative memory) • โปรแกรมย่อย (routine) ที่ไม่ได้มีการทำงาน จะไม่ถูกนำมาไว้ในหน่วยความจำหลัก แต่จะนำไปไว้ในหน่วยความจำหลักเมื่อมีการเรียกใช้โปรแกรมย่อยนี้เท่านั้น • ไม่จำเป็นต้องอาศัยคำสั่งพิเศษใดๆ จากระบบปฏิบัติการ แต่เป็นหน้าที่ของผู้ออกแบบโปรแกรมเอง • ระบบปฏิบัติการอาจช่วยได้โดยการจัดเตรียมรูทีนจากคลัง (library routine) สำหรับใช้งานการบรรจุแบบพลวัตไว้ให้

  13. การเชื่อมโยงแบบพลวัตDynamic Linking • OS บางชนิดจะสนับสนุนเฉพาะการเชื่อมโยงแบบคงที่ (static linking) • การเชื่อมโยงแบบพลวัตนั้น การเชื่อมโยงโปรแกรมจะถูกหน่วงเวลาไว้ก่อน จนกว่าจะถึงเวลากระทำการ (execution time) • ในขณะทำการเชื่อมโยงแบบพลวัต โปรแกรมย่อยจะมีการสร้างชุดคำสั่งเรียกระบบ (stub) ซึ่งมีขนาดเล็ก เพื่อใช้เรียกรูทีนจากคลังที่ต้องการขณะทำงาน • stub จะทำงานโดยการเปลี่ยนโปรแกรมตัวเองเป็นตำแหน่งของโปรแกรมย่อยในระบบ และกระทำการกับโปรแกรมย่อยนั้น • การเชื่อมโยงแบบพลวัตใช้กันอย่างแพร่หลายโดยเฉพาะใน routine library เรียกว่า การใช้คลังร่วมกัน (shared libraries)

  14. Static Linked Library (Link ก่อนรัน) ขนาดไฟล์ EXE จะใหญ่ Dynamic Linked Library (Link ตอนรัน) ขนาดไฟล์ EXE เล็ก จะมีไฟล์ DLL พ่วงเข้ามาด้วย ใช้ไฟล์ DLL ร่วมกันในหลายๆกระบวนการได้ ตัวอย่างการทำงานของโปรแกรม โปรแกรมบน DOS เป็น Static linked

  15. ปัญหาของการจองพื้นที่ปัญหาของการจองพื้นที่ • หน่วยความจำมักจะมีน้อยกว่าความต้องการของทุกกระบวนการเสมอ • มีหลายเทคนิคที่ใช้ในการจองพื้นที่ของกระบวนการ • การซ้อนทับ (Overlay) • การสับเปลี่ยน (Swapping) • การจัดสรรพื้นที่แบบส่วนเดียว (Single Partition Allocation) • การจัดสรรพื้นที่แบบหลายส่วน (Multiple Partition Allocation)

  16. การซ้อนทับOverlay • เพื่อจัดสรรพื้นที่ว่างให้กระบวนการที่มีขนาดใหญ่กว่าขนาดของหน่วยความจำสามารถทำงานได้ • การซ้อนทับ (overlay) คือ การเก็บคำสั่งและข้อมูลไว้ในหน่วยความจำเฉพาะที่จำเป็นต้องใช้ในขณะนั้นเท่านั้น ส่วนที่เหลือให้เก็บไว้ในหน่วยเก็บที่อื่นก่อน เมื่อจำเป็นต้องใช้จึงเรียกเอามาจากหน่วยเก็บดังกล่าวเข้ามาซ้อนทับพื้นที่เดิมในหน่วยความจำ • ผู้เขียนโปรแกรมต้องออกแบบการแบ่งส่วนทั้งหมด ซึ่งเป็นงานที่ค่อนข้างยุ่งยากเพราะผู้เขียนโปรแกรมต้องรู้เกี่ยวกับโครงสร้างของโปรกรม การทำงาน ตลอดจนโครงสร้างข้อมูลที่ใช้ในโปรแกรมเป็นอย่างดี

  17. การซ้อนทับ (2)Overlay • พัฒนาจากธรรมชาติของโปรแกรม ที่มีการทำงานซ้ำๆ กันหลายๆ รอบ เช่น การแปลรหัสของ Compiler หรือ Assemble • จะทำการแบ่งรหัสออกเป็นส่วนๆ จะมีบางส่วนที่ใช้ซ้ำกันในแต่ละรอบ • หากเราโหลดเฉพาะข้อมูลที่จะใช้ในแต่ละรอบก็จะเป็นการประหยัด • ข้อมูลในรอบก่อนหน้าที่ไม่ใช้จะถูกซ้อนทับ (Overlay) ไป

  18. ภาพที่ 6.4การซ้อนทับสำหรับตัวแปลภาษาแอสแซมบลีแบบแปลสองรอบ

  19. การสับเปลี่ยนSwapping • กระบวนการจำเป็นต้องอยู่ในหน่วยความจำหลักขณะทำงาน แต่อาจถูกสับเปลี่ยน (swap) ไปเก็บไว้ในหน่วยเก็บชั่วคราวได้แล้วถูกนำกลับมาใหม่เพื่อทำงานต่อ เป็นหลักการเดียวกับหน่วยความจำเสมือน (virtual Memory) • หน่วยเก็บความจุสูง (Backing store) • จานแม่เหล็กที่มีความเร็วสูง ขนาดใหญ่สามารถเก็บกระบวนการทั้งหมดในเวลาเดียวกันได้เพียงพอ และต้องสามารถอ่าน-เขียน ที่ตำแหน่งใดๆ ก็ได้โดยตรง (direct access) • หมุนออกและหมุนเข้า (Roll out, roll in) • การสับเปลี่ยนกระบวนการ เกิดในระบบที่ใช้ลำดับความสำคัญเป็นเกณฑ์ในการจัดตารางการทำงาน (priority base) • ตัวจัดการหน่วยความจำหลักอาจสับเปลี่ยนงานที่มีความสำคัญต่ำออกไปชั่วคราว แล้วให้งานที่มีความสำคัญสูงกว่าเข้าทำงานจนเสร็จก่อนจึงสับเปลี่ยนงานที่มีความสำคัญต่ำกลับมาทำงานต่อ • เวลาส่วนใหญ่ของการสลับงานคือ เวลาถ่ายโอน และเวลาถ่ายโอนทั้งหมดจะมีสัดส่วนแปรผันตรงกับจำนวนครั้งของการสับเปลี่ยนหน่วยความจำ

  20. Schematic View of Swapping ภาพที่ 6.5 การสับเปลี่ยนสองกระบวนการโดยใช้จานแม่เหล็กเป็นหน่วยพักชั่วคราว

  21. การจัดสรรพื้นที่แบบส่วนเดียว(Single Partition Allocation) • จะแบ่งพื้นที่หน่วยความจำออกเป็น 2 ส่วน • ระบบ (System) • ผู้ใช้ (User) • แต่ละส่วนจะใช้แยกจากกัน และงานคนละประเภท • เช่นเดียวกับระบบเชิงกลุ่ม (Batchsystem) ซึ่ง DOS ใช้วิธีนี้ USER OS

  22. การวางข้อมูลของกระบวนการการวางข้อมูลของกระบวนการ • จะวางอย่างไร (ใน User Area) ให้ไม่ทับกับส่วน System • วางให้ไกลจากกันมากที่สุด Process1 โอกาส Error ก็ยากขึ้น OS

  23. การจัดสรรหน่วยความจำแบบพื้นที่ติดกันContiguous Allocation • หน่วยความจำหลักถูกแบ่งเป็นสองส่วน • ระบบปฏิบัติการฝังตัว (ResidentOS), มักอยู่ในหน่วยความจำส่วนล่างพร้อมกับ interrupt vector • กระบวนการผู้ใช้ อยู่ในหน่วยความจำส่วนบน • ส่วนของ OS ที่ไม่ค่อยได้ใช้งานจะถูกแยกไปเก็บไว้บนดิสก์ เรียกว่า ภาวะชั่วครู่ (transient)

  24. การจัดสรรหน่วยความจำแบบพื้นที่ติดกันContiguous Allocation • หน่วยความจำหลักถูกแบ่งเป็นสองส่วน • ระบบปฏิบัติการฝังตัว (ResidentOS), มักอยู่ในหน่วยความจำส่วนล่างพร้อมกับ interrupt vector • กระบวนการผู้ใช้ อยู่ในหน่วยความจำส่วนบน • ส่วนของ OS ที่ไม่ค่อยได้ใช้งานจะถูกแยกไปเก็บไว้บนดิสก์ เรียกว่า ภาวะชั่วครู่ (transient) • การจัดสรรพื้นที่แบบขนาดคงที่ (fixed-size partition) หรือแบบส่วนเดียว (Single-partition allocation) • ชุดของเรจิสเตอร์ย้ายตำแหน่ง (Relocation-register scheme)จะใช้สำหรับป้องกับกระบวนการผู้ใช้จากกระบวนการอื่น และจากการเปลี่ยนรหัสของ OS และข้อมูล • ชุดของเรจิสเตอร์ย้ายตำแหน่ง บรรจุด้วยค่าเลขที่อยู่เชิงกายภาพที่เล็กที่สุด, base register บางครั้งเรียก Offset • บรรจุขอบเขตของที่อยู่เชิงตรรกะ ซึ่งแต่ละเลขที่อยู่จะต้องมีค่าน้อยกว่า limit register

  25. ภาพที่ 6.6 Base register และ limit register ทำหน้าที่กำหนดขอบเขตเลขที่อยู่เชิงตรรกะ

  26. ภาพที่ 6.7 ฮาร์ดแวร์สนับสนุนการใช้ย้ายตำแหน่งด้วยเรจิสเตอร์ฐานและเรจิสเตอร์ขอบเขต

  27. การแบ่งพื้นที่แบบหลายส่วน(Multiple Partition Allocation) • เป็นวิธีที่มีความยืดหยุ่นมากกว่าแบบ Single Partition • มี 2 แบบ • Fixed Sized Partition ทุกๆ Partition มีขนาดเท่าๆกัน • Dynamic Allocation ขนาดของ Partition ปรับตามขนาดของกระบวนการ

  28. การแบ่งส่วนแบบขนาดคงที่Fix Sized Partition 500B 1000B ใช้ 2 Partition 2100B ใช้ 3 Partition เกิดปัญหาอะไร ? จะมีพื้นที่จองไว้แต่ไม่ได้ใช้งานเลย

  29. การแบ่งส่วนแบบขนาดคงที่Fix Sized Partition 1200B ใช้ 1200B 2580B ใช้ 2580B เกิดปัญหาอะไร ? เมื่อจองใกล้เต็มจะมีพื้นที่ขนาดเล็กที่ใช้ไม่ได้

  30. การจัดสรรหน่วยความจำแบบพื้นที่ติดกันContiguous Allocation (cont.) • การจัดสรรพื้นที่แบบหลายส่วน (Multiple-partition allocation) • พื้นที่ว่าง (Hole) – บล็อกพื้นที่ว่างในหน่วยความจำ พื้นที่ว่างขนาดต่างๆ ที่กระจายตลอดหน่วยความจำ • เมื่อกระบวนการมาถึง ก็จะถูกจัดสรรหน่วยความจำจากพื้นที่ว่างขนาดที่ใหญ่เพียงพอกับกระบวนการนั้น • OS จะเก็บข้อมูลเกี่ยวกับa) ส่วนที่ถูกจัดสรร (allocated partitions) b) ส่วนที่ว่าง (free partitions/hole) OS OS OS OS process 5 process 5 process 5 process 5 process 9 process 9 process 8 process 10 process 2 process 2 process 2 process 2

  31. การแตกกระจาย Fragmentation • จากการจองพื้นที่แบบ Multiple Partition จะทำให้เกิดสิ่งนี้ • มี 2 ประเภท • Internal Fragmentation (เกิดกับแบบ Fixed Sized) • External Fragmentation (เกิดกับแบบ Dynamic) Fix Sized Dynamic P1 ใช้ ใช้จริง จอง ไม่มีใครใช้ได้ P2 ใช้ Internal Fragment External Fragment

  32. การสูญเปล่าที่เกิดจากการแตกกระจายFragmentationการสูญเปล่าที่เกิดจากการแตกกระจายFragmentation • การแตกกระจายแบบภายนอก (External Fragmentation) • พื้นที่หน่วยความจำซึ่งว่างเป็นช่วงๆ ไม่ต่อเนื่องกัน มีขนาดเล็กเกินไปสำหรับงานที่รอคอยอยู่ • การแตกกระจายแบบภายใน (Internal Fragmentation) • การจัดสรรพื้นที่หน่วยความจำที่มีขนาดใหญ่เกินกว่าที่กระบวนการร้องขอ ส่วนที่เหลือไว้ยังไม่ได้ถูกนำไปใช้งาน • การลดการแตกกระจายแบบภายนอกสามารถทำได้โดยการอัดแน่น/การกระชับพื้นที่ (compaction) • การสับเปลี่ยนพื้นที่ว่างในระบบให้มาอยู่รวมกันเป็นผืนเดียวกันต่อเนื่องกัน • สามารถทำได้เฉพาะกรณีที่การย้ายตำแหน่งเป็นแบบสัมพัทธ์และเกิดขึ้นในขณะทำงานเท่านั้น

  33. การอัดแน่นCompaction • สำหรับการจองพื้นที่แบบ Dynamic Allocation นั้นจะจองหน่วยความจำไปเรื่อยๆ • หากจองไปเรื่อยๆก็จะเกิด External Fragmentation • เราสามารถบีบอัดพื้นที่ที่อยู่กระจายกันให้มาติดกันได้ จะทำให้เหลือพื้นที่ว่างมากขึ้นและไม่เกิด External Fragmentation ข้อเสียก็คือทำงานช้าลง เพราะต้อง Copy ข้อมูลทีละไบท์

  34. ปัญหาการจัดสรรหน่วยเก็บแบบพลวัตDynamic Storage-Allocation Problem • การจัดลงตัวครั้งแรก First-fit: การเลือกพื้นที่แรก (first hole) ที่พบว่ามีขนาดใหญ่กว่า หรือเท่ากับพื้นที่ที่ต้องการ • การจัดแล้วพอดีที่สุด Best-fit: การเลือกพื้นที่ที่มีขนาดใกล้เคียงกับขนาดพื้นที่ที่ต้องการมากที่สุด (smallest hole)ซ(ทำให้เกิดช่องว่างใหม่เล็กที่สุด) • การจัดแล้วเหลือมากที่สุด Worst-fit: การเลือกพื้นที่ที่มีขนาดใหญ่กว่าขนาดพื้นที่ที่ต้องการมากที่สุด (largest hole) (ทำให้เกิดช่องว่างใหม่ใหญ่ที่สุด) วิธีการจัดสรรพื้นที่ว่างเมื่อมีการร้องขอขนาดn วิธีแรก First-Fit และ Best-Fit ดีกว่าวิธี Worst-Fit ในแง่ของเวลาที่ลดลง และประสิทธิผลในการใช้หน่วยเก็บข้อมูล

  35. การจัดลงตัวครั้งแรก First Fit • เจอพื้นที่ว่างเมื่อไรก็จองทันที • วิ่ง Scan หาจากบนลงล่าง • ทำงานได้เร็ว • ข้อมูลกระจุกตัวอยู่แต่ข้างบน • อาจเกิด Fragment ที่มีขนาดใหญ่ได้ 20K First

  36. การจัดแล้วพอดีที่สุดBest-Fitการจัดแล้วพอดีที่สุดBest-Fit • ทำการ Scan จากบนลงล่าง • คำนวณในแต่ละพื้นที่ทั้งหน่วยความจำ • ตรงไหนมีขนาดใกล้เคียงกับขนาดของ โปรเซสที่สุดก็จะจองตรงนั้น • ระบบทำงานช้า เพราะคำนวณมาก • เกิด Fragment ขนาดเล็ก แต่มีจำนวนมาก อาจต้อง Compact บ่อย 20K 28K Best 23K

  37. การจัดแล้วเหลือมากที่สุดWorst-fitการจัดแล้วเหลือมากที่สุดWorst-fit • ทำการ Scan จากบนลงล่าง • คำนวณในแต่ละพื้นที่ทั้งหน่วยความจำ • ตรงไหนมีขนาดใหญ่กว่าขนาดของ โปรเซสที่สุดก็จะจองตรงนั้น • ระบบทำงานช้า เพราะคำนวณมาก • โอกาสเกิด Fragment น้อยลง 20K 10K Worst 28K 5K

  38. การสลับหน้าPaging • การจัดสรรพื้นที่หน่วยความจำแบบตรรกะให้แต่ละกระบวนการที่ผ่านมานั้น ใช้ได้กับพื้นที่ว่างแบบกายภาพที่เรียงต่อเนื่องกันเท่านั้น • การสลับหน้า (paging) สามารถทำให้กระบวนการเข้าไปอยู่ในหน่วยความจำหลักได้โดยไม่ต้องมีพื้นที่ที่เรียงต่อเนื่องกันทั้งกระบวนการ • หน่วยความจำแบบกายภาพ (physical memory) จะถูกแบ่งเป็นส่วนๆ แต่ละส่วนมีขนาดเท่ากันเรียกว่า เฟรม (frame) • หน่วยความจำแบบตรรกะ (logical memory) ก็จะถูกแบ่งออกเป็นส่วนๆ เรียกว่า หน้า (page)มีขนาดเท่ากับแต่ละเฟรม

  39. การสลับหน้าPaging • มีการจัดเก็บรายการเฟรมว่างไว้ • ในการรันโปรแกรมขนาด npage ต้องค้นหาเฟรมว่างขนาด n เพื่อบรรจุโปรแกรม • สร้างตารางหน้า (page table) เพื่อแปลงไปเป็นที่อยู่เชิงกายภาพ(physical addresses) • อาจเกิด Internal fragmentation 0 1 0 โปรเซสมีขนาด 3 Pages Frames 2 1 แต่ละ Page จะใช้พื้นที่ใดก็ได้ ไม่ต้องติดกันก็ได้ Process Memory

  40. วิธีการแปลงเลขที่อยู่Address Translation Scheme • ทุกตำแหน่งถูกกำหนดโดยซีพียู แบ่งเป็น 2 ส่วนคือ (page number (p)) และ ออฟเซตของหน้า (page offset (d)) • หมายเลขหน้า Page number(p) – ใช้เป็นตัวชี้ไปยังตารางเลขหน้า (page table) ในตารางเลขหน้าที่จะมีค่าตำแหน่งฐาน หรือจุดเริ่มต้น (base address) ของหน้าจริงในหน่วยความจำหลัก • ออฟเซตของหน้า Page offset(d) – ค่าตำแหน่งหน้าจริงที่รวมกับออฟเซตของหน้า จะเป็นตำแหน่งจริง (physical memory address)ในหน่วยความจำหลัก

  41. Address Translation Architecture ฮาร์ดแวร์สำหรับการสลับหน้า

  42. Paging Example แบบจำลองการสลับหน้าของหน่วยความจำแบบกายภาพและตรรกะ

  43. Paging Example ตัวอย่างการสลับหน้าสำหรับหน่วยความจำขนาด 32 ไบต์ ออกเป็นหน้าขนาด 4 ไบต์

  44. เฟรมว่างFree Frames Before allocation After allocation

  45. การคำนวณหา Address จริง(Physical Address) • สำหรับโปรเซสจะมองเป็น p : d (Page : offset) • Page = หมายเลขของ Page, offset = ตำแหน่งของข้อมูลที่อ้างอิงภายใน Page นั้นโดยนับจากขอบของ page 0 1 ข้อมูลของ Page ที่ 1 อยู่ห่างจากต้น Page ไป 30 ไบต์ 1 : 30 2 ต่อ -->

  46. ตารางหน้าPage Table • ในหน่วยความจำจะเก็บข้อมูลนี้ไว้ ในรูปแบบตาราง • เป็นข้อมูลที่บอกว่า Page แต่ละตัวอยู่ที่ Frame ไหนบ้าง 0 Page2 1 2 Page0 4 5 Page1

  47. คำนวณโดยใช้ฮาร์ดแวร์ • MMU จะคำนวณหา Physical Address ให้กับ CPU • จะหา Frame No. ก่อนแล้วบวกกับ offset • จาก Frame No. ก็หา Add. เริ่มต้นของ Frame ได้ Memory Real Addr. CPU p d f d page frame

  48. หน้าร่วม(Shared Pages) • แบ่งข้อมูลในโปรเซสออกเป็นหน้าๆ (Pages) • แต่ละหน้ามีหน้าที่ (Function) แตกต่างกัน • บาง Page สามารถใช้ร่วมกันได้ระหว่างหลายโปรเซส code1 code1 code1 code2 code2 code2 Memory data1 data2 data1 ประหยัดหน่วยความจำ มากกว่าการโหลดทั้งหมดจาก ทั้ง 2 โปรเซส data2 P1 P2

  49. การแบ่งเป็นตอน/การแบ่งส่วน(Segmentation)การแบ่งเป็นตอน/การแบ่งส่วน(Segmentation) • จะแบ่งข้อมูลออกเป็น Segment ตามฟังก์ชั่นการทำงาน • แต่ละ Segment ไม่จำเป็นต้องมีขนาดเท่ากัน จะโหลด main program ไปก่อนเพียง segment เดียว แล้วเมื่อมีการเรียก section อื่นๆก็จะโหลดเข้ามาในหน่วยความจำภายหลัง (Load on demand) ดังนั้น จะประหยัดกว่าโหลดทั้งหมดในครั้งเดียว

  50. การแบ่งเป็นตอน/การแบ่งส่วน(Segmentation)การแบ่งเป็นตอน/การแบ่งส่วน(Segmentation) • โครงร่างของการจัดการหน่วยความจำที่สนับสนุนมุมมองของผู้ใช้ในภาพของหน่วยความจำ • จะแบ่งข้อมูลออกเป็น Segment ตามฟังก์ชั่นการทำงาน • แต่ละ Segment ไม่จำเป็นต้องมีขนาดเท่ากัน • ดังนั้น โปรแกรมคือ หน่วยรวมของเซ็กเมนท์ เซ็กเมนท์ คือหน่วยทางตรรกะชนิดหนึ่งอย่างเช่น main program, procedure, function, method, object, local variables, global variables, common block, stack, symbol table, arrays

More Related