In realtà, sì. Il metodo più efficace consiste semplicemente nel patch dei tempi di esecuzione nel caricatore. Le cose del kernel/demone possono avere patch personalizzate per una migliore reattività. Ancora meglio, se si ha accesso a tutti i sorgenti, è possibile applicare patch al compilatore.
La patch può essere costituita da un programmatore distribuito di ordinamento.Ogni programma può essere aggiornato per avere un timer a latenza molto bassa; al caricamento, imposterà il timer, e ad ogni ritorno dallo scheduler, lo ripristinerà. Un metodo semplice permetterebbe di codice per fare semplicemente un
if (timer - start_timer) yield to scheduler;
che non cede troppo grande un calo di prestazioni. Il problema principale è trovare dei buoni punti per farli scoppiare. Tra ogni chiamata di funzione è un inizio, e rilevare i loop e inserirli è primitivo ma efficace se hai davvero bisogno di anticipare in modo reattivo.
Non è perfetto, ma funzionerà.
Il problema principale è assicurarsi che il ritorno del timer sia a bassa latenza; in questo modo è solo un confronto e un ramo. Inoltre, gestendo le eccezioni - errori nel codice che causano, per esempio, cicli infiniti - in qualche modo. È possibile utilizzare tecnicamente un timer watchdog hardware abbastanza semplice e asserire un reset sulla CPU senza cancellare la RAM; una routine in-RAM sarebbe il punto in cui i punti di RESET vector, che ispezionerebbero e riposizionerebbero lo stack alla chiamata del programma (bloccando così il programma ma preservando tutto il resto). È un po 'come una bruta-forza se-tutto-altro-fallisce il crash del programma. Oppure potresti POTENZIALMENTE cambiarlo in multi-task in questo modo, RESET come interruzione, ma è molto più difficile.
Quindi ... sì. È possibile ma complicato; usando tecniche di compilatori JIT e di traduttori dinamici (gli emulatori li usano).
Questa è una spiegazione un po 'confusa, lo so, ma sono molto stanco. Se non è abbastanza chiaro, posso tornare a chiarirlo domani.
A proposito, affermare il ripristino su un mid-program della CPU sembra pazzesco, ma è una tecnica consolidata e consolidata. Le prime versioni di Windows lo facevano persino per attivare la modalità di compatibilità, penso 386, correttamente, perché non c'era modo di tornare a 32 bit dalla modalità a 16 bit. Anche altri processori e sistemi operativi hanno funzionato.
EDIT: Quindi ho fatto qualche ricerca su cosa sia la DCPU, haha. Non è una vera CPU. Non ho idea se tu possa affermare il reset nell'emulatore di Notch, vorrei chiederglielo. Tecnica pratica, cioè.
noti che DCPU-16 ha interrupt ora . – blueshift
Lo fa? A partire dal 4 maggio 2014 la versione della documentazione disponibile sul sito Web (http://0x10c.com/doc/dcpu-16.txt) è ancora 1.1 e non ha interruzioni. C'è qualche documentazione sulle nuove funzionalità? –
Suppongo che tu non reddit o utilizzare il forum. Controlla [questo cattivo ragazzo (specifica 1.7)] (http://pastebin.com/raw.php?i=Q4JvQvnM) fuori! Ne parliamo su freenode IRC# 0x10c-dev se vuoi passare. – blueshift