¿Cómo funcionan las computadoras? [cerrado]

59

Esta pregunta es casi vergonzosa ... Tengo una licenciatura en Informática (y una segunda en curso). He trabajado como desarrollador de .NET a tiempo completo durante casi cinco años. Generalmente parezco competente en lo que hago.

¡Pero no sé cómo funcionan las computadoras!

Por favor, desnuda conmigo por un segundo. Un rápido Google de 'Cómo funciona una computadora' arrojará muchos y muchos resultados, pero me costó encontrar uno que realmente respondiera a lo que estoy buscando. Me doy cuenta de que esta es una gran pregunta, así que realmente, si me pueden dar algunas palabras clave o alguna dirección.

Sé que hay componentes ... la fuente de alimentación, la placa base, la memoria RAM, la CPU, etc. y tengo la 'idea general' de lo que hacen. Pero realmente no entiendo cómo pasar de una línea de código como Console.Readline()en .NET (o Java o C ++) y hacer que realmente haga cosas.

Claro, soy vagamente consciente de MSIL (en el caso de .NET), y que algo de magia ocurre con el compilador JIT y se convierte en código nativo (creo). Me dijeron que Java es similar, y C ++ corta el paso medio.

He hecho un ensamblaje de mainframe, hace unos años atrás. Recuerdo que había algunas instrucciones y algunos registros de CPU, y escribí un código ... y luego ocurrió algo de magia ... y mi programa funcionaría (o se bloquearía). Por lo que entiendo, un 'Emulador' simularía lo que sucede cuando se llama a una instrucción y actualizaría los registros de la CPU; pero, ¿qué hace que esas instrucciones funcionen como lo hacen?

¿Esto se convierte en una pregunta de electrónica y no en una pregunta de "computadora"? Supongo que no hay ninguna razón práctica para que entienda esto, pero siento que debería poder hacerlo.

(Sí, esto es lo que sucede cuando pasas un día con un niño pequeño. Les lleva unos 10 minutos y cinco iteraciones preguntar "¿Por qué?" Para que te des cuenta de cuánto no sabes)

Rob P.
fuente
20
Recomiendo Code by Charles Petzold
No es una Emulator. Es un grupo de circuitos semiconductores reales con cientos (miles) de cables de entrada y salida, y miles de millones de puertas lógicas. El Emulatorfue utilizado solo con fines educativos.
rwong
1
Creo que el título debería cambiarse para ser más específico / informativo. Esta es en realidad una pregunta bastante útil, pero a primera vista parece totalmente ridícula, como lo que originalmente preguntó el niño pequeño. Cámbielo a algo como "¿cómo se conectan los comandos de software de alto nivel con las respuestas de hardware de bajo nivel?"
jhocking
2
Hola Rob, como está redactado en este momento, esto es irremediablemente amplio y se ha convertido rápidamente en una pregunta de recomendación de libro y una discusión extendida: ambos no queremos aquí. Si puede intensificar su enfoque y preguntar algo específico sobre un problema que enfrenta actualmente , no dude en preguntar al respecto.

Respuestas:

139

Comenzaré desde el nivel más bajo que pueda ser relevante (puedo comenzar desde un nivel aún más bajo, pero probablemente sean demasiado irrelevantes), comenzando desde Atom, Electricidad, Transistores, Puertas lógicas, Circuitos integrados (Chip / CPU ) y finaliza en la Asamblea (supongo que está familiarizado con los niveles superiores).

Al principio

Átomo

El átomo es una estructura compuesta de electrones, protones y neutrones (que a su vez están compuestos de partículas elementales ). La parte más interesante del átomo para las computadoras y la electrónica son los electrones porque los electrones son móviles (es decir, pueden moverse con relativa facilidad, a diferencia de los protones y los neutrones, que son más difíciles de mover) y pueden flotar libremente por sí mismos sin estar dentro. un átomo.

