Pregunta

¿Dónde en una computadora lo abstracto (letras en la pantalla) se encuentra con lo real (corriente eléctrica que pasa a través de circuitos en la memoria y los procesadores)?¿Cómo ocurrió esa evolución?

Creo que estoy hablando más allá del ensamblador.¿Quizás un nivel más profundo que las instrucciones del procesador?En algún momento, los comandos son realmente interpretados por el hardware, pero no entiendo dónde ni cómo sucede eso.

No fui a la universidad, así que no tomé ningún curso de informática ni nada parecido.Como muchos, soy un aficionado convertido en "profesional".Como resultado, creo que me faltan muchas piezas del rompecabezas.Conozco un poco de C++ y entiendo el concepto de punteros, etc. (aunque no los he usado mucho con enojo), sin embargo, solo he trabajado a un alto nivel.No estoy seguro de que saber este tipo de cosas me ayude o no, pero es interesante.

¿Fue útil?

Solución

A procesador funciona lo que se conoce como un ciclo de búsqueda hacia decodificación a ejecutar. instrucciones de código máquina son bastante bajo nivel (es decir, que no hacen todo lo que mucho en una sola instrucción). Por ejemplo, la adición de dos números tendría una secuencia de instrucciones con la semántica como:

  • Cargar un puntero a la dirección del operando 1 en el registro 1
  • Cargar el valor almacenado en la dirección almacenada en el registro 1 en el registro 2
  • Cargar un puntero a la dirección del operando 2 en el registro 1
  • Cargar el valor almacenado en la dirección en el registro 1 en el registro 3
  • Añadir el contenido del registro 2 y 3 se registra y almacenarlo en el registro 4
  • Cargar un puntero al destino en el registro 1
  • Almacena el contenido del registro de 4 en la dirección especificada en el registro 1

Dentro del procesador es un conjunto especial de memoria de alta velocidad conocido como un 'archivo de registro', que contiene la memoria que el procesador utiliza para almacenar datos que se está trabajando en ese momento. El archivo de registro tiene varios registros, que se identifican de forma única. Las instrucciones suelen trabajar en un registro, especialmente en arquitecturas RISC; si bien esto no siempre es el caso, es una buena abstracción suficiente por el momento.

Normalmente un procesador tiene que cargar o almacenar datos en un registro de hacer nada con él. Las operaciones tales como el trabajo aritmética en un registro, teniendo los operandos de dos registros y colocando el resultado en un tercio (en beneficio de la galería de maní, I Tienes no se le 6502 - deja para no confundir la cuestión, - ). El procesador tiene instrucciones especiales para la carga o el almacenamiento de datos de los registros en la memoria principal de la máquina.

Un procesador tiene un registro especial llamado el 'contador de programa' que almacena la dirección de la siguiente operación a ejecutar. Por lo tanto, la secuencia de la ejecución de una instrucción va más o menos así:

  • Obtener la instrucción almacenada en la dirección actual en el contador de programa.
  • Decodificar la instrucción, recogiendo además la operación real, lo que lo registra utiliza, el 'modo de direccionamiento' (cómo funciona dónde obtener o almacenar datos) y algunos otros detalles.
  • ejecutar la instrucción.

La ejecución de la instrucción va a cambiar los valores en varios registros. Por ejemplo, una instrucción de 'carga' copiará un valor en un registro. Una operación aritmética o lógica (AND, OR, XOR) tendrán dos valores y calcular una tercera. Una instrucción de salto o de la rama cambiará la dirección en el contador de programa por lo que el procesador comienza a buscar instrucciones desde una ubicación diferente.

El procesador puede tener registros especiales. Un ejemplo de tales es el contador de programa se ha descrito anteriormente. Otro típico es una condición de registro de banderas. Esto tendrá varios bits con significados especiales. Por ejemplo, puede tener una bandera que se establece si el resultado de la última operación aritmética era cero. Esto es útil para operaciones condicionales. Puede comparar dos números. Si son iguales, se establece el indicador 'cero'. El procesador puede tener una instrucción condicional que sólo se ejecuta si se establece este indicador.

