Детальный многозадачный мониторинг
Я пытаюсь собрать модель компьютера и запустить на нем некоторые симуляции (часть школьного задания). Это очень простая модель - ЦП, диск и генератор процессов, которые генерируют пользовательские процессы, которые по очереди используют ЦП и обращаются к диску (я решил опустить различные системные процессы, потому что согласно Process Explorer они используют следующий нет времени процессора - я основываю это на инструменте Microsoft Process Explorer, работающем на Windows 7). И на этом я остановился.
Я понятия не имею, как получить релевантные данные о том, как часто различные процессы читают / записывают на диск и сколько данных одновременно, и сколько времени они проводят, используя ЦП. Допустим, я хочу получить некоторую статистику по некоторым типичным операциям на ПК - воспроизведению музыки / фильмов, работе в Интернете, играм, работе с Office, редактированию видео и т. Д.... есть ли способ собрать такие данные?
Я моделирую вытесняющую многозадачность, используя RR с временным интервалом 15 мс для переключения процессов, и вот как это выглядит:
-> Процесс попадает в CPU
-> Процесс выполняет свою работу за 0-15 мс, отказывается от процессора или отключается
И теперь возникают два варианта:
а) процесс просто сидит и ждет, пока он снова не получит процессор или не получит какой-либо пользовательский ввод, если нечего делать; б) обрабатывает запрошенные данные с диска и не присоединяется к очереди, пока эти данные не станут доступны
И я хотел бы, чтобы решение между а) и б) в модели принималось на основе вероятности, например, 90% для а) и 10% для б). Но я не знаю, как сделать эти проценты хотя бы немного реалистичными для определенного типа процесса. Кроме того, к какому количеству данных может обращаться процесс и как правило он получает доступ одновременно?
Любые намеки, источники, утилиты доступны для этого?
1 ответ
Я думаю, что нашел ответ сам, хотя и ненадежный.
Утилита Process Explorer для Windows измеряет дисковый ввод-вывод - по объему и по случаям. Таким образом, есть грубый способ получить ответ: скажем, процесс выполняет 3 000 операций чтения за 30 минут, при этом за это время используется 2% ЦП (при условии одноядерного ЦП). Таким образом, процесс использовал 36000 мс процессорного времени, разделенного на ~5200 блоков (это ненадежная часть - процесс во всей вероятности не использует весь временной интервал, поэтому я просто разделю его на половину временного интервала). 3000/5200 дает 57% шанс чтения данных после использования процессора.
Надеюсь, я не неправильно понял статистику "чтения" в Process Explorer.