งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

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

งานนำเสนอที่คล้ายกัน


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

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

2 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 2 Virtual Memory n Background n Demand Paging n Process Creation n Page Replacement n Allocation of Frames n Thrashing n Operating System Examples

3 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 3 Learning Objectives n เพื่อศึกษาความสำคัญของหน่วยความจำเสมือน n เพื่อเข้าใจการสลับหน้าตามคำขอทันที (demand paging) ของ หน่วยความจำเสมือน n เพื่อเข้าใจถึงความซับซ้อนและค่าใช้จ่ายในการใช้งาน หน่วยความจำเสมือน

4 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 4 ความเป็นมา Background n ชุดคำสั่งที่จะถูกกระทำการได้นั้นจะต้องอยู่ในหน่วยความจำ กายภาพเสมอ n เราจำเป็นต้องใส่พื้นที่เลขที่อยู่ของหน่วยความจำแบบตรรกะ ทั้งหมดลงในหน่วยความจำแบบกายภาพ (แต่ถูกจำกัดด้วยขนาด ของพื้นที่หน่วยความจำจริง) n กรณี single program F ใช้วิธีการ overlay คือการทำให้โปรแกรมที่มีขนาดใหญ่กว่าพื้นที่ใน หน่วยความจำ ให้สามารถดำเนินได้ จัดการโดยโปรแกรมเมอร์ F โดยการแบ่งโปรแกรมออกเป็นโปรแกรมย่อย (sub program) หลายๆ ส่วน และให้แต่ละส่วนมีขนาดเล็กกว่าหน่วยความจำ n กรณี Multiprogram F ใช้หน่วยความจำเสมือน (virtual memory) จัดการโดย OS

5 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 5 ความเป็นมา Background โปรแกรมจะถูกแบ่งออกเป็น 2 ส่วน main program เป็นส่วนของโปรแกรมที่ อยู่ในหน่วยความจำไปตลอดจนกระทั่งการทำงานสิ้นสุดลง และ Sub- Program ในส่วนที่เหลือ จะถูกแบ่งออกเป็นส่วนย่อยๆ และจะถูกโหลดเข้าสู่ หน่วยความจำก็ต่อเมื่อต้องการรันเท่านั้น

6 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 6 ความเป็นมา Background n หน่วยความจำเสมือน (Virtual memory) – การแยกส่วน ของหน่วยความเชิงตรรกะ (logical memory) ของผู้ใช้ออกจาก หน่วยความจำเชิงกายภาพ (physical memory) F มีเพียงส่วนของโปรแกรมที่ต้องการอยู่ในหน่วยความจำเพื่อกระทำ การ (execution) เท่านั้น F พื้นที่ (Logical address) จึงสามารถใหญ่กว่าขนาดของพื้นที่ หน่วยความจำเชิงกายภาพ (physical address space) ได้ F ยินยอมให้มีการใช้พื้นที่หน่วยความจำร่วมกันได้ จากหลายๆ กระบวนการ F ทำให้มีการสร้างกระบวนการขึ้นมาได้โดยสะดวก n Virtual memory สามารถใช้งานผ่าน F Demand paging F Demand segmentation

7 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 7 Virtual Memory That is Larger Than Physical Memory

8 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 8 Demand Paging n นำ page ไปไว้ในหน่วยความจำเฉพาะเมื่อเวลาที่ต้องการเท่านั้น F ลดการใช้ (Less I/O needed) F ลดการใช้หน่วยความจำ (Less memory needed) F โต้ตอบได้รวดเร็วกว่า (Faster response) F รองรับผู้ใช้ได้มากกว่า (More users) n Page ที่ต้องการ  ต้องการมีการอ้างอิงถึง F invalid reference  ยกเลิก (abort) F not-in-memory  นำเข้าหน่วยความจำ (bring to memory)

9 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 9 Transfer of a Paged Memory to Contiguous Disk Space

10 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 10 Valid-Invalid Bit n จะมี valid–invalid bit เชื่อมโยงอยู่ในแต่ละรายการ page table (1  in-memory, 0  not-in-memory) n ต้องกำหนดค่าเริ่มต้น valid–invalid เป็น 0 ทุกรายการ (entries) n Example of a page table snapshot. n ระหว่างการแปลงเลขที่อยู่ ถ้า valid–invalid bit ใน page table entry เป็น 0  page fault  Frame #valid-invalid bit page table

