Aprendiendo arquitectura de computadora como programador [cerrado]

12

Por lo general, me encuentro con gurús en SO y otros lugares (instructores, autores de libros, etc.) que dirían algo similar a las líneas "This will cause alignment issues" u otros tidbits de bajo nivel.

Quiero aprender sobre todos estos tidbits que son relevant para la programación. Ahora, por lo general, cuando veo libros de bajo nivel (por ejemplo, los libros de arquitectura de computadoras) son demasiado bajos y están orientados a personas cuyo área de interés principal es la arquitectura de computadoras y no el diseño de software.

¿Tiene recomendaciones para libros que pasen por temas de bajo nivel que sean relevantes para los programadores?

    
pregunta Samaursa 23.06.2011 - 18:43

8 respuestas

16

Un buen conjunto de libros precisamente para este propósito es la serie "Write Great Code" de Randall Hyde Vol.1 Vol. 2 ): descripción de la arquitectura de la máquina explícitamente desde la perspectiva de lo que necesita saber para escribir código eficiente en lenguajes de alto nivel.

    
respondido por el Kilian Foth 23.06.2011 - 19:33
6

Lamentablemente, no conozco un equivalente moderno a los microprocesadores: la opinión de un programador por R. Dewar. El más cercano que conozco es Organización y diseño de computadoras, Cuarta edición: La interfaz de hardware / software de David A. Patterson y John L. Hennessy, pero no estoy seguro de que no lo consideren un nivel demasiado bajo; seguro que lo harás por su otra obra, Arquitectura de computadora, un enfoque cuantitativo.

En línea, este enlace quizás le ofrezca lo que desea.

    
respondido por el AProgrammer 23.06.2011 - 19:22
5

Para plataformas x86, obtenga una copia de los manuales de los procesadores Intel IA-32 e Intel 64 . El manual de referencia de optimización analiza muchos de estos problemas desde una perspectiva de bajo nivel para las CPU Intel x86. AMD también tiene manuales similares que cubren los mismos problemas.

La mayoría de las otras arquitecturas de CPU tienen manuales similares que tratan los problemas de rendimiento. ( Ej. ARM y PowerPC .)

    
respondido por el greyfade 23.06.2011 - 20:31
3

Encuentro "Arquitectura de computadora: Un enfoque cuantitativo" por Hennessy y Patterson ( enlace de Amazon ) como un Un enfoque muy sólido y sólido de la arquitectura de la computadora, con bastantes estudios de caso que son directamente relevantes para la programación.

Se utiliza en varios grados en varios cursos de arquitectura CS de nivel de pregrado y posgrado en los Estados Unidos.

También recibió una excelente revisión de Ars Technica hace un tiempo.

    
respondido por el Bitgarden 23.06.2011 - 19:16
3

Esto es lo que estoy usando en mi clase de Sistemas de Computación ahora Sistemas de Computación: Perspectiva de un Programador (2da Edición) y mientras que la clase acaba de comenzar, la he investigado y me gusta mucho.

Aquí está la descripción del libro:

  

Pocos estudiantes que estudian ciencias de la computación o ingeniería informática tendrán la oportunidad de construir un sistema informático. Por otro lado, la mayoría de los estudiantes deberán usar y programar computadoras casi a diario. Sistemas informáticos: la perspectiva de un programador presenta los conceptos importantes y duraderos que subyacen a los sistemas informáticos al mostrar cómo estas ideas afectan la corrección, el rendimiento y la utilidad de los programas de aplicación. El enfoque práctico del texto (que incluye un conjunto completo de laboratorios) ayuda a los estudiantes a comprender el funcionamiento “bajo el capó” de un sistema informático moderno y los prepara para cursos futuros sobre temas de sistemas como compiladores, arquitectura de computadoras, sistemas operativos, y redes.

    
respondido por el Jetti 23.06.2011 - 19:44
2

Es mucho trabajo, pero Pragmática del lenguaje de programación puede ser exactamente lo que estás buscando. El libro es teóricamente principalmente sobre análisis y compilación (que es conocimiento esencial para aquellos que realmente quieren aprender a programar) y en el proceso, aprenderán cómo los conceptos del lenguaje se traducen en lo que está sucediendo en un nivel bajo. Mejor aún, aprenderá esto para muchos idiomas a la vez y podrá comparar y contrastar de manera inteligente cómo funcionan realmente los diferentes idiomas.

No puedo recomendarlo a menos que pueda dedicar varios meses a aprender realmente el material. No es el tipo de cosas que simplemente rozas y de repente te iluminas. Pero si lo dices en serio, te lo recomiendo.

    
respondido por el btilly 23.06.2011 - 21:35
2

