Je rencontre généralement des gourous à SO et à d'autres endroits (instructeurs, auteurs de livres, etc.) qui diraient quelque chose dans le sens "This will cause alignment issues"
ou d'autres informations de bas niveau.
Je veux en savoir plus sur tous ces petits morceaux qui sont relevant
à la programmation. Maintenant, généralement, quand je vois des livres de bas niveau (livres d'architecture informatique par exemple), ils sont trop bas et s'adressent aux personnes dont le principal domaine d'intérêt est l'architecture informatique et non la conception de logiciels.
Avez-vous des recommandations pour les livres qui passent par des trucs de bas niveau qui sont pertinents pour les programmeurs?
low-level
computer-architecture
Samaursa
la source
la source
Réponses:
Un bel ensemble de livres précisément à cet effet est la série "Write Great Code" de Randall Hyde ( Vol.1 Vol. 2 ): description de l'architecture de la machine explicitement du point de vue de ce que vous devez savoir pour écrire du code efficace dans des langages de haut niveau .
la source
Malheureusement, je ne connais pas d'équivalent moderne aux microprocesseurs: le point de vue d'un programmeur par R. Dewar. Le plus proche que je connaisse est Computer Organization and Design, Fourth Edition: The Hardware / Software Interface par David A. Patterson et John L. Hennessy, mais je ne suis pas sûr que vous ne le considérerez pas trop bas; vous le ferez à coup sûr pour leur autre opus, Computer Architecture, une approche quantitative.
En ligne, ce http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf vous donnera peut-être ce que vous voulez.
la source
Pour les plates-formes x86, récupérez une copie des manuels des processeurs Intel IA-32 et Intel 64 . Le manuel de référence sur l'optimisation aborde un grand nombre de ces problèmes d'un point de vue bas pour les processeurs Intel x86. AMD propose également des manuels similaires couvrant les mêmes problèmes.
La plupart des autres architectures de CPU ont des manuels similaires qui traitent des problèmes de performances. ( Par exemple ARM et PowerPC .)
la source
Je trouve que "Computer Architecture: A Quantitative Approach" par Hennessy et Patterson ( lien Amazon ) est une approche très solide et solide de l'architecture informatique, avec pas mal d'études de cas directement liées à la programmation.
Il est utilisé à divers degrés dans plusieurs cours d'architecture CS de premier et deuxième cycles aux États-Unis.
Il a également obtenu une excellente critique sur Ars Technica il y a quelque temps.
la source
C'est ce que j'utilise dans ma classe Computer Systems maintenant Computer Systems: A Programmer's Perspective (2nd Edition) et alors que la classe vient de commencer, je l'ai étudié et j'aime vraiment ça.
Voici la description du livre:
la source
C'est beaucoup de travail, mais la pragmatique du langage de programmation peut être exactement ce que vous recherchez. Le livre est théoriquement principalement sur l'analyse et la compilation (qui sont des connaissances essentielles pour ceux qui veulent vraiment apprendre la programmation) et dans le processus, vous finirez par apprendre comment les concepts du langage se traduisent en ce qui se passe à un niveau bas. Mieux encore, vous apprendrez cela pour de nombreuses langues à la fois et vous pourrez comparer et contraster intelligemment le fonctionnement de différentes langues.
Je ne peux le recommander que si vous pouvez consacrer plusieurs mois à l'apprentissage du matériel. Ce n'est pas le genre de choses que vous venez de survoler et que vous êtes soudainement éclairées. Mais si vous êtes sérieux, je le recommande vivement.
la source
C'est peut-être faux en biologie, mais en informatique, "l'ontogenèse récapitule la phylogénie" à peu près. Un aperçu historique des architectures informatiques depuis les premiers ordinateurs est un excellent moyen de comprendre le sujet de l'architecture informatique du point de vue d'un programmeur; les conceptions informatiques sont presque toutes des améliorations des conceptions antérieures.
Autrement dit, je recommande d'étudier des conceptions de systèmes plus anciennes et complètes, plutôt que des livres théoriques sur "l'architecture informatique" qu'ils vous donnent en informatique. Comprendre vraiment la conception des systèmes et faire un excellent travail d'écriture de logiciels. La compréhension intuitive de l'architecture des systèmes informatiques nécessite la maîtrise de nombreux concepts. Je pense que si vous commencez à l'époque où les architectures informatiques étaient plus faciles à gérer en taille et en portée, vous pourriez aider votre père à écrire un meilleur code.
(Cette série de livres "écrivez un bon code" qu'un autre gars a mentionné a fière allure, au fait, et j'ai édité ma question pour supprimer toute aspersion que j'avais précédemment jeté sur l'apprentissage à partir d'un livre, car elle a fière allure! )
Certaines choses qui enseignent très bien l'architecture informatique:
J'aime choisir des machines des années 80 comme points de départ pour expliquer et démontrer des choses aux gens, car c'est à ce moment-là que j'ai commencé à utiliser les ordinateurs. J'ai utilisé le guide de référence du programmeur commodore 64 pour montrer aux gens un lieu de saut où la connaissance de la programmation et la connaissance de l'architecture informatique se rencontrent. Avec un tel livre, et peut-être un émulateur commodore 64 fonctionnant sur votre PC pour que vous puissiez essayer des choses, vous apprendrez comment les systèmes informatiques dans l'incarnation classique des années 80 de l'architecture informatique, sont vraiment construits. À mon avis, un exemple concret est un meilleur point de départ, qu'une douzaine de modèles théoriques auxquels il manque les détails du monde réel qui font fonctionner les choses. Si vous savez ce qu'est un registre, ce qu'est une ALU, ce qu'est un bus et ce qu'est une horloge, et quels systèmes de signalisation sont utilisés dans une ancienne conception des années 80, qui vous donneront les bases que vous devez savoir pour comprendre quelque chose de récent, comme "l'architecture de pont de sable" d'Intel. Historiquement, regardez en arrière sur les originaux, par exemple recherchez l'architecture "Von neumann", sur wikipedia.
Aller de l'avant de mon premier point quelques années; Découvrez l'architecture IBM PC d'origine, le langage d'assemblage 8086 et le bus ISA. À partir de cela, et de ses limites, la compréhension de ce que contient un processeur "Intel COre i7", de ce que font les bus PCI et PCI-e et pourquoi vous en avez besoin, peut se dérouler plus naturellement. L'architecture PC d'aujourd'hui a encore un peu de "gueule de bois" par rapport à la conception originale du PC IBM. La façon dont le chargement (démarrage) du programme initial (système d'exploitation) se produit sur un PC 2011 doit encore beaucoup à l'héritage du PC IBM d'origine et de son BIOS ROM, et de ses paramètres CMOS dans un PC d'origine.
Utilisez et modifiez une version préconfigurée de Linux qui fonctionne sur certains périphériques non PC intégrés, et vous en apprendrez beaucoup sur l'architecture informatique intégrée, non seulement sur l'architecture technique, mais aussi sur la raison pour laquelle certaines fonctionnalités sont présentes. Un bel exemple qui est disponible à bas prix est le TS-7200, qui a un joli PC-104 (bus ISA, comme dans le PC d'origine). Les ordinateurs PC-104 (bus ISA 16 bits intégré compatible avec les broches de l'ère IBM PC / AT 80286) sont un excellent moyen pour un non-concepteur de cartes de construire un système intégré, car les modules sont empilables. Vous voulez des E / S supplémentaires ou des périphériques? Empilez simplement quelques modules. Le TS-7200 a un cœur non x86 (un processeur ARM9) qui est capable d'exécuter soit big-endian soit little-endian. Si vous n'avez pas encore rencontré "l'endianisme" dans votre parcours d'apprentissage de l'architecture, c'est un bon endroit pour le rencontrer.
la source
La plupart des livres sur le langage d'assemblage discuteront des fonctionnalités d'architecture pertinentes, mais généralement uniquement pour l'architecture que le livre cible. Vous obtiendrez donc des informations sur les déversements de cache et les techniques de mappage de pages MMU, mais probablement rien sur l'endianité.
la source