Apprendimento dell'architettura del computer come programmatore [chiuso]

12

In genere mi imbatto in guru in SO e in altri luoghi (istruttori, autori di libri, ecc.) che direbbero qualcosa sulla linea "This will cause alignment issues" o altre informazioni di basso livello.

Voglio conoscere tutti questi aspetti che sono relevant alla programmazione. Ora di solito quando vedo libri di basso livello (libri di architettura del computer per esempio) sono di livello troppo basso e orientati verso persone la cui area di interesse principale è l'architettura del computer e non la progettazione del software.

Hai dei consigli per i libri che contengono materiale di basso livello che è rilevante per i programmatori?

    
posta Samaursa 23.06.2011 - 18:43
fonte

8 risposte

16

Un bel set di libri proprio per questo scopo è la serie "Write Great Code" di Randall Hyde ( Vol.1 Vol. 2 ): descrizione dell'architettura della macchina esplicitamente dalla prospettiva di ciò che è necessario sapere per scrivere codice efficiente in linguaggi di alto livello.

    
risposta data 23.06.2011 - 19:33
fonte
6

Purtroppo non conosco un equivalente moderno dei microprocessori: A Programmer's View di R. Dewar. Il più vicino che conosco è Computer Organization and Design, Quarta Edizione: The Hardware / Software Interface di David A. Patterson e John L. Hennessy, ma non sono sicuro che non lo consideri troppo basso; lo farai sicuramente per il loro altro opus, Computer Architecture, un approccio quantitativo.

Online, questo link ti darà forse quello che vuoi.

    
risposta data 23.06.2011 - 19:22
fonte
5

Per piattaforme x86, prendi una copia dei manuali del processore Intel IA-32 e Intel 64 . Il manuale di riferimento per l'ottimizzazione discute molti di questi problemi da una prospettiva di basso livello per le CPU Intel x86. AMD ha anche manuali simili che trattano gli stessi problemi.

La maggior parte delle altre architetture CPU ha manuali simili che trattano problemi di prestazioni. ( Ad es. ARM e PowerPC .)

    
risposta data 23.06.2011 - 20:31
fonte
3

Trovo che "Computer Architecture: A Quantitative Approach" di Hennessy e Patterson ( link Amazon ) sia un approccio molto strong e solido all'architettura dei computer, con alcuni casi studio direttamente rilevanti per la programmazione.

È utilizzato in vari ambiti in diversi corsi di architettura CS di livello universitario e post-laurea negli Stati Uniti.

Ha anche ricevuto una recensione su Ars Technica qualche tempo fa.

    
risposta data 23.06.2011 - 19:16
fonte
3

Questo è quello che sto usando nella mia classe Computer Systems ora Computer Systems: A Programmer's Perspective (2nd Edition) e mentre la lezione è appena iniziata, l'ho esaminata e mi piace davvero.

Ecco la descrizione del libro:

Few students studying computer science or computer engineering will ever have the opportunity to build a computer system. On the other hand, most students will be required to use and program computers on a near daily basis. Computer Systems: A Programmer’s Perspective introduces the important and enduring concepts that underlie computer systems by showing how these ideas affect the correctness, performance, and utility of application programs. The text's hands-on approach (including a comprehensive set of labs) helps students understand the “under-the-hood” operation of a modern computer system and prepares them for future courses in systems topics such as compilers, computer architecture, operating systems, and networking.

    
risposta data 23.06.2011 - 19:44
fonte
2

È un sacco di lavoro, ma Pragmatica del linguaggio di programmazione potrebbe essere esattamente quello che stai cercando. Il libro è teoricamente principalmente sull'analisi e la compilazione (che è conoscenza essenziale per coloro che vogliono imparare davvero la programmazione) e nel processo finirai per imparare come i concetti linguistici si traducono in ciò che sta accadendo a un livello basso. Meglio ancora imparerai questo per molte lingue contemporaneamente e sarai in grado di confrontare e confrontare in modo intelligente il funzionamento delle diverse lingue.

Non posso raccomandarlo a meno che non sia possibile dedicare diversi mesi all'apprendimento effettivo del materiale. Non è il tipo di cose che puoi sfiorare e improvvisamente illuminato. Ma se sei serio, lo consiglio vivamente.

    
risposta data 23.06.2011 - 21:35
fonte
2

