Limiti di memoria nei sistemi a 16, 32 e 64 bit


17

I limiti teorici di memoria nelle macchine a 16, 32 e 64 bit sono i seguenti:

  • 16 bit = 65.536 byte (64 Kilobyte)

  • 32 bit = 4.294.967.296 byte (4 Gigabyte)

  • 64 bit = 18.446.744.073.709.551.616 (16 Exabyte)

Ricordo da DOS / Windows 3.11 giorni che la memoria a 16 bit poteva essere suddivisa in segmenti, in modo che una macchina a 16 bit potesse accedere a una quantità maggiore di memoria di 64 Kilobyte.

Ho una macchina con 16 GB di memoria e sto eseguendo il dual boot di un sistema operativo a 32 bit e un sistema operativo a 64 bit. Posso accedere a tutti i 16 GB da 64 bit, ma solo 3,21 GB a 32 bit.

Quindi, la mia domanda è: se i sistemi operativi a 16 bit consentivano un accesso alla memoria maggiore di 64 KB a causa della segmentazione della memoria, perché le macchine a 32 bit non seguono lo stesso principio?

Risposte:


15

Lo fanno, il sistema si chiama Physical Address Extension (PAE) . Ecco un elenco di sistemi operativi Windows e la loro memoria massima, qualsiasi sistema a 32 bit che consente più di 4 GB di RAM utilizza PAE per accedere alla memoria (ad esempio Windows 2003 R2 Datacenter a 32 bit consente 128 GB di RAM).


In effetti Windows 8 richiede una CPU compatibile PAE nei suoi requisiti minimi .


Per rispondere alla domanda "non richiesta" sul motivo per cui il sistema operativo a 32 bit non può accedere alla RAM se esiste: Licenze. Hanno scelto di non consentire alla RAM di superare i 4 GB per i loro sistemi operativi a 32 bit a meno che non si paghi per un'edizione per data center (ecco perché vendono un'edizione per data center, se hai bisogno di così tante ram, probabilmente puoi permetterti di spendere di più denaro su un sistema operativo).


Ah, ho già sentito parlare di PAE ma non l'ho mai indagato. Sembra essere ampiamente utilizzato nell'architettura server, quindi non sembra applicarsi a un'installazione di Windows 7 a 32 bit, poiché l'elenco specifica che W7x86 consente solo fino a 4 GB
Matthew Layton,

1
@ 0xC0000022L per essere onesti, ho aggiunto la parte della licenza come modifica dopo il suo commento, ma a causa della finestra di modifica di 4 minuti sembra che l'ho postata prima che pubblicasse il commento.
Scott Chamberlain

1
PAE richiede il cambio della tabella delle pagine per funzionare, e questo è costoso in termini di prestazioni.
vonbrand,

3
È un mito. Le spese generali dovute al PAE sono minime. E se non ti piace PAE, dovresti davvero odiare x64, perché la struttura della tabella delle pagine su x64 sembra proprio PAE, solo con l'ennesimo livello di tabella aggiunto in alto e più bit per i PFN nei PxE.
Jamie Hanrahan

1
PAE non è stato "rimosso in Windows 7 perché non è più necessario", è ancora presente in Windows 7 x86 - è lì per impostazione predefinita piuttosto che dover essere selezionato in.
Jamie Hanrahan

13

Invece di spiegarlo da solo, lascerò che qualcuno che deve mantenere un kernel con supporto PAE parli nei suoi modi affascinanti, Linus Torvalds

Inoltre, tieni presente che il supporto PAE nelle versioni a 32 bit di Windows è disponibile per molti soldi. XP non sarà nemmeno in grado di utilizzare normalmente 4 GB di RAM, poiché MS ha scelto di non abilitare le funzionalità PAE su di esso. Un kernel strettamente correlato, Windows 2003 Server, supporta PAE. Tuttavia, anche lì la tua "Edizione standard" supporterà solo fino a 4 GiB (ma lavorando attorno al foro di memoria del BIOS), mentre le edizioni più costose consentiranno quindi fino a 64 GiB di RAM. Lo stesso vale per Vista a 32 bit .

