2011-01-02 10 views
11

He estado programando durante unos 11 años, y he usado muchos lenguajes de programación diferentes, desde Python hasta C.¿Dónde puedo aprender sobre el funcionamiento de bajo nivel de mi computadora?

Sin embargo, lo que me avergüenza es que todavía me falta mucho los conocimientos básicos de bajo nivel en el que todo esto se construye en:

  • ¿Cómo exactamente se pila y el montón de archivos ejecutables construido y cómo trabajan

  • ¿Cómo funciona una CPU

  • ¿Qué es un ciclo de reloj

  • ¿Qué es un bus de datos

  • ¿Cómo norte y el puente sur en mi trabajo placa base

  • lógica binaria

    nivel bajo/cálculos

Esos son solo ejemplos, lo que estoy buscando es una buena introducción sobre esto, ya que siento que esto es simplemente conocimiento requerido para convertirme en un buen programador.

+1

Duplicados y preguntas relacionadas: [¿Cuál es un buen libro para aprender cómo funcionan realmente las computadoras?] (Http://stackoverflow.com/questions/773704/whats-a-good-book-to-learn-how-computers- realmente-trabajo), [Aprendiendo sobre el bajo nivel] (http://stackoverflow.com/questions/2440313/learning-about-the-low-level), [¿Puede alguien decirme los principios básicos de cómo funciona la programación de computadoras? ] (http://stackoverflow.com/questions/273978/can-someone-tell-me-the-very-basics-of-how-computer-programming-works). – gnovice

+0

La [wiki de la etiqueta x86] (http://stackoverflow.com/tags/x86/info) tiene muchos buenos enlaces sobre el hardware interno de la CPU y el lenguaje ensamblador (por ejemplo, todo lo que necesita saber para ver un simple asm loop y calcule cuántos ciclos de reloj por iteración debería tomar sin errores de caché, en Intel Haswell por ejemplo). No tanto en los conjuntos de chips (Southbridge). –

Respuesta

0

dos sugerencias.

Algunos libros:

Windows Internals (aunque no toda la información se aplica a otros Sistemas Operativos, obviamente)

Write Great Code: Volume 1 (y quizá volúmenes posteriores)

The Art of Assembly Language (enlaza con segunda sugerencia)

Aprenda el lenguaje ensamblador:

El lenguaje de ensamblaje es de muy bajo nivel. De hecho, es solo una forma de código máquina legible por humanos (los unos y los ceros, que las CPU entienden). Para comprender el lenguaje ensamblador, debe comprender el funcionamiento de bajo nivel. Esto se debe a que muy poco (si acaso) se administra automáticamente, a diferencia de los lenguajes de nivel superior como C# y Java.

1

Creo que debería comenzar con assembly ya que este es un lenguaje de programación de bajo nivel. por ejemplo, la pila es básicamente la SP register. para conocer ensamblados, registros de CPU, cómo se obtienen las instrucciones de la memoria en la CPU y luego se ejecutan será un buen lugar para comenzar.

0

Estoy seguro de que hay recursos en línea para este tipo de cosas, pero esto también está muy bien cubierto en un curso de Arquitectura de Computadora como this. También me gustó el book para ese curso.

Sin embargo, realmente no cubría lo suficiente del lado práctico x86 de las cosas para mi gusto (diseñamos un procesador MIPS y escribimos código de ensamblaje para él y finalmente un compilador de C para ello).

Para completar las lagunas de lo que era diferente entre nuestro ejemplo artificial y mi máquina real, sugiero Windows Internals book. Y posiblemente tomando un OSR course.

Si está más en el lado de Linux, hay courses y similares.

2

Suena como una clase que tomé en el MIT llamado 6.004 es justo lo que estás buscando. La clase fue una especie de encuesta de la computadora desde cero. Comenzamos con la teoría de la información (qué es información, cómo se puede representar como bits, etc.), luego hablamos de transistores, y luego combinamos los transistores para hacer funciones lógicas básicas, y combinamos esas funciones lógicas para hacer una máquina sumadora simple. etc, etc, todo el camino hasta la construcción de una CPU rudimentaria con un sistema operativo básico.

Si eso suena como lo que estás buscando, podrías leer detenidamente los folletos y videos de la conferencia en el course web page. Tiene algunas cosas buenas, aunque todo lo que hay para los estudiantes que también van a dar conferencias, hacer laboratorios, etc.

He oído que un excelente libro independiente que cubre básicamente el mismo material es The Elements of Computing Systems: construyendo una computadora moderna a partir de First Principles, por Nisan y Schocken. Tiene ejercicios prácticos que puedes hacer para realmente cogerle el truco. Compré el libro con muchas recomendaciones de la gente, pero aún no he tenido la oportunidad de resolverlo.

+1

puede proporcionar el enlace a los videos, por favor. No pude encontrarlos y apuesto a que son increíbles. –

+1

@Eric Fortis - ¡Lo siento, utilicé el enlace equivocado en mi publicación! Esta página (http://6004.csail.mit.edu/currentsemester/handouts.htm) tiene enlaces a las notas de clase y videos que mencioné. –

+0

gracias por el seguimiento. –

1

En mi opinión, la mejor manera de aprenderlo es pasándolo bien. Aprender compiladores, diseño de sistema y arquitectura es muy divertido trabajando con interfaces de microprocesamiento. Así que mi sugerencia es comenzar a poner manos a la obra con un kit Atmel AVR kit o Motorola MSP. Otro punto de partida es hacer un micro simulador en cualquier idioma de su preferencia y simular la computadora SRC Simple RISC this material, que es de this book.

This is the project Hice en clase usando un MSP430, de nuevo fue muy divertido.

Cuestiones relacionadas