¿Cómo se produce exactamente la transición entre el software y el hardware?

-2

Bueno, primero permíteme explicarte lo que realmente quería preguntar. Ok, entonces se sabe claramente que sin software, una pieza de hardware es solo un cuerpo sin vida, algo sin alma. ¿Pero claramente no puedo entender cómo está sucediendo realmente esta comunicación / interfaz entre software y hardware?

Un software no es más que líneas de código que finalmente se compilan, ensamblan, vinculan y se convierten en una cadena de dígitos binarios. Pero ves que el hardware del procesador no entiende los unos y los ceros entiende un nivel de alto voltaje y un bajo nivel de voltaje. pero ¿cómo se está produciendo esta transición de dígitos binarios a niveles de voltaje? Para una analogía realmente rápida, si quisiera levantar un libro, hay un contacto físico real entre mis manos y el libro. Pero ¿qué pasa con la interfaz entre hardware y software?

Espero que la gente entienda el punto crucial de mi pregunta. Es realmente difícil ponerlo en oraciones sencillas. Esto puede parecer una pregunta extraña, pero créeme, me ha estado molestando durante mucho tiempo. He tomado cursos en Organización de computadoras y Diseño básico de procesadores, pero claramente no me dieron una respuesta.

Existe una pregunta similar en StackOverflow y no hay una respuesta convincente. enlace

EDITAR: Usted ve que el proceso estándar para que el código sea ejecutado por el procesador es tal que pasa a través de compilador - > ensamblador - > enlazador - > cargador - > Memoria. Porque una vez que las instrucciones llegan a la memoria, es bastante sencillo en cuanto a cómo se lleva a cabo el procesamiento. La única inconsistencia que siento en ese flujo es sobre cómo la transición desde el cargador - > memoria. ¿está sucediendo? Esta es una de las formas sencillas en que puedo plantear la pregunta. Pero si sería realmente agradecido si hubiera entendido el alma de la pregunta.

    
pregunta vineel13

12 respuestas

3

Creo que una herramienta poderosa para ayudarlo a comprender lo que está sucediendo es darse cuenta de que se debe implementar el software, en términos de patrones magnéticos en un disco duro o cargas en transistores en memoria, para ejecutar. Su hardware siempre está funcionando en la versión implementada / realizada del software.

Nos gusta hablar de software en términos de "información" porque esa forma es conveniente para el tipo de cosas que queremos hacer con el software. Es conveniente que podamos decir que un patrón magnético particular "es lo mismo que" un patrón particular de cargas en un bloque de RAM. En el mundo físico, son medios fundamentalmente diferentes, pero reconocemos que son "lógicamente" idénticos porque afirmamos que su "significado" es el mismo.

Entonces, cuando te entrego un CD con mi software, no te entrego "una cadena de 1 y 0". Te entrego un pedazo de plástico metalizado con algunos hoyos cuidadosamente estampados. El "contenido de información" proviene del hecho de que usted y yo estamos de acuerdo en cómo uno debería traducir la geometría de esos hoyos en 1 y 0. Luego, puede instalar ese software, escribiendo garabatos magnéticos cuidadosos en un disco duro. Estás de acuerdo en decir que esas picaduras y esos garabatos son "lo mismo" porque sabes que lo único que te importó fue la información codificada en ellos, y codifican la misma información.

Por lo tanto, cuando el hardware arranca, y "el software le dice al hardware qué hacer", lo que realmente significa es que tienes un montón de componentes de hardware (como discos duros y chips de memoria) que están de acuerdo en lo que significan las cosas. La CPU interactúa con voltajes fluctuantes en el BIOS de una manera que usted y yo acordamos que contiene la "información" del software en el BIOS.