Por lo general, cada átomo tiene el mismo número de protones y electrones, llamamos a este estado "neutral". Como sucede, es posible que un átomo pierda o gane electrones adicionales. Se dice que los átomos en este estado desequilibrado son átomos "cargados positivamente" (más protones que electrones) y átomos "cargados negativamente" (más electrones que protones) respectivamente.

Los electrones son indestructibles e indestructibles (no es así en mecánica cuántica, pero eso es irrelevante para nuestro propósito); así que si un átomo pierde un electrón, algún otro átomo cercano tuvo que recibir los electrones adicionales o el electrón tuvo que liberarse en un electrón flotante libre, por el contrario, dado que el electrón no es construible, para ganar un electrón adicional, un átomo tuvo que extraerlo de los átomos cercanos o de un electrón flotante libre. La mecánica de los electrones es tal que si hay un átomo cargado negativamente cerca de un átomo cargado positivamente, algunos electrones migrarán hasta que ambos átomos tengan la misma carga.

Electricidad

La electricidad es solo un flujo de electrones desde un área con un número muy alto de átomos con carga negativa a un área con un número muy alto de átomos con carga positiva. Ciertas reacciones químicas pueden crear una situación en la que tenemos un nodo con muchos átomos con carga negativa (llamado "ánodo") y otro nodo con muchos átomos con carga positiva (llamado "cátodo"). Si conectamos dos nodos con carga opuesta con un cable, las masas de electrones fluirán del ánodo al cátodo, y este flujo es lo que llamamos "corriente eléctrica".

No todos los cables pueden transmitir electrones con la misma facilidad, los electrones fluyen mucho más fácilmente en materiales "conductores" que en materiales "resistentes". Un material "conductor" tiene baja resistencia eléctrica (p. Ej., Alambres de cobre en los cables) y un material "resistente" tiene alta resistencia eléctrica (p. Ej., Aislamiento del cable de goma). Algunos materiales interesantes se denominan semiconductores (por ejemplo, silicio), porque pueden alterar su resistencia fácilmente, bajo ciertas condiciones un semiconductor podría actuar como conductor y en otras condiciones podría convertirse en una resistencia.

La electricidad siempre prefiere fluir a través del material con menor resistencia, por lo que si un cátodo y un ánodo están conectados con dos cables, uno con resistencia muy alta y el otro con resistencia muy baja, la mayoría de los electrones fluirán a través del cable de baja resistencia y casi ninguno fluye a través del material de alta resistencia.

La edad media

Interruptores y Transistores

Los interruptores / flip-flops son como sus interruptores de luz regulares, un interruptor se puede colocar entre dos pedazos de cable para cortar y / o restaurar el flujo de electricidad. Los transistores funcionan exactamente igual que un interruptor de luz, excepto que en lugar de conectar y desconectar físicamente los cables, un transistor conecta / desconecta el flujo de electricidad al alterar su resistencia dependiendo de si hay electricidad en el nodo base y, como ya habrás adivinado / sé, los transistores están hechos de semiconductores porque podemos alterar los semiconductores para convertirlos en una resistencia o un conductor para conectar o desconectar las corrientes eléctricas.

Un tipo común de transistor, el Transistor de unión bipolar NPN (BJT), tiene tres nodos: "base", "colector" y "emisor". En un NPN BJT, la electricidad puede fluir desde el nodo "emisor" al nodo "colector" solo cuando el nodo "base" está cargado. Cuando el nodo base no está cargado, prácticamente ningún electrón puede fluir a través y cuando el nodo base está cargado, los electrones pueden fluir entre el emisor y el colector.

El comportamiento de un transistor.

(Le sugiero que lea esto antes de continuar, ya que puede explicar mejor que yo con gráficos interactivos)

