2010-05-26 3 views
10

Мне нужно построить симулятор с C#. Этот симулятор должен иметь возможность запускать второй поток с настраиваемой скоростью процессора и ограниченным объемом ОЗУ, например. 144 МГц и 50 МБ.
Конечно, я знаю, что симулятор никогда не может быть таким точным, как реальное оборудование. Но я стараюсь добиться почти одинаковой производительности.
В настоящий момент я думаю о создании потока, который я время от времени остановлюсь/спать. В зависимости от желаемой скорости процессора симулятор должен отрегулировать время сна этой нити и, следовательно, имитировать частоту процессора cpu. Чтобы измерить достигнутую скорость, я хотя бы об использовании PerformanceCounters. Но при таком подходе у меня есть проблема, что я не знаю, как ограничить размер ОЗУ, который может использовать поток.
Есть ли у вас идеи, как реализовать такой симулятор?
Как имитировать разную частоту процессора и ограничение ОЗУ

Заранее спасибо!

+0

+1 как я хотел бы знать ответ. Но я боюсь, что вы находитесь в слишком глубокой воде. –

+0

Посмотрите на распределители арены, чтобы ограничить память до определенной суммы. – WhirlWind

+3

обратите внимание, что тактовая частота не является хорошей мерой производительности. На одном ядре Core2Duo с пониженным до 1 ГГц я получаю значительно лучшую производительность, чем на 2,5 ГГц пентий 4. Если вы пытаетесь выяснить, как ваше программное обеспечение будет работать на определенном устройстве, вы должны попытаться получить эмулятор фактического чип. – back2dos

ответ

1

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

резьбы паузы \ остановка может помочь вам моделировать Частота процессора, но это будет ужасно неточно, так как когда вы приостанавливаете поток, он будет отключен, тогда операционная система перераспределит его в какой-то «случайный» момент времени, то есть точку, которую вы имеете без контроля.

Что касается ограничения памяти, начиная новый процесс, который будет размещен ваш код является вариантом, а затем ограничить память этого процесса, например:

http://www.codeproject.com/KB/threads/Setting_Max_Memory_Limit.aspx

Это не будет реально имитировать общую ОС ограничения памяти.

+0

Для всех виртуальных машин, которые я видел до сих пор, проблема в том, что я не могу настроить скорость процессора.Кроме того, у меня есть проблема, что я могу ограничить размер памяти только для всей виртуальной машины, а не для конкретного процесса/потока. Второй подход с началом нового процесса и контролем - хорошая идея. – geiserbua

+1

Обычно вы можете указать, какой процент ресурсов ЦП выделяется VM, поэтому это дает «грубый» способ ограничения ресурса ЦП. Вы можете сделать это на Hyper-V по крайней мере. PS Если вам нравятся ответы людей - проголосуйте за них. :) –

3

Ограничить память с помощью виртуальных машин, таких как vmware. Вы можете изменить скорость процессора с помощью некоторых инструментов разгона. Например http://cpu.rightmark.org/products/rmclock.shtml Удачи!

+1

+1. Виртуализация, вероятно, лучшая идея. Имеет смысл для виртуальной машины также реализовать колпак процессора (например, циклы/миллисекунда?), Например, если используется виртуальный сервер. Поэтому я бы посмотрел, есть ли для этого вариант. – back2dos

+0

Проблема с виртуальными машинами заключается в том, что не существует способа изменить скорость процессора – geiserbua

0

Нить, чтобы спать с выполнением программного обеспечения ваших гостевых опкодов?

Я думаю, что это работает, но это немного странно, как быстрая перемотка вперед, пауза, перемотка, пауза, и т.д. ...

Если вы просто хотите, чтобы ускорить процесс вниз, попробуйте следующее: использовать процессор одного и «отлаживать» процесс. Вы должны написать собственный обработчик для одиночной паутинной ловушки процессора. Работа вашего обработчика - это только большая петля NOP.

У вас есть небольшая задержка между каждой инструкцией.

Смежные вопросы