Domanda

Cosa a 16 bit, le architetture a 32-bit e 64-bit significano in caso di microprocessori e / o sistemi operativi?

In caso di microprocessori, fa dimensione massima media di General Purpose Registers o dimensioni di Integer o il numero di Address-lines o il numero di Data Bus lines o che cosa?

Cosa si intende dicendo "DOS is a 16-bit OS", "Windows in a 32-bit OS", ecc ...?

È stato utile?

Soluzione

La differenza si riduce alla larghezza po 'di un set di istruzioni passato a un registro di uso generale per operare su. 16 bit possono operare su 2 byte, 64 da 8 byte di istruzione alla volta. Spesso è possibile aumentare la velocità di un processore eseguendo più densi istruzioni per ciclo di clock.

Altri suggerimenti

La mia risposta originale è qui sotto, se si vuole comprendere i commenti.

Nuova risposta

Come dici tu, ci sono una varietà di misure. Fortunatamente per molte CPU molte delle misure sono gli stessi, quindi non c'è confusione. Diamo un'occhiata ad alcuni dati (Ci scusiamo per l'upload delle immagini, non ho potuto vedere un buon modo per fare una tabella in Markdown). i dati di tabella

Come si può vedere, molte colonne sono buoni candidati. Tuttavia, direi che la dimensione dei registri general purpose (verde) è la risposta più comunemente inteso.

Quando un processore è molto variato in formato per diversi registri, sarà spesso descritta più in dettaglio, ad esempio, il Motorola 68k viene descritta come chip a 16 / 32bit.

Altri hanno sostenuto che è la larghezza del bus di istruzioni (giallo), che corrisponde anche nella tabella. Tuttavia, nel mondo di oggi di pipelining direi che questo è un provvedimento molto meno rilevanti per la maggior parte delle applicazioni che la dimensione dei registri di uso generale.


risposta originale

Diverse persone può significare cose diverse, perché come dici tu ci sono diverse misure. Così, per esempio qualcuno parlare di indirizzamento di memoria potrebbe significare qualcosa di diverso per qualcuno parlare di aritmetica intera. Tuttavia, cercherò di definire quello che penso è la comprensione comune.

Il mio prendere è che per una CPU significa "La dimensione del registro tipico utilizzato per operazioni standard" o "la dimensione del bus dati" (i due sono normalmente equivalenti).

I giustificare questo con la seguente logica. Z80 ha un accumulatore 8 bit e un bus dati a 8 bit, pur avendo memoria 16bit indirizzamento registri (IX, IY, SP, PC), e un bus indirizzi di memoria a 16 bit. E la Z80 è chiamato un microprocessore a 8 bit. Ciò significa che le persone devono normalmente significa il numero intero dimensione principale aritmetica, o bus dati dimensioni, non la dimensione di indirizzamento della memoria.

Non è la dimensione delle istruzioni, come lo Z80 (di nuovo) aveva 1,2 e 3 istruzioni byte, anche se, naturalmente, il multi-byte sono stati letti in più letture. Nella direzione opposta, il 8086 è un microprocessore a 16 bit e può leggere 8 o 16 bit istruzioni. Così avrei dovuto essere d'accordo con le risposte che dicono che è formato di istruzioni.

Per i sistemi operativi, lo definirei come "il codice viene compilato per funzionare su una CPU di quelle dimensioni", quindi un OS 32bit ha codice compilato per funzionare su una CPU 32 bit (secondo la definizione di cui sopra).

Quanti bit una CPU "è", cosa significa la sua lunghezza di parola di istruzione è. Su una CPU 32 bit, la lunghezza della parola di tale istruzione è 32 bit, il che significa che è la larghezza ciò che una CPU può gestire come istruzioni o dati, spesso causando una linea di bus con quella larghezza. Per un motivo simile, registri hanno la dimensione della lunghezza di parola della CPU, ma si deve spesso registri più grandi per scopi diversi.

Prendere il computer PDP-8 come esempio. Questo era un computer a 12 bit. Ogni istruzione era a 12 bit a lungo. Per gestire i dati della stessa larghezza, l'accumulatore è stato anche a 12 bit. Ma ciò che rende il computer a 12 bit di una macchina a 12 bit, è stata la sua lunghezza di parola di istruzione. Aveva dodici interruttori sul pannello anteriore con cui potrebbe essere programmato, istruzione per istruzione.

Questo è un buon esempio di uscire la messa a fuoco 8/16/32 bit.

Il conteggio bit è anche in genere la dimensione del bus indirizzi. E 'quindi in genere indica la memoria massima indirizzabile.

C'è una buona spiegazione di questo a Wikipedia :

  

In architettura calcolatore, interi a 32 bit, indirizzi di memoria, o altre unità di dati sono quelli che sono al massimo 32 bit (4 ottetti) di larghezza. Inoltre, CPU 32 bit e architetture ALU sono quelli che si basano sui registri, autobus indirizzo o bus di dati di tale dimensione. 32-bit è anche un termine dato a una generazione di computer in cui processori a 32 bit erano la norma.

Ora parliamo di OS.

Con OS-es, questo è il modo meno legato al vero e proprio "Bitty-ness" della CPU, di solito riflette come codici operativi vengono assemblati (per il quale la parola lunghezza della CPU) e come i registri sono destinatari (si puo' t caricare un valore a 32 bit in un registro a 16 bit) e come memoria sono destinatari. Pensate a come il programma completato, compilato. È memorizzato come istruzioni binarie e deve adattarsi alla lunghezza di parola CPU. Task-saggio, deve essere in grado di affrontare l'intera memoria, altrimenti non poteva fare una corretta gestione della memoria.

Ma che cosa è venuto al dunque, è se un programma è a 32 o 64 bit (un sistema operativo è essenzialmente un programma qui) che come i suoi istruzioni binarie vengono memorizzati e come registri e la memoria sono stati affrontati. Tutto sommato, questo vale per tutti i tipi di programmi, non solo OS-es. È per questo che avete programmi compilati per 32 bit o 64 bit.

Le definizioni sono termini di marketing più di termini tecnici precisi.

In sfocato termine tecnico che sono più legati alle larghezze architettonico visibili rispetto qualsiasi registro implementazione reale o larghezza del bus. Per esempio il 68008 è stato classificato come una CPU a 32 bit, ma aveva registri a 16 bit nel silicio e solo un bus dati a 8 bit e bit di indirizzo 20-dispari.

http://en.wikipedia.org/wiki/64-bit # 64-bit_data_models i modelli di dati bitness media per la lingua.

Il "sistema operativo è x-bit" frase di solito significa che il sistema operativo è stato scritto per la modalità cpu x-bit, che è, a 64-bit di Windows utilizza la modalità a lungo su x86-64, dove i registri sono 64 bit e lo spazio indirizzo è 64 bit grande e ci sono altre differenze distinte dalla modalità 32-bit, dove tipicamente registri sono larghe 32 bit e spazio di indirizzi è di 32 bit grande. Su x86 una grande differenza tra 32 e 64 bit modalità è presenza di segmentazione in 32 bit per la compatibilità storica.

Di solito il sistema operativo è scritto con bitness CPU in mente, x86-64 essendo un notevole esempio di decenni di compatibilità all'indietro - si può avere tutto dai programmi in modalità reale a 16 bit attraverso 32-bit programmi in modalità protetta a 64 bit programmi a lungo mode.

In più ci sono diversi modi per virtualizzare, in modo che il programma può funzionare come se in modalità a 32 bit, ma in realtà viene eseguito da un nucleo non-x86 a tutti.

Quando si parla di circa 2 ^ n architetture bit in informatica allora stiamo fondamentalmente parlando di registri di memoria, l'indirizzo formato autobus o dimensioni bus dati. Il concetto alla base termine di 2 ^ n architettura bit è a significare che questo qui 2 ^ n bit di dati può essere fatto uso di indirizzo / trasportare i dati di dimensione 2 ^ n da processi.

Per quanto ne so, tecnicamente, è la larghezza dei percorsi interi. Ho sentito parlare di chip a 16 bit che a 32 bit hanno indirizzamento. Tuttavia, in realtà, è la larghezza indirizzo. sizeof (void *) è 16bit su un chip 16bit, 32bit su un 32bit e 64bit su un 64bit.

Questo porta a problemi perché C e C ++ consentire conversioni tra * vuoto e tipi integrali, ed è sicuro se il tipo integrale è abbastanza grande (le stesse dimensioni del puntatore). Questo ha portato a tutti i tipi di roba non sicuri dal punto di vista

void* p = something;
int i = (int)p;

Che sarà orribilmente crash e bruciare sul codice a 64 bit (32 bit) opere perché void * è ora due volte più grande come int.

Nella maggior parte delle lingue, si deve lavorare sodo per prendersi cura circa la larghezza del sistema su cui stai lavorando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top