펌웨어에서 프로그램 실행은 어떻게됩니까?


9

펌웨어 도메인에서 일하는 사람들로부터 펌웨어를 제어하는 ​​운영 체제 (예 : USB 드라이브의 펌웨어)가 없다고 들었습니다. 외부 명령을 기다리는 while 루프에서 단일 스레드가 실행 중이며, 이는 인터럽트가 발생하는 시작점이며, ISR 및 제어가 하드웨어까지 계속 흘러갑니다. 그러나 기본적으로 펌웨어 코드를 실행하는 하드웨어 부분은 무엇입니까? CPU가 있거나 장치에 전원이 공급되는 동안 트리거되는 ASIC 기반 코드입니까? 일반 CPU-OS 기반 시스템에서 펌웨어로의 패러다임 전환을 이해하지 못합니다.


가능하다면 누군가가 펌웨어를 예로 들어 CPU 제조업체 및 기타 하드웨어 및 소프트웨어 세부 정보를 나타냅니다. 예를 들면 등을 SD 카드에 펌웨어, USB, HDD 컨트롤러가 될 수
Abhijit K 라오

답변:


13

패러다임 전환은 없습니다. 두 경우 모두 CPU가 소프트웨어 / 펌웨어를 실행 중입니다.

펌웨어와 소프트웨어는 동일합니다. 유일한 차이점은 저장 방법에 있습니다. 소프트웨어는 일반적으로 대용량 저장 장치 (예 : 디스크 드라이브)에 저장되고 실행되기 전에 휘발성 메모리 (예 : DRAM)에로드됩니다. 포함 된 파일을 다른 파일로 바꾸면 소프트웨어를 쉽게 변경할 수 있습니다.

펌웨어는 일반적으로 CPU에 직접 연결되는 비 휘발성 메모리 (예 : FLASH)에 저장됩니다. 수정하기 어렵고 (따라서 "확인") 실행을 위해 다른 메모리로 전송되거나 전송되지 않을 수 있습니다.

실제로 "운영 체제"를 사용하는 컴퓨터의 작동은 기본적으로 펌웨어에 대한 설명과 다르지 않습니다. OS 자체는 또 다른 소프트웨어 일뿐 아니라 상호 의존적 인 소프트웨어 모음 일 수도 있습니다. 가장 낮은 수준에서 CPU는 여전히 일종의 루프에 앉아 작업을 기다립니다. 루프가 OS 내부에 묻혀있는 것입니다.


9

OS가있는 "일반"CPU조차도 펌웨어를 실행해야합니다. 일반적으로 일반 PC에서 BIOS라고합니다. CPU의 펌웨어는 CPU가 주변 장치 (디스크 드라이브, USB 등)에 연결되어 있는지 여부에 관계없이 전원을 켤 때 항상 사용할 수있는 소프트웨어입니다. 본격적인 OS가있는 경우 펌웨어는 OS에 대한 코드를 보유한 장치 (디스크, USB 드라이브 등)를 파악하고 코드를 RAM에 복사하여 실행합니다. 소형 임베디드 디바이스의 경우 다른 애플리케이션을로드하거나 다양한 디바이스를 연결하지 않기 때문에 전체 OS가 필요하지 않으므로 소형 CPU는 매우 간단한 OS 또는 "작업 스케줄러"만 사용합니다. 다른 작업으로는 센서 판독, 버튼 누름 대기 및 디스플레이 업데이트가있을 수 있습니다. 매우 간단한 응용 프로그램의 경우 CPU는 모든 작업을 수행 할 시간이 충분하므로 각 작업을 순서대로 수행하며 "라운드 로빈"접근 방식이라고도합니다. 보다 정교한 스케줄러는 작업의 우선 순위를 고려합니다.

기본 요점은 모든 CPU에는 전원을 켤 때 항상 실행할 수있는 코드가 있어야한다는 것입니다. 이 코드는 일반적으로 비교적 작은 "읽기 전용"메모리 또는 ROM에 저장되지만 최신 CPU는 펌웨어를 "읽음 대부분"인 플래시 ROM에 넣습니다. 이러한 방식으로 저장된 코드는 CPU의 "펌웨어"입니다.


6

귀하의 질문에 약간의 오해가있는 것 같습니다.

펌웨어는 고정 된 형태의 소프트웨어 일 뿐이며, 보통 플래시 (재기록 가능) ROM에있는 일반 (1 회 기록 또는 마스크 프로그래밍) ROM에 사용되었습니다. 일부 시스템에서는이 펌웨어가 유일하게 존재하는 소프트웨어이고 다른 시스템에서는 (일반 PC와 같은) 주요 기능은 다른 소프트웨어를로드하는 것입니다.

응용 프로그램은 OS 제어 하에서 실행되거나 OS없이 실행될 수 있습니다. 후자의 상황은 종종 '베어 메탈 (bare metal)'이라고 불립니다. 애플리케이션은 하드웨어 '메탈'사이에서 아무 것도없이 실행됩니다. 파일 시스템 처리 및 멀티 스레딩을위한 프로비저닝과 같이 OS에서 수행하는 OS와 함께 발생하는 기능은 베어 메탈 시스템에 여전히 존재할 수 있지만 응용 프로그램과 연결된 라이브러리 형태로 존재할 수 있습니다. .

