2010-05-26 18 views
10

Devo costruire un simulatore con C#. Questo simulatore dovrebbe essere in grado di eseguire un secondo thread con velocità CPU configurabile e dimensioni RAM limitate, ad es. 144 MHz e 50 MB.
Naturalmente so che un simulatore non può mai essere preciso come l'hardware reale. Ma cerco di ottenere prestazioni quasi simili.
Al momento sto pensando di creare un thread che interromperò/dormirò di tanto in tanto. A seconda della velocità della CPU desiderata, il simulatore dovrebbe regolare il tempo di sospensione di questo thread e quindi simulare la frequenza della CPU. Per misurare la velocità raggiunta ho pensato di usare PerformanceCounters. Ma con questo approccio ho il problema che non so come limitare la dimensione della RAM che il thread potrebbe usare.
Hai qualche idea su come realizzare un simile simulatore?
Come simulare diversa frequenza CPU e limite di RAM

Grazie in anticipo !!

+0

+1 come mi piacerebbe sapere la risposta. Ma temo di trovarti troppo in profondità –

+0

Cerca gli allocatori di arena per limitare la memoria a un totale specifico. – WhirlWind

+3

si noti che il clock rate non è davvero una buona misura per le prestazioni. Su un core del mio Core2Duo downclocked a 1GHz ottengo prestazioni significativamente migliori rispetto a un pentium a 2,5 GHz 4. Se stai cercando di scoprire come il tuo software dovrebbe funzionare su un dispositivo specifico, dovresti provare a ottenere un emulatore del reale patata fritta. – back2dos

risposta

1

Se siete interessati con la simulazione di un ambiente di sistema operativo, allora una risposta potrebbe essere quella di utilizzare un ambiente virtuale le macchine in cui è possibile controllare i parametri di memoria e CPU, ecc

La filettatura pausa \ arresto può aiutare a simulare Frequenza della CPU, ma sarà terribilmente inaccurata, poiché quando si interrompe il thread sarà de-programmato, quindi spetta al sistema operativo riprogrammarlo in un punto "casuale" nel tempo, ovvero un punto che si ha nessun controllo.

Per quanto riguarda la limitazione della memoria, a partire da un nuovo processo che ospiterà il codice è un'opzione, e quindi limitando il ricordo di quel processo, ad esempio:

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

Questo non sarà davvero simulare OS complessiva limitazioni di memoria però.

+0

Per tutte le macchine virtuali che ho visto finora c'è il problema che non posso configurare la velocità della CPU.Inoltre ho il problema che posso limitare le dimensioni della memoria solo per l'intera VM e non per un particolare processo/thread. Il secondo approccio con l'avvio di un nuovo processo e il controllo è una buona idea. – geiserbua

+1

In genere è possibile specificare quale percentuale di risorsa CPU è allocata alla macchina virtuale, quindi questo fornisce un modo "approssimativo" di vincolare la risorsa CPU. Puoi farlo su Hyper-V almeno. PS Se ti piacciono le risposte delle persone - vota su di loro. :) –

3

La memoria di limite è facile con le macchine virtuali come vmware. È possibile modificare la velocità della cpu con alcuni strumenti di overclocking. Per esempio http://cpu.rightmark.org/products/rmclock.shtml Buona fortuna!

+1

+1. La virtualizzazione è probabilmente l'idea migliore. Ha senso che una VM implementi anche un limite di CPU (cicli/millisecondo forse?), Ad esempio se si utilizza un server virtuale. Quindi guarderei se c'è un'opzione per questo. – back2dos

+0

Il problema con le macchine virtuali è che non c'è un modo per cambiare la velocità della CPU – geiserbua

0

Un thread per terminare l'esecuzione del software dei tuoi opcode ospiti?

penso che funziona, ma un po 'strano, come il fast-forward, pausa, FF, pausa, ecc ...

Se si desidera solo per accelerare verso il basso un processo, provate questo: utilizzare la CPU singola passo le funzionalità e "esegue il debug" del processo. Devi scrivere un gestore personalizzato per la trappola stepping single cpu. Il tuo lavoro di gestore è solo un grande ciclo di NOP.

Si dispone di un ritardo minimo tra ciascuna istruzione.

Problemi correlati