Come avviene l'esecuzione del programma nel firmware?


9

Ho sentito da persone che lavorano nel dominio del firmware che non esiste un sistema operativo che controlla il firmware (ad esempio il firmware in un'unità USB). C'è solo un singolo thread in esecuzione in un ciclo while in attesa di un comando esterno, e questo è il punto di partenza per l'interruzione, seguito da un ISR e dal controllo che scorre fino all'hardware. Ma fondamentalmente qual è quella parte dell'hardware che esegue il codice firmware? Esiste una CPU o è un codice basato su ASIC che viene attivato finché il dispositivo è alimentato. Non riesco a capire il passaggio di paradigma da un normale sistema basato su CPU-OS a un firmware.


Se possibile qualcuno può fare un esempio di un firmware, indicando la marca della CPU e qualsiasi altro dettaglio hardware e software. Esempi potrebbero essere firmware in schede SD, USB, controller HDD ecc.
Abhijit K Rao,

Risposte:


13

Non vi è alcun cambio di paradigma; in entrambi i casi una CPU sta eseguendo il software / firmware.

Firmware e software sono la stessa cosa; l'unica distinzione è nel modo in cui è memorizzato. Il software viene in genere archiviato su un dispositivo di archiviazione di massa (ad esempio, unità disco) e caricato in memoria volatile (ad esempio, DRAM) prima di essere eseguito. È facile cambiare il software, semplicemente sostituendo il file che lo contiene con uno diverso.

Il firmware viene in genere archiviato in una memoria non volatile (ad esempio, FLASH) collegata più o meno direttamente alla CPU. È più difficile da modificare (da qui la "ditta") e può o meno essere trasferito in una memoria diversa per l'esecuzione.

In realtà, il funzionamento di un computer con un "sistema operativo" non è sostanzialmente diverso dalla descrizione del firmware. Ricorda, il sistema operativo stesso è solo un altro pezzo di software - o più probabilmente, una vasta collezione di software reciprocamente dipendenti. Al livello più basso, la CPU è ancora in un ciclo di qualche tipo, in attesa di cose da fare. È solo che quel loop è sepolto all'interno del sistema operativo.


9

Anche una CPU "normale" con un sistema operativo deve eseguire il firmware ... di solito è chiamato BIOS in un PC generico. Il firmware per qualsiasi CPU è solo il software che è sempre disponibile all'accensione, indipendentemente dal fatto che la CPU sia collegata a qualsiasi periferica (unità disco, USB, ecc.) O meno. Se si dispone di un sistema operativo completo, il firmware capisce solo quale dispositivo (disco, unità USB, ecc.) Contiene il codice per il sistema operativo, copia il codice nella RAM e lo esegue. Per i dispositivi embedded di piccole dimensioni non è necessario un sistema operativo completo perché non si caricheranno applicazioni diverse o non si collegherà una varietà di dispositivi, quindi le CPU di piccole dimensioni utilizzano semplicemente un sistema operativo molto semplice o forse un "programmatore di attività". Attività diverse potrebbero essere la lettura dei sensori, l'attesa della pressione dei pulsanti e l'aggiornamento di un display. Per applicazioni molto semplici, la CPU ha un sacco di tempo per svolgere tutte le attività, quindi svolge ciascuna in sequenza, che è anche noto come approccio "round robin". Pianificatori più sofisticati considerano la priorità delle attività.

Il punto di base è che ogni CPU deve avere un codice che è sempre disponibile per essere eseguito all'accensione. Tale codice viene solitamente archiviato in una memoria di sola lettura o ROM, anche se le CPU moderne inseriscono il firmware in una ROM Flash che viene "letta principalmente". Il codice che viene memorizzato in questo modo è il "firmware" per la CPU.


6

Sembra che ci siano alcune idee sbagliate nella tua domanda.

Il firmware è solo un software in una forma fissa, usato per essere in una ROM semplice (programmata per scrivere una volta o addirittura programmata con maschera), ora principalmente nella ROM flash (riscrivibile). Su alcuni sistemi questo firmware è l'unico software presente, su altri (come un normale PC) la sua funzione principale è quella di caricare l'altro software.

Un'applicazione può essere eseguita sotto il controllo di un sistema operativo oppure può essere eseguita senza un sistema operativo. Quest'ultima situazione è spesso chiamata 'bare metal': l'applicazione gira senza nulla tra essa e l'hardware 'metal'. Le funzioni che si trovano nella situazione with-OS eseguita dal sistema operativo, ad esempio la gestione del file system e le disposizioni per il multi-threading, possono ancora essere presenti in un sistema bare metal, ma sotto forma di librerie collegate all'applicazione .

Il software può avere molte architetture diverse. Una forma molto semplice è il ciclo 'get input, do processing, write output'. Forme più complicate possono includere polling, interrupt o multi-threading. Entrambe le applicazioni dipendenti dal sistema operativo e bare metal possono utilizzare tutte queste architetture.

Questi tre problemi sono indipendenti: ad esempio il firmware può eseguire bare metal e utilizzare un'architettura multi-thread. Oppure il firmware è un sistema operativo che carica un'applicazione da un floppy (scusate, scheda flash ...) che utilizza la semplice architettura del ciclo get-do-write.


5

Sistema operativo e CPU sono concetti diversi. Sì, c'è una CPU, che è l'hardware chiave nel cuore della macchina. Recupera le istruzioni del firmware dalla memoria del firmware e le esegue. (Al giorno d'oggi è comune anche per piccoli sistemi avere più CPU per l'esecuzione parallela, tra l'altro; quindi è un po 'obsoleto parlare esclusivamente della CPU.)

Il firmware è un software che viene archiviato in una memoria non volatile (o forse anche di sola lettura). Poiché è in tale memoria, il firmware è disponibile all'accensione della macchina. La macchina potrebbe iniziare quasi immediatamente a eseguire il firmware quando è accesa, oppure un piccolo programma di avvio (esso stesso firmware) può estrarre il firmware più grande da un archivio elettronico come il flash e inserirlo nella RAM, quindi eseguirlo. L'utilizzo moderno della memoria flash in questi giorni è il motivo per cui a volte potresti sentire la frase "flashing del nuovo firmware", facendo riferimento a una procedura di aggiornamento. Il firmware non deve essere facilmente aggiornabile in questo modo. Potrebbe venire su un chip di circuito integrato, quindi l'aggiornamento di un dispositivo a un nuovo firmware potrebbe comportare la rimozione di un circuito integrato ("chip EPROM") da una presa e il collegamento di uno nuovo. BIOS PC ' s veniva aggiornato in questo modo e miriadi di altri dispositivi. Questo è davvero da dove viene la parola. Alcune persone erano a disagio nel chiamare un "software" di programma, se dovevano sostituire un chip o un circuito stampato per sostituirlo, che assomiglia più ad un aggiornamento hardware. Quindi è stato coniato il "firmware": qualcosa di "più difficile" da modificare rispetto al software.

Il firmware può essere un sistema operativo "completo". Ad esempio, Tomato è un firmware basato su Linux per router wireless:

http://www.polarcloud.com/tomato

Possiamo accedere a Tomato tramite ssh e ottenere un prompt di Linux. Quindi è un sistema operativo avanzato ed è un firmware. Ma se il router contenesse un disco rigido e se lo stesso sistema operativo dovesse essere caricato da quel disco all'avvio, non potrebbe più essere legittimamente chiamato firmware. Il firmware deve trovarsi in una memoria elettronica accessibile al processore immediatamente all'accensione, come memoria flash o chip EPROM.

Oggi molti dispositivi consumer hanno un firmware aggiornabile. Se hai una fotocamera digitale, ad esempio, dovresti trovare il suo sito Web e vedere se non è disponibile una versione del firmware più recente che risolva alcuni problemi che potrebbero essere presenti nel firmware installato in fabbrica. Oggi è facile aggiornare il firmware anche per utenti finali relativamente non tecnici. Il suddetto Tomato è un esempio di firmware open source di terze parti che sostituisce il firmware di fabbrica.

La parola "sistema operativo" si riferisce semplicemente a un programma di controllo che ha un certo grado di raffinatezza e completezza nella gestione delle risorse della macchina e nella fornitura di servizi di livello ragionevolmente elevato ai programmi: funzionalità come file system, protocolli di rete, gestione della memoria e dei processi, accesso di alto livello ai dispositivi, e forse qualche modello di utente e sicurezza. Non tutti questi devono essere presenti in un sistema operativo. Di solito la chiave, la memoria, la gestione dei processi e gli I / O. Se il programma di controllo consente l'esecuzione di altri programmi, conferendo a tali programmi un'identità attraverso la quale sono associati alle proprie risorse e se fornisce loro servizi per la gestione del processore e della memoria e per eseguire l'I / O, possiamo chiamare tale controllo programmare un sistema operativo.

Dato che sei curioso, potresti davvero divertirti con alcuni libri di testo sulle architetture dei computer, come quelli di William Stallings o di Hennesy e Patterson.


4

Al livello più fondamentale, una CPU è solo una macchina a stati che attraversa una sequenza di istruzioni che alterano il proprio stato interno e / o producono un output. Riassumi e perfeziona questo concetto a un livello molto alto e ottieni le ultime offerte di processori desktop e mobili di Intel. Ma il principio di base è abbastanza semplice: è possibile costruire un processore di base con circa una dozzina di circuiti integrati TTL e i microprocessori dall'inizio della metà degli anni '70, progettati per l'uso in calcolatori desktop e controller di semafori, non erano terribilmente più complicati di così . Ovviamente, la legge di Moore ha portato questo a un livello completamente diverso e i moderni processori ad alte prestazioni hanno poca somiglianza con i loro antenati di 35 anni fa.

Nonostante ciò, esiste ancora un enorme mercato per i processori (di solito chiamati microcontrollori) che sono significativamente meno complessi rispetto ai più all'avanguardia; questi sono i tipi di processori che potresti trovare sull'unità USB, ad esempio. Per rispondere alla tua domanda: è possibile che alcune funzioni dei dispositivi citati possano essere gestite da un ASIC, ma se i tuoi colleghi parlano di thread e interruzioni, ciò indica generalmente che è coinvolta una CPU di qualche tempo, probabilmente su un microcontrollore . Questi sono davvero dei computer a tutti gli effetti, nel senso che hanno un ALU, registri, un contatore di programmi, uno stack, ecc., Ma sono molto economici e molto economici e potrebbero avere solo poche dozzine di istruzioni, piuttosto che il centinaia di architettura x86.

Non è necessario che questi dispositivi abbiano un sistema operativo di alcun tipo o qualsiasi concetto di cambio di contesto (anche se è possibile in alcuni casi), tutto ciò che è richiesto per la sua applicazione è quello di scorrere le istruzioni nel suo programma uno dopo l'altro, e come dici tu potrebbe essere davvero un programma molto semplice.


1

Meno alcune autorizzazioni, una CPU non saprà se sta eseguendo il codice da un sistema operativo o qualsiasi altro tipo di programma. Per una CPU, sta semplicemente eseguendo le istruzioni recuperate dalla memoria.

Non dimentichiamo che cos'è un sistema operativo: un programma che è sempre in memoria e che è responsabile della gestione e della pianificazione sicura di più attività. La terminologia che usiamo per descrivere un'attività indipendente è un "processo". Il sistema operativo consente ai processi di condividere le risorse (hardware, memoria, ecc.) In modo sicuro e pianifica e dà priorità alla loro esecuzione, inoltre fornisce funzionalità come la comunicazione tra processi. Tutto ciò deriva dalla necessità di supportare più attività simultanee. Meno alcuni livelli di autorizzazione, per la CPU è solo l'esecuzione di istruzioni OS o nessun SO - non conosce la differenza.

Quando scriviamo il firmware per un microcontrollore, in genere non abbiamo questo programma aggiuntivo (il sistema operativo) sempre in memoria per gestire le attività per noi. Perché? Poiché non abbiamo bisogno di più attività simultanee, i sistemi integrati sono generalmente progettati e programmati per fare bene solo un'applicazione. Confrontalo con un PC che dovrebbe essere molto flessibile e in grado di eseguire tutti i tipi di applicazioni contemporaneamente.

Non vi è più la preoccupazione che un processo occupi e trompa lo spazio di memoria di un altro processo o che un processo richieda tutto il tempo della CPU. Questo perché stiamo scrivendo un singolo programma che ha accesso a tutte le risorse in qualsiasi momento poiché è l'unico programma in esecuzione sul sistema e quindi non abbiamo bisogno di un altro programma come un sistema operativo per gestirlo. Ancora una volta, per la CPU, sta solo eseguendo le istruzioni recuperate dalla memoria, non può dire la differenza, OS o nessun SO.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.