Imparare l'architettura del computer come programmatore [chiuso]


12

In genere mi imbatto in guru di SO e in altri luoghi (istruttori, autori di libri, ecc.) Che direbbero qualcosa lungo le linee "This will cause alignment issues"o altri bocconcini di basso livello.

Voglio conoscere tutte queste curiosità che relevantriguardano la programmazione. Ora di solito quando vedo libri di basso livello (ad esempio libri di architettura informatica) sono di livello troppo basso e orientati verso persone la cui principale area di interesse è l'architettura del computer e non la progettazione di software.

Hai consigli per i libri che passano attraverso materiale di basso livello che è rilevante per i programmatori?


4
Volete "libri che passano attraverso materiale di basso livello" ma non volete libri che siano troppo "di basso livello"? L'architettura di apprendimento per alcuni programmatori può essere estremamente vantaggiosa. Analogo a uno sviluppatore web che capisce lo stack TCP / IP. Non è mai così utile fino a quando non ne avrai davvero bisogno. \
Chris,

1
@Chris: Quello che intendevo era "basso livello per i programmatori" ... tecnicamente possiamo arrivare fino all'architettura della CPU in piena regola, e senza dubbio un giorno sarà utile, ma considerando che tutti abbiamo un tempo limitato, un libro che insegna cose di basso livello programmatori dovrebbero conoscere saranno perfetti.
Samaursa,

In tal caso, qualsiasi libro introduttivo ti porterà nella giusta direzione, dove lo porti dopo che è la tua scelta in base al bisogno o al desiderio.
Chris,

Qualcuno che guida un'auto con una trasmissione automatica beneficia di sapere cosa si è e come funziona, mentre si guida. Credo che diventi un programmatore migliore imparando a programmare almeno un po ', in linguaggio assembly, nello stesso modo in cui penso che diventi un driver migliore quando impari a "guidare lo stick".
Warren P,

Risposte:


16

Un bel set di libri proprio per questo scopo è la serie "Scrivi grande codice" di Randall Hyde ( Vol.1 Vol. 2 ): descrizione dell'architettura della macchina esplicitamente dal punto di vista di ciò che devi sapere per scrivere codice efficiente in linguaggi di alto livello .


A quali lingue di alto livello si applicherebbe? Includerebbero ad esempio Python, JavaScript, C #, Scala?
Giobbe

@Job - Non ho letto i libri, ma direi che si applicherebbe a tutti quelli che potrebbero / potrebbero trarre vantaggio da cose come il multi-threading e l'elaborazione a 64 bit. L'esecuzione delle lingue che hai citato probabilmente renderebbe tale conoscenza utile (soprattutto se sei anche un amministratore del server o esegui tali lingue al di fuori di un ambiente Web).
Shauna,

Hyde è un guru del linguaggio dell'Assemblea, quindi per lui "di alto livello" significa principalmente C. Ma il suo contenuto è altrettanto importante per gli utenti di lingue ancora più alte; Le stringhe, le chiamate di procedura ecc. Non sono poi così diverse a livello hardware, sia che siano dichiarate in C che in Python.
Kilian Foth,

Penso che qualsiasi linguaggio compilato nativo (C, C ++, Pascal, Objective-C) che consenta anche un po 'di linguaggio assembly, trarrebbe maggior beneficio da questo libro. Tuttavia, le persone che usano Python e ne scrivono estensioni in C, o anche le persone che usano java e non usano alcun metodo nativo, potrebbero fare un po 'di più pensando al costo di ciò che stanno facendo, e come svolgere il proprio lavoro in modo efficiente all'interno della piattaforma che stanno utilizzando.
Warren P,

Anche se non ho ancora letto i libri, selezionerò questa risposta come corretta in base alle recensioni / al riepilogo del libro.
Samaursa,

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, Fourth Edition: The Hardware / Software Interface di David A. Patterson e John L. Hennessy, ma non sono sicuro che non lo considererai troppo basso; lo farai sicuramente per l'altra loro opera, Computer Architecture, un approccio quantitativo.

Online, questo http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf ti darà forse quello che vuoi.


Il link al pdf è morto.
giovedì

5

Per piattaforme x86, prendi una copia dei manuali dei processori 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 coprono gli stessi problemi.

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


3

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

È abituato a vari livelli in diversi corsi di architettura CS a livello universitario e universitario negli Stati Uniti.

Qualche tempo fa ha anche ricevuto una fantastica recensione su Ars Technica .