Tuttavia, non in tutti i casi questa limitazione è imposta da Windows. Se lo fosse, l'avvio di un kernel Linux abilitato per PAE ti consentirebbe comunque di utilizzare l'intero 4 GiB (o più). Non è così, alcuni produttori di hardware hanno scelto di imporre questa limitazione a livello di BIOS, sebbene la CPU e il chipset sarebbero in grado di gestire PAE.


Solo una nota a margine: nessuno degli attuali processori a 64 bit basati su x86 può persino affrontare fisicamente l'intero intervallo dello spazio di indirizzi a 64 bit (per riferimento vedere questa domanda e risposte).


Hmm, perché ho l'impressione che Linus odi davvero HIGHMEM.SYS e PAE? : P
Karan,

2
Capisco che PAE sarebbe una seccatura per qualsiasi codice che richiedesse più di un paio di concerti di set di lavoro, e per il codice a livello di sistema che deve gestire più attività di 2 o più concerti ciascuno, ma a meno che una singola applicazione non richieda più di 2 concerti mi aspetterei che PAE fosse trasparente. Inoltre, penso che PAE sarebbe anche meglio dell'uso globale di puntatori a 64 bit nei casi in cui erano necessari 3 concerti di RAM per uso generico più una cache del disco di grandi dimensioni o un'unità di archiviazione temporanea.
supercat,

I commenti di Linus sono strani. Non esiste alcuna relazione tra il funzionamento di himem.sys e il funzionamento di PAE. È molto divertente vedere le persone litigare per x64 e contro l'indirizzamento PAE ... quando la modalità lunga x64 prende semplicemente lo schema PAE e aggiunge un ulteriore livello di tabella delle pagine!
Jamie Hanrahan,

@JamieHanrahan: ... almeno due su sistemi più recenti (grazie alla virtualizzazione), che apre alcune interessanti possibilità. I suoi confronti (di Linus) non sono del tutto giusti, ma se si tratta di un concetto estraneo, le metafore possono aiutare :) ... Immagino sia per questo che l'ha scelto per fare il suo punto.
0xC0000022L

2

Le CPU a 8 bit di solito avevano un bus di indirizzo a 16 bit. (Motorola aveva un bus di indirizzo unificato, RAM e I / O periferici condividevano lo stesso spazio di indirizzi, Intel ha scelto di dividere i due. Nel caso di Intel, i limiti di indirizzo IO dell'8088 e dell'8086 erano superiori a quelli dell'8080 e 8085 CPU.)

Gli Intel 8088 e 8086 avevano un bus di indirizzo di memoria a 20 bit (1 MB), mentre il 68000 di Motorola aveva un bus di indirizzo a 24 bit (16 MB). IIRC, il [80] 286 è passato a un bus di indirizzo a 24 bit. Entrambi in seguito si sono espansi su un bus di indirizzo a 32 bit con rispettivamente [80] 386 e 68020.) Con i chip Pentium, il bus di indirizzo si è esteso a 64 bit. (Penso che anche i chip PowerPC Motorola / IBM avessero un bus di indirizzo a 64 bit.)

La memoria disponibile di seguito e fino a un massimo accessibile direttamente dalla CPU era limitata solo dai chip hardware (chipset) e dal sistema operativo di supporto. Bill Gates era famoso in passato per aver affermato che nessuno aveva bisogno di oltre 640 KB di RAM, quindi DOS non si è mai evoluto per accedere direttamente a più RAM. Con HiMem.sys e EMM386, DOS è stato esteso per accedere a più memoria "superiore", con EMM386 utilizzato per accedere direttamente a tutta la RAM disponibile. HiMem.sys aveva meno flessibilità e poteva sostanzialmente usare la RAM aggiuntiva per l'archiviazione.

La memoria che superava quel limite richiedeva una MMU (Memory Management Unit) per suddividere la memoria in segmenti e mapparla nello spazio di memoria indirizzabile della CPU. È così che CoCo 3, Commodore 128 e altri computer a 8 bit potevano accedere a oltre 64 KB di RAM.

Ora è più vantaggioso utilizzare la memoria virtuale per estendere i limiti della memoria fisica del passato, sebbene con i limiti imposti dal sistema operativo.


