Como acontece a execução do programa no firmware?

9

Ouvi de pessoas que trabalham no domínio do firmware que não existe um sistema operacional controlando o firmware (por exemplo, firmware em uma unidade USB). Existe apenas um único encadeamento em execução em um loop while aguardando um comando externo, e este é o ponto de partida para uma interrupção, seguida por um ISR e o controle fluindo até o hardware. Mas, fundamentalmente, qual é a parte do hardware que está executando o código do firmware? Existe uma CPU ou é um código baseado em ASIC que é acionado desde que o dispositivo seja ligado? Não consigo entender a mudança de paradigma de um sistema baseado em CPU-OS regular para um firmware.

Abhijit K Rao
fonte
Se possível, alguém pode dar um exemplo de firmware, indicando a marca da CPU e quaisquer outros detalhes de hardware e software. Os exemplos poderiam ser firmware em cartões SD, USB, controladores de HDD etc
Abhijit K Rao

Respostas:

13

Não há mudança de paradigma; nos dois casos, uma CPU está executando o software / firmware.

Firmware e software são a mesma coisa; a única distinção está em como é armazenada. Normalmente, o software é armazenado em um dispositivo de armazenamento em massa (por exemplo, unidade de disco) e carregado na memória volátil (por exemplo, DRAM) antes de ser executado. É fácil alterar o software, simplesmente substituindo o arquivo que o contém por outro.

O firmware é normalmente armazenado na memória não volátil (por exemplo, FLASH) conectada mais ou menos diretamente à CPU. É mais difícil de modificar (daí a "empresa") e pode ou não ser transferida para uma memória diferente para execução.

Realmente, a operação de um computador com um "sistema operacional" não é fundamentalmente diferente da descrição do firmware. Lembre-se, o próprio sistema operacional é apenas mais um software - ou, mais provavelmente, uma enorme coleção de softwares que dependem mutuamente. No nível mais baixo, a CPU ainda está em algum tipo de loop, esperando o que fazer. É só que esse loop está enterrado dentro do sistema operacional.

Dave Tweed
fonte
9

Mesmo uma CPU "regular" com um sistema operacional deve executar o firmware ... geralmente é chamada de BIOS em um PC genérico. O firmware de qualquer CPU é apenas o software que está sempre disponível quando a energia é ligada, esteja a CPU conectada a qualquer dispositivo periférico (unidades de disco, USB, etc.) ou não. Se você possui um sistema operacional completo, o firmware descobre qual dispositivo (disco, unidade USB, etc.) mantém o código do sistema operacional, copia o código na RAM e o executa. Para pequenos dispositivos incorporados, não há necessidade de um sistema operacional completo, porque você não estará carregando aplicativos diferentes ou conectando uma variedade de dispositivos; portanto, as pequenas CPUs usam apenas um sistema operacional muito simples ou talvez um "agendador de tarefas". Tarefas diferentes podem ser leituras do sensor, aguardar a pressão dos botões e atualizar a exibição. Para aplicativos muito simples, a CPU tem tempo de sobra para executar todas as tarefas, de modo que executa cada uma em sequência, o que também é conhecido como abordagem "round robin". Agendadores mais sofisticados consideram a prioridade das tarefas.

O ponto básico é que toda CPU deve ter algum código sempre disponível para execução quando a energia é ligada. Esse código geralmente é armazenado em uma memória "ROM" apenas pequena, ou ROM, embora as CPUs modernas colocem o firmware em uma ROM Flash que é "lida principalmente". O código que é armazenado dessa maneira é o "firmware" da CPU.

Joe Hass
fonte
6

Parece haver alguns conceitos errados em sua pergunta.

O firmware é apenas um software em formato fixo, que costumava estar em uma ROM simples (gravação única ou programada por máscara), agora principalmente em ROM flash (regravável). Em alguns sistemas, este firmware é o único software presente; em outros (como um PC comum), sua principal função é carregar o outro software.