En este caso, se podría disminuir un contador en un registro y si era cero, se fija una bandera condición. Un condicional (rama de cero) se puede utilizar para un bucle en el que disminuir un contador y salir del bucle si el resultado de la instrucción de decremento es cero. En algunos procesadores (por ejemplo, la familia ARM) todas las instrucciones son condicionales, con un especial de 'hacer siempre' condición para obtener instrucciones no condicional.

Algunos ejemplos de instrucciones típicas de procesador son:

  • incremento o decremento de un registro
  • Cargar o guardar el contenido de un registro en la memoria. También puede tener la dirección para cargar o almacenar compensado por el contenido de otro registro. Esto le permite fácilmente bucle sobre una matriz de datos incrementando el otro registro.
  • Sumar, restar, multiplicar, op lógicaracio para calcular los valores. Éstos toman operandos de dos registros y colocar el resultado en un tercio.
  • Cambiar a otra ubicación - esto mueve el contenido de la ubicación en el contador de programa y comienza a buscar instrucciones desde la nueva ubicación
  • . Los valores
  • empujar o pop en una pila.

Este post stackoverflow tiene un ejemplo de una pequeña fragmento de código C compilado y la salida de lenguaje de ensamblaje a partir de ese fragmento. Se le debe dar un ejemplo de la clase de relación entre un lenguaje de alto nivel y la salida de código de máquina que compila a.

La mejor manera de aprender esto es conseguir un ensamblador y probarlo. Esto solía ser mucho más fácil en los equipos más antiguos, más simples, como micros de 8 bits de la década de 1980. Lo más cercano a este tipo de arquitectura disponibles en estos días son los sistemas embebidos. Usted puede obtener una tarjeta de desarrollo de un procesador incorporado como un microchip PIC bastante barato. Como este tipo de arquitectura tiene menos equipaje que un sistema operativo moderno hay menos i-punteado y t-cruce de utilizar las llamadas al sistema. Esto hará que sea más fácil para arrancar un programa en lenguaje ensamblador en este tipo de arquitectura; la arquitectura más simple es también más fácil de entender.

Otra opción es conseguir un emulador como SPIM . Esto emula una CPU y dejar que se monten y los programas se ejecutan en él. La ventaja de un emulador de este tipo es que ellos también tienen instalaciones para programas paso a paso (parecido a la depurador) y que muestra el contenido del archivo de registro. Esto puede ser útil para hacerse una idea sobre lo que está sucediendo realmente.

Otros consejos

Me gustaría mucho sugerimos que lea el libro Código , da una historia detallada de cómo el equipo evolucionó a partir de diferentes sistemas.

Es muy interesante y le explicará cómo las cosas evolucionaron a partir de código Morse a través de una sencilla máquina de sumar y de allí a un poco de montaje. Se le debe dar una imagen de cómo exactamente las instrucciones de máquina se interpretted y utilizados por el hardware de una CPU, memoria, etc.

En realidad, hay una capa más abajo lenguaje de máquina que he descubierto recientemente de un amigo. Se llama Microcode.

Ver este artículo de Wikipedia para más detalles: http://en.wikipedia.org/wiki/Microcode

Vamos a suponer que la mayor parte real es corriente y tensión (si vas más profundo, es posible que incluso un electrón es una abstracción). El primer paso de abstracción es considerar que a + 5V de tensión representan un bit se establece en '1' y una tensión de 0 V representa un bit puesto a '0'. Con un interruptor, puede decidir el valor de su alambre.

Con un segundo alambre y un segundo interruptor, se obtienen dos valores binarios. El más interesante que hacer con ellos es combinar sus valores binarios con las operaciones de este tipo AND, OR y NOT. Dos conceptos están involucrados aquí: transistor para el real y lógica a la producción. Con esto, se puede realizar la suma, resta y muchas otras operaciones en sus dos entradas binarias. Se pueden añadir más cables para representar los valores distintos de '0' y '1'. Pasando de esta manera, se obtiene una ALU .

