520 likes | 734 Views
การจัดการหน่วยความจำ Memory Management. นงลักษณ์ พรมทอง และวิเชษฐ์ พลายมาศ. Virtual Memory. Background Demand Paging Process Creation Page Replacement Allocation of Frames Thrashing Operating System Examples. Learning Objectives. เพื่อศึกษาความสำคัญของหน่วยความจำเสมือน
E N D
การจัดการหน่วยความจำMemory Management นงลักษณ์ พรมทอง และวิเชษฐ์ พลายมาศ
Virtual Memory • Background • Demand Paging • Process Creation • Page Replacement • Allocation of Frames • Thrashing • Operating System Examples
Learning Objectives • เพื่อศึกษาความสำคัญของหน่วยความจำเสมือน • เพื่อเข้าใจการสลับหน้าตามคำขอทันที (demand paging) ของหน่วยความจำเสมือน • เพื่อเข้าใจถึงความซับซ้อนและค่าใช้จ่ายในการใช้งานหน่วยความจำเสมือน
ความเป็นมา Background • ชุดคำสั่งที่จะถูกกระทำการได้นั้นจะต้องอยู่ในหน่วยความจำกายภาพเสมอ • เราจำเป็นต้องใส่พื้นที่เลขที่อยู่ของหน่วยความจำแบบตรรกะทั้งหมดลงในหน่วยความจำแบบกายภาพ (แต่ถูกจำกัดด้วยขนาดของพื้นที่หน่วยความจำจริง) • กรณี single program • ใช้วิธีการ overlay คือการทำให้โปรแกรมที่มีขนาดใหญ่กว่าพื้นที่ในหน่วยความจำ ให้สามารถดำเนินได้จัดการโดยโปรแกรมเมอร์ • โดยการแบ่งโปรแกรมออกเป็นโปรแกรมย่อย (sub program) หลายๆ ส่วน และให้แต่ละส่วนมีขนาดเล็กกว่าหน่วยความจำ • กรณี Multiprogram • ใช้หน่วยความจำเสมือน (virtual memory) จัดการโดย OS
ความเป็นมา Background • โปรแกรมจะถูกแบ่งออกเป็น 2 ส่วน main program เป็นส่วนของโปรแกรมที่อยู่ในหน่วยความจำไปตลอดจนกระทั่งการทำงานสิ้นสุดลง และ Sub-Program ในส่วนที่เหลือ จะถูกแบ่งออกเป็นส่วนย่อยๆ และจะถูกโหลดเข้าสู่หน่วยความจำก็ต่อเมื่อต้องการรันเท่านั้น
ความเป็นมา Background • หน่วยความจำเสมือน (Virtual memory) – การแยกส่วนของหน่วยความเชิงตรรกะ (logical memory) ของผู้ใช้ออกจากหน่วยความจำเชิงกายภาพ (physical memory) • มีเพียงส่วนของโปรแกรมที่ต้องการอยู่ในหน่วยความจำเพื่อกระทำการ (execution) เท่านั้น • พื้นที่ (Logical address)จึงสามารถใหญ่กว่าขนาดของพื้นที่หน่วยความจำเชิงกายภาพ (physical address space) ได้ • ยินยอมให้มีการใช้พื้นที่หน่วยความจำร่วมกันได้ จากหลายๆ กระบวนการ • ทำให้มีการสร้างกระบวนการขึ้นมาได้โดยสะดวก • Virtual memory สามารถใช้งานผ่าน • Demand paging • Demand segmentation
Demand Paging • นำ page ไปไว้ในหน่วยความจำเฉพาะเมื่อเวลาที่ต้องการเท่านั้น • ลดการใช้ (Less I/O needed) • ลดการใช้หน่วยความจำ (Less memory needed) • โต้ตอบได้รวดเร็วกว่า (Faster response) • รองรับผู้ใช้ได้มากกว่า (More users) • Page ที่ต้องการ ต้องการมีการอ้างอิงถึง • invalid reference ยกเลิก (abort) • not-in-memory นำเข้าหน่วยความจำ (bring to memory)
Valid-Invalid Bit • จะมี valid–invalid bit เชื่อมโยงอยู่ในแต่ละรายการ page table (1 in-memory, 0 not-in-memory) • ต้องกำหนดค่าเริ่มต้น valid–invalid เป็น 0 ทุกรายการ (entries) • Example of a page table snapshot. • ระหว่างการแปลงเลขที่อยู่ ถ้า valid–invalid bit ใน page table entry เป็น 0 page fault Frame # valid-invalid bit 1 1 1 1 0 0 0 page table
การผิดหน้าPage Fault • ถ้าเคยมีการอ้างอิงบน page ครั้งแรกของการอ้างอิงจะ trap to OS page fault • OS จะมองหาตารางอื่นเพื่อตัดสินใจว่า • Invalid reference abort. • ยังไม่มีอยู่ในหน่วยความจำ • จะหา empty frame • Swap page ไปยัง frame นั้น • Reset tables, validation bit = 1. • เริ่มคำสั่ง: Least Recently Used • block moveเพิ่มหรือลดตำแหน่งอย่างอัตโนมัติ
จะเป็นอย่างไรถ้าไม่มีเฟรมว่าง (free frame)? • การแทนที่ Page (Page replacement) – จะค้นหาบาง page ในหน่วยความจำที่ยังไม่ได้มีการใช้งานจริง แล้วสลับออกไป (swap out) • algorithm • performance – ต้องใช้ algorithm ที่ทำให้ผลการค้นหาจำนวนการผิดหน้าเหลือน้อยที่สุด • บางหน้า (page) อาจมีการนำเข้าออกหน่วยความจำหลายครั้ง
Performance of Demand Paging • Page Fault Rate 0 p 1.0 • if p = 0 no page faults • if p = 1, every reference is a fault • Effective Access Time (EAT) EAT = (1 – p) x memory access + p (page fault overhead + [swap page out ] + swap page in + restart overhead)
Demand Paging Example • Memory access time = 1 microsecond • 50% ของเวลาที่มีการแก้ไข page ที่ถูกแทนที่ และต้องถูกสลับออกไป • Swap Page Time = 10 msec = 10,000 msec EAT = (1 – p) x 1 + p (15000) 1 + 15000P (in msec)
การสร้างกระบวนการProcess Creation • Virtual memory ยินยอมให้ใช้ประโยชน์อย่างอื่นได้ในขณะที่สร้างกระบวนการ - Copy-on-Write - Memory-Mapped Files
Copy-on-Write • Copy-on-Write (COW) ยินยอมให้ทั้ง parent and child processes ในการกำหนดค่า shareใน page เดียวกันในหน่วยความจำ • ถ้าแม้มีการแก้ไข page ที่ใช้ร่วมกัน ก็จะมีเพียง page นั้นที่ถูกสำเนาไป • COW จะมีการสร้างกระบวนการที่สะดวกกว่า เช่นเดียวกับการสำ page ที่มีการแก้ไข • Free pages จะถูกจัดสรรจาก poolของ zeroed-out pages.
Memory-Mapped Files • Memory-mapped file I/O ยินยอมให้ file I/O ถูกใช้งานเหมือนรูทีนการเข้าถึงหน่วยความจำได้โดยการ mapping a disk block ไปเป็น page ในหน่วยความจำ • ไฟล์จะถูกกำหนดค่าเริ่มต้นของการอ่านโดยใช้ demand paging สัดส่วนของ page-sized ของไฟล์ที่อ่านจากระบบไฟล์ไปยัง physical page. ลำดับย่อยของ reads/writes ไฟล์จะดำเนินการเช่นเดียวกับการเข้าถึงหน่วยความจำ • การเข้าถึงไฟล์อย่างง่ายโดย treating file I/O ผ่านหน่วยความจำมากกว่าการใช้read()write() system calls. • อนุญาตให้หลายกระบวนการทำการ map ไฟล์เดียวกันให้ใช้ pages ร่วมกันในหน่วยความจำได้อีกด้วย
การแทนที่หน้าPage Replacement • การป้องกันการจัดสรรเกินหน่วยความจำได้โดยการแก้ไข page-fault service routine เพิ่มเข้าไปใน page replacement • ใช้modify (dirty) bitในการลด overhead ของการถ่ายหน้า โดยการแก้ไขเฉพาะหน้าที่ถูกเขียนลงบนดิสก์เท่านั้น • Page replacement จะแยกจากกันอย่างอิสระระหว่าง logical memory และ physical memory – virtual memory ขนาดใหญ่สามารถสร้างบน physical memory ที่มีขนาดเล็กกว่าได้
Basic Page Replacement • หาตำแหน่งของ page ที่ต้องการบนดิสก์ • หา free frame: - ถ้ามี free frame ก็ใช้ - ถ้าไม่มี free frame ให้ใช้ page replacement algorithm ในการเลือกvictim frame • อ่าน page ที่ต้องการไปไว้บน free frame ใหม่แล้ว Update ตาราง page และ frame • เริ่มดำเนินการกระบวนการ
Page Replacement Algorithms • ต้องการให้มีอัตราการผิดหน้าต่ำที่สุด (lowest page-fault rate) • ประเมิน algorithm โดยรัน reference string บนหน่วยความจำและคำนวณจำนวน page faults ของ string นั้น • In all our examples, the reference string is 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.
First-In-First-Out (FIFO) Algorithm • Reference string: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 • 3 frames (3 pages สามารถอยู่ในหน่วยความจำ ณ เวลาใดเวลาหนึ่ง ต่อหนึ่งกระบวนการ) • 4 frames • FIFO Replacement – Belady’s Anomaly • frames ยิ่งมาก page faults ยิ่งลดลง 1 1 4 5 2 2 1 3 9 page faults 3 3 2 4 1 1 5 4 2 2 1 10 page faults 5 3 3 2 4 4 3
Optimal Algorithm • แทนที่ page ที่จะไม่ถูกเรียกใช้อีกในเวลาอันใกล้นี้ • 4 frames example 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 • จะแทนที่โดยวิธีใด • จะวัดประสิทธิภาพของอัลกอริธึมได้อย่างไร 1 4 2 6 page faults 3 4 5
Least Recently Used (LRU) Algorithm • Reference string: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 • ใช้ตัวนับ (Counter implementation) • นับรายการ (entry) ทุก page ที่เข้ามา, ทุกครั้งที่ page ถูกอ้างอิงผ่านรายการ, แล้วสำเนาค่านาฬิกาไปยัง counter • เมื่อต้องการเปลี่ยน page ก็ให้มองหา counter เพื่อจะใช้เปลี่ยนหน้า 1 5 2 3 5 4 4 3
LRU Algorithm (Cont.) • ใช้แบบสแต็ก (Stack implementation) – เก็บสแต็กของหมายเลขหน้า (page numbers) ในรูปการเชื่อมโยงแบบคู่ (double link form): • Page referenced: • ย้ายเพ็จนั้นไปยังด้านบน • ใช้ 6 pointers ในการเปลี่ยน • ไม่จำเป็นต้องค้นหาเพื่อแทนที่ • การใช้ stack algorithm ช่วยแก้ปัญหา Belady’s Anomaly • แต่ต้องใช้อุปกรณ์ช่วยแทนการใช้เขียนโปรแกรมควบคุมการเรียก interrupt เอง
LRU Approximation Algorithms • การเพิ่มบิตอ้างอิง (Additional-Reference-bits algorithm) • ใช้บนระบบที่ไม่มีอุปกรณ์ช่วย • จับคู่แต่ละหน้าด้วย bit, ค่าเริ่มต้นเป็น = 0 (ยังไม่ใช้) • เมื่อหน้าถูกอ้างอิง บิตอ้างอิงกะจะถูกเปลี่ยนเป็น 1 (ใช้แล้ว) • การแทนที่ในระบบนี้สามารถตรวจสอบได้ว่ามีหน้าใดถูกใช้แล้วหรือยัง • การให้โอกาสครั้งที่สอง (Second chance) • ใช้บิตอ้างอิง (reference bit) ใช้การแทนที่แบบนาฬิกา (Clock replacement) เพื่อป้องกันการสับเปลี่ยนหน้าที่ถูกเรียกใช้บ่อยออกไป • ถ้าหน้าถูกแทนที่ (ตามลำดับนาฬิกา) บิตอ้างอิงจะ = 1 จากนั้น: • เปลี่ยนบิตกลับไปเป็น 0 • เปลี่ยนเวลาที่เข้ามาในหน่วยความจำให้เหมือนเพิ่งเข้ามา • ทำการตรวจสอบหน้าอื่นๆ ตามหลักการเช่นเดียวกัน
Counting Algorithms • การใช้ตัวนับการอ้างอิงของแต่ละหน้าไว้ • LFU (least frequently used) Algorithm: การเก็บจำนวนครั้งที่หน้าถูกอ้างอิง และเลือกที่ถูกอ้างอิงน้อยที่สุดออกก่อน • MFU (most frequently used) Algorithm: อยู่บนสมมุติฐานที่ว่า หน้าที่ถูกอ้างอิงน้อยนั้นมีโอกาสที่จะถูกมากในเวลาต่อไปเพราะอาจเป็นหน้าที่เพิ่งถูกย้ายเข้ามาในหน่วยความจำ • อย่างไรก็ตาม วิธีการแทนที่หน้าทั้งแบบใช้น้อยออกก่อนและแบบใช้มากออกก่อนนั้นเป็นแนวคิดที่ไม่แตกต่างกันเท่าใดนัก ประสิทธิภาพจึงขึ้นอยู่กับการคาดการณ์ล่วงหน้าได้ถูกต้องมากน้อยแค่ไหน การใช้งานมีค่าใช้จ่ายสูง และสู้วิธีการแบบเหมาะที่สุด (OPT) ไม่ได้
Page-Buffering Algorithm • ระบบที่มักเก็บหน้าว่างๆ ไว้เป็นกลุ่มๆ • เมื่อเกิด page fault หน้าว่างๆ หน้าหนึ่งก็จะถูกเลือกมาใช้ แต่ยังไม่ย้ายออกไปทันที • ระบบจะอ่านหน้าที่ต้องการเข้ามาในเนื้อที่ว่างได้เลยโดยไม่ต้องรอให้มีการย้ายหน้าเดิมออกไปก่อน • ทำให้ลดเวลาในการย้ายหน้าลงมาก เมื่อมีเวลาว่าง ระบบค่อยทำการย้ายหน้าที่เลือกออกไปในภายหลัง จากนั้น รวมพื้นที่ว่างเข้าไว้ในกลุ่ม (clustering)
Operating System Examples • Windows NT • Solaris 2
Windows NT • ใช้ demand paging ร่วมกับclusteringโดยใส่ใน page รอบๆบริเวณที่เกิดการผิดหน้า • กระบวนการทั้งหมดจะถูกกำหนด working set minimumและworking set maximum • Working set minimum คือจำนวนต่ำสุดของหน้าอยู่ในหน่วยความจำ • กระบวนการหนึ่งอาจถูกกำหนด working set maximum มีอยู่หลายๆ หน้า • เมื่อพื้นที่ว่างในหน่วยความจำเหลือกว่าค่าเป้าหมายที่กำหนดไว้ (threshold) การตัดแต่ง working set อย่างอัตโนมัติ (automatic working set trimming)ก็จะเริ่มทำงาน เพื่อคืนพื้นที่ว่างของหน่วยความจำ • Working set trimming จะย้ายหน้าออกจากกระบวนการที่มีการใช้งานหน้า working set minimum ของกระบวนการเหล่านั้น
Solaris 2 • บำรุงรักษารายการของหน้าว่าง (free pages) เพื่อกำหนดให้กับกระบวนการที่เกิดการผิดหน้า • Lotsfree – threshold parameter จุดเริ่มต้นของการค้นหาหน้า • การค้นหาหน้าจะทำโดยกระบวนการสลับหน้าออก (pageout process) • Pageout scans pages using modified clock algorithm. • Scanrateคือ อัตราที่หน้าจะถูกสแกน มีขอบเขตตั้งแต่ slowscanถึงfastscan • Pageoutถูกเรียกใช้บ่อยหรือไม่ขึ้นกับจำนวนหน่วยความจำที่ว่างเหลือมากน้อยเพียงใด