Potrebbe essere falso in biologia, ma in informatica-scienza, "ontogeny ricapitola filogenesi" quasi. Una panoramica storica delle architetture dei computer fin dai primi computer è un ottimo modo per comprendere il soggetto dell'architettura dei computer dal punto di vista di un programmatore; i design dei computer sono quasi tutti i perfezionamenti dei precedenti progetti.

Cioè, consiglio di studiare progetti di sistemi operativi più vecchi completi, di libri teorici di "architettura informatica" che ti danno in informatica. Capire veramente la progettazione dei sistemi e fare un ottimo lavoro con la scrittura di software. La comprensione intuitiva dell'architettura dei sistemi informatici richiede la padronanza di molti concetti. Penso che se si ricomincia da capo quando le architetture dei computer fossero più gestibili in termini di dimensioni e portata, si potrebbe ottenere il padre nell'obiettivo di scrivere codice migliore.

(Quella serie di libri di "scrivere codice fantastico" che un altro ragazzo ha menzionato sembra molto bella, e ho modificato la mia domanda per rimuovere ogni aspersione che avevo precedentemente usato per imparare da un libro, perché sembra fantastico!)

Alcune cose che insegnano molto bene l'architettura del computer:

  1. Mi piace scegliere le macchine degli anni '80 come punti di partenza per spiegare e dimostrare le cose alle persone, perché è stato allora che ho iniziato a usare i computer. Ho usato la guida di riferimento del programmatore commodore 64, per mostrare alle persone un salto dove la conoscenza della programmazione e la conoscenza dell'architettura dei computer si incontrano. Con un libro di questo tipo, e forse un emulatore commodore 64 in esecuzione sul tuo PC in modo da poter provare cose, imparerai come i sistemi informatici nell'incarnazione classica dell'architettura dei computer degli anni '80 sono davvero costruiti. A mio avviso, un esempio concreto è un punto di partenza migliore, oltre a una dozzina di modelli teorici che mancano ai dettagli del mondo reale che fanno funzionare le cose. Se sai cos'è un registro, cos'è una ALU, cos'è un bus, e cos'è un orologio, e quali sistemi di segnalazione sono usati in un vecchio design degli anni '80, che ti fornirà i fondamenti che devi sapere per capire qualcosa recente, come la "architettura del ponte di sabbia" di Intel. Storicamente, guarda indietro agli originali, per esempio consulta l'architettura "Von neumann", su wikipedia.

  2. Andando avanti dal mio primo punto alcuni anni; Scopri l'architettura PC IBM originale, la lingua di assemblaggio 8086 e il bus ISA. Da questo e dai suoi limiti, la comprensione di cosa contiene una CPU "Intel COre i7", e cosa fanno i bus PCI e PCI-e e perché ne avete bisogno, può procedere in modo più naturale. L'architettura del PC ha ancora un po 'di "postumi di sbornia" dal design originale del PC IBM. Il modo in cui il caricamento del programma iniziale (sistema operativo) (avvio) avviene su un PC del 2011 deve ancora molto all'eredità del PC IBM originale e del suo BIOS ROM e delle sue impostazioni CMOS in un PC originale.

  3. Usa e modifica una build preconfigurata di Linux che funziona su alcuni dispositivi embedded non-PC, e imparerai molto sull'architettura dei computer embedded, non solo l'architettura tecnica, ma perché alcune delle funzionalità ci sono. Un buon esempio che è disponibile a basso costo è TS-7200 , che ha un bel PC-104 (ISA Bus, come nel PC originale). Il PC-104 (bus ISA a 16 bit incorporato compatibile con i PC PC IBM AT / AT 80286) è un ottimo modo per un progettista non-board di creare un sistema incorporato, poiché i moduli sono impilabili. Vuoi qualche IO in più o periferiche? Basta impilare alcuni moduli. Il TS-7200 ha un core non-x86 (una CPU ARM9) in grado di eseguire sia big-endian che little-endian. Se non hai ancora incontrato "endianità" nel tuo viaggio di apprendimento dell'architettura, è un buon posto per incontrarlo.

risposta data 24.06.2011 - 21:23
fonte
0

La maggior parte dei libri sul linguaggio assembly discuterà le caratteristiche rilevanti dell'architettura, ma di solito solo per l'architettura a cui è rivolto il libro. In questo modo otterrai informazioni sulle perdite di cache e sulle tecniche di mappatura delle pagine MMU, ma probabilmente non su endianness.

    
risposta data 23.06.2011 - 19:55
fonte

Leggi altre domande sui tag