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


9

He oído de personas que trabajan en el dominio del firmware, que no hay un sistema operativo que controle el firmware (por ejemplo, firmware en una unidad USB). Solo hay un solo subproceso ejecutándose en un ciclo while esperando un comando externo, y este es el punto de partida para que ocurra una interrupción, seguido de un ISR y el control que fluye hasta el hardware. Pero fundamentalmente, ¿cuál es esa parte del hardware que ejecuta el código de firmware? ¿Hay una CPU o es un código basado en ASIC que se activa siempre que el dispositivo esté encendido? No entiendo el cambio de paradigma de un sistema basado en CPU-OS normal a un firmware.


Si es posible, alguien puede tomar un ejemplo de firmware, indicando la marca de la CPU y cualquier otro detalle de hardware y software. Ejemplos podrían ser firmware en tarjetas SD, USB, controladores HDD, etc.
Abhijit K Rao

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 generalmente se almacena en un dispositivo de almacenamiento masivo (por ejemplo, una unidad de disco) y se carga en una memoria volátil (por ejemplo, DRAM) antes de ejecutarse. Es fácil cambiar el software, simplemente reemplazando el archivo que lo contiene con uno diferente.

El firmware generalmente 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 fundamentalmente 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.


9

Incluso una CPU "normal" con un sistema operativo 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 la alimentación, 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 solo 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 hay necesidad de un sistema operativo completo porque no va a cargar diferentes aplicaciones o conectar una variedad de dispositivos, por lo que las pequeñas CPU 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 programadores 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 relativamente pequeña de "solo lectura", o ROM, aunque las CPU modernas colocan el firmware en una ROM Flash que se "lee en su mayoría". El código que se almacena de esta manera es el "firmware" para la CPU.


6

Parece que hay algunas ideas falsas en su pregunta.

El firmware es solo software en una forma fija, solía estar en una ROM simple (escritura única o incluso programada por máscara), ahora principalmente en 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 'metal' de hardware. 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 subprocesamiento múltiple, todavía pueden estar presentes en un sistema de metal desnudo, 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 encuestas, interrupciones o subprocesos múltiples. Tanto las aplicaciones dependientes del sistema operativo como las básicas pueden usar todas estas arquitecturas.

Estos tres problemas son independientes: por ejemplo, el firmware puede ejecutarse completamente y utilizar una arquitectura multiproceso. O el firmware puede ser un sistema operativo que carga una aplicación desde un disquete (perdón, tarjeta flash ...) que utiliza la arquitectura simple de bucle get-do-write.


5

El sistema operativo y la 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 lleva a cabo. (Hoy en día es común que incluso los sistemas pequeños tengan múltiples CPU para ejecución paralela, por cierto; por lo tanto, es algo anticuado hablar exclusivamente sobre la CPU).

El firmware es un software que se almacena en una memoria no volátil (o tal vez incluso de solo lectura). Debido a que está en dicha memoria, el firmware está disponible cuando se enciende la máquina. La máquina puede comenzar a ejecutar el firmware casi de inmediato cuando se enciende, o algún pequeño programa de arranque (en sí mismo el 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 "flashear el nuevo firmware", que se refiere 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 actualizar un dispositivo a un nuevo firmware puede implicar quitar un circuito integrado ("chip EPROM") de un zócalo y enchufar uno nuevo. BIOS de PC ' s solía actualizarse de esta manera y miles de otros dispositivos. Esto es realmente de donde viene la palabra. Algunas personas se sentían incómodas al llamar a un programa "software", si tuvieran que cambiar un chip o placa de circuito para reemplazarlo, lo que se parece más a una actualización de hardware. Por eso 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:

http://www.polarcloud.com/tomato

Podemos iniciar sesión en Tomato a través de ssh y obtener un mensaje de Linux. Por lo tanto, 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 al inicio, ya no podría llamarse legítimamente firmware. El firmware debe estar en un almacenamiento electrónico al que el procesador pueda acceder inmediatamente al encenderlo, 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 no hay una versión de firmware más nueva que solucione algunos problemas que pueden estar presentes en el firmware instalado de fábrica. Hoy en día es fácil actualizar el firmware incluso para usuarios finales relativamente no técnicos. El Tomato mencionado anteriormente es un ejemplo de firmware de código abierto de terceros que reemplaza el 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 proporciona servicios de nivel razonablemente alto a los programas: características como sistemas de archivos, protocolos de red, administración de memoria y procesos, Acceso de alto nivel a dispositivos, y tal vez algún modelo de usuario, así como seguridad. No todos estos deben 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, dándoles a esos programas una identidad a través de la cual están asociados con sus propios recursos, y si les proporciona servicios para administrar el procesador y la memoria, y hacer E / S, podemos llamar a ese control programar un sistema operativo

Como tienes curiosidad, es posible que realmente disfrutes de algunos libros de texto sobre arquitecturas informáticas, como los de William Stallings o Hennesy y Patterson.


4

En el nivel más fundamental, una CPU es solo una máquina de estados que pasa por una secuencia de instrucciones que alteran su propio estado interno y / o produce alguna 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 eran terriblemente más complicados que esto . Obviamente, la ley de Moore ha llevado esto a un nivel completamente diferente, y los procesadores modernos de alto rendimiento tienen poco parecido con sus antepasados ​​de hace 35 años.

Aun así, todavía hay un gran mercado para procesadores (generalmente llamados microcontroladores) que son significativamente menos complejos que los de 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 menciona sean manejadas por un ASIC, pero si sus colegas están hablando de hilos e interrupciones, esto generalmente indica que hay una CPU de algún tiempo involucrada, probablemente en un microcontrolador . Estas son computadoras completamente desarrolladas en el sentido de que tienen una ALU, registros, un contador de programas, una pila, etc., pero son de muy bajo consumo y muy económicos, y pueden tener solo unas pocas docenas de instrucciones, en lugar de cientos de la arquitectura x86.

No es necesario 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 de su programa una vez el otro, y como dices, puede ser un programa muy simple.


1

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

No olvidemos qué es un sistema operativo: un programa que siempre está en la memoria y que es responsable de manejar y programar múltiples tareas de manera segura. La terminología que usamos para describir una tarea independiente es un "proceso". Los sistemas operativos permiten que los procesos compartan recursos (el hardware, la memoria, etc.) de forma segura y programen y prioricen 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 permisos, para la CPU solo está ejecutando instrucciones OS o no OS - no sabe la diferencia.

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

Ya no existe la preocupación de que un proceso ocupe y elimine el espacio de memoria de otro proceso o que un proceso acapare todo el tiempo de la 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. Nuevamente, para la CPU, solo está ejecutando instrucciones obtenidas de la memoria, no puede notar la diferencia, SO o no OS.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.