Um aplicativo pode ser executado sob o controle de um sistema operacional ou pode ser executado sem um sistema operacional. A última situação é freqüentemente chamada de 'bare metal': o aplicativo é executado sem nada entre ele e o 'metal' do hardware. As funções que estão na situação com o SO executada pelo SO, por exemplo, manipulação do sistema de arquivos e provisões para multiencadeamento, ainda podem estar presentes em um sistema bare metal, mas na forma de bibliotecas vinculadas ao aplicativo .

O software pode ter muitas arquiteturas diferentes. Uma forma muito simples é o loop 'obter entrada, processar, gravar saída'. Formulários mais complicados podem incluir pesquisas, interrupções ou multiencadeamento. Os aplicativos dependentes do SO e bare-metal podem usar todas essas arquiteturas.

Esses três problemas são independentes: por exemplo, o firmware pode executar bare-metal e usar uma arquitetura multithread. Ou o firmware seja um sistema operacional que carrega um aplicativo a partir de um disquete (desculpe, cartão flash ..) que usa a arquitetura simples de loop de gravação e gravação.

Wouter van Ooijen
fonte
5

SO e CPU são conceitos diferentes. Sim, existe uma CPU, que é a peça principal de hardware no coração da máquina. Ele busca as instruções do firmware na memória do firmware e as executa. (Atualmente, é comum até sistemas pequenos terem várias CPUs para execução paralela, a propósito; portanto, é um pouco desatualizado falar exclusivamente sobre a CPU.)

Firmware é um software armazenado em memória não volátil (ou talvez até somente leitura). Como está nessa memória, o firmware está disponível quando a máquina está ligada. A máquina pode quase imediatamente começar a executar o firmware quando ligada, ou algum pequeno programa de inicialização (o próprio firmware) pode extrair o firmware maior de algum armazenamento eletrônico, como o flash, colocá-lo na RAM e executá-lo. O uso moderno do armazenamento flash nos dias de hoje é o motivo pelo qual às vezes você pode ouvir a frase "piscando o novo firmware", referindo-se a um procedimento de atualização. O firmware não precisa ser facilmente atualizável assim. Ele pode vir em um chip de circuito integrado, para que a atualização de um dispositivo para um novo firmware possa envolver a remoção de um circuito integrado ("chip EPROM") de um soquete e a conexão de um novo. BIOS do PC ' s costumavam ser atualizados dessa maneira e inúmeros outros dispositivos. É realmente de onde a palavra vem. Algumas pessoas não se sentiam à vontade em chamar um programa de "software", se precisassem trocar um chip ou uma placa de circuito para substituí-lo, o que parece mais uma atualização de hardware. Portanto, o "firmware" foi cunhado: algo "mais difícil" de mudar do que o software.

O firmware pode ser um sistema operacional "completo". Por exemplo, o Tomato é um firmware baseado em Linux para roteadores sem fio:

http://www.polarcloud.com/tomato

Podemos entrar no Tomato via ssh e obter um prompt do Linux. Portanto, é um sistema operacional avançado e é firmware. Mas se o roteador tivesse um disco rígido e se o mesmo sistema operacional tivesse que ser carregado a partir desse disco na inicialização, ele não poderia mais ser legitimamente chamado de firmware. O firmware deve estar no armazenamento eletrônico acessível ao processador imediatamente na inicialização, como memória flash ou chips EPROM.

Atualmente, muitos dispositivos de consumo possuem firmware atualizável. Se você possui uma câmera digital, por exemplo, deve encontrar o site e verificar se uma versão mais recente do firmware não está disponível, o que corrige alguns problemas que podem estar presentes no firmware instalado de fábrica. Hoje em dia é fácil atualizar o firmware, mesmo para usuários finais relativamente não técnicos. O tomate mencionado acima é um exemplo de firmware de código aberto de terceiros que substitui o firmware de fábrica.

A palavra "sistema operacional" se refere simplesmente a um programa de controle que possui um certo grau de sofisticação e integridade no gerenciamento dos recursos da máquina e na prestação de serviços de nível razoavelmente alto aos programas: recursos como sistemas de arquivos, protocolos de rede, gerenciamento de memória e processos, acesso de alto nível aos dispositivos e talvez algum modelo de usuário, além de segurança. Nem todos eles precisam estar presentes em um sistema operacional. Normalmente, a memória, gerenciamento de processos e E / S são a chave. Se o programa de controle permitir que outros programas sejam executados, dando a esses programas uma identidade através da qual eles estão associados aos seus próprios recursos, e se lhes fornecer serviços para gerenciar o processador, a memória e executar E / S, podemos chamar esse controle programar um sistema operacional.

