Funzionamento CPU

di il
28 risposte

Funzionamento CPU

Ciao a tutti!
Sto cercando di capire il funzionamento della CPU e ho alcuni dubbi.
Perché con 32 bit al massimo posso utilizzare 4GB?
Illustro i miei ragionamenti (che sono errati) al fine di farvi capire dove sbaglio.
Il bus di indirizzi mi fornisce il numero di celle di memoria che è possibile indirizzare, formula 2^n, dove n sono il numero di bit.
Poi abbiamo l'ampiezza della memoria che è uguale al bus dati che ha grandezze variabili, generalmente uguale alla dimensione dei registri della CPU. ( per registri della CPU si intendono tutti, ovvero MAR, MDR, PC e registri utente???).
Essendo la capacità della memoria pari a memoria indirizzabile per ampiezza della memoria (ampiezza data bus), in un sistema a 32 bit viene più di 4GB di memoria che posso gestire -.-' .
Esempio ho un pc a 32 bit io posso indirizzare 2^32 = 4GB ampiezza memoria = 64 bit, memoria che posso gestire = 2^32 *8 bytes che viene piu di 4GB.
Perdonate le corbellerie.
Grazie a chiunque mi aiuterà.
Marco

28 Risposte

  • Re: Funzionamento CPU

    2^32 = 4G

    e basta. Tutti gli altri calcoli non hanno senso
  • Re: Funzionamento CPU

    Me lo potresti spiegare il perché? vorrei capire come funziona questa cosa
    bus dati = ampiezza memoria è giusto?
    quando si parla di processore a 32/64 bit quali sono i registri che hanno queste dimensioni (tutti ovvero MAR, MDR, PC e registri utente)?
  • Re: Funzionamento CPU

    No
    Il bus indirizzi serve ad indirizzare la memoria quindi il numero di celle di memoria utilizzabili dipende solo dal numero di bit del bus degli indirizzi.

    Il bus dati determina solo quanti bit sarà possibile trattare durante lo spostamento dei dati

    I registri e la loro dimensione dipende dalla specifica CPU ma quello che è importante sono i bit nel bus indirizzi
  • Re: Funzionamento CPU

    Va bene:) spero che qualcuno mi aiuti!
    Può sembrare che voglio la risposta bella e pronta ma questo dubbio che ho non riesco a trovarlo da nessuna parte (ne su i libri e ne sul web).
    Grazie lo stesso Oregon, almeno ora so che il bus dati non c'entra nel calcolo della memoria che posso gestire
  • Re: Funzionamento CPU

    Penso che la CPU sia tra i componenti più documentati e su cui esistono più informazioni su internet.

    Cerca Address Bus
  • Re: Funzionamento CPU

    Nonloso93 ha scritto:


    bus dati = ampiezza memoria è giusto?
    No, considera che sono tre cose ben diverse: il fatto che un processore sia detto a "x bit", il bus dati e il bus indirizzi.

    Ci sono stati in passato processori come il 68008 della Motorola che era un processore a 32 bit (come gli altri della famiglia 680xx) ma aveva il bus dati a solo 8 bit. E per il bus indirizzi le possibilità variavano in base al tipo di package fisico. Quello con package a 48 pin dual-in-line aveva 20 bit di indirizzo (1 MByte di indirizzamento) mentre quello a 52 pin PLCC aveva 22 bit di indirizzo (4 MByte).

    Per sapere se un processore è a x bit devi guardare l'architettura interna e il set di istruzioni. Se un processore ha tutti (o quasi) i registri a 32 bit e se tutte le istruzioni (o quasi, perlomeno la maggior parte) possono operare su 32 bit, allora tipicamente si dice che è "a 32 bit".
    Poi il bus dati e il bus indirizzi possono essere anche più ampi o al contrario più "castrati" in base a scelte architetturali e/o vincoli legati al packaging fisico.
  • Re: Funzionamento CPU

    oregon ha scritto:


    Penso che la CPU sia tra i componenti più documentati e su cui esistono più informazioni su internet.

    Cerca Address Bus
    Ciao Oregon, si il problema è che non riesco a capire il concetto di memoria che si può gestire. Mi è chiaro che il numero di indirizzi dipende soltanto dall'address bus ma se poi ogni cella di memoria può gestire un certo numero di bit perché non ha senso address bus per ampiezza memoria?
    Ne avete parlato anche in un post recente, allego il link
    https://www.iprogrammatori.it/forum-programmazione/hardware/massima-memoria-indirizzabile-t31453.html
    Riporto anche un altro esercizio, ma nel web ce ne sono diversi:
    Esempio 2. In un calcolatore abbiamo locazioni di memoria di 32 bit con relativi indirizzi di 28 bit.
    Quanta memoria riusciamo complessivamente ad indirizzare?
    Soluzione. Le celle di memoria sono composte da 32 bit = 4 bytes, mentre lo spazio di
    indirizzamento è di 228 celle. Pertanto la memoria che riusciamo ad indirizzare è (al massimo):
    4 bytes × 228 = 230 bytes = 1 Gigabyte.
    Grazie per il supporto!
    Allegati:
    31182_9d80c8462e2665a6efe7e7b2b0fdf2c3.png
    31182_9d80c8462e2665a6efe7e7b2b0fdf2c3.png

    31182_932dd3abf2c116c0de39975b71e91b5c.png
    31182_932dd3abf2c116c0de39975b71e91b5c.png

    31182_2058e50540e4de3835f84736a3f7a1be.png
    31182_2058e50540e4de3835f84736a3f7a1be.png
  • Re: Funzionamento CPU

    andbin ha scritto:


    Nonloso93 ha scritto:


    bus dati = ampiezza memoria è giusto?
    No, considera che sono tre cose ben diverse: il fatto che un processore sia detto a "x bit", il bus dati e il bus indirizzi.

    Ci sono stati in passato processori come il 68008 della Motorola che era un processore a 32 bit (come gli altri della famiglia 680xx) ma aveva il bus dati a solo 8 bit. E per il bus indirizzi le possibilità variavano in base al tipo di package fisico. Quello con package a 48 pin dual-in-line aveva 20 bit di indirizzo (1 MByte di indirizzamento) mentre quello a 52 pin PLCC aveva 22 bit di indirizzo (4 MByte).

    Per sapere se un processore è a x bit devi guardare l'architettura interna e il set di istruzioni. Se un processore ha tutti (o quasi) i registri a 32 bit e se tutte le istruzioni (o quasi, perlomeno la maggior parte) possono operare su 32 bit, allora tipicamente si dice che è "a 32 bit".
    Poi il bus dati e il bus indirizzi possono essere anche più ampi o al contrario più "castrati" in base a scelte architetturali e/o vincoli legati al packaging fisico.
    Perfetto ci sono ma che intendi per quasi tutti i registri del processore? perché io ho trovato sia sui libri che nel web che il sistema a 64/32 bit è dovuto alla dimensione dei registri della CPU, ma quali nello specifico?
    Poi un altro dubbio ma l'ampiezza di una cella di memoria è uguale al data bus o dipende?
    Grazie mille andbin
  • Re: Funzionamento CPU

    Nonloso93 ha scritto:


    Esempio 2. In un calcolatore abbiamo locazioni di memoria di 32 bit con relativi indirizzi di 28 bit.
    Quanta memoria riusciamo complessivamente ad indirizzare?
    Soluzione. Le celle di memoria sono composte da 32 bit = 4 bytes, mentre lo spazio di
    indirizzamento è di 228 celle. Pertanto la memoria che riusciamo ad indirizzare è (al massimo):
    4 bytes × 228 = 230 bytes = 1 Gigabyte.
    Sinceramente non ho capito questi tuoi calcoli .... 228 cosa?

    Allora: se un processore supporta indirizzi fisici a 32 bit, indirizzerà (teoricamente) 2^32 byte, ovvero 4294967296 byte. Ripeto, BYTE, questa è l'unità fondamentale. Poi dipende dalla ampiezza del bus dati.

    Supponiamo che abbia tutti i pin necessari (non sia un processore "castrato" come dicevo prima):
    - se avesse un bus dati a 8 bit, avrà i pin D0...D7 (dati) e i pin A0,A1,A2.....A31 (indirizzi)
    - se avesse un bus dati a 32 bit, avrà i pin D0....D31 (dati) e i pin A2,A3...A31 (indirizzi). Attenzione NON ci sono i pin A0,A1 semplicemente perché legge/scrive una parola intera di 32 bit da/verso la memoria, fornendo quindi una maggior banda passante.

    Ma in entrambi i casi sono sempre 32 bit e sempre 4294967296 byte indirizzabili. Stop, tutto lì.
  • Re: Funzionamento CPU

    andbin ha scritto:


    Nonloso93 ha scritto:


    Esempio 2. In un calcolatore abbiamo locazioni di memoria di 32 bit con relativi indirizzi di 28 bit.
    Quanta memoria riusciamo complessivamente ad indirizzare?
    Soluzione. Le celle di memoria sono composte da 32 bit = 4 bytes, mentre lo spazio di
    indirizzamento è di 228 celle. Pertanto la memoria che riusciamo ad indirizzare è (al massimo):
    4 bytes × 228 = 230 bytes = 1 Gigabyte.
    Sinceramente non ho capito questi tuoi calcoli .... 228 cosa?

    Allora: se un processore supporta indirizzi fisici a 32 bit, indirizzerà (teoricamente) 2^32 byte, ovvero 4294967296 byte. Ripeto, BYTE, questa è l'unità fondamentale. Poi dipende dalla ampiezza del bus dati.

    Supponiamo che abbia tutti i pin necessari (non sia un processore "castrato" come dicevo prima):
    - se avesse un bus dati a 8 bit, avrà i pin D0...D7 (dati) e i pin A0,A1,A2.....A31 (indirizzi)
    - se avesse un bus dati a 32 bit, avrà i pin D0....D31 (dati) e i pin A2,A3...A31 (indirizzi). Attenzione NON ci sono i pin A0,A1 semplicemente perché legge/scrive una parola intera di 32 bit da/verso la memoria, fornendo quindi una maggior banda passante.

    Ma in entrambi i casi sono sempre 32 bit e sempre 4294967296 byte indirizzabili. Stop, tutto lì.
    perdonami come ho incollato non mi ha messo l'elevamento a potenza
    posto l'immagine
    Allegati:
    31182_ab4b297793dc30e55a8d4510dc598361.png
    31182_ab4b297793dc30e55a8d4510dc598361.png
  • Re: Funzionamento CPU

    Nonloso93 ha scritto:


    posto l'immagine
    Se intende appunto 2^28 celle (non byte) cioè "parole" di 32 bit, allora sì è giusto: 4 x 2^28 sono 1 GByte.
    Ma attenzione, sono 28 bit di indirizzo fisico (ovvero avrebbe 28 pin di indirizzo) ma dal punto di vista logico sono 30 bit di indirizzamento. Quindi se ci fosse un registro a 32 bit che tiene un indirizzo, userebbe 30 bit, con i 2 bit "alti" non usati.

    Lo ripeto meglio: 1 GByte di indirizzamento lo puoi fare con:
    - 30 bit(/pin) di indirizzo fisico e bus dati 8 bit
    - 29 bit(/pin) di indirizzo fisico e bus dati 16 bit
    - 28 bit(/pin) di indirizzo fisico e bus dati 32 bit

    NON cambia l'indirizzamento dei byte.
  • Re: Funzionamento CPU

    Perfetto si ci sono! e non è possibile con 32 bit fare 32 bit di indirizzo fisico (ovvero 32 pin di indirizzo) e 64 bit di bus dati? e questo il punto che non riesco a capire perché così viene una memoria indirizzabile più di 4 GB perché sono 2^32 * 64.
    Questa parte non l'ho capita ed è forse quella che mi risolve il mio dubbio (Quindi se ci fosse un registro a 32 bit che tiene un indirizzo, userebbe 30 bit, con i 2 bit "alti" non usati.) in che senso?
    Grazie,
    Marco
  • Re: Funzionamento CPU

    Nonloso93 ha scritto:


    Perfetto si ci sono! e non è possibile con 32 bit fare 32 bit di indirizzo fisico (ovvero 32 pin di indirizzo) e 64 bit di bus dati? e questo il punto che non riesco a capire perché così viene una memoria indirizzabile più di 4 GB perché sono 2^32 * 64.
    Questa parte non l'ho capita ed è forse quella che mi risolve il mio dubbio (Quindi se ci fosse un registro a 32 bit che tiene un indirizzo, userebbe 30 bit, con i 2 bit "alti" non usati.) in che senso?
    Ho capito il tuo dubbio e vediamo di chiarire. Lo scenario è quello che dicevo, un registro a 32 bit che tiene un indirizzo che per limiti vari (come esempio) è ristretto a solo 30 bit.

    Se il bus dati fosse a 8 bit, il registro verrebbe usato così:
         31 30 29 28          3  2  1  0
        +--+--+--+--+        +--+--+--+--+
        |xx|xx|  |  |~~~~~~~~|  |  |  |  |
        +--+--+--+--+        +--+--+--+--+
       /     / \                        /
      /     /   \                      /
    non usati    \                    /
                  indirizza 2^30 celle da 8 bit
    Se il bus dati fosse a 16 bit allora:
         31 30 29 28          3  2  1  0
        +--+--+--+--+        +--+--+--+--+
        |xx|xx|  |  |~~~~~~~~|  |  |  |  |
        +--+--+--+--+        +--+--+--+--+
       /     / \                     /  \ 
      /     /   \                   /    indirizza il byte 0 o 1 sui 16 bit
    non usati    \                 /
                  indirizza 2^29 celle da 16 bit
    E se fosse a 32 bit:
         31 30 29 28          3  2  1  0
        +--+--+--+--+        +--+--+--+--+
        |xx|xx|  |  |~~~~~~~~|  |  |  |  |
        +--+--+--+--+        +--+--+--+--+
       /     / \                  /  \  \ 
      /     /   \                /    indirizzano il byte 0,1,2,3 sui 32 bit
    non usati    \              /
                  indirizza 2^28 celle da 32 bit
    Ma alla fine non cambia nulla! Sono sempre 2^30 byte indirizzabili.
    Solo che nel primo caso hai "fisicamente" una "pila" di 1073741824 celle da 8 bit mentre nel secondo hai una "pila" più corta di 536870912 celle da 16 bit e nel terzo 268435456 celle da 32 bit.


    E facciamo anche un esempio di indirizzamento con bus 32 bit, supponiamo che ci sia una istruzione in grado di operare con la granularità del byte (ad esempio per vedere se un singolo byte è zero).

    Dato l'indirizzo 0x00000086, in binario 00000000 00000000 00000000 10000110
    Vuol dire: prendi i 32 bit alla cella 100001 (33 in decimale), prendi il terzo byte del valore 32 bit.
  • Re: Funzionamento CPU

    andbin ha scritto:


    Nonloso93 ha scritto:


    Perfetto si ci sono! e non è possibile con 32 bit fare 32 bit di indirizzo fisico (ovvero 32 pin di indirizzo) e 64 bit di bus dati? e questo il punto che non riesco a capire perché così viene una memoria indirizzabile più di 4 GB perché sono 2^32 * 64.
    Questa parte non l'ho capita ed è forse quella che mi risolve il mio dubbio (Quindi se ci fosse un registro a 32 bit che tiene un indirizzo, userebbe 30 bit, con i 2 bit "alti" non usati.) in che senso?
    Ho capito il tuo dubbio e vediamo di chiarire. Lo scenario è quello che dicevo, un registro a 32 bit che tiene un indirizzo che per limiti vari (come esempio) è ristretto a solo 30 bit.

    Se il bus dati fosse a 8 bit, il registro verrebbe usato così:
         31 30 29 28          3  2  1  0
        +--+--+--+--+        +--+--+--+--+
        |xx|xx|  |  |~~~~~~~~|  |  |  |  |
        +--+--+--+--+        +--+--+--+--+
       /     / \                        /
      /     /   \                      /
    non usati    \                    /
                  indirizza 2^30 celle da 8 bit
    Se il bus dati fosse a 16 bit allora:
         31 30 29 28          3  2  1  0
        +--+--+--+--+        +--+--+--+--+
        |xx|xx|  |  |~~~~~~~~|  |  |  |  |
        +--+--+--+--+        +--+--+--+--+
       /     / \                     /  \ 
      /     /   \                   /    indirizza il byte 0 o 1 sui 16 bit
    non usati    \                 /
                  indirizza 2^29 celle da 16 bit
    E se fosse a 32 bit:
         31 30 29 28          3  2  1  0
        +--+--+--+--+        +--+--+--+--+
        |xx|xx|  |  |~~~~~~~~|  |  |  |  |
        +--+--+--+--+        +--+--+--+--+
       /     / \                  /  \  \ 
      /     /   \                /    indirizzano il byte 0,1,2,3 sui 32 bit
    non usati    \              /
                  indirizza 2^28 celle da 32 bit
    Ma alla fine non cambia nulla! Sono sempre 2^30 byte indirizzabili.
    Solo che nel primo caso hai "fisicamente" una "pila" di 1073741824 celle da 8 bit mentre nel secondo hai una "pila" più corta di 536870912 celle da 16 bit e nel terzo 268435456 celle da 32 bit.


    E facciamo anche un esempio di indirizzamento con bus 32 bit, supponiamo che ci sia una istruzione in grado di operare con la granularità del byte (ad esempio per vedere se un singolo byte è zero).

    Dato l'indirizzo 0x00000086, in binario 00000000 00000000 00000000 10000110
    Vuol dire: prendi i 32 bit alla cella 100001 (33 in decimale), prendi il terzo byte del valore 32 bit.
    perfetto chiaro! solo che in questo caso i calcoli sono fatti tenendo conto che vogliamo indirizzare 1GB.
    Mettiamo il caso che io voglio indirizzare il massimo possibile teoricamente con un sistema a 32 bit, non posso fare esempio 32 bit indirizzo fisico (mettiamo che funzionano tutti) e bus dati da 32 bit. Viene il calcolo 2^32 * 32 il quale risultato viene più di 4GB che so che è lo spazio massimo che può gestire un sistema a 32 bit. Scusami ma non riesco a capire questa cosa -.-'
Devi accedere o registrarti per scrivere nel forum
28 risposte