La última pieza clave es que hay una pieza de hardware que no es estable: el reloj de la CPU. El reloj de la CPU está cambiando constantemente los voltajes, y los otros componentes acuerdan interpretar esos voltajes cambiantes como órdenes en marcha para avanzar un paso en cualquier procesamiento que estén haciendo. Y finalmente, en el inicio, la CPU está diseñada para dar instrucciones para obtener más instrucciones de la BIOS (y, finalmente, del disco duro).

La clave es que, en la capa física, todos los componentes interactúan con la implementación física de la información. El "software" no es más que una forma de pensar acerca de esa implementación física como un montón de información, y de que estamos de acuerdo en lo que significa esa información.

    
respondido por el Cort Ammon
2

La memoria controla efectivamente el hardware.
Así que en un nivel bajo, el hardware está vinculado a las ubicaciones de memoria. Por ejemplo, en un microcontrolador simple, los transistores físicos para accionar los pines están vinculados a los bits de memoria. Eso es realmente lo que los registros están en las hojas de datos de los chips de hardware, son ubicaciones de memoria. Configura un poco en el software y se activa el hardware conectado físicamente.

Actualización (Software - > Flujo de memoria):
Para abordar cómo fluye el código del código a la memoria: En algún momento, se usa un dispositivo físico para establecer los niveles de voltaje en bits de memoria según el código de máquina generado por el compilador y el enlazador.

es decir, Su primer byte de código es 0xAA. El software le indica a un programador de memoria (a través de JTAG, UART, SPI, etc.) que seleccione una ubicación de memoria de 8 bytes de ancho (llamémoslo 0x0001). La ubicación de la memoria se ajusta a los niveles de voltaje definidos por los 0s y 1s (0xAA = '10101010') usando hardware. En el arranque, el hardware está cableado para cargar una dirección de memoria específica en el registro de la CPU y comenzar a ejecutar desde allí. Si tuviera que abrir el chip de memoria y probar los capacitores de silicona que forman los bits en la memoria flash, básicamente podría medir el 0xAA.

    
respondido por el MadHatter
2

Para la versión editada de la pregunta ... Entre el programa compilado y vinculado, y la memoria de la computadora, ¿qué sucede?

Mire el panel frontal de la computadora . Podría verse así ...

Paracadabitdelaprimeradirecciónensuprograma,configurecadainterruptor"arriba" para '1', "abajo" para '0'. Cuando todos los 18 bits están configurados, presione la tecla "Cargar Addr" en la sección de la mano derecha. Esa clave establece la dirección actual.

Ahora repita con cada bit de datos en esa palabra (solo hay 16 de estos). Presione la tecla "DEP" para depositar esta palabra de datos en esa dirección y pasar a la siguiente dirección.

Repita para cada otra palabra en su programa ... no se preocupe, se vuelve más fácil con la práctica.

Cuando hayas terminado, presiona la tecla "Inicio" y la ejecución comenzará desde la primera dirección ...

Por lo general, desea mantener este programa lo más corto posible, ya que tiene que ingresarlo cada vez que enciende la máquina. Por lo tanto, es probable que sea el programa más simple posible para leer un programa más útil de tarjetas perforadas, cinta de papel o una unidad de disco, si puede permitirse uno. Esto se denomina programa "bootstrap" porque "arrastra la computadora por sus propios bootstraps" cargando algo más útil en la memoria.

O bien, hay una memoria de solo lectura asignada a las primeras direcciones, donde comienza la ejecución. Tal vez lo programó poco a poco en un programador que se parecía a este panel frontal. Puede haber sido una matriz de fusibles , configurando el interruptor "arriba" soplando el fusible " abajo "lo dejó intacto. Luego lo enchufó en un zócalo de ROM de su placa base, por lo que, una vez programado el ROM, puede ejecutar el programa bootstrap cada vez que se inicia.

