Данный термин буквально означает метание, тряска.Если процессу не выделено достаточное число страниц, коэффициент отказов страниц очень высок. Это приводит к тому, что процесс занят в основном откачкой и подкачкой страниц. При этом ОС может сделать неверное заключение о низкой производительности использования процессора и, следовательно ... принять решение об увеличении степени мультипрограммирования, т.е. о добавлении нового процесса к системе.
Неформально, thrashing означает катастрофическую нехватку фреймов в основной памяти. На практике для пользователя это выглядит следующим образом (автор сам неоднократно испытывал подобные ощущения, вынужденный работать на SPARC-станции с очень малым объемом памяти): жесткий диск буквально "надрывается" от непрерывных обращений, а процесс исполняется крайне медленно. Интересно отметить, что SPARC-станция с 32 мегабайтами памяти и ОС Solaris успешно выдерживали эти экстремальные нагрузки (причем на данной конфигурации пропускалась достаточно большая Java-программа). Это говорит о высокой надежности системы Solaris.
Другой реальный пример – использование ОС Windows XP (Service Pack 3) на компьютере с 512 мегабайтами памяти. При этом возникает почти такое же ощущение - сначала кажется, что неисправен жесткий диск, но затем сразу осознаешь, что все дело в нехватке памяти: самые простые программы, такие как Internet Explorer, Windows Explorer и др., будучи вызванными одновременно (что является обычной практикой) переполняют основную память и вынуждают операционную систему при любом дополнительном действии пользователя (даже при простом передвижении полосы прокрутки по именам файлов в Windows Explorer) непрерывной откачкой и подкачкой.
На рис. 18.15 приведен график зависимости использования процессора от коэффициента мультипрограммирования. При очень большом числе обрабатываемых процессов полезность использования процессора резко падает из-за постоянных откачек и подкачек. Это и есть thrashing.
Если более глубоко проанализировать ситуацию с thrashing, то возникает вопрос, с какой целью используется страничная организация. При использовании локальной модели распределения фреймов, процесс мигрирует от одной локальной модели к другой. Однако локальные модели различных процессов могут пересекаться.
Выражаясь более простым языком, thrashing происходит, если сумма размеров локальных потребностей процессов в основной памяти больше общего размера памяти.
Для борьбы с подобными явлениями в операционных системах для распределения фреймов используется модель рабочего множества. Обозначим через Δ (рабочее множество) фиксированное число обращений к страницам.
Рассмотрим WSSi (рабочее множество процесса Pi) - общее число обращений к страницам в самой недавней Δ (меняется в зависимости от времени).
Если Δ очень мало, не рассматриваем полную локальную потребность.
Если Δ слишком велико, рассматриваем несколько локальных потребностей.
Если Δ = ∞, рассматриваем всю программу.
Вычислим величину D = WSSi- общий объем требований фреймов всех процессов. Пусть m – размер основной памяти.
Если D > m то Thrashing (m - общий размер памяти).
Политика ОС по борьбе с thrashing’ом заключается в том, чтобы, если D> m, приостановить один из процессов.
Пример использования рабюочего множества и вычисления WSSiприведен на рис. 18.16.
Рис. 18.16. Пример использования рабочего множества.