¿Cómo ocurre la ejecución del programa en el firmware?

9

He escuchado a personas que trabajan en el dominio de firmware que no hay un sistema operativo que controle el firmware (p. ej., firmware en una unidad USB). Solo hay un subproceso que se ejecuta en un bucle mientras espera un comando externo, y este es el punto de inicio para que ocurra una interrupción, seguido de un ISR y el control que fluye hasta el hardware. Pero, fundamentalmente, ¿qué es esa parte del hardware que está ejecutando el código de firmware? ¿Existe una CPU o es un código basado en ASIC que se activa mientras el dispositivo esté encendido? No entiendo el cambio de paradigma de un sistema regular basado en CPU-OS a un firmware.

    
pregunta Abhijit K Rao

6 respuestas

13

No hay cambio de paradigma; en ambos casos, una CPU está ejecutando el software / firmware.

Firmware y software son lo mismo; La única distinción está en cómo se almacena. El software normalmente se almacena en un dispositivo de almacenamiento masivo (por ejemplo, una unidad de disco) y se carga en la memoria volátil (por ejemplo, DRAM) antes de ejecutarse. Es fácil cambiar el software, simplemente reemplazando el archivo que lo contiene por otro diferente.

Por lo general, el firmware se almacena en la memoria no volátil (por ejemplo, FLASH) conectada más o menos directamente a la CPU. Es más difícil de modificar (de ahí la "firma") y puede o no transferirse a una memoria diferente para su ejecución.

Realmente, el funcionamiento de una computadora con un "sistema operativo" no es básicamente diferente de su descripción de firmware. Recuerde, el sistema operativo en sí es solo otra pieza de software, o más probablemente, una gran colección de piezas de software mutuamente dependientes. En el nivel más bajo, la CPU todavía está sentada en un bucle de algún tipo, esperando cosas que hacer. Es solo que ese bucle está enterrado dentro del sistema operativo.

    
respondido por el Dave Tweed
9

Incluso una CPU "normal" con un SO debe ejecutar el firmware ... generalmente se llama BIOS en una PC genérica. El firmware para cualquier CPU es solo el software que siempre está disponible cuando se enciende, ya sea que la CPU esté conectada a cualquier dispositivo periférico (unidades de disco, USB, etc.) o no. Si tiene un sistema operativo completo, entonces el firmware simplemente determina qué dispositivo (disco, unidad USB, etc.) contiene el código para el sistema operativo, copia el código en la RAM y lo ejecuta. Para los dispositivos integrados pequeños, no es necesario un sistema operativo completo porque no va a cargar diferentes aplicaciones o conectar una variedad de dispositivos, por lo que las CPU pequeñas solo usan un sistema operativo muy simple o tal vez un "programador de tareas". Las diferentes tareas pueden ser tomar lecturas del sensor, esperar a que se presionen los botones y actualizar una pantalla. Para aplicaciones muy simples, la CPU tiene mucho tiempo para hacer todas las tareas, por lo que solo hace cada una en secuencia, lo que también se conoce como un enfoque "round robin". Los planificadores más sofisticados consideran la prioridad de las tareas.

El punto básico es que cada CPU debe tener algún código que siempre esté disponible para ejecutarse cuando se enciende la alimentación. Ese código generalmente se almacena en una memoria de "solo lectura" o ROM relativamente pequeña, aunque las CPU modernas ponen el firmware en una Flash ROM que es "leer en su mayoría". El código que se almacena de esta manera es el "firmware" para la CPU.

    
respondido por el Joe Hass
6

Parece que hay algunas ideas erróneas en tu pregunta.

El firmware es solo un software en una forma fija, que solía estar en una ROM simple (una sola escritura o incluso con una máscara programada), ahora en su mayoría en una ROM flash (regrabable). En algunos sistemas, este firmware es el único software presente, en otros (como una PC normal) su función principal es cargar el otro software.

Una aplicación puede ejecutarse bajo el control de un sistema operativo, o puede ejecutarse sin un sistema operativo. La última situación a menudo se llama 'metal desnudo': la aplicación se ejecuta sin nada entre ella y el hardware 'metal'. Las funciones que se encuentran en la situación con el sistema operativo realizada por el sistema operativo, por ejemplo, el manejo del sistema de archivos y las disposiciones para subprocesos múltiples, aún pueden estar presentes en un sistema completo, pero en forma de bibliotecas que están vinculadas con la aplicación .