Tal vez su computadora no tenga un panel frontal cubierto por interruptores ... pero ciertamente tendrá un cargador de arranque, o algo así, en algún lugar. En una PC, se llama la ROM del BIOS. En algunos microcontroladores, carga un programa a través de un puerto JTAG, una interfaz en serie que reemplaza a esos conmutadores. Luego puede guardarlo en Flash ROM, que, a diferencia del fusible ROM, puede borrar y reutilizar ...

    
respondido por el Brian Drummond
1

No hay unos y ceros. Todo es solo voltajes altos y bajos. Elegimos interpretar esos voltajes como unos o ceros. Podemos elegir tratar las colecciones de voltajes altos y bajos adyacentes como números (en hexadecimal o decimal) o incluso como caracteres de texto. Pero aún se almacenan como grupos de alto o bajo voltaje.

Su código fuente es solo un grupo de voltajes altos y bajos, que elegimos interpretar como caracteres ASCII o Unicode. Si el programa se almacena en un disco duro, se convertirá en un patrón de polos Norte y Sur, pero volverá a volverse alto y bajo cuando se lea el disco. El compilador es solo un poco de software (más voltajes altos y bajos) para indicar a la computadora que traduzca una colección de voltajes altos y bajos (el código fuente) a otro conjunto (el código compilado).

La ejecución del software consiste simplemente en copiar los altos y bajos a un lugar adecuado en la memoria, y luego decirle a la computadora que los trate como instrucciones para ejecutar.

    
respondido por el Simon B
0

El hardware es increíblemente complejo, y fue diseñado para que, específicamente, el software pueda tener la mayor funcionalidad posible.

Imagine la relación de hardware y software entre un dispositivo muy simple, como una calculadora de los años 70. Hay botones pulsadores y algún tipo de pantalla, y presiona los botones, un símbolo de operador y la respuesta aparece en la pantalla.

En este dispositivo simple, al presionar los botones de dígitos se ingresan datos numéricos en el sistema, de los cuales la tecla del operador determina qué función matemática se realizará. Una vez ingresado, el "software" usa los datos y el operador para realizar un cálculo. Una vez completado, se muestra el resultado del cálculo.

En este ejemplo, el "hardware" son los botones, las teclas del operador y la pantalla. El "software" habría sido lógica digital (Y, NO, NOR puertas, etc.), probablemente fabricado a medida en un circuito integrado. El hardware sería "inútil" sin el "software" para realizar los cálculos y darnos un resultado significativo.

Las computadoras de hoy todavía siguen este método de operación arcaico, pero son mucho más complejos. Hay literalmente cientos, si no miles de diferentes "operaciones" que podría realizar una unidad central de procesamiento, y todas ellas han sido optimizadas por hardware para completarse en el menor tiempo posible.

Así que hoy, una CPU (el "cerebro" de una computadora) es un dispositivo extenso, diseñado para permitir que una multitud de posibles "instrucciones" de software se ejecuten todo lo más rápido posible. Por lo tanto, es la infraestructura integrada en la CPU la que proporciona la posible funcionalidad que el software puede (optar o no) usar.

Esta es la razón por la que una computadora hace poco sin un sistema operativo (software): la CPU es capaz de hacer muchos cálculos diferentes, pero sin el software para dirigirla a hacer cualquiera de ellos, entonces simplemente se queda ahí.

    
respondido por el rdtsc
0

Como dice Brhans, debes tomar la píldora roja y aprender sobre lógica digital. aquí es un pdf ( probablemente una violación de derechos de autor) del libro de texto Roth que existía cuando yo era un estudiante .

Por lo tanto, primero aprenderá acerca de la lógica combinatoria (a partir de la cual se puede crear una unidad lógica aritmética). luego aprenderá sobre los flip-flops, que son los medios básicos de la memoria. entonces aprenderás acerca de las máquinas de estado. Finalmente puedes aprender qué es un código de operación. y ese código de operación en la memoria que es cargado y referenciado por la máquina de estado entonces controla el comportamiento de la máquina de estado. ahí es donde el caucho se encuentra con el camino en cuanto a donde el software comienza a tocar el hardware.

    
respondido por el robert bristow-johnson
0