Ahora es el momento de incluir el tiempo. Si quieres varios resultados de su ALU, usted tiene que proporcionar datos de entrada, a la vez, por lo que requieren un reloj y una unidad de control para las operaciones de secuenciación. También necesita memoria para almacenar los valores de entrada y resultados, y los dispositivos de entrada y salida para el mando y observación. Pasando de esta manera, obtener una Von Neuman Arquitectura , que es la base de casi todas las arquitecturas de computadora .

A continuación nivel de abstracción es cuando se decide, con la electrónica adecuada, que este fragmento en la memoria estimulará ese píxel particular de su pantalla LCD.

Es posible encontrar el código de Charles Petzold una lectura interesante:
http://www.amazon.co. uk / Código-Language-DV-undefined-Charles-Petzold / dp / 0735611319

La premisa de su pregunta es incorrecta. No existe una brecha. El software es introducir y guardar electrónicamente. Es sólo que el software se muestra a usted en un idioma como el Inglés por lo que los seres humanos pueden seguir fácilmente.

Así, por ejemplo, cuando se introduce "cambiar mi pantalla del escritorio a Green," a través del teclado, que va directamente en el metal electrónicamente (leer cómo teclado / ratón / pantalla táctil) de trabajo. Es sólo que se ve como texto en la pantalla del Inglés. Tome un paso más allá, el texto que introduzca está en lenguaje de alto nivel, que se convierten en código máquina para que la CPU puede realizar la lógica en él. El código máquina es en forma electrónica también. Por ejemplo, el texto se convierten en códigos de operación, etc, pero los códigos de operación son en forma electrónica y CPU puede procesar aquellos.

La conclusión es que todo el interior del ordenador está en forma electrónica desde el momento en que se introduce. Es ya sea en su disco duro o memoria (transistores, etc.). Es sólo que lo ves en texto en la pantalla.

Una vez más, no hay división. Software guardado en la memoria (transistores, etc.) o un disco duro ya está ahí por vía electrónica. es necesaria para ejecutar el software (lo que quiere hacer con el hardware de su software) - Hardware (puertas lógicas duro). No se puede introducir nada en la computadora en forma no electrónica.

Espero que esto tenga sentido.

Bueno, el punto real donde se reúnen el hardware depende de lo que está haciendo, por supuesto. Pero para llevar a su (excelente) ejemplo de "mostrar texto":

De abstracta con el hardware:

  • tipos usuario letras en su procesador de textos (WP)
  • primeras tiendas de software wp las letras en la memoria como parte del documento que se está editando
  • software de wp le dice a la biblioteca de interfaz de usuario que utiliza que quiere mostrar el texto que se está editando en una ventana (esto sucede continuamente, por supuesto). La biblioteca de la interfaz de usuario será dependiente del sistema (la API de Windows en MS Windows, Windows o X QT etc en Linux, AWT / Swing en Java, etc.)
  • La biblioteca de la interfaz de usuario pasará los datos a través de unas cuantas capas de abstracción. En particular, se llevará a cabo la rasterización (convertir la información "mostrar una A" en la cuadrícula de píxeles que representa una A)
  • Con el tiempo, la información se pasa al controlador de dispositivo de la tarjeta gráfica. Aquí es donde nos encontramos con el hardware :-) "real". Normalmente, la tarjeta gráfica expone "memoria de vídeo", es decir, en la tarjeta de memoria que la CPU puede escribir. El controlador de la tarjeta gráfica (que se ejecuta en la CPU) escribirá los píxeles de una A a la memoria de vídeo.
  • circuitos de la tarjeta gráfica se lee la memoria de vídeo y convertir los datos que hay en una señal de vídeo que sale del conector de vídeo en la tarjeta y al monitor.
  • El monitor mostrará lo que es de esperar se ve como una A: -)

Puede que esta explicación no sea demasiado académica, pero así es como yo la entiendo (tampoco fui a la universidad).

El primer paso implica BooleÁlgebra de 's que demostró en el siglo XIX que cualquier operación matemática se puede expresar mediante una serie de símbolos y algunos operadores asociados.Por lo tanto, la aritmética de base 10 con los operadores comunes +, -, *, / se puede expresar usando solo dos símbolos (0, 1/ verdadero, falso) y operadores lógicos (Y, O, etc.) que conducen a la lógica booleana que es la Fundamentos matemáticos de la informática digital.