Podría ser falso en biología, pero en informática, la "ontogenia recapitula la filogenia" casi. Una descripción histórica de las arquitecturas de computadoras desde las primeras computadoras es una excelente manera de entender el tema de la arquitectura de computadoras desde la perspectiva de un programador; los diseños de computadora son casi todos los refinamientos de diseños anteriores.

Es decir, recomiendo estudiar diseños de sistemas antiguos que funcionen completos y que incluyan libros de "arquitectura de computadora" teóricos que te entreguen en ciencias de la computación. Para entender realmente el diseño de sistemas, y para hacer un gran trabajo escribiendo software. La comprensión intuitiva de la arquitectura de los sistemas informáticos requiere el dominio de muchos conceptos. Creo que si vuelves a empezar cuando las arquitecturas informáticas son más manejables en tamaño y alcance, podrías llevar a tu padre en tu objetivo de escribir mejor código.

Por cierto, esa serie de libros que "otro gran código escribió" que otro chico mencionó se ve muy bien, y he editado mi pregunta para eliminar cualquier aspersión que haya emitido previamente sobre el aprendizaje de un libro, porque se ve muy bien!)

Algunas cosas que enseñan muy bien la arquitectura de computadoras:

  1. Me gusta escoger máquinas de la década de 1980 como puntos de partida para explicar y demostrarle cosas a las personas, porque ahí fue cuando comencé a usar las computadoras. He utilizado la guía de referencia del programador de commodore 64, para mostrar a las personas un punto de partida donde el conocimiento de la programación y el conocimiento de la arquitectura de la computadora se encuentran. Con un libro así, y tal vez un emulador commodore 64 ejecutándose en su PC para que pueda probar cosas, aprenderá cómo se construyen realmente los sistemas informáticos en la encarnación clásica de la arquitectura computacional de los años 80. Desde mi punto de vista, un ejemplo concreto es un mejor lugar para comenzar, que una docena de modelos teóricos en los que faltan detalles del mundo real que hacen que las cosas funcionen. Si sabe qué es un registro, qué es una ALU, qué es un bus y qué es un reloj, y qué sistemas de señalización se usan en un diseño antiguo de la década de 1980, eso le dará los fundamentos que necesita saber para comprender algo. reciente, como la "arquitectura del puente de arena" de Intel. Históricamente, mire hacia atrás a los originales, por ejemplo, busque la arquitectura "Von neumann" en wikipedia.

  2. Avanzando desde mi primer punto algunos años; Obtenga información sobre la arquitectura original de PC de IBM, el lenguaje de ensamblaje 8086 y el bus ISA. A partir de esto, y sus limitaciones, la comprensión de lo que contiene una CPU "Intel COre i7", y lo que hacen los buses PCI y PCI-e y por qué los necesita, puede proceder de forma más natural. La arquitectura de PC de hoy todavía tiene un poco de "resaca" del diseño original de PC de IBM. La forma en que el programa inicial (sistema operativo) de carga (arranque) ocurre en una PC 2011 aún debe mucho a la herencia de la PC IBM original y su BIOS ROM, y su configuración de CMOS en una PC original.

  3. Use y modifique una compilación preconfigurada de Linux que funciona en algunos dispositivos integrados que no son PC, y aprenderá mucho sobre la arquitectura de la computadora incorporada, no solo la arquitectura técnica, sino por qué algunas de las características hay. Un buen ejemplo que está disponible es el TS-7200 , que tiene un agradable PC-104 (ISA Bus, como en la PC original). Las computadoras PC-104 (bus ISA de 16 bits incrustado que es compatible con las PC con las PC IBM PC / AT 80286 de la era) son una excelente manera para que un diseñador que no es una placa construya un sistema integrado, ya que los módulos son apilables. ¿Quieres un poco de IO extra o periféricos? Sólo apila unos cuantos módulos. El TS-7200 tiene un núcleo no x86 (una cpu ARM9) que es capaz de ejecutar big-endian o little-endian. Si aún no te has topado con "endianness" en tu viaje de aprendizaje de arquitectura, es un buen lugar para encontrarlo.

respondido por el Warren P 24.06.2011 - 21:23
0

La mayoría de los libros sobre lenguaje ensamblador discutirán las características relevantes de la arquitectura, pero generalmente solo para la arquitectura a la que se dirige el libro. Así que obtendrás información sobre derrames de caché y técnicas de mapeo de páginas MMU, pero probablemente no sobre Endianness.

    
respondido por el TMN 23.06.2011 - 19:55

Lea otras preguntas en las etiquetas