Como você está curioso, pode realmente apreciar alguns livros didáticos sobre arquiteturas de computadores, como os de William Stallings ou Hennesy e Patterson.

Kaz
fonte
4

No nível mais fundamental, uma CPU é apenas uma máquina de estado percorrendo uma sequência de instruções que alteram seu próprio estado interno e / ou produz alguma saída. Abstraia e refine esse conceito para um nível muito alto e você obtém as mais recentes ofertas de processadores para desktop e dispositivos móveis da Intel. Mas o princípio subjacente é bastante simples - você pode construir um processador muito básico com cerca de uma dúzia de circuitos TTL integrados e microprocessadores do início até meados da década de 1970, projetados para uso em calculadoras de mesa e controladores de semáforos, não eram muito mais complicados do que isso . Obviamente, a lei de Moore levou isso a um outro nível, e os modernos processadores de alto desempenho têm pouca semelhança com seus ancestrais de 35 anos atrás.

Mesmo assim, ainda existe um enorme mercado para processadores (geralmente chamados microcontroladores) que são significativamente menos complexos que os de ponta; esses são os tipos de processadores que você pode encontrar na sua unidade USB, por exemplo. Para responder à sua pergunta - é possível que algumas funções dos dispositivos que você mencionou sejam tratadas por um ASIC, mas se seus colegas estiverem falando sobre threads e interromper isso geralmente indica que há uma CPU de algum tempo envolvida, provavelmente em um microcontrolador . Na verdade, esses são computadores de pleno direito, no sentido de que possuem uma ULA, registradores, um contador de programa, uma pilha etc., mas são de muito baixa potência e muito baratos e podem ter apenas algumas dezenas de instruções, em vez de centenas da arquitetura x86.

Não há exigência de que esses dispositivos tenham um sistema operacional de qualquer tipo ou qualquer conceito de alternância de contexto (embora seja possível em alguns casos), tudo o que é necessário para sua aplicação é seguir as instruções em seu programa uma após a outra. o outro e, como você diz, pode ser um programa muito simples.

Bitrex
fonte
1

Menos algumas permissões, uma CPU não saberá se está executando o código de um sistema operacional ou qualquer outro tipo de programa. Para uma CPU, é apenas executar instruções buscadas na memória.

Não vamos esquecer o que é um sistema operacional: um programa que está sempre na memória, responsável por manipular e agendar com segurança várias tarefas. A terminologia que usamos para descrever uma tarefa independente é um "processo". Os sistemas operacionais permitem que os processos compartilhem recursos (hardware, memória etc.) com segurança, agendam e priorizam sua execução, além de fornecer recursos como comunicação entre processos. Tudo isso decorre da necessidade de oferecer suporte a várias tarefas simultâneas. Menos alguns níveis de permissão, para a CPU está apenas executando instruções OS ou nenhum SO - não sabe a diferença.

Quando escrevemos firmware para um microcontrolador, normalmente não temos esse programa extra (o SO) sempre na memória para gerenciar tarefas para nós. Por quê? Como não precisamos de várias tarefas simultâneas - os sistemas embarcados geralmente são projetados e programados para executar apenas um aplicativo. Compare isso com um PC que se espera seja muito flexível e capaz de executar todos os tipos de aplicativos de uma só vez.

Não há mais a preocupação de um processo ocupar e controlar o espaço de memória de outro processo ou de um processo consumindo todo o tempo da CPU. Isso ocorre porque estamos escrevendo um único programa que tem acesso a todos os recursos a qualquer momento, pois é o único programa em execução no sistema e, portanto, não precisamos de outro programa como um sistema operacional para gerenciá-lo. Novamente, para a CPU, está apenas executando instruções buscadas na memória, não pode dizer a diferença, SO ou nenhum SO.

Jon L
fonte