Digamos que tenemos un transistor conectado a una fuente eléctrica en su base y colector, y luego conectamos un cable de salida cerca de su colector (vea la Figura 3 en http://www.spsu.edu/cs/faculty/bbrown/web_lectures / transistores / ).

Cuando aplicamos electricidad a la base ni al colector, entonces no puede fluir electricidad ya que no hay electricidad de la que hablar:

B   C  |  E   O
0   0  |  0   0

Cuando aplicamos electricidad al colector pero no a la base, la electricidad no puede fluir al emisor ya que la base se convierte en un material de alta resistencia, por lo que la electricidad se escapa al cable de salida:

B   C  |  E   O
0   1  |  0   1

Cuando aplicamos electricidad a la base pero no al colector, tampoco puede fluir electricidad ya que no hay diferencia de carga entre el colector y el emisor:

B   C  |  E   O
1   0  |  0   0

Cuando aplicamos electricidad tanto a la base como al colector, obtenemos electricidad que fluye a través del transistor, pero dado que el transistor ahora tiene una resistencia menor que el cable de Salida, casi no fluye electricidad a través del cable de Salida:

B   C  |  E   O
1   1  |  1   O

Puertas lógicas

Cuando conectamos el emisor de un transistor (E1) al colector de otro transistor (C2) y luego conectamos una salida cerca de la base del primer transistor (O) (ver Figura 4 en http://www.spsu.edu / cs / faculty / bbrown / web_lectures / transistors / ), entonces sucede algo interesante. Digamos también que siempre aplicamos electricidad al colector del primer transistor (C1) y, por lo tanto, solo jugamos con los nodos base de los transistores (B1, B2):

B1   B2   C1   E1/C2  |  E2   O
----------------------+----------
0    0    1    0      |  0    1
0    1    1    0      |  0    1
1    0    1    0      |  0    1
1    1    1    1      |  1    0

Resumamos la tabla para que solo veamos B1, B2 y O:

B1   B2  |  O
---------+-----
0    0   |  1
0    1   |  1
1    0   |  1
1    1   |  0

He aquí , si estás familiarizado con la lógica booleana y / o las puertas lógicas, debes notar que esta es precisamente la puerta NAND. Y si está familiarizado con la lógica booleana y / o las puertas lógicas, también puede saber que una NAND (así como una NOR) está funcionalmente completa , es decir, usando solo NAND, puede construir todas las otras puertas lógicas y el resto de la verdad mesas. En otras palabras, puede diseñar un chip de computadora completo utilizando puertas NAND solo.

De hecho, la mayoría de las CPU están (¿o solía estarlo?) Diseñadas usando NAND solo porque es más barato de fabricar que usando una combinación de NAND, NOR, AND, OR, etc.

Derivando los otros operadores booleanos de NAND

No describiría cómo hacer que todos los operadores booleanos, solo la puerta NOT y AND, puedan encontrar el resto en otro lugar.

Dado un operador NAND, entonces podemos construir una puerta NOT:

Given one input B
O = NAND(B, B)
Output O

Dado un operador NAND y NOT, entonces podemos construir una puerta AND:

Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O

Podemos construir otras puertas lógicas de manera similar. Como la compuerta NAND está funcionalmente completa , también es posible construir compuertas lógicas con más de 2 entradas y más de 1 salida, no voy a discutir cómo construir tales compuertas lógicas aquí.

Era de la Ilustración

Construyendo una máquina de Turing a partir de puertas booleanas

Una CPU es solo una versión más complicada de una máquina de Turing. Los registros de la CPU son el estado interno de la máquina de Turing, y la RAM es una cinta de la máquina de Turing.

Una máquina de Turing (CPU) puede hacer tres cosas:

  • lea un 0 o 1 de la cinta (lea una celda de memoria de la RAM)
  • cambiar su estado interno (cambiar sus registros)
  • moverse hacia la izquierda o hacia la derecha (leer múltiples posiciones desde la RAM)
  • escriba un 0 o 1 en la cinta (escriba en una celda de memoria en la RAM)

Para nuestro propósito, estamos construyendo la máquina Turing de 2 estados y 3 símbolos de Wolfram usando lógica combinatoria (las CPU modernas usarían microcódigo, pero son más complejas de lo necesario para nuestro propósito).

La tabla de estado de la máquina de Turing de Wolfram (2,3) es la siguiente:

    A       B
0   P1,R,B  P2,L,A
1   P2,L,A  P2,R,B
2   P1,L,A  P0,R,A

Queremos volver a codificar la tabla de estado anterior como una tabla de verdad:

Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)

      R  0          1
I1,I2
(0,0)    (0,1),1,1  (1,0),0,0
(0,1)    (1,0),0,0  (1,0),1,1
(1,0)    (0,1),0,0  (0,0),1,0

The truth table for the state table above:

I1  I2  R(t) | O1  O2  M   R(t+1)
-------------+--------------------
0   0   0    | 0   1   1   1
0   0   1    | 1   0   0   0
0   1   0    | 1   0   0   0
0   1   1    | 1   0   1   1
1   0   0    | 0   1   0   0
1   0   1    | 0   0   1   0

Realmente no voy a construir una puerta lógica de este tipo (no estoy seguro de cómo dibujarla en SE y probablemente será bastante grande), pero como sabemos que la puerta NAND está funcionalmente completa , entonces tenemos una manera para encontrar una serie de puertas NAND que implementarán esta tabla de verdad.

Una propiedad importante de Turing Machine es que es posible emular una computadora de programa almacenado usando una máquina de Turing que solo tiene una tabla de estados fijos. Por lo tanto, cualquier Máquina Universal de Turing puede leer su programa desde la Cinta (RAM) en lugar de tener que tener sus instrucciones codificadas en la tabla de estado interno. En otras palabras, nuestra máquina de Turing (2,3) puede leer sus instrucciones de los pines I1, I2 (como software) en lugar de estar codificados en la implementación de la puerta lógica (como hardware).

Microcódigos

Debido a la creciente complejidad de las CPU modernas, se vuelve prohibitivamente difícil usar solo la lógica combinatoria para diseñar una CPU completa. La CPU moderna generalmente está diseñada como un intérprete de instrucciones de microcódigos; Un microcódigo es un pequeño programa integrado en la CPU que utiliza la CPU para interpretar el código de máquina real. Este intérprete de microcódigo en sí está diseñado generalmente mediante lógica combinatoria.

Registro, caché y RAM

Hemos olvidado algo arriba. ¿Cómo recordamos algo? ¿Cómo implementamos la cinta y la RAM? La respuesta está en un componente electrónico llamado condensador. Un condensador es como una batería recargable, si se carga un condensador retendrá electrones adicionales y también puede devolver electrones a los circuitos.

Para escribir en un condensador, llenamos el condensador con electrones (escriba 1) o drenamos todos los electrones en el condensador hasta que esté vacío (escriba 0). Para leer el valor de un condensador, tratamos de descargarlo. Si, cuando intentamos descargar, no fluye electricidad, entonces el capacitor está vacío (leer 0), pero si detectamos electricidad, entonces el capacitor debe cargarse (leer 1). Puede notar que leer un condensador agota su almacén de electrones, las RAM modernas tienen los circuitos para recargar periódicamente el condensador para que puedan retener su memoria mientras haya electricidad.

Hay múltiples tipos de condensadores usados ​​en una CPU, los registros de la CPU y los cachés de CPU de nivel superior se hacen usando "condensadores" de muy alta velocidad que en realidad están construidos a partir de transistores (por lo tanto, casi no hay "retraso" para leer / escribir desde ellos), estos se llaman RAM estática (SRAM); mientras que la memoria RAM principal se hace con una potencia más baja, pero con condensadores más lentos y mucho más baratos, estos se llaman RAM dinámica (DRAM).

Reloj

Un componente muy importante de una CPU es el reloj. Un reloj es un componente que "marca" regularmente para sincronizar el procesamiento. Un reloj típicamente contiene un cuarzo u otros materiales con un período de oscilación conocido y relativamente constante, y la circuitería del reloj mantiene y mide esta oscilación para mantener su sentido del tiempo.

Las operaciones de la CPU se realizan entre tics de reloj y las lecturas / escrituras se realizan en los ticks para garantizar que todos los componentes se muevan sincrónicamente y no se pisoteen entre sí mientras están en estados intermedios. En nuestra (2,3) Máquina de Turing, entre los tics del reloj, la electricidad pasa a través de las puertas lógicas para calcular la salida de la entrada (I1, I2, R (t)); y en el tictac del reloj, la grabadora de cinta escribirá O1, O2 en la cinta, el motor se moverá según el valor de M y el registro interno se escribirá a partir del valor de R (t + 1), luego el lector de cinta leerá la cinta actual y pondrá la carga en I1, I2 y el registro interno se volverá a leer en R (t).

Hablando con periféricos

Observe cómo la (2,3) máquina de Turing interactúa con su motor. Esa es una vista muy simplificada de cómo una CPU puede interactuar con un hardware arbitrario. El hardware arbitrario puede escuchar o escribir en un cable específico para entradas / salidas. En el caso de la máquina de Turing (2,3), su interfaz con el motor es solo un cable que le indica al motor que gire en sentido horario o antihorario.

Lo que no se dice en esta máquina es que el motor tenía que tener otro "reloj" que funcionara en sincronía con el "reloj" interno de la máquina para saber cuándo comenzar y dejar de funcionar, por lo que este es un ejemplo de transmisión de datos sincrónica . La otra alternativa comúnmente utilizada, la transmisión asincrónica, utiliza otro cable, llamado línea de interrupción, para comunicar puntos de sincronización entre la CPU y el dispositivo asincrónico.

Era digital

Código de máquina y ensamblaje

El lenguaje ensamblador es un mnemónico legible por humanos para los códigos de máquina. En el caso más simple, hay un mapeo uno a uno entre el ensamblaje y el código de la máquina; aunque en los lenguajes de ensamblaje modernos, algunas instrucciones pueden correlacionarse con múltiples códigos de operación.

Lenguaje de programación

Todos estamos familiarizados con esto, ¿no?


Uf, finalmente terminado, escribí todo esto en solo 4 horas, así que estoy seguro de que hay un error en alguna parte (principalmente soy un programador, no un ingeniero eléctrico ni un físico, por lo que podría haber varias cosas que están completamente mal). Por favor, si encuentra un error, no dude en dar un @ grito o arreglarlo usted mismo si tiene el representante o crear una respuesta complementaria.

Lie Ryan
fuente
37
" asombroso " no le hace justicia. Esta respuesta es positivamente heroica .
njd
1
¿No son incorrectos los átomos? En general, se ionizarán para formar átomos cargados en lugar de permanecer neutrales para tener una subcapa externa completa.
alternativa
3
+1, +1000 si pudiera. Lo que realmente me sorprende, y por qué me encanta este campo, es que la gran cantidad de información en esta respuesta apenas comienza a rascar la superficie de la increíble profundidad de la tecnología que hace que una PC moderna funcione.
quentin-starin 05 de
Santo cielo. Eso es genial. Desearía poder hacer más que votar una vez.
Rob P.
3
Sin embargo, creo que debería tener en cuenta que el hardware moderno no se hace exactamente a través de las puertas NAND. Hay puertas, sí, pero en realidad son bastante complejas y solo (generalmente) la lógica NAND aproximada; Las restricciones son bastante físicas. Las puertas físicas se ensamblan primero en módulos lógicos, que podrían ser un NAND clásico, pero generalmente son bastante más (por ejemplo, flip-flop o medio sumador). El conjunto exacto de puertas permitido depende del estilo lógico que se utilice y de las limitaciones de la planta de fabricación; No todos los fabulosos pueden construir todo. (¡Aaargh! ¡Estoy empezando a recordar detalles! ¡Ayuda!)
Donal Fellows
12

De Nand a Tetris en 12 pasos

Creo que esto será absolutamente perfecto para ti:

De Nands a Tetris en 12 pasos

Noche oscura
fuente
gracias por el enlace, viéndolo ahora. ¿Existe un índice central de estas charlas o acabas de ver esta en un blog en alguna parte?
jhocking
No estoy seguro, este particular surgió cuando estaba navegando un día
Darknight 05 de
Se perdió un paso 13: obleas de silicio.
Trabajo
gracias por publicarlo! Este es básicamente el resumen del programa del curso que el autor de las charlas en las conferencias de video en IDC en Israel, y se basa en su libro: publiqué un enlace al libro en mi respuesta.
littleadv 05 de
¿Es este sitio el mismo material? Porque parece que está mucho mejor organizado que un solo gran video nand2tetris.org
jhocking
10

Si ha realizado el ensamblaje, entonces solo quedan dos o tres capas para entender:

  • Puertas lógicas , que es cómo se implementa la lógica a través de electrones en movimiento: aquí se convierte en una cuestión electrónica
  • Diseño de CPU y sistema, que es cómo se componen las puertas lógicas para formar una CPU y conectarse con RAM y periféricos. Las CPU modernas son extremadamente complejas, pero para su deseo de entender cómo funcionan básicamente las cosas, debería ser suficiente mirar una CPU simple clásica como la Z80 .
  • Microcódigo , que es cómo se interpretan las instrucciones de ensamblaje y se convierten en acciones a nivel de hardware de registros y circuitos lógicos.

El último (Microcódigo) es lo que lo hizo "clic" para mí, porque llenó el vacío entre la electrónica y el código.

Michael Borgwardt
fuente
Tal vez me falta el microcódigo. Tomé clases en puertas lógicas y diseño de CPU / sistema, programé en ensamblaje y aprendí todo sobre los comandos binarios (y lo hice bien en todas esas clases), pero aún no podía decirte cómo encaja todo. Tendré que investigar el microcódigo.
Casey Patton
@Casey: es muy posible que eso sea lo que te estás perdiendo. Para mí, aprender sobre (y escribir algunos) microcódigos fue exactamente donde pensé: OK, ahora entiendo cómo funcionan las computadoras. Claro, se han vuelto tan complejos que aún puede encontrarse fácilmente en situaciones que parecen imposibles de entender, pero estoy bastante convencido de que cualquier situación se puede entender si es competente, persistente e invierte suficiente tiempo.
Michael Borgwardt
7

El ejemplo de un programa de estudios de pregrado de CS que explica exactamente lo que solicitó se puede encontrar aquí (curso IDC.AC.IL CS101) . Se basa en este libro de prensa del MIT: " Los elementos de los sistemas informáticos: construir una computadora moderna a partir de los primeros principios ".

littleadv
fuente
1
+1 por mencionar "Los elementos de los sistemas informáticos". Es un gran libro, y debería responder con precisión la pregunta "¿Cómo funcionan las computadoras?".
Cedric
¿Le importaría explicar más sobre lo que hacen estos recursos y por qué los recomienda como respuesta a la pregunta que se hace? Las "respuestas de solo enlace" no son del todo bienvenidas en Stack Exchange
mosto
7

Para responder completamente a esta pregunta tomaría un libro completo. Afortunadamente, alguien ya ha escrito ese libro. Se llama Code: The Hidden Language of Computer Hardware and Software por Charles Petzold. Es una lectura muy informativa y muy entretenida.

Bill el lagarto
fuente
1
+1, solo Ctrl-F para "Petzold" trae la respuesta que estaba bastante seguro de que estaba allí;)
mlvljr
4

