การจัดการหน่วยความจำ Memory Management นงลักษณ์ พรมทอง และวิเชษฐ์ พลายมาศ การจัดการหน่วยความจำ 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
Virtual Memory That is Larger Than Physical Memory
Demand Paging นำ page ไปไว้ในหน่วยความจำเฉพาะเมื่อเวลาที่ต้องการเท่านั้น ลดการใช้ (Less I/O needed) ลดการใช้หน่วยความจำ (Less memory needed) โต้ตอบได้รวดเร็วกว่า (Faster response) รองรับผู้ใช้ได้มากกว่า (More users) Page ที่ต้องการ ต้องการมีการอ้างอิงถึง invalid reference ยกเลิก (abort) not-in-memory นำเข้าหน่วยความจำ (bring to memory)
Transfer of a Paged Memory to Contiguous Disk Space
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 page table
Page Table When Some Pages Are Not in Main Memory
การผิดหน้า 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 เพิ่มหรือลดตำแหน่งอย่างอัตโนมัติ
Steps in Handling a Page Fault
จะเป็นอย่างไรถ้าไม่มีเฟรมว่าง (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 ร่วมกันในหน่วยความจำได้อีกด้วย
Memory Mapped Files
การแทนที่หน้า Page Replacement การป้องกันการจัดสรรเกินหน่วยความจำได้โดยการแก้ไข page-fault service routine เพิ่มเข้าไปใน page replacement ใช้ modify (dirty) bit ในการลด overhead ของการถ่ายหน้า โดยการแก้ไขเฉพาะหน้าที่ถูกเขียนลงบนดิสก์เท่านั้น Page replacement จะแยกจากกันอย่างอิสระระหว่าง logical memory และ physical memory – virtual memory ขนาดใหญ่สามารถสร้างบน physical memory ที่มีขนาดเล็กกว่าได้
Need For Page Replacement
Basic Page Replacement หา free frame: - ถ้ามี free frame ก็ใช้ - ถ้าไม่มี free frame ให้ใช้ page replacement algorithm ในการเลือก victim frame อ่าน page ที่ต้องการไปไว้บน free frame ใหม่ แล้ว Update ตาราง page และ frame เริ่มดำเนินการกระบวนการ
Page Replacement
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.
Graph of Page Faults Versus The Number of Frames
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 5 10 page faults 3 3 2 4 4 3
FIFO Page Replacement
FIFO Illustrating Belady’s Anamoly
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
Optimal Page Replacement
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 Page Replacement
LRU Algorithm (Cont.) ใช้แบบสแต็ก (Stack implementation) – เก็บสแต็กของหมายเลขหน้า (page numbers) ในรูปการเชื่อมโยงแบบคู่ (double link form): Page referenced: ย้ายเพ็จนั้นไปยังด้านบน ใช้ 6 pointers ในการเปลี่ยน ไม่จำเป็นต้องค้นหาเพื่อแทนที่ การใช้ stack algorithm ช่วยแก้ปัญหา Belady’s Anomaly แต่ต้องใช้อุปกรณ์ช่วยแทนการใช้เขียนโปรแกรมควบคุมการเรียก interrupt เอง
Use Of A Stack to Record The Most Recent Page References
LRU Approximation Algorithms การเพิ่มบิตอ้างอิง (Additional-Reference-bits algorithm) ใช้บนระบบที่ไม่มีอุปกรณ์ช่วย จับคู่แต่ละหน้าด้วย bit, ค่าเริ่มต้นเป็น = 0 (ยังไม่ใช้) เมื่อหน้าถูกอ้างอิง บิตอ้างอิงกะจะถูกเปลี่ยนเป็น 1 (ใช้แล้ว) การแทนที่ในระบบนี้สามารถตรวจสอบได้ว่ามีหน้าใดถูกใช้แล้วหรือยัง การให้โอกาสครั้งที่สอง (Second chance) ใช้บิตอ้างอิง (reference bit) ใช้การแทนที่แบบนาฬิกา (Clock replacement) เพื่อป้องกันการสับเปลี่ยนหน้าที่ถูกเรียกใช้บ่อยออกไป ถ้าหน้าถูกแทนที่ (ตามลำดับนาฬิกา) บิตอ้างอิงจะ = 1 จากนั้น: เปลี่ยนบิตกลับไปเป็น 0 เปลี่ยนเวลาที่เข้ามาในหน่วยความจำให้เหมือนเพิ่งเข้ามา ทำการตรวจสอบหน้าอื่นๆ ตามหลักการเช่นเดียวกัน
Second-Chance (clock) Page-Replacement Algorithm
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 ของกระบวนการเหล่านั้น
Paging System ของ Windows NT
Address translation ของ Windows
Solaris 2 บำรุงรักษารายการของหน้าว่าง (free pages) เพื่อกำหนดให้กับกระบวนการที่เกิดการผิดหน้า Lotsfree – threshold parameter จุดเริ่มต้นของการค้นหาหน้า การค้นหาหน้าจะทำโดยกระบวนการสลับหน้าออก (pageout process) Pageout scans pages using modified clock algorithm. Scanrate คือ อัตราที่หน้าจะถูกสแกน มีขอบเขตตั้งแต่ slowscan ถึง fastscan Pageout ถูกเรียกใช้บ่อยหรือไม่ขึ้นกับจำนวนหน่วยความจำที่ว่างเหลือมากน้อยเพียงใด
Solar Page Scanner