El software puede tener muchas arquitecturas diferentes. Una forma muy simple es el bucle 'obtener entrada, hacer procesamiento, escribir salida'. Las formas más complicadas pueden incluir sondeo, interrupciones o subprocesos múltiples. Tanto las aplicaciones que dependen del sistema operativo como las de metal pueden usar todas estas arquitecturas.

Estos tres problemas son independientes: por ejemplo, el firmware puede ejecutarse desde cero y utilizar una arquitectura de subprocesos múltiples. O el firmware puede ser un sistema operativo que carga una aplicación desde un disquete (lo siento, tarjeta flash ...) que usa la arquitectura simple de bucle de escritura.

    
respondido por el Wouter van Ooijen
5

OS y CPU son conceptos diferentes. Sí, hay una CPU, que es la pieza clave de hardware en el corazón de la máquina. Obtiene las instrucciones del firmware de la memoria del firmware y las ejecuta. (En la actualidad, es común que incluso los sistemas pequeños tengan varias CPU para ejecución paralela, por cierto; por lo tanto, es un poco anticuado hablar exclusivamente sobre la CPU).

Firmware es un software que se almacena en una memoria no volátil (o incluso de solo lectura). Debido a que se encuentra en dicha memoria, el firmware está disponible cuando la máquina está encendida. La máquina puede comenzar casi inmediatamente a ejecutar el firmware cuando está encendida, o algún pequeño programa de arranque (el propio firmware) puede extraer el firmware más grande de algún almacenamiento electrónico como flash y ponerlo en la RAM, y luego ejecutarlo. El uso moderno del almacenamiento flash en estos días es la razón por la que a veces puede escuchar la frase "actualización del nuevo firmware", refiriéndose a un procedimiento de actualización. El firmware no tiene que ser fácilmente actualizable de esta manera. Puede venir en un chip de circuito integrado, por lo que la actualización de un dispositivo a un nuevo firmware puede implicar la eliminación de un circuito integrado ("chip EPROM") de un zócalo y la conexión de uno nuevo. Los BIOS de PC solían actualizarse de esta manera, y miles de otros dispositivos. Aquí es realmente de donde viene la palabra. Algunas personas se sentían incómodas al llamar a un programa "software", si tenían que cambiar un chip o una placa de circuito para reemplazarlo, lo que se parece más a una actualización de hardware. Por lo tanto, se acuñó el "firmware": algo "más difícil" de cambiar que el software.

El firmware puede ser un sistema operativo "completo". Por ejemplo, Tomato es un firmware basado en Linux para enrutadores inalámbricos:

enlace

Podemos iniciar sesión en Tomato a través de ssh y obtener un aviso de Linux. Así que es un sistema operativo avanzado, y es firmware. Pero si el enrutador tenía un disco duro y si el mismo sistema operativo tenía que cargarse desde ese disco en el inicio, ya no podría llamarse legítimamente firmware. El firmware debe estar en un almacenamiento electrónico al que pueda acceder el procesador inmediatamente después del encendido, como la memoria flash o los chips EPROM.

Muchos dispositivos de consumo hoy en día tienen firmware actualizable. Si tiene una cámara digital, por ejemplo, debe encontrar su sitio web y ver si una versión de firmware más reciente no está disponible, lo que soluciona algunos problemas que pueden estar presentes en el firmware instalado de fábrica. Es fácil actualizar el firmware en la actualidad incluso para usuarios finales relativamente no técnicos. El Tomate mencionado anteriormente es un ejemplo de firmware de código abierto de terceros que reemplaza al firmware de fábrica.

La palabra "sistema operativo" simplemente se refiere a un programa de control que tiene un cierto grado de sofisticación e integridad en la administración de los recursos de la máquina y en la prestación de servicios a programas de nivel razonablemente alto: características como sistemas de archivos, protocolos de red, memoria y Gestión de procesos, acceso de alto nivel a dispositivos y quizás algún modelo de usuario, así como seguridad. No todos estos tienen que estar presentes en un sistema operativo. Por lo general, la memoria, la gestión de procesos y la E / S son la clave. Si el programa de control permite que otros programas se ejecuten, otorgarles a esos programas una identidad a través de la cual están asociados con sus propios recursos, y si les brinda servicios para administrar el procesador y la memoria, y para hacer E / S, podemos llamar a ese control programa un sistema operativo.

