Thrash

Thrash ในความหมายเชิงวิทยาการคอมพิวเตอร์ หมายถึงปรากฏการณ์ที่คอมพิวเตอร์มีประสิทธิภาพการทำงานลดลง
อันเนื่องมาจากการใช้เวลาในการสับเปลี่ยนกันใช้ทรัพยากรหลายครั้งมาก ปรากฏการณ์ที่มักจะพบบ่อยอาทิเช่น การสับเปลี่ยนหน้า
(paging) ใน หน่วยความจำเสมือน ซึ่งใช้ หน่วยความจำจริง เต็มแล้ว ทำให้เกิด Page Fault หลายครั้งและต้องเสียเวลาในการสับเปลี่ยนหน้าในแต่ละครั้ง
ส่งผลให้การทำงานของคอมพิวเตอร์ช้าลง

การ Thrash ในหน่วยความจำเสมือน 

การ Thrash ในหน่วยความจำเสมือน เกิดจากการที่โปรเซสหลายโปรเซสสับเปลี่ยนหน้า (page) ของตนเองเข้าทำงานใน
หน่วยความจำกายภาพ จนกระทั่งหน่วยความจำกายภาพเต็ม และมีโปรเซสเข้าทำงานอีกจำนวนมาก ทำให้เมื่อโปรเซสเริ่ม
ทำงาน ก็จะมีการสับเปลี่ยนหน้า (page) ของโปรเซสอื่นออกแล้วเอาหน้าของโปรเซสที่จะทำงานสับเปลี่ยนเข้ามาแทน
การสับเปลี่ยนหน้านั้นเป็นการติดต่อกับฮาร์ดดิสก์ ซึ่งใช้เวลาในการเข้าถึงนานมาก พอโปรเซสนี้ทำงานเสร็จ ก่อนโปรเซสอื่น
เข้ามาทำงานก็ต้องมีการสับเปลี่ยนหน้า (page) ของโปรเซสนั้นเข้ามาอีกและเอาหน้าของโปรเซสแรกออกไป ทำให้
ทุกๆโปรเซส ต้องเสียเวลาการทำงานในส่วนที่สับเปลี่ยนหน้านี้มาก อีกทั้งในช่วงที่สับเปลี่ยนหน้า CPU จะว่าง จึงนำโปรเซส
ใหม่เข้ามาอีก ซึ่งยิ่งสร้างปัญหาเข้าไปอีก จึงให้ประสิทธิภาพการทำงานของคอมพิวเตอร์ลดลงอย่างมาก

วิธีการตรวจสอบ Thrash โดยใช้ Working-Set Model 

Working-Set คือเซตของ page ที่ถูกใช้ในช่วงใดๆช่วงหนึ่ง
ซึ่งอาจถูกกำหนดโดยเวลา หรือจำนวนคำสั่ง อาทิ 5 มิลลิวินาที หรือ 10,000 คำสั่ง เป็นต้น เรียกช่วงที่ถูกกำหนดว่า
(Working-Set Window :)

Working Set ที่มีขนาดใหญ่แสดงว่าในขณะนั้นมีการใช้งานทรัพยากรเป็นจำนวนมากในระยะเวลาสั้น
ซึ่งอาจเกิด Thrash ได้ วิธีการป้องกัน Thrash ก็คือ การตั้งลิมิตไม่ให้ขนาดของ Working Set มีค่าเกินค่าค่าหนึ่งนั่นเอง
เมื่อ Working Set มีขนาดมากกว่าค่าลิมิต ก็ต้องกันไม่ให้โปรเซสใหม่เข้าทำงาน และเลือกลบโปรเซสบางตัวออกบ้าง
จนกว่า Working Set จะมีขนาดน้อยกว่าค่าลิมิตที่ตั้งไว้

Page Fault Frequency 
Page Fault Frequency เป็นอีกวิธีการหนึ่งที่การป้องการ Thrash โดยการนับความถี่ของการที่เกิด Page Fault
ถ้าเกิดความถี่ของ Page Fault มากเกินไป โดยเราจะกำหนดขีดจำกัดบน ( Upper Threshold )
คือถ้ามากกว่าที่เราตั้งไว้ แสดงว่าเกิด Page Fault หลายครั้ง ก็จะควรป้องกันไม่ให้โปรเซสใหม่
เข้ามาทำงาน และลดจำนวนโปรเซสลง แต่ถ้าความถี่ในการเกิด Page Fault น้อยเกินไป
โดยเราจะกำหนดขีดจำกัดล่าง ( Lower Threshold ) คือถ้าน้อยกว่าค่านี้ แสดงว่ามีทรัพยากรมีเพียงพอ
ก็ให้โปรเซสใหม่เข้ามาทำงานได้

สำหรับวิธีการหาความถี่ทำได้โดยเก็บเวลาสุดท้ายที่เกิด page fault ()เอาไว้ และเมื่อเกิด page fault ก็นำเวลาปัจจุบันลบด้วยเวลาที่ครั้งสุดท้ายที่เกิด page fault แล้วหาส่วนกลับ ก็จะได้ความถี่

แหล่งข้อมูลอื่น 
 Abraham Silberschatz, Peter Baer Galvin and Greg Gagne. "Operating System Principles".

ระบบปฏิบัติการ