Halt and Catch Fire: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Catand (discussione | contributi)
Nessun oggetto della modifica
descrizione meno aneddotica
Riga 1:
{{nota disambigua|l'omonima serie televisiva|[[Halt and Catch Fire (serie televisiva)]]}}
{{F|componenti per computer|marzo 2013|Nessuna fonte}}
'''Halt and Catch Fire''', conosciuto(fermat e prendi fuoco), ancheindicato con la sigla mnemonica di '''HCF''', descriveè unaun'istruzione ofittizia piùdel istruzionilinguaggio non documentate[[assembly]], dagliintesa effettiprevalentemente potenzialmentecome distruttiviuno scherzo, incluseche inè moltestata architettureusata eper utilizzatedefinire peristruzioni potersolitamente effettuarenon agevolmentedocumentate particolariche testportano durantela loCPU sviluppoin deiuno prodotti.stato Ilda primocui esempiopuò conosciutoessere risalefatta aluscire computersolo [[IBMcon System/360]]un reset.
 
Solitamente con la sigla HCF si descrive una o più istruzioni non documentate presenti in molte architetture e utilizzate per poter effettuare agevolmente particolari test durante lo sviluppo dei prodotti, ma che non sono da utilizzarsi nella normale operatività.
Il microprocessore [[Motorola 6800]] è il primo prodotto dove l'istruzione '''HCF''' è stata studiata in modo approfondito. L'istruzione spinge il processore a modificare rapidamente le uscite delle linee collegate al [[Bus (informatica)|bus]] di sistema. In alcuni sistemi questa commutazione "non autorizzata" del bus può bruciare le linee che compongono il bus poiché potrebbero andare in conflitto con le periferiche collegate al bus stesso, producendo un [[cortocircuito]].
 
== Origine ==
 
Si ritiene che l'origine del nome risalga ad un aneddoto apocrifo in circolazione nei primi anni sessanta del XX secolo. Si raccontava che gli ingegneri che lavoravano allo sviluppo sui computer I[[IBM System/360]] avessero aumentato le correnti di lettura/scrittura delle [[Memoria a nucleo magnetico|memorie a nucleo magnetico]] al fine di migliorare le prestazioni. La modifica non avrebbe avuto effetti durante la normale operatività del computer, ma purtroppo l'istruzione di spegnimento HALT era implementata con un ciclo generato da un'istruzione di salto a sè stessa, cosa che provocava l'accesso ripetuto e rapidissimo alla medesima cella di memoria, il che avrebbe provocato il surriscaldamento dei fili al punto che essi avrebbero iniziato a fumare.
 
== Nelle CPU moderne ==
 
=== Motorola 6800 ===
Il microprocessore [[Motorola 6800]] è il primo prodotto dove lè stata identificata un'istruzione '''HCF'''. èL'istruzione, stataintrodotta studiataquasi insicuramente mododurante approfondito.le L'istruzionefasi di test del prodotto, spinge il processore a modificare rapidamente le uscite delle linee collegate al [[Bus (informatica)|bus]] di sistema., Inconsentendo alcuniuna sistemirapida questa commutazione "non autorizzata"verifica del busfunzionamento puòdi bruciaretutte le linee che compongono il bus poiché potrebbero andare in conflitto con le periferiche collegate al bus stesso, producendo un [[cortocircuito]].
 
L'uso di tale codice mette il processore in uno stato in cui non può più rispondere agli interrupt, cosicché l'unico modo per ritornare alla normale attività è quello di resettare l'apparto.
 
La medesima istruzione è presente nel microprocessore [[Motorola 6809]].
 
=== Intel x86 ===
 
Il processore Intel 8086 e i successivi processori della serie x86 implementano un'istruzione HLT (alt) che interrompe l'esecuzione delle istruzioni e mette il processore in uno stati di blocco. Esistono una serie di condizioni (un interrupt, un'eccezione di debug e vari altri segnali) che riportano il processore nello stato normale.
Tuttavia le prime versioni del chio IntelDX4 avevano un problema che impediva a tali eventi di ripristinare lo stato normale, cosa che in effetti rendeva l'istruzione HLT un'istruzione HCF.
 
==== Pentium F00F bug ====
Molti processori della linea Intel Pentium possono essere bloccati mandando in esecuzione del codice macchina contenente la sequenza di byte <code>F0 0F C7 C8</code>, corrispondente all'istruzione assembly:
 
<code>
lock cmpxchg8b eax</code>
 
L'istruzione comparerebbe il valore dei registri ''edx'' e ''eax'' con un valore a 8 byte di una locazione di memoria, ma in questo caso al posto della locazione di memoria c'è un registro. In circostanze normali, l'istruzione provocherebbe un'eccezione, ma l'uso del prefisso ''lock'' (che di solito previene l'accesso contemporaneo di due processori alla stessa locazione di memoria) spinge la CPU ad utilizzare una modalità di accesso al bus non consentita, bloccando l'esecuzione immediatamente dopo.
Tale comportamento è conosciuto con il nome ''Pentium F00F bug''. Sebbene nessun compilatore generi codice macchina con tale istruzione, un hacker può inserirla appositamente in un programma causando il blocco del computer dove questo venga eseguito.
 
Dopo la scoperta del bug, sono stati sviluppati dei meccanismi per prevenire il blocco del computer. Il bug è stato corretto nei processori Intel delle serie successive.
{{Portale|informatica}}