Come funziona un computer?

di il
10 risposte

Come funziona un computer?

Può sembrare una domanda banale ma non lo é affatto. Ok so come funziona in fatto di hardware ( So a come interagisce la RAM, Memoria di masssa, CPU, GPU ecc... ). Il problema é questo: sappiamo tutti che il computer funziona grazie all'elettricità. Ma come fa l'energia elettrica a trasformarsi in energia di calcolo? Non ho trovato nulla su internet, spero voi possiate rispondere in qualsiasi modo alla mia domanda.

10 Risposte

  • Re: Come funziona un computer?

    E cosa sarebbe l'energia di calcolo ?
  • Re: Come funziona un computer?

    oregon ha scritto:


    E cosa sarebbe l'energia di calcolo ?
    Io attacco la spina e magicamente il computer mi fa 2+2. E' quello il senso.
  • Re: Come funziona un computer?

    Non c'è nulla di magico, è solo il risultato di un gran numero di porte logiche e reti combinatorie presenti all'interno dei vari componenti.

    Se conosci le basi dell'elettronica digitale, basta un discreto numero di elementi di base (porte And, Or, Not, Registri di vario tipo) connessi in modo opportuno per realizzare qualsiasi funzione, anche complessa, in funzione del tempo scandito da un oscillatore di clock.
  • Re: Come funziona un computer?

    Koyote ha scritto:


    Può sembrare una domanda banale ma non lo é affatto. Ok so come funziona in fatto di hardware ( So a come interagisce la RAM, Memoria di masssa, CPU, GPU ecc... ). Il problema é questo: sappiamo tutti che il computer funziona grazie all'elettricità. Ma come fa l'energia elettrica a trasformarsi in energia di calcolo? Non ho trovato nulla su internet, spero voi possiate rispondere in qualsiasi modo alla mia domanda.
    Essenzialmente mediante due elementi (che in realtà possono essere anche uno solo).

    Un dispositivo in grado di "negare" logicamente la sua tensione (NOT).
    Ha un ingresso, e una uscita.
    Se in ingresso al dispositivo c'è una tensione 0, all'altro "capo" (uscita) c'è una tensione X.
    Se in ingresso c'è una tensione X, in uscita ci sarà tensione 0.
    (Per inciso questo è paradossalmente il più difficile da costruire)

    Il secondo "dispositivo" ha due ingressi, e una uscita (AND).
    Se entrambi gli ingressi hanno tensione X, in uscita avrai una tensione X.
    In ogni altro caso in uscita avrai una tensione 0.

    Con questi due "mattoncini" puoi... costruire un computer digitale odierno (in realtà ti basterebbe anche un SINGOLO mattoncino, una porta NAND o NOR, ma non complichiamo la vita).

    Ponendo insieme tanti "mattoncini" puoi creare una c.d. rete COMBINATORIA (che non è per nulla un computer "odierno").
    Aggiungendo una "storia", cioè una evoluzione dello stato della rete rispetto al tempo, avrai una c.d. rete SEQUENZIALE.
    Una sorta di "protocomputer"

    ---
    Quindi la tua risposta, riferendosi ad elaboratori digitali (esistono anche quelli analogici) si può sintetizzare così: manipolando opportunamente la tensione all'interno del dispositivo è possibile rappresentare... numeri.
    Combinandoli mediante i "mattoncini elementari"... ti salta fuori un iPhone

    L'elemento-chiave è avere "qualcosa" che NON si comporta analogicamente, cioè cambia il suo funzionamento in modo più o meno continuo (immagina girare un rubinetto dell'acqua: più lo ruoti, più esce e viceversa).
    Cioè un "qualcosa" che fino a una certa soglia rimane chiuso, poi "improvvisamente" si spalanca completamente (... un transistor... oddio... )

    Per inciso inventare "qualcosa" del genere vale un Nobel per la Fisica, quindi non è esattamente banalissimo.
  • Re: Come funziona un computer?

    Per inciso: non serve una quantità enorme, gigantesca, di transistor (diciamo "mattoncini") per "costruire" una CPU.
    Per avere un'idea il mitico 6502 http://www.visual6502.org/docs/6502_in_action_14_web.pdf ne ha circa 3.500, e con questo ci puoi fare un Commodore 64, che essenzialmente esegue qualsiasi cosa faccia un PC moderno.
  • Re: Come funziona un computer?

    +m2+ ha scritto:


    Per inciso: non serve una quantità enorme, gigantesca, di transistor (diciamo "mattoncini") per "costruire" una CPU.
    Per avere un'idea il mitico 6502 http://www.visual6502.org/docs/6502_in_action_14_web.pdf ne ha circa 3.500, e con questo ci puoi fare un Commodore 64, che essenzialmente esegue qualsiasi cosa faccia un PC moderno.
    Beh ... per la precisione, il (mio caro) C64 (ha) aveva un 6510, un briciolo più complesso del 6502, ma quello che conta maggiormente è che solo in combinazione con altri chip il C64 evidenziava le sue potenzialità (il 6569, il 6581, i 6526 ...) ... erano quelli che lo rendevano diverso da una qualsiasi scheda KIM o simili ...
  • Re: Come funziona un computer?

    +m2+ ha scritto:


    Per inciso: non serve una quantità enorme, gigantesca, di transistor (diciamo "mattoncini") per "costruire" una CPU.
    Per avere un'idea il mitico 6502 http://www.visual6502.org/docs/6502_in_action_14_web.pdf ne ha circa 3.500, e con questo ci puoi fare un Commodore 64, che essenzialmente esegue qualsiasi cosa faccia un PC moderno.
    Conoscevo l'esistenza del not, or ecc... però cosa determina dove far passare la corrente?
  • Re: Come funziona un computer?

    Koyote ha scritto:


    +m2+ ha scritto:


    Per inciso: non serve una quantità enorme, gigantesca, di transistor (diciamo "mattoncini") per "costruire" una CPU.
    Per avere un'idea il mitico 6502 http://www.visual6502.org/docs/6502_in_action_14_web.pdf ne ha circa 3.500, e con questo ci puoi fare un Commodore 64, che essenzialmente esegue qualsiasi cosa faccia un PC moderno.
    Conoscevo l'esistenza del not, or ecc... però cosa determina dove far passare la corrente?
    Le connessioni, diciamo i "filini" che connettono i vari componenti elementari.
    Se immagini di avere dei componenti grandi come un mattoncino lego, dovrai collegare ingressi ed uscite mediante veri e propri "filini" (... praticamente una basetta millefori concettuale...)

    Quindi avrai tanti (decine-migliaia-milioni-miliardi) "mattoncini" connessi tra di loro mediante decine-migliaia-milioni-miliardi di "filini" (... oddio... mi viene in mente il Rag. Filini...).

    Se osservi le fotografie della CPU che ti ho messo vedrai proprio questi "filini" che connettono i vari componenti, e ne vedrai a migliaia e migliaia (miliardi nelle CPU moderne).

    Il "cablaggio", cioè la disposizione dei "filini" è parte integrante del progetto: tanti "mattoncini" collegati tra di loro in un modo specifico.

    La "chiave" per l'ulteriore passo, nella costruzione logica di una CPU, sono i "cicli", cioè mettere un "filino" di OUTPUT di un componente in INPUT a un altro, creando in sostanza uno (o più) cicli.
    Chiaramente non è affatto detto che una rete del genere converga a un valore stabile, anzi potrebbe switchare tra stati diversi, comunque non complichiamo il problema.
    ---
    Una volta che hai i due mattoncini NOT e AND (oppure NOT e OR, oppure NAND o NOR...) inizi a collegarli tra di loro in modo "furbo" per ottenere "mattoncini" più utili, quali ad esempio un flip flop.
    Diciamo "una cella di memoria" per banalizzare.
    Si ottiene cablando "furbamente" i componenti elementari per creare una mini-rete sequenziale (SEQUENZIALE ti ricordo significa alla grossa "il cui stato dipende dal tempo").
    Ancor più "furbescamente" si usano normalmente flip flop sincronizzati, cioè con un segnale di clock.

    -----------
    Minidigressione elementare sulle reti sequenziali.
    Una rete combinatoria, cioè alla grossa priva di cicli nei "cablaggi", elabora un certo numero di segnali in ingresso e ne fornisce un certo numero in uscita in modo "immediato".
    O meglio secondo il ritardo di propagazione ed elaborazione dei mattoncini stessi.

    Una rete sequenziale (sempre alla grossa con "cicli nei cablaggi", cioè dove l'OUTPUT dei mattoncini viene cablato nell'INPUT) invece è una sorta di vero e proprio "computerino".

    Metti i dati in input, poi la rete "elabora" i dati (facendo una sorta di cicli WHILE, almeno concettuali) e poi dopo un po', se hai fortuna, dà il risultato in output.

    Avendo dei cicli (sempre concettualmente dei WHILE) potrebbe anche non fermarsi mai, oppure avere tempi di elaborazione diversi per diversi input (perchè in un caso magari esegue un WHILE 3 volte, mentre in un altro per 7 volte eccetera).

    Per evitare questa "anarchia", cioè ogni rete impiega un tempo non noto a priori (o meglio difficilmente predicibile, e dipendente dall'input) si introduce il mitico segnale di CLOCK (ne avrai sicuramente sentito parlare, tipo i7 a 4GHZ significa "con clock a 4GHZ" ---- cuttone su cosa significhi davvero sennò facciamo notte ----)

    Ebbene in sostanza i mattoncini, oltre ad avere i loro input e output, hanno un ulteriore input, il CLOCK (CK), il quale funge come una sorta di metronomo: l'elaborazione avviene sincronizzata ad esso, per un numero intero di cicli (in realtà in elettronica ciò è impossibile si usano || e vabbè).

    Più semplicemente: un tuo "mattoncino" può elaborare "qualcosa" per 1 ciclo di clock, 2 cicli, 1.000 cicli.
    Non può farlo per 1,5 cicli.

    Nel caso dei flip flop, cioè del "mattoncino elementare di memoria", insomma un BIT, adottando un CLOCK sarai sicuro che il relativo circuitino si stabilizzerà, al cambiamento del dato in ingresso, in un tempo di K cicli di CLOCK.
    Se per caratteristiche costruttive il tuo BIT impiega (poniamo) al massimo 3 cicli di CLOCK per stabilizzarsi, nel tuo progetto della CPU farai in modo che quando "cambi" il contenuto del BIT aspetterai esattamente 3 cicli per essere sicuro che il dato sia stato memorizzato effettivamente.
    Se aspettassi 2 cicli potresti avere (in questo banale esempio) una memoria corrotta
    --------
    L'elemento di importanza superbasilare è che la creazione di celle di memoria, attraverso tipicamente mattoncini NAND, NOR (o quello che vuoi) consente di fare il "passo finale", cioè di memorizzare il PROGRAMMA da eseguire all'interno della macchina stessa.
    Una rete combinatoria o sequenziale è CABLATA, cioè i "filini" hanno una posizione ben definita, non li puoi spostare (nei vecchissimi film in bianco e nero si vedono invece i primissimi computer dove i "filini" erano veri, e si spostavano fisicamente per programmare!).
    Non puoi cambiare il funzionamento di una CPU.
    MA se hai a disposizione una zona di RAM, puoi memorizzare il programma lì dentro, e farlo eseguire.
    Hai fatto una macchina di turing a nastro limitato, o se preferisci un computer digitale "moderno".

    -----
    Altro superincisone: hai mai considerato che esiste un numero finito, cioè proprio un insieme non solo ricorsivamente enumerabile, ma proprio finito, di programmi che puoi eseguire su un computer moderno?
    Fine superincisone.
    -----

    --------
    Metti insieme migliaia di "flip flop" e hai fatto un KB di RAM (sempre in versione supersemplificata!)
    Ne metti miliardi e fai un banco DIMM

    Sempre in linea teorica ci sono degli elementi ricorrenti che sono "ben" conosciuti.
    Le celle di memoria (flip flop), i registri della CPU ad esempio, sono composti da tanti "sottoreti" identiche.
    Poi ci sono gli addizionatori, cioè le retine logiche utilizzate per SOMMARE i numeri binari
  • Re: Come funziona un computer?

    Tanto per capirci i programmi erano grossomodo così


    cioè scritti materialmente cambiando i cablaggi (i "filini")
  • Re: Come funziona un computer?

    Koyote ha scritto:


    Conoscevo l'esistenza del not, or ecc... però cosa determina dove far passare la corrente?
    Nella mia precedente risposta, sebbene non enciclopedica, avevo già precisato che quei componenti erano connessi in modo opportuno
Devi accedere o registrarti per scrivere nel forum
10 risposte