2009-10-19 12 views
8

Perché i computer dispongono di memoria indirizzabile per byte e non di memoria indirizzabile a 4 byte (o memoria indirizzabile a 8 byte per 64 bit)? Sì, capisco come possa essere utile a volte, sembra inelegante ed eccessivo. I vantaggi sono sostanziali, o è davvero solo per eredità?Perché la memoria indirizzabile per byte e non la memoria indirizzabile a 4 byte?

+0

Fondamentalmente: perché tagliare una pizza in 8 fette? Aspetta, hai tagliato la tua pizza in 16 fette!?!? –

risposta

6

Processori in realtà do memoria di accesso in quantità di 64 bit (x86 ha funzionato dal Pentium o giù di lì); I processori a 64 bit hanno spesso un bus a 128 bit. Inoltre, nell'accedere alla memoria principale, si hanno raffiche che riempiono un'intera linea della cache, che è ancora più grande unità di memoria.

È solo l'indirizzamento che è basato su byte; questo aggiunge poco overhead e non è affatto eccessivo.

Oggi è assolutamente necessario l'indirizzamento basato su byte per i protocolli di rete. Implementare TCP con l'indirizzamento basato su parole sarebbe difficile: cosa vuoi read() per restituire se quello che hai ricevuto dove 17 byte? Allo stesso modo, i livelli superiori sono basati su byte: HTTP sarebbe piuttosto difficile da implementare se si ottiene una riga di richiesta come "GET/HTTP/1.0" presentata in unità di quattro byte. In sostanza, dovresti dividere le parole in byte con operazioni di spostamento e così via (che ora i processori eseguono nell'hardware, grazie all'indirizzamento basato su byte).

+0

Su una CPU con indirizzo word, la scheda di rete può memorizzare ogni ottetto di rete in una parola macchina (e viceversa per la trasmissione). O per il caso più probabile di impacchettare 4 byte in parole a 32 bit (come Alpha AXP, che non aveva istruzioni byte-load/byte-store nelle prime versioni), il tuo esempio TCP restituirebbe 17, e sarebbe fino a software occuparsi del padding nell'ultima parola usando un turno.(L'alfa era una sorta di byte-indirizzabile, ma supportava solo carichi/negozi di parole allineati a 32 o 64 bit, con alcuni hack per lo spazio degli indirizzi I/O. http://www.tldp.org/HOWTO/Alpha-HOWTO- 8.html) –

+0

Alpha ha aggiunto in seguito carichi/negozi di byte, ma sicuramente ha supportato TCP (utilizzando normali schede di rete PCI, AFAIK) senza di essi. Ciò ha reso efficacemente una macchina indirizzata alla parola, ma con i bit bassi dell'indirizzo a 64 bit che vengono ignorati (o richiesti per essere 0?) Anziché non presenti. –

7

In gran parte ragioni storiche - è diventato lo standard che le CPU comprendono. Here è una buona discussione su di esso:

In generale, una dimensione deve essere scelto per essere conveniente sia per i dati e istruzioni macchina. 8 bit (256 valori) è sufficiente per contenere i caratteri comuni in inglese e alcune lingue . I progettisti di processori a 8 bit presumibilmente hanno trovato che essere in grado di codificare 256 istruzioni comuni come un byte era un "ragionevole compromesso ". E al momento, 8 bit era in genere abbastanza per codificare altre cose come un colore di pixel o la coordinata dello schermo . Avere una dimensione di byte che è una potenza di 2 può anche avere stato ritenuto un design "più ordinato". E È interessante notare che, per esempio, Marxer, E. (1974), Elementi di elaborazione dati, descrive un byte come sia 6-bit e 8 bit seconda che il computer era della tipo "ottale" o "esadecimale".

Certamente, altre dimensioni sono state utilizzate nei primi giorni.

0

Avevamo bisogno di sistemare alcune dimensioni per la standardizzazione. Le persone hanno scelto la dimensione a 8 bit per le ragioni menzionate sopra da Shane. da allora siamo bloccati con memoria byte indirizzabile. ora è impossibile cambiare a causa di vari problemi di compatibilità e il fatto che gli OPCOD sono solo un byte lungo. ma usando un trucco, la memoria è facilmente resa indirizzabile alla parola per recuperare/memorizzare dati/indirizzi!

Problemi correlati