El mejor consejo que puedo darte sería tomar un curso al respecto. MIT tiene algunos cursos disponibles en línea de forma gratuita (la búsqueda de cursos abiertos de MIT, el "laboratorio de sistemas digitales introductorios" de sus clases o "Estructuras de computación" puede tener lo que usted busca) o si está en la escuela, inscríbase en los sistemas digitales básicos. curso. En mi escuela, el diseño y programación de un procesador de cuatro bits fue el proyecto final del curso.

Ahora, para intentar responder a la pregunta sin una clase: la CPU es la única parte de la que debemos preocuparnos, ya que es lo que decodifica y usa la mayoría de las instrucciones en la programación.
La segunda a la última etapa del programa, antes de que sea un ejecutable, está en lenguaje de programación de ensamblador. Este lenguaje es único para cada tipo de procesador, ya que se traduce directamente a los 1 y 0 que solo ese procesador puede entender. Por ejemplo:

AGREGAR r1, r2
MOV r2, r0
SUB r3, r0

Esto no hace nada en particular, y es solo para demostración.
Cada comando (ADD, MOV, SUB) se traducirá directamente en 1s y 0s,
las "r #" son ubicaciones de memoria, en este caso llamadas registros. Estas ubicaciones de memoria también son solo números. Entonces, en esencia, toda la programación es mover los números de una ubicación a otra. Por lo tanto, "ADD r1, r2", una vez ensamblado, se puede traducir a 1011 0110, donde el primer nibble es el código para agregar, y el segundo nibble contiene tanto el código para r1 (01) como el código para r2 (10). Lo que haremos es decirle al procesador que cargue los contenidos de r1 y r2 en la unidad de lógica aritmética (ALU) (la parte que hace todas las operaciones matemáticas) y decirle a la ALU que los agregue. Dependiendo del diseño del procesador, la respuesta puede permanecer en la salida de la ALU o puede moverse automáticamente a una de las ubicaciones de memoria que se usó. (Los procesadores a los que estoy acostumbrado colocarán automáticamente la respuesta en la segunda ubicación de la memoria, en este caso "r2"). Todo en el procesador está diseñado de modo que se necesita una combinación de bits para activarlo cuando se cumple esta combinación, esa parte se enciende y cumple su función con los números que recibió.

Todo lo que sucede en una computadora ocurre porque los números se movieron a lugares donde podrían usarse para hacer algo más.

Si decide tomar la clase (y le recomiendo a cualquier persona que tenga esta pregunta que lo haga, ya sea en CS, EE o incluso en ME) sepa que se necesita al menos la mitad del curso para comprender cómo está realmente conectado todo. un procesador La mayor parte del curso es simplemente cómo funcionan los circuitos lógicos digitales (puertas AND, OR, etc.), y se pueden unir para hacer cosas útiles. luego tomará algunos de estos dispositivos útiles (flip flops, MUX, etc.) para hacer cosas más útiles. Finalmente, tomará algunas de esas partes y las unirá para crear un procesador.