소프트웨어는 다양한 아키텍처를 가질 수 있습니다. 매우 간단한 형태는 '입력 받기, 처리하기, 출력 쓰기'루프입니다. 보다 복잡한 형태에는 폴링, 인터럽트 또는 멀티 스레딩이 포함될 수 있습니다. OS 의존적 애플리케이션과 베어 메탈 애플리케이션은이 모든 아키텍처를 사용할 수 있습니다.

이 세 가지 문제는 독립적입니다. 예를 들어 펌웨어는 베어 메탈을 실행할 수 있고 멀티 스레드 아키텍처를 사용할 수 있습니다. 또는 펌웨어는 간단한 get-do-write 루프 아키텍처를 사용하는 플로피 (죄송합니다, 플래시 카드 ..)에서 응용 프로그램을로드하는 운영 체제입니다.


5

OS와 CPU는 다른 개념입니다. 그렇습니다. CPU는 머신의 핵심 하드웨어입니다. 펌웨어 메모리에서 펌웨어 명령어를 가져 와서 수행합니다. (심지어 작은 시스템은 여러 개의 CPU가 그렇고, 병렬 실행에있어이하는 요즘 일반적입니다, 다소 대해 독점적으로 말을 오래된되도록 . CPU)

펌웨어는 비 휘발성 (또는 읽기 전용) 메모리에 저장되는 소프트웨어입니다. 이러한 메모리에 있으므로 기기를 켤 때 펌웨어를 사용할 수 있습니다. 컴퓨터가 켜져있을 때 거의 즉시 펌웨어 실행을 시작하거나 일부 작은 부팅 프로그램 (자체 펌웨어)이 플래시와 같은 일부 전자 저장 장치에서 더 큰 펌웨어를 가져와 RAM에 넣은 다음 실행할 수 있습니다. 오늘날 플래시 스토리지를 현대적으로 사용하는 이유는 업그레이드 절차를 참조하여 "새 펌웨어 깜박임"이라는 문구가 들리는 경우가 있습니다. 이와 같이 펌웨어를 쉽게 업그레이드 할 필요는 없습니다. 장치를 새로운 펌웨어로 업데이트하려면 소켓에서 집적 회로 ( "EPROM 칩")를 제거하고 새 것을 연결해야합니다. PC BIOS ' 이러한 방식으로 업데이트되었고 수많은 다른 장치가 사용되었습니다. 이것은 실제로 단어의 유래입니다. 어떤 사람들은 하드웨어 업데이트처럼 보이는 칩이나 회로 보드를 교체해야한다면 프로그램을 "소프트웨어"라고 부르는 것이 불편했습니다. 따라서 "펌웨어"가 만들어졌습니다. 소프트웨어보다 "어려워"어려운 것입니다.

펌웨어는 "완전한"운영 체제 일 수 있습니다. 예를 들어, Tomato는 무선 라우터를위한 Linux 기반 펌웨어입니다.

http://www.polarcloud.com/tomato

ssh를 통해 Tomato에 로그인하고 Linux 프롬프트를 얻을 수 있습니다. 따라서 고급 운영 체제이며 펌웨어입니다. 그러나 라우터에 하드 디스크가 있고 시작시 동일한 디스크를 해당 디스크에서로드해야하는 경우 더 이상 합법적으로 펌웨어라고 할 수 없습니다. 펌웨어는 플래시 메모리 또는 EPROM 칩과 같이 전원을 켜면 즉시 프로세서가 액세스 할 수있는 전자 스토리지에 있어야합니다.

오늘날 많은 소비자 장치에는 업그레이드 가능한 펌웨어가 있습니다. 예를 들어 디지털 카메라가있는 경우 웹 사이트를 찾아서 최신 펌웨어 버전을 사용할 수 없는지 확인해야합니다.이 펌웨어 버전은 출하시 설치된 펌웨어에있을 수있는 일부 문제를 해결합니다. 기술이 아닌 일반 사용자의 경우에도 오늘날 펌웨어를 쉽게 업데이트 할 수 있습니다. 위에서 언급 한 토마토는 공장 펌웨어를 대체하는 타사 오픈 소스 펌웨어의 예입니다.

"운영 체제"라는 단어는 단순히 기계의 자원을 관리하고 파일 시스템, 네트워크 프로토콜, 메모리 및 프로세스 관리와 같은 기능에 프로그램에 대해 상당히 높은 수준의 서비스를 제공함에있어 어느 정도의 정교함과 완전성을 갖춘 제어 프로그램을 나타냅니다. 장치에 대한 높은 수준의 액세스, 그리고 사용자의 일부 모델 및 보안. 이들 모두가 운영 체제에 있어야하는 것은 아닙니다. 일반적으로 메모리, 프로세스 관리 및 I / O가 핵심입니다. 제어 프로그램이 다른 프로그램의 실행을 허용하고 해당 프로그램에 자신의 리소스와 관련된 ID를 부여하고 프로세서 및 메모리 관리 및 I / O를 수행하는 서비스를 제공하는 경우 해당 제어를 호출 할 수 있습니다. 운영 체제를 프로그래밍하십시오.