El segundo paso es Alan Turing's trabajo que construyó un modelo matemático de una máquina imaginaria que podía procesar símbolos.La descripción ingenua de una máquina de Turing sería cualquier autómata que tiene memoria (para almacenar su estado), opera sobre una serie de símbolos que representan su estado e interpreta otra serie de símbolos que definen la transición de un estado a otro.

El procesador digital moderno es una implementación de una máquina de Turing que utiliza el álgebra lógica de Boole como símbolo y base de operador (eche un vistazo a Cómo funcionan las cosas explicación detallada de la lógica de Boole en funcionamiento).La razón de esto es que los estados lógicos verdadero/falso se pueden asignar fácilmente a señales eléctricas (+, -) y sus operadores asociados se pueden implementar en circuitos de transistores que, dada una entrada binaria (señal eléctrica), pueden generar el resultado de acuerdo con la operadores booleanos.Por lo tanto, cualquier computadora moderna es una máquina que tiene memoria para almacenar su estado (codificado en forma binaria eléctrica/magnética) y una matriz de circuitos que aceptan impulsos eléctricos y operadores (las instrucciones del procesador) y generan resultados en consecuencia a una velocidad muy rápida.

Por lo tanto, cada programa escrito en cualquier lenguaje informático es finalmente traducido por el compilador o el tiempo de ejecución en una serie de operaciones booleanas para que las ejecute el procesador.

código máquina, creo, es tan bajo nivel que se puede ir. Se entiende directamente por el procesador y ejecutado sin un intérprete. El procesador está construido con un cierto conjunto de instrucciones que definen el código de máquina para una determinada arquitectura (x86, PPC, ARM, etc.).

Todo, desde dibujar letras en la pantalla para el cálculo de Pi es, en su nivel más básico, ejecutar en código máquina. Dibujar letras en la pantalla es sólo una cuestión de crear algún código de máquina que calcula la altura de letra, color y ubicaciones de píxel y los representa gráficamente en una pantalla usando un dispositivo de salida de vídeo.

Bueno, si usted sabe cómo el procesador accede a la memoria, entonces ya sabe la respuesta. Memoria y otro hardware se accede en (casi) la misma manera, en función de carnero el procesador utiliza la "memoria mapeada IO" o "IO IO asigna". En el primer caso, el procesador simplemente intenta leer y escribir en una dirección de memoria - pero no hay memoria no - lugar que es algún otro dispositivo de hardware, pero el procesador realmente no puede decir la diferencia. El último caso es muy similar.

Por otro lado, si usted no tiene idea de cómo el procesador accede a la memoria, usted debe buscar lo que un "bus de direcciones" y un "bus de datos" es para empezar.

Te estás haciendo mal.

Todo el equipo no, ya sea mostrando las letras en la pantalla o haciendo algún cálculo, se puede ver en diferentes (muchos) los niveles de abstracción, de la corriente eléctrica a la manipulación de conceptos abstractos como el dinero en una cuenta bancaria.

Dicho esto, la construcción del circuito para un simple microprocesador no es tan difícil, una ALU, algunos registros y una lógica de control. Altera tiene esta tutoriales avanzados para la tabla de inicio Cyclone II, pero no lo puede encontrar en la web.

Este es el trato real. Mi punto de partida. Todo requiere energía para funcionar. El encendido / apagado se define dentro de un límite. por ejemplo, si entre 3 y 5 v es en si menos de 3 voltios su apagado. Un concepto de código Morse. Estoy trabajando en un termómetro así que tengo que hacer o comprar un sensor. Entonces necesito calibrarlo. Traducir las señales de la señal de ninguna señal o intensidad de la señal a una temperatura. Aquí es donde estoy ahora.

Esto no es fácil de responder en una frase. Leer un libro sobre la arquitectura de computadores, aprender un poco de montaje y estoy seguro de que va a entender cómo sucede esto.

Cuando entramos en cualquier tecla o cualquier comando damos a continuación, pequeñas ondas eléctricas se convirtieron debido pulsando la tecla de es en realidad completamos el circuito

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top