Recomiendo encarecidamente el Código de Charles Petzold. El libro es tanto una lección de historia como una descripción técnica de cómo construir una computadora. Comenzando explicando los cambios de telégrafo simples, el libro demuestra cómo funcionan los transistores, luego a las puertas lógicas, a la computadora programable, a cosas más complejas. También está muy bien escrito y probablemente podría ser captado por cualquier persona con suficiente curiosidad.

Doug T.
fuente
3

Va a ser demasiado difícil (¡y largo!) Enumerar todo lo que necesite saber para obtener una comprensión suficiente de lo que necesita saber. Un libro famoso que en realidad responde a todas estas preguntas es de Andrew Tanenbaum: Structured Computer Organization .

Este libro en realidad lo lleva desde la computadora física en su escritorio hasta las puertas lógicas y el álgebra booleana, luego muestra una arquitectura de ejemplo para guiarlo a través de cómo sucede todo en un sistema de este tipo.

(Una nota: es muy costoso ya que tiene ~ 800 páginas. Probablemente sea bueno obtener una versión de segunda mano o una edición anterior. Los conceptos no cambiaron).

Deckard
fuente
2

Bueno, se necesitan muchas bolas para decir eso y preguntar, supongo.

Prácticamente, el código se reduce cada vez más a un código de nivel inferior más complicado. Código de nivel de ensamblaje con registros de empujar y mover ... etc ...