호기심이 많기 때문에 William Stallings 또는 Hennesy and Patterson과 같은 컴퓨터 아키텍처에 대한 교과서를 실제로 즐길 수 있습니다.


4

가장 근본적인 수준에서, CPU는 자체 내부 상태를 변경하거나 출력을 생성하는 일련의 명령을 단계별로 실행하는 상태 머신입니다. 이 개념을 매우 높은 수준으로 추상화하고 구체화하면 인텔에 대한 최신 데스크탑 및 모바일 프로세서 제품을 얻을 수 있습니다. 그러나 기본 원리는 매우 간단합니다. 약 12 ​​개의 TTL 집적 회로로 매우 기본적인 프로세서를 구축 할 수 있으며 1970 년대 초에서 중반까지의 마이크로 프로세서는 데스크탑 계산기 및 신호등 컨트롤러에 사용하도록 설계되었으며 이보다 훨씬 복잡하지 않았습니다. . 분명히 무어의 법칙은 이것을 완전히 다른 수준으로 끌어 올렸으며, 현대의 고성능 프로세서는 35 년 전의 조상과 거의 유사하지 않습니다.

그럼에도 불구하고 여전히 최첨단보다 훨씬 덜 복잡한 프로세서 (보통 마이크로 컨트롤러라고 함)에는 여전히 큰 시장이 있습니다. 예를 들어 USB 드라이브에서 찾을 수있는 프로세서 유형입니다. 귀하의 질문을 해결하기 위해-언급 한 장치의 일부 기능이 ASIC에 의해 처리 될 수 있지만 동료가 스레드 및 인터럽트에 대해 이야기하는 경우 일반적으로 마이크로 컨트롤러에 약간의 시간이 걸린 CPU가 있음을 나타냅니다 . 이들은 실제로 ALU, 레지스터, 프로그램 카운터, 스택 등을 가지고 있다는 점에서 본격적인 컴퓨터이지만 전력이 매우 낮고 가격이 저렴하며 수십 가지 명령이 아닌 수십 개의 명령 만 가질 수 있습니다 수백 개의 x86 아키텍처.

이러한 장치에는 모든 종류 또는 컨텍스트 전환 개념이있는 운영 체제가 있어야 할 필요는 없지만 (어떤 경우에는 가능하지만) 응용 프로그램에 필요한 모든 것은 프로그램의 명령을 차례로 수행하는 것입니다. 다른 하나, 그리고 당신이 말했듯이 그것은 실제로 매우 간단한 프로그램 일 수 있습니다.


1

일부 권한을 빼면 CPU는 OS 또는 다른 종류의 프로그램에서 코드를 실행하는지 알 수 없습니다. CPU는 메모리에서 가져온 명령을 실행하고 있습니다.

여러 작업을 안전하게 처리하고 예약하는 책임을지는 항상 메모리에있는 프로그램 인 운영 체제를 잊지 마십시오. 독립적 인 작업을 설명하기 위해 사용하는 용어는 "프로세스"입니다. OS는 프로세스가 리소스 (하드웨어, 메모리 등)를 안전하게 공유하고 실행을 예약하고 우선 순위를 지정할 수 있도록하며 프로세스 간 통신과 같은 기능도 제공합니다. 이 모든 것은 여러 개의 동시 작업을 지원해야하기 때문에 발생합니다. 일부 권한 수준을 빼면 CPU에 대해 OS 명령을 실행하거나 OS를 실행하지 않고 차이를 알지 못합니다.

마이크로 컨트롤러 용 펌웨어를 작성할 때 일반적으로이 추가 프로그램 (OS)이 항상 메모리를 통해 작업을 관리하지는 않습니다. 왜? 우리는 여러 개의 동시 작업이 필요하지 않기 때문에 임베디드 시스템은 일반적으로 하나의 응용 프로그램 만 수행하도록 설계되고 프로그래밍됩니다. 이것을 매우 유연하고 모든 종류의 응용 프로그램을 한 번에 실행할 수있는 PC와 대조하십시오.

더 이상 한 프로세스가 다른 프로세스의 메모리 공간을 차지하고 버리는 문제 나 한 프로세스가 모든 CPU 시간을 낭비하는 문제가 없습니다. 시스템에서 실행되는 유일한 프로그램이므로 언제든지 모든 리소스에 액세스 할 수있는 단일 프로그램을 작성하기 때문에 OS와 같은 다른 프로그램이 필요하지 않기 때문입니다. 다시 말하지만 CPU는 메모리에서 가져온 명령을 실행하는 것만으로 차이를 알 수 없으며 OS 또는 OS가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.