1
Mentre mi piace questo libro - possiedo le quattro edizioni - è diretto come architetto informatico, non come programmatore.
AProgrammer

3

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

Ecco la descrizione del libro:

Pochi studenti che studiano informatica o ingegneria informatica avranno mai l'opportunità di costruire un sistema informatico. D'altra parte, la maggior parte degli studenti dovrà utilizzare e programmare i computer quasi quotidianamente. Sistemi informatici: la prospettiva di un programmatore introduce i concetti importanti e duraturi che sono alla base dei sistemi informatici mostrando come queste idee influenzano la correttezza, le prestazioni e l'utilità dei programmi applicativi. L'approccio pratico del testo (incluso un set completo di laboratori) aiuta gli studenti a capire il funzionamento "nascosto" di un moderno sistema informatico e li prepara per futuri corsi su argomenti di sistema come compilatori, architettura informatica, sistemi operativi, e networking.


Questo è un libro fantastico !!
Armando,

2

È un sacco di lavoro, ma la programmazione del linguaggio pragmatico potrebbe essere esattamente quello che stai cercando. Il libro tratta teoricamente principalmente di analisi e compilazione (che è una conoscenza essenziale per coloro che vogliono davvero imparare la programmazione) e nel processo finirai per imparare come i concetti linguistici si traducono in ciò che sta accadendo a basso livello. Meglio ancora, lo imparerai 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 tu non possa dedicare diversi mesi all'apprendimento effettivo del materiale. Non è il genere di cose che hai appena sfiorato e sei improvvisamente illuminato. Ma se sei serio, lo consiglio vivamente.


2

Potrebbe essere falso in biologia, ma in informatica "l'ontogenesi ricapitola la filogenesi" quasi quasi. Una panoramica storica delle architetture informatiche sin dai primi computer è un ottimo modo per comprendere il tema dell'architettura informatica dal punto di vista del programmatore; i progetti di computer sono quasi tutti i perfezionamenti dei progetti precedenti.

Cioè, raccomando di studiare progetti di sistemi più vecchi funzionanti, istinti di libri teorici di "architettura informatica" che ti danno in informatica. Comprendere veramente la progettazione dei sistemi e fare un ottimo lavoro nello scrivere 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 erano più gestibili in termini di dimensioni e portata, si potrebbe ottenere padre nel tuo obiettivo di scrivere codice migliore.

(A proposito, quella serie di libri "scrivi un ottimo codice" che un altro ragazzo ha menzionato sembra fantastica, e ho modificato la mia domanda per rimuovere qualsiasi aspersione che avevo precedentemente espresso sull'apprendimento da un libro, perché sembra fantastico! )

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

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

  2. Andando avanti dal mio primo punto di qualche anno; Scopri l'architettura originale del PC IBM, il linguaggio assembly 8086 e il bus ISA. Da ciò, e dai suoi limiti, la comprensione di ciò che contiene una CPU "Intel COre i7" e di cosa fanno i bus PCI e PCI-e e perché ne hai bisogno, può procedere in modo più naturale. L'architettura del PC oggi ha ancora un po 'di "sbornia" dal design originale del PC IBM. Il modo in cui il caricamento iniziale del programma (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 non PC incorporati e imparerai molto sull'architettura del computer embedded, non solo sull'architettura tecnica, ma perché alcune delle funzionalità sono presenti. Un bell'esempio disponibile a buon mercato è il TS-7200, che ha un bel PC-104 (ISA Bus, come nel PC originale). I PC-104 (bus ISA a 16 bit incorporato compatibile con i pin con i PC dell'era IBM PC / AT 80286) sono un ottimo modo per un progettista non programmatore di costruire un sistema incorporato, poiché i moduli sono impilabili. Desideri un IO o una periferica extra? Basta impilare alcuni moduli. TS-7200 ha un core non x86 (una CPU ARM9) in grado di eseguire big-endian o little-endian. Se non hai ancora incontrato "endianness" nel tuo viaggio di apprendimento in architettura, è un buon posto per incontrarlo.


0

La maggior parte dei libri sul linguaggio degli assemblaggi discuterà le caratteristiche dell'architettura rilevanti, ma di solito solo per l'architettura a cui il libro è destinato. Quindi otterrai informazioni su sversamenti di cache e tecniche di mappatura delle pagine MMU, ma probabilmente non nulla sull'endianness.

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.