Ya que tienes curiosidad, es posible que realmente disfrutes de algunos libros de texto sobre arquitecturas de computadoras, como los de William Stallings, o de Hennesy y Patterson.

    
respondido por el Kaz
4

En el nivel más fundamental, una CPU es simplemente una máquina de estados que pasa por una secuencia de instrucciones que modifican su propio estado interno y / o producen algo de salida. Resuma y refine este concepto a un nivel muy alto y obtendrá las últimas ofertas de procesadores de escritorio y móviles para Intel. Pero el principio subyacente es bastante simple: puede construir un procesador muy básico con aproximadamente una docena de circuitos integrados TTL, y los microprocesadores de principios a mediados de la década de 1970, diseñados para su uso en calculadoras de escritorio y controladores de semáforos, no fueron mucho más complicados que esto. . Obviamente, la ley de Moore ha llevado esto a otro nivel, y los procesadores modernos de alto rendimiento tienen poca semejanza con sus antepasados desde hace 35 años.

Aun así, todavía hay un gran mercado para los procesadores (generalmente llamados microcontroladores) que son significativamente menos complejos que la vanguardia; Estos son los tipos de procesadores que puede encontrar en su unidad USB, por ejemplo. Para responder a su pregunta, es posible que algunas funciones de los dispositivos que mencione puedan ser manejadas por un ASIC, pero si sus colegas están hablando de subprocesos e interrupciones, esto generalmente indica que hay una CPU de algún tiempo involucrada, probablemente en un microcontrolador. . Estas son computadoras de pleno derecho en el sentido de que tienen una ALU, registros, un contador de programas, una pila, etc., pero son de bajo poder y muy baratas, y pueden tener solo unas pocas docenas de instrucciones, en lugar de Cientos de la arquitectura x86.

No hay ningún requisito de que estos dispositivos tengan un sistema operativo de ningún tipo ni ningún concepto de cambio de contexto (aunque es posible en algunos casos), todo lo que se requiere para su aplicación es seguir las instrucciones en su Programa uno tras otro, y como dices, puede ser un programa muy simple.

    
respondido por el Bitrex
1

Menos algunos permisos, una CPU no sabrá si se está ejecutando el código desde un sistema operativo o cualquier otro tipo de programa. Para una CPU, solo está ejecutando instrucciones extraídas de la memoria.

No olvidemos qué es un sistema operativo: un programa que siempre está en la memoria y es responsable de manejar y programar múltiples tareas de forma segura. La terminología que utilizamos para describir una tarea independiente es un "proceso". Los sistemas operativos permiten que los procesos compartan recursos (el hardware, la memoria, etc.) de manera segura y programan y priorizan su ejecución, también proporciona características como la comunicación entre procesos. Todo esto surge de la necesidad de soportar múltiples tareas concurrentes. Menos algunos niveles de permiso, a la CPU solo se trata de ejecutar las instrucciones del sistema operativo o no del sistema operativo, no conoce la diferencia.

Cuando escribimos firmware para un microcontrolador, generalmente no tenemos este programa adicional (el SO) siempre en la memoria para administrar las tareas por nosotros. ¿Por qué? Debido a que no tenemos la necesidad de realizar múltiples tareas simultáneas, los sistemas integrados generalmente están diseñados y programados para hacer solo una aplicación. Contraste esto con una PC que se espera que sea muy flexible y que pueda ejecutar todo tipo de aplicaciones a la vez.

Ya no existe la preocupación de que un proceso ocupe y destruya el espacio de memoria de otro proceso o que un proceso acapare todo el tiempo de CPU. Esto se debe a que estamos escribiendo un solo programa que tiene acceso a todos los recursos en cualquier momento, ya que es el único programa que se ejecuta en el sistema y, por lo tanto, no necesitamos otro programa como un sistema operativo para administrarlo. Una vez más, para la CPU, solo está ejecutando instrucciones extraídas de la memoria, no puede notar la diferencia, el sistema operativo o ningún sistema operativo.

    
respondido por el Jon L

Lea otras preguntas en las etiquetas