¿Hay personas que entienden completamente cómo funcionan las computadoras?

Sí. Si habla con alguien que ha dedicado tiempo a escribir código en lenguaje ensamblador, a crear servicios y controladores o a componentes del sistema operativo, entonces se ha encontrado con una persona que entiende completamente las computadoras. Muchas de estas personas provienen de EE u otros antecedentes de ingeniería en lugar de la programación.

Y realmente no es tan difícil de entender, al menos en comparación con algo realmente difícil como la mecánica cuántica. Los conceptos básicos toman un tiempo para comprender y luego todo lo demás se acumula sobre esa base. Uno aprende sobre los modos de direccionamiento, memoria virtual, E / S / DMA, registros, almacenamiento en caché, operaciones lógicas, interrupciones, multiplexación, etc., y todo se vuelve bastante claro.

Si realmente desea saber cómo funcionan las computadoras, le sugiero que dedique algo de tiempo (semanas, no horas) para leer sobre el tema. Es posible que desee comenzar aquí; pero no espere obtener toda su ayuda de un lugar, también tendrá que investigar los temas más a fondo, posiblemente en Wikipedia.

El arte de la programación en lenguaje ensamblador

Y si realmente quiere entender lo que ocurre dentro de la CPU, que incluye microcódigo, números IEEE784, bus interno, almacenamiento en caché L1 / L2 y mucho más, entonces necesita estudiar el diseño de la CPU. Aquí hay algunos sitios que deberían ayudarte a comenzar …

ECE 361 – Arquitectura de Computadores

La Unidad Central de Procesamiento (CPU)

Teniendo aproximadamente la misma cantidad y tipo de experiencia, respetuosamente no estoy de acuerdo con @J. Barton.

Toma un dispositivo concreto, el MS Surface Book.

  • Sé que tiene un procesador Intel i7-6600U.
  • Sé que la mayor parte de su conjunto de instrucciones.
  • O … pensé que lo hice. La referencia utiliza más de 1,800 páginas para describir cerca de 600 instrucciones. ¿Un escritor de controladores de dispositivo sabría (o le importaría) VINSERTF64x2?
  • Sé que tiene dos núcleos con dos hiperhilos cada uno. Pero las restricciones de paralelismo exactas (por ejemplo, el acceso a la memoria) impuestas a los hilos en el mismo núcleo … no.
  • Sé que el procesador a nivel de micro arquitectura utiliza tuberías, predicción de ramificaciones, etc., pero no conozco los detalles.
  • Sé que el procesador es compatible con la memoria virtual paginada y segmentada y los pros y los contras de cada uno. Puedo decir que entiendo cómo funciona la administración de memoria en general en este procesador y cómo lo usa el sistema operativo … los detalles … no.
  • Sé que el procesador tiene muchos estados de energía, pero tengo muy poca idea de cómo se gestionan en conjunto con el sistema operativo.
  • Sé en general cómo funciona la pantalla táctil … pero no los detalles.
  • Sé un poco sobre cómo funciona la pluma. De hecho, utiliza la tecnología N-trig y se dice que usa BT para comunicarse. Pero, ¿cómo es exactamente un misterio para mí (no detectado por el escáner BT / BLE en mi Nota 4; continúa funcionando cuando BT está “apagado” por Windows). También sé que necesita una batería, mientras que la pluma de la tecnología Wacom no la necesita.
  • ¿Qué pasa con los gráficos integrados Intel en el chip i7 que se utilizan la mayor parte del tiempo?
  • ¿Y la Nvidia GTX-965M? Ni siquiera es seguro si es ese chip o uno personalizado que está cerca de él.
  • Lo anterior es una ilustración de por qué creo que ya no es posible que una sola persona “entienda completamente” cómo funciona una computadora.

    Obviamente no puedo saberlo todo, pero tengo una muy buena idea.

    Desde resistencias, capacitores, amplificadores operacionales y transistores hasta el sistema operativo hasta el navegador web. Soy capaz de depurar el código Python y usar un analizador lógico u osciloscopio para depurar el bus y problemas de hardware de bajo nivel. Conozco los conceptos básicos del diseño de microprocesadores, cómo diseñar RAM básica, cómo funciona el almacenamiento mecánico y flash. Sé cómo funcionan los buses en la placa base, los conceptos básicos de E / S de la computadora, la memoria virtual, los anillos de privilegios, el acceso al hardware por interrupciones, las interrupciones vectoriales, etc. Entiendo el proceso de arranque x86. Entiendo cómo un kernel moderno interactúa con el espacio del usuario (no con los detalles profundos) a través de interrupciones generadas por software. Programación, asignación de memoria, sistemas de archivos, protección de acceso, paginación, etc. Sé dónde buscar para conocer los detalles de ABI para la plataforma en la que estoy. Espacio de usuario desde libc a bibliotecas de nivel superior. Entiendo los conceptos básicos de una pila de gráficos, una pila de red, etc. Tengo conocimientos básicos de ensamblaje x86. Conozco c / c ++ cómodamente, java básico y python.

    Gran parte de los conceptos básicos de esto lo aprendí en mi programa de estudios. He completado los detalles en los últimos 10 años desde que me gradué. Intel y AMD publican excelentes informes sobre sus productos, Linux es de código abierto y hay algunos libros que son casi obligatorios para trabajar. Nunca podría haber aprendido todo esto antes de internet, y he perdido bastante tiempo en satisfacer mi curiosidad.

    Aquí está mi proyecto final de pregrado antes del proyecto final. Es una computadora basada en 68k con una interfaz rs-232. En años anteriores, el proyecto final era la salida de video, pero los chips de visualización compatibles con el bus ya no se fabricaban:

    Sería difícil, pero creo que hay que entender que hay niveles de comprensión.

    Creo que comprendo lo que hacen todos los COMPONENTES de una computadora portátil, o al menos podría aprenderlo en poco tiempo si me importara.

    Así que podría decirle cómo el teclado envía datos a la CPU y cómo se almacena el código BIOS en la memoria flash para el arranque.

    Pero si me pregunta cómo exactamente el procesador de punto flotante detecta un desbordamiento en una operación de raíz cuadrada, qué compuertas exactas en el estado de giro del chip y cómo hacen que el resto de la CPU indique que … entonces eso es más detallado de lo que estoy Es probable que necesite, por lo que está más allá de lo que sé.

    Entonces, en gran medida es una cuestión del nivel de representación en el que es posible saberlo todo.

    Nadie podría entender una computadora portátil completa al nivel de las ondas electromagnéticas y los átomos que forman los semiconductores … pero es posible saber lo suficiente sobre todo para hacer declaraciones inteligentes al respecto y poder profundizar en el diseño en algunos aspectos. Zonas muy pequeñas si hubiera gran necesidad.

    Las personas que están en este campo saben cómo funciona una computadora. Un buen programador sabe cómo funciona la parte del sistema operativo de la computadora. Los ingenieros electrónicos saben cómo funcionan las computadoras en el nivel más bajo, es decir. la parte de hardware.

    Entonces, ya ves, no es nada complejo.