Luego, el hardware toma este código y actúa sobre él. La mayoría de las veces, el hardware tendrá sus propias instrucciones sobre cómo hacer las cosas. Por lo tanto, puede haber una instrucción simple, como PUSH, donde un registro (ubicación de memoria) obtiene un valor como 1 o 2 o lo que sea.

Definitivamente es una pregunta de computadora. Y también uno de programación. Algunos programadores programan el hardware que tomará su código y lo hará hacer algo, aunque a un nivel muy bajo. También es una cuestión electrónica.

Ross
fuente
1

Hay dispositivos

Luego están los controladores de dispositivos que interactúan con estos dispositivos. Parte escrita en C, parte en ensamblaje típicamente.

El sistema operativo interactúa con el software de aplicación en un extremo y los controladores de dispositivo en el otro para comunicarse con el hardware real.

Si está realmente interesado, ¿por qué no hacer un hack de kernel de Linux para obtener más información?

Fanático23
fuente
Gracias por tu respuesta y sugerencia. ¡Suena como una gran idea!
Rob P.
1

En el centro de las cosas, esta es una cuestión de electrónica, aunque los fundamentos de esto deberían haber sido cubiertos en el curso de la encuesta para cualquier título de CS. Todo el hardware actúa en función de las puertas que están programadas en él a nivel de componente. Estas son las operaciones lógicas más básicas: NOT, AND, OR, XOR, NAND, NOR. Cada puerta tiene una función específica:

