Как написать программу C или С++ для работы в качестве накопителя и процессора?

Я хочу проверить возможности управления памятью программ, например (например, название программы Director)

  • Что произойдет, если некоторые другие процессы занимают слишком много памяти, а для режиссера слишком мало памяти? Как ведет себя режиссер?
  • Что произойдет, если слишком много циклов процессора используется какой-либо другой программой во время работы режиссера?
  • Что произойдет, если память, используемая другими программами, будет освобождена через некоторое время? Как режиссер утверждает память и начинает работать с полными возможностями. и др.

Я буду делать эти эксперименты на машине Unix. Один из способов - ограничить объем доступной памяти для процесса с помощью ulimit, но нет хорошего способа контролировать цикл процессора использование.

У меня есть другая идея. Что делать, если я пишу какую-нибудь программу на C или С++, которая действует как динамическая память и наполнитель процессора, т.е. ничего не приносит пользы, но все равно выживает память и/или циклы процессора?

  • Мне нужны некоторые идеи о том, как такая программа должна быть структурирована. Мне нужно иметь динамический (runtime) контроль над используемой памятью и используемым процессором.
  • Я думаю, что создание большого количества потоков было бы хорошим способом засорить циклы процессора. Это правильно?

Есть ли лучший подход, который я могу использовать?

Любые идеи/предложения/комментарии приветствуются.

Ответ 1

http://weather.ou.edu/~apw/projects/stress/

Стресс - это преднамеренно простой генератор рабочей нагрузки для систем POSIX. Он накладывает настраиваемое количество CPU, памяти, ввода-вывода и дискового напряжения в системе. Он написан на C и является свободным программным обеспечением, лицензированным под GPLv2.

Функциональность, которую вы ищете, перекрывает набор функций "инструментов тестирования". Так что также проверьте http://ltp.sourceforge.net/tooltable.php.

Ответ 2

Если у вас есть одно ядро, этого достаточно, чтобы подчеркнуть процессор:

while ( true ) {
   x++;
} 

Если у вас много ядер, вам нужен поток на ядро.

Вы делаете его голодным, добавляя несколько спальных мест.

Что касается памяти, просто выделите лоты.

Ответ 3

Есть несколько проблем с такой конструкцией:

  • В виртуальной памяти размер памяти фактически неограничен. (Ну, это ограничено вашим жестким диском...) На практике системы обычно заканчиваются из адресного пространства задолго до того, как у них заканчивается резервное хранилище, а адресное пространство является ресурсом каждого процесса.
  • Любая разумная (не в реальном времени) операционная система собирается ограничить количество процессорного времени и памяти, которые ваш процесс может использовать по сравнению с другими процессами.
  • Это уже сделано.

Что еще более важно, я не понимаю, почему вы хотели бы это сделать.

Ответ 4

Динамическое управление памятью, вы можете просто выделить или освободить буферы определенного размера, чтобы использовать или освобождать больше или меньше памяти. Что касается использования ЦП, вам нужно будет получить функцию ОС, чтобы проверить это и периодически проверять ее и видеть, нужно ли вам делать полезную работу.