1

Perché non c'è motivo pratico per farlo. Le estensioni dell'indirizzo fisico offrono più o meno le stesse funzionalità e il loro utilizzo è ancora molto limitato tra gli utenti. Nei giorni di Windows 3.1 c'erano dei vincoli che oggi non sono presenti.


1
Questo in realtà non ha abbastanza informazioni per il backup delle tue dichiarazioni. Windows 3.1 è un sistema operativo a 16 bit. Bisogna ricordare che nel 1992 2 MB di memoria superavano i $ 300.
Ramhound,

Sei il commento del 22 febbraio e la spiegazione di Scott Chamberlin copre praticamente ciò a cui stavo guidando. Tralasciano le descrizioni del motivo per cui l'impaginazione segmentata estensibile è stata utilizzata in DOS / Win16, ma non in Windows successivo. Non l'ho incluso, perché non avrebbe contribuito direttamente a rispondere alla domanda del PO.
OCDtech

A mio avviso, le risposte dovrebbero essere indipendenti. Il tuo commento aggiunge abbastanza informazioni per risolvere i miei problemi con la tua risposta.
Ramhound

1
@OCDtech: il modello segmentato 8086 consentirebbe a un linguaggio orientato agli oggetti di utilizzare riferimenti a oggetti a 2 byte per identificare oggetti allineati su confini a 16 byte, ma i linguaggi non erano ben equipaggiati per utilizzare i segmenti in modo efficace. Il modello 80286 impone un sovraccarico mostruosamente maggiore a tali programmi e il modo in cui è stato esteso sull'80386 renderebbe completamente inutile uno schema segmento per oggetto.
supercat,

0

I limiti teorici di memoria nelle macchine a 16, 32 e 64 bit sono i seguenti ...

Il difetto fondamentale qui è l'idea che la "larghezza di bit" del processore, che di solito è la dimensione dei registri di uso generale della macchina, è necessariamente uguale alla larghezza degli indirizzi RAM.

In x86 con il paging abilitato, ma senza PAE, gli indirizzi che il programma e il codice OS usano sono chiamati "indirizzi lineari" da Intel - di solito li chiamiamo "indirizzi virtuali". Sono larghe 32 bit. Ciò consente uno spazio di indirizzi virtuale di 4 GiB.

Ma è più o meno una coincidenza, semplicemente un artefatto del formato delle voci della tabella delle pagine che anche la dimensione di un indirizzo fisico (RAM) è di 32 bit.

Con PAE, quest'ultimo è di 36 bit (inizialmente ... più ampio nelle implementazioni successive). Quindi, solo perché è, ad esempio, una "macchina a 32 bit" non significa che gli indirizzi di memoria fisica siano limitati a 32 bit.

L'industria ha un lungo storia di macchine la cui "larghezza di bit" non corrispondeva alla dimensione massima dell'indirizzo fisico. Ad esempio, l'architettura VAX definisce una macchina a 32 bit e gli indirizzi virtuali (che sono gli indirizzi utilizzati dal codice una volta attivata la traduzione dell'indirizzo) sono effettivamente larghi 32 bit ... ma gli indirizzi fisici del VAX sono larghi solo 30 bit - e metà dello spazio degli indirizzi fisici è dedicato ai registri dei dispositivi I / O, quindi la RAM massima era solo di 512 MiB.

Anche senza l'hardware di traduzione degli indirizzi, non è necessariamente il caso che la "larghezza di bit" della macchina definisca l'indirizzo RAM massimo. Esempio: le serie CDC "upper 3000" erano macchine a 36 bit. Pensi che potrebbero indirizzare 64 GiB di RAM? Non appena! Quelle macchine uscirono a metà degli anni '60! Cavolo, non potevamo nemmeno avere 64 GB di spazio su disco in quei giorni. (Le serie CDC 6000 erano macchine a 60 bit. Devo andare avanti?)


E non dimenticare i sistemi che non usano 8 bit per cella RAM. (Ad esempio: 16/16 = 128 K massimo, 32/32 = 16 G massimo, 32/64 = 32
G
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.