La puerta NOT toma un valor de entrada y produce un valor de salida, obtiene un 0 o 1 y genera lo contrario.

La compuerta AND toma dos valores de entrada y produce un valor de salida, obtiene cualquier combinación de 0 y 1 y emite 0 para cualquier combinación excepto dos, para las cuales emite un 1.

La compuerta OR funciona de manera muy similar a la compuerta AND, pero producirá un 1 por cada combinación de 0 y 1 que obtenga, excepto dos ceros, para los cuales genera un 0.

La compuerta XOR es nuevamente similar a las compuertas AND y OR, pero producirá un 0 cuando ambas entradas son iguales y un 1 cuando ambas entradas son diferentes.

La puerta NAND es el opuesto lógico de la puerta AND y la puerta NOR es el opuesto lógico de la puerta OR.

En otras palabras, a nivel de hardware, todo se reduce a la más básica de las expresiones lógicas binarias. Todo lo demás es solo una transición de un nivel superior de programación a uno más bajo hasta llegar a esta última capa.

MaQleod
fuente
+1 El siguiente nivel es cómo hacer un comportamiento secuencial con estas puertas lógicas. El componente clave es el flip-flop . Ensamble puertas lógicas para formar una ALU, un flip-flop para registros, un reloj y obtendrá una CPU.
Mouviciel 05 de
@mouviciel Olvidaste los multiplexores.
Starblue
1

Aunque me parece asombroso que alguien pueda completar un curso en CS sin comprender el hardware, supongo que es muy posible que un curso pueda concentrarse solo en la teoría como una rama de las matemáticas, en lugar de los detalles de ingeniería e implementación. Las venerables conferencias del SICP (tal como fueron entregadas en la década de 1980) parecían ser así.

En mi curso de CS, hace dos décadas, una edición anterior de Computadoras: de la lógica a la arquitectura se requería leer en el primer año.
Algo como esto debería llenar los vacíos.

Alternativamente, el software de curso abierto del MIT debería tener algo que ayude.

njd
fuente