11 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 11 Page Table When Some Pages Are Not in Main Memory

12 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 12 การผิดหน้า Page Fault n ถ้าเคยมีการอ้างอิงบน page ครั้งแรกของการอ้างอิงจะ trap to OS  page fault n OS จะมองหาตารางอื่นเพื่อตัดสินใจว่า F Invalid reference  abort. F ยังไม่มีอยู่ในหน่วยความจำ n จะหา empty frame n Swap page ไปยัง frame นั้น n Reset tables, validation bit = 1. n เริ่มคำสั่ง: Least Recently Used F block move เพิ่มหรือลดตำแหน่งอย่างอัตโนมัติ

13 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 13 Steps in Handling a Page Fault

14 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 14 จะเป็นอย่างไรถ้าไม่มีเฟรมว่าง (free frame)? n การแทนที่ Page (Page replacement) – จะค้นหาบาง page ใน หน่วยความจำที่ยังไม่ได้มีการใช้งานจริง แล้วสลับออกไป (swap out) F algorithm F performance – ต้องใช้ algorithm ที่ทำให้ผลการค้นหาจำนวน การผิดหน้าเหลือน้อยที่สุด n บางหน้า (page) อาจมีการนำเข้าออกหน่วยความจำหลายครั้ง

15 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 15 Performance of Demand Paging n Page Fault Rate 0  p  1.0 F if p = 0 no page faults F if p = 1, every reference is a fault n Effective Access Time (EAT) EAT = (1 – p) x memory access + p (page fault overhead + [swap page out ] + swap page in + restart overhead)

16 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 16 Demand Paging Example n Memory access time = 1 microsecond n 50% ของเวลาที่มีการแก้ไข page ที่ถูกแทนที่ และต้องถูกสลับ ออกไป n Swap Page Time = 10 msec = 10,000 msec EAT = (1 – p) x 1 + p (15000) P (in msec)

17 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 17 การสร้างกระบวนการ Process Creation n Virtual memory ยินยอมให้ใช้ประโยชน์อย่างอื่นได้ในขณะที่ สร้างกระบวนการ - Copy-on-Write - Memory-Mapped Files

18 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 18 Copy-on-Write n Copy-on-Write (COW) ยินยอมให้ทั้ง parent and child processes ในการกำหนดค่า share ใน page เดียวกันใน หน่วยความจำ n ถ้าแม้มีการแก้ไข page ที่ใช้ร่วมกัน ก็จะมีเพียง page นั้นที่ถูก สำเนาไป n COW จะมีการสร้างกระบวนการที่สะดวกกว่า เช่นเดียวกับการสำ page ที่มีการแก้ไข n Free pages จะถูกจัดสรรจาก pool ของ zeroed-out pages.

19 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 19 Memory-Mapped Files n Memory-mapped file I/O ยินยอมให้ file I/O ถูกใช้งานเหมือนรูทีน การเข้าถึงหน่วยความจำได้โดยการ mapping a disk block ไปเป็น page ในหน่วยความจำ n ไฟล์จะถูกกำหนดค่าเริ่มต้นของการอ่านโดยใช้ demand paging สัดส่วนของ page-sized ของไฟล์ที่อ่านจากระบบไฟล์ไปยัง physical page. ลำดับย่อยของ reads/writes ไฟล์จะดำเนินการเช่นเดียวกับการ เข้าถึงหน่วยความจำ n การเข้าถึงไฟล์อย่างง่ายโดย treating file I/O ผ่านหน่วยความจำ มากกว่าการใช้ read() write() system calls. n อนุญาตให้หลายกระบวนการทำการ map ไฟล์เดียวกันให้ใช้ pages ร่วมกันในหน่วยความจำได้อีกด้วย

20 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 20 Memory Mapped Files

21 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 21 การแทนที่หน้า Page Replacement n การป้องกันการจัดสรรเกินหน่วยความจำได้โดยการแก้ไข page- fault service routine เพิ่มเข้าไปใน page replacement n ใช้ modify (dirty) bit ในการลด overhead ของการถ่ายหน้า โดยการแก้ไขเฉพาะหน้าที่ถูกเขียนลงบนดิสก์เท่านั้น n Page replacement จะแยกจากกันอย่างอิสระระหว่าง logical memory และ physical memory – virtual memory ขนาด ใหญ่สามารถสร้างบน physical memory ที่มีขนาดเล็กกว่าได้