Una cosa más. El programa 'logisim' es bueno para simular pequeños circuitos digitales. Ese es el programa en el que implementamos nuestros procesadores de 4 bits (antes de pasar al hardware, tiene un buen sistema de retroalimentación visual.

Si alguien siente que no estoy seguro, por favor dígame dónde está y qué podría hacer mejor. Soy nuevo en responder preguntas, y ha pasado un tiempo desde que aprendí esto por mi cuenta.

    
respondido por el ambitiose_sed_ineptum
0

Creo que lo que estás buscando, en esencia, es una ROM, o en muchos sistemas modernos, firmware.

Parece que comprendes que una vez que las instrucciones están en la memoria, el procesamiento es sencillo. Del mismo modo, también parece comprender cómo se compilan / convierten las instrucciones a código de ensamblador / máquina. Con esto, asumo que usted entiende cómo una vez que el software como un sistema operativo ya se está ejecutando, el software puede modificar la memoria, lo que cambiará el funcionamiento de la CPU, etc.

Ahora, piénselo en términos de una computadora de escritorio normal. Cuando enciende la computadora por primera vez, puede asumir que todo en la memoria no es válido. Entonces, ¿cómo llega la computadora a un estado operativo? Tradicionalmente, un procedimiento de inicialización se carga desde una ROM. La ROM contiene las instrucciones básicas para inicializar todos los registros y otros periféricos en la computadora al encender, y también configura para cargar el siguiente conjunto de instrucciones (como un sistema operativo almacenado en el disco duro, etc.). La ROM está "codificada", en otras palabras, contiene un conjunto fijo de instrucciones que se ejecutan y no se pueden cambiar. Estoy seguro de que puede imaginar que una vez que haya creado una plataforma que permita la modificación de la memoria a través del software, puede crear una ROM con bastante facilidad. Una vez hecho y configurado correctamente, el software puede "hacerse cargo" una vez que se inicializa el hardware.

    
respondido por el Shamtam
0

La respuesta es "Puertos de interfaz de entrada / salida". Ese es el lugar identificable donde el software (colecciones de unos y ceros conspiran para crear altos y bajos voltajes dentro del procesador) en el extremo establece valores (unos o ceros) en cada bit de los puertos de E / S. Y el hardware (externo al procesador) lo lleva desde allí.

Su premisa de que "sin software, una pieza de hardware es solo un cuerpo sin vida" no es VERDADERO en ningún nivel. Hay miles de millones de piezas de hardware, tanto históricas como contemporáneas, que no dependen en absoluto del software (ni del firmware ni nada por el estilo).

Tal vez su concepto completo de software y hardware le impida ver la imagen correctamente y le haga pensar que no hay respuestas convincentes.

    
respondido por el Richard Crowley
0

Supongo que estás hablando de algo como un microcontrolador, no una PC. También supongo que sabes aproximadamente cómo funcionan los recuerdos: direccionamiento, etc.

La forma más sencilla de pasar de un programa compilado a la memoria es compilando el programa directamente en el hardware. En lugar de usar una celda SRAM o un transistor de flash para cada bit, tiene una pieza de metal que está presente (para uno) o no (para un cero). Esto se llama una ROM de metal.

Si desea utilizar una memoria programable (como flash o RAM), necesita una forma de acceder a la memoria mediante señales de IO externas. Un método común es conectar un depurador a la CPU mediante el puerto JTAG del chip. Usando el protocolo JTAG, el depurador puede tomar el control de la CPU y hacer que escriba el programa en la memoria una palabra a la vez.

Otro método sería conectar la dirección de la memoria y las líneas de datos a los pines IO en el chip. Normalmente, este sería un modo especial que se selecciona con multiplexores, lo que libera los pines para el uso de la aplicación.

Es común utilizar un enfoque híbrido. Puede construir una pequeña ROM en un microcontrolador que contenga un programa de cargador de arranque. En el momento del encendido, la CPU ejecuta el cargador de arranque y utiliza los periféricos de comunicaciones en el chip para recibir datos, que luego escribe en la memoria.

    
respondido por el Adam Haun
0

Las máquinas algebraicas fueron el primer paso para las computadoras de propósito general de hoy. La aritmética en computadoras se describe mejor con álgebra booleana (los primeros modelos también usaban otras bases numéricas). Es cierto que las computadoras no comprenden cero y uno o verdaderos y falsos, pero existe una relación entre las corrientes y los voltajes en los semiconductores y estos conceptos matemáticos.

Los datos no numéricos se representan con códigos (que son esencialmente tablas que le dan un significado a cada combinación de bits), ASCII para texto es un ejemplo. No nos damos cuenta, porque en la actualidad, las computadoras traducen este código a un glifo en la pantalla. Una vez más, hay una relación fija. Sin él, los datos no tendrían significado.

OPCODE son otro ejemplo. La forma en que la CPU ejecuta una instrucción está cableada en silicio (deje el microcódigo a un lado por un momento). Programar significa colocar una secuencia de OPCODE en la memoria. En los viejos tiempos, esto se hacía con interruptores del tablero de mandos o tarjetas perforadas, y los programadores necesitaban usar tablas de códigos para encontrar los orificios necesarios para las tarjetas o cambiar la configuración para la instrucción deseada.

No dejes que los idiomas de alto nivel te confundan. Su formulación textual abstracta de un algoritmo se traduce en pasos que el hardware puede ejecutar. El compilador necesita conocer su abstracción (significado de las estructuras de control y las declaraciones y mucho más) y las capacidades de la CPU y el código de la máquina para hacer esto. El código de máquina aún se considera "software", pero es importante entender que el conocimiento del hardware de destino se encuentra en este código, como en los viejos tiempos, el compilador simplemente hace la búsqueda por usted.

    
respondido por el Andreas
-1

Esta es una pregunta divertida. Permítame tratar de resolver la relación entre software y hardware.

En primer lugar, el software no se "transfiere" al hardware, el software es una cosa separada y el hardware es una cosa separada (a menos que la pregunta se refiera al diseño de la arquitectura de hardware). Luego, la relación entre el software y el hardware se puede simplificar de la siguiente manera:

  1. El software es una colección de líneas de oraciones alfabéticas, que representan una relación lógica y algoritmos de procesamiento expresados en un determinado idioma. Solo en papel;

  2. El texto del idioma se traduce en una secuencia coherente de instrucciones de la máquina y los datos asociados mediante el uso de mnemónicos de los comandos y el formato adecuado de los argumentos, todo un trabajo en papel;

  3. La secuencia coherente de instrucciones y datos se traduce en el equivalente binario correspondiente de los códigos de comando y los formatos de datos adecuados, según sea apropiado para una MCU particular, aún en papel, pero ahora en "1" y "0" (binario ) forma;

  4. Luego, el código binario debe cargarse en la memoria de la MCU. Aquí es donde "1" y "0" se convierten en voltajes "alto" y "bajo". Simplifiquemos la MCU como un microprocesador incorporado con memoria externa adjunta, donde el secuenciador del procesador comienza a funcionar obteniendo las primeras instrucciones de la dirección 0000.

  5. La carga de memoria se puede hacer sacando el chip de memoria y "grabando" el patrón de código binario en él. Luego, vuelva a conectar el IC de la memoria a la tarjeta MCU, enciéndalo y presione el botón RESETEAR. Desde este punto, el "papel" 1-sy 0-s están recorriendo el hardware como "alto" y "bajo";

  6. Cualquier MCU tiene registros de hardware internos y puertos externos de E / S (entrada-salida), que proporcionan comunicación con el mundo externo, encienden los LED, encienden y apagan los relés, leen sensores, etc.

  7. Después de salir de RESET, una MCU comienza a buscar instrucciones y datos de la memoria y, si el software es correcto y tiene todas las direcciones y el formato de datos correctos, la MCU comienza a acceder a los registros en sus direcciones correctas, y , digamos, un LED se enciende. O el software cargado puede leer datos de algún registro asociado con un enlace de comunicación externo, y comienza a interpretar los datos del registro como comandos o, de acuerdo con algún protocolo;

  8. Si el software se está volviendo demasiado sofisticado y puede actualizar partes de la memoria de la MCU con diferentes bloques de instrucciones y datos (y el hardware ofrece esta posibilidad), se dice que el software puede funcionar con recursos propios, y Esto puede ser elevado al rango de sistema operativo OS.

¿Responde esto convincentemente al meollo de tu pregunta?

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas