Il motivo per cui è applicato solo ai browser è perché non c'è modo di eliminare completamente le informazioni di temporizzazione ad alta risoluzione dal codice eseguito in modo nativo. Ad esempio, l'istruzione RDTSC
fornisce informazioni precise sulla temporizzazione della risoluzione a nanosecondi a qualsiasi processo. Mentre è possibile disabilitare questa istruzione rendendola eseguibile solo tramite codice privilegiato (impostando il CR4.TSD
bit), gran parte di userland si affida a questo. Tuttavia, anche se lo si è disabilitato con successo senza interruzioni, un timer di risoluzione simile potrebbe essere jerry-rig attraverso l'incremento di una variabile in un loop veloce. Il codice spazio utente sempre ha informazioni di temporizzazione precise al nanosecondo. Tale timer potrebbe essere implementato facilmente:
register volatile unsigned long counter;
void counter_thread(void)
{
while (1) counter++;
}
La funzione counter_thread()
verrebbe eseguita nel proprio thread e in un altro thread, il valore di counter
potrebbe essere campionato in un tempo arbitrario. Poiché la velocità del contatore incrementato sarebbe molto alta e abbastanza costante, fornirebbe un timer ad alta risoluzione simile a RDTSC
.
Di conseguenza, non c'è modo di nascondere informazioni di temporizzazione precise da qualsiasi processo eseguito direttamente sulla CPU. È possibile solo in JavaScript perché è un linguaggio gestito e di alto livello che non ha accesso alle istruzioni della CPU e il tempo deve passare attraverso API dedicate come performance.now()
, che può essere regolata con la sua granularità modificando il motore JavaScript .