22 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 22 Need For Page Replacement

23 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 23 Basic Page Replacement 1. หาตำแหน่งของ page ที่ต้องการบนดิสก์ 2. หา free frame: - ถ้ามี free frame ก็ใช้ - ถ้าไม่มี free frame ให้ใช้ page replacement algorithm ในการเลือก victim frame 3. อ่าน page ที่ต้องการไปไว้บน free frame ใหม่ แล้ว Update ตาราง page และ frame 4. เริ่มดำเนินการกระบวนการ

24 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 24 Page Replacement

25 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 25 Page Replacement Algorithms n ต้องการให้มีอัตราการผิดหน้าต่ำที่สุด (lowest page-fault rate) n ประเมิน algorithm โดยรัน reference string บนหน่วยความจำ และคำนวณจำนวน page faults ของ string นั้น n In all our examples, the reference string is 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.

26 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 26 Graph of Page Faults Versus The Number of Frames

27 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 27 First-In-First-Out (FIFO) Algorithm n Reference string: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 n 3 frames (3 pages สามารถอยู่ในหน่วยความจำ ณ เวลาใด เวลาหนึ่ง ต่อหนึ่งกระบวนการ) n 4 frames n FIFO Replacement – Belady’s Anomaly F frames ยิ่งมาก  page faults ยิ่งลดลง page faults page faults 4 43

28 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 28 FIFO Page Replacement

29 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 29 FIFO Illustrating Belady’s Anamoly

30 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 30 Optimal Algorithm n แทนที่ page ที่จะไม่ถูกเรียกใช้อีกในเวลาอันใกล้นี้ n 4 frames example 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 n จะแทนที่โดยวิธีใด n จะวัดประสิทธิภาพของอัลกอริธึมได้อย่างไร page faults 4 5

31 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 31 Optimal Page Replacement

32 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 32 Least Recently Used (LRU) Algorithm n Reference string: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 n ใช้ตัวนับ (Counter implementation) F นับรายการ (entry) ทุก page ที่เข้ามา, ทุกครั้งที่ page ถูกอ้างอิง ผ่านรายการ, แล้วสำเนาค่านาฬิกาไปยัง counter F เมื่อต้องการเปลี่ยน page ก็ให้มองหา counter เพื่อจะใช้เปลี่ยน หน้า

33 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 33 LRU Page Replacement

34 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 34 LRU Algorithm (Cont.) n ใช้แบบสแต็ก (Stack implementation) – เก็บสแต็กของ หมายเลขหน้า (page numbers) ในรูปการเชื่อมโยงแบบคู่ (double link form): F Page referenced: 4 ย้ายเพ็จนั้นไปยังด้านบน 4 ใช้ 6 pointers ในการเปลี่ยน F ไม่จำเป็นต้องค้นหาเพื่อแทนที่ n การใช้ stack algorithm ช่วยแก้ปัญหา Belady’s Anomaly n แต่ต้องใช้อุปกรณ์ช่วยแทนการใช้เขียนโปรแกรมควบคุมการเรียก interrupt เอง

35 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 35 Use Of A Stack to Record The Most Recent Page References

36 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 36 LRU Approximation Algorithms n การเพิ่มบิตอ้างอิง (Additional-Reference-bits algorithm) F ใช้บนระบบที่ไม่มีอุปกรณ์ช่วย F จับคู่แต่ละหน้าด้วย bit, ค่าเริ่มต้นเป็น = 0 (ยังไม่ใช้) F เมื่อหน้าถูกอ้างอิง บิตอ้างอิงกะจะถูกเปลี่ยนเป็น 1 (ใช้แล้ว) F การแทนที่ในระบบนี้สามารถตรวจสอบได้ว่ามีหน้าใดถูกใช้แล้วหรือ ยัง n การให้โอกาสครั้งที่สอง (Second chance) F ใช้บิตอ้างอิง (reference bit) ใช้การแทนที่แบบนาฬิกา (Clock replacement) เพื่อป้องกันการสับเปลี่ยนหน้าที่ถูกเรียกใช้บ่อย ออกไป F ถ้าหน้าถูกแทนที่ (ตามลำดับนาฬิกา) บิตอ้างอิงจะ = 1 จากนั้น: 4 เปลี่ยนบิตกลับไปเป็น 0 4 เปลี่ยนเวลาที่เข้ามาในหน่วยความจำให้เหมือนเพิ่งเข้ามา 4 ทำการตรวจสอบหน้าอื่นๆ ตามหลักการเช่นเดียวกัน

37 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 37 Second-Chance (clock) Page-Replacement Algorithm

38 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 38 Counting Algorithms n การใช้ตัวนับการอ้างอิงของแต่ละหน้าไว้ n LFU (least frequently used) Algorithm: การเก็บจำนวนครั้งที่ หน้าถูกอ้างอิง และเลือกที่ถูกอ้างอิงน้อยที่สุดออกก่อน n MFU (most frequently used) Algorithm: อยู่บนสมมุติฐาน ที่ว่า หน้าที่ถูกอ้างอิงน้อยนั้นมีโอกาสที่จะถูกมากในเวลาต่อไป เพราะอาจเป็นหน้าที่เพิ่งถูกย้ายเข้ามาในหน่วยความจำ n อย่างไรก็ตาม วิธีการแทนที่หน้าทั้งแบบใช้น้อยออกก่อนและ แบบใช้มากออกก่อนนั้นเป็นแนวคิดที่ไม่แตกต่างกันเท่าใดนัก ประสิทธิภาพจึงขึ้นอยู่กับการคาดการณ์ล่วงหน้าได้ถูกต้องมาก น้อยแค่ไหน การใช้งานมีค่าใช้จ่ายสูง และสู้วิธีการแบบเหมาะ ที่สุด (OPT) ไม่ได้

39 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 39 Page-Buffering Algorithm n ระบบที่มักเก็บหน้าว่างๆ ไว้เป็นกลุ่มๆ n เมื่อเกิด page fault หน้าว่างๆ หน้าหนึ่งก็จะถูกเลือกมาใช้ แต่ยัง ไม่ย้ายออกไปทันที n ระบบจะอ่านหน้าที่ต้องการเข้ามาในเนื้อที่ว่างได้เลยโดยไม่ต้อง รอให้มีการย้ายหน้าเดิมออกไปก่อน n ทำให้ลดเวลาในการย้ายหน้าลงมาก เมื่อมีเวลาว่าง ระบบค่อยทำ การย้ายหน้าที่เลือกออกไปในภายหลัง จากนั้น รวมพื้นที่ว่างเข้า ไว้ในกลุ่ม (clustering)

40 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 40 Operating System Examples n Windows NT n Solaris 2

41 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 41 Windows NT n ใช้ demand paging ร่วมกับ clustering โดยใส่ใน page รอบๆ บริเวณที่เกิดการผิดหน้า n กระบวนการทั้งหมดจะถูกกำหนด working set minimum และ working set maximum n Working set minimum คือจำนวนต่ำสุดของหน้าอยู่ใน หน่วยความจำ n กระบวนการหนึ่งอาจถูกกำหนด working set maximum มีอยู่ หลายๆ หน้า n เมื่อพื้นที่ว่างในหน่วยความจำเหลือกว่าค่าเป้าหมายที่กำหนดไว้ (threshold) การตัดแต่ง working set อย่างอัตโนมัติ (automatic working set trimming) ก็จะเริ่มทำงาน เพื่อ คืนพื้นที่ว่างของหน่วยความจำ n Working set trimming จะย้ายหน้าออกจากกระบวนการที่มีการ ใช้งานหน้า working set minimum ของกระบวนการเหล่านั้น

42 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 42 Paging System ของ Windows NT

43 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 43 Address translation ของ Windows

44 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 44 Solaris 2 n บำรุงรักษารายการของหน้าว่าง (free pages) เพื่อกำหนดให้กับ กระบวนการที่เกิดการผิดหน้า n Lotsfree – threshold parameter จุดเริ่มต้นของการค้นหาหน้า n การค้นหาหน้าจะทำโดยกระบวนการสลับหน้าออก (pageout process) n Pageout scans pages using modified clock algorithm. n Scanrate คือ อัตราที่หน้าจะถูกสแกน มีขอบเขตตั้งแต่ slowscan ถึง fastscan n Pageout ถูกเรียกใช้บ่อยหรือไม่ขึ้นกับจำนวนหน่วยความจำที่ว่าง เหลือมากน้อยเพียงใด

45 วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | หน่วยความจำเสมือน (Virtual Memory) | 45 Solar Page Scanner


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

งานนำเสนอที่คล้ายกัน


Ads by Google