Embedded/개념
[Embedded System] 개요 - 1
파키스탄푸들
2017. 3. 26. 22:57
- Embedded System 이란?
- 큰 기계적 또는 전기적 시스템 내에서 특정 기능을 수행하는 컴퓨터 시스템
- 큰 시스템 안에 여러 개의 임베디드 시스템이 동시에 존재할 수 있다.
- Embedded System의 특징
- 특정 기능 수행
- 하드웨어 + 소프트웨어로 구성
- 하드웨어 변경이 쉽지 않음
- 대개 제한적인 자원으로 구현
- 고 신뢰성, 실시간성을 요구
- 하이퍼바이저(Hypervisor)
- 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실핼하기 위한 논리적 플랫폼(platform)
- 가상화 머신 모니터(virtual machine monitor, 줄여서 VMM)라고도 부른다.
- 임베디드 시스템에서 가상머신
- 리눅스나 윈도우 같은 높은 수준의 운영체제 인터페이스 제공과 함께 실시간 운영체제(RTOS)의 API 유지를 위해 개발됨(높은 운영체제의 실시간 성능은 많은 임베디드 응용 프로그램에 맞지 않다.)
- 임베디드용 하이퍼바이저를 위한 요구사항 및 제한사항
- 한정된 리소스의 임베디드 시스템의 특성상 작은 메모리와 낮은 오버헤드
- 폭넓은 아키텍쳐 및 메커니즘으로 인하여 전가상화가 어려움
- ARM의 TrustZone(하드웨어 아키텍처) 기술로 전가상화 지원
- Type 1 (native 또는 bare-metal)
- 운영 체제가 프로그램을 제어하듯이 하이퍼바이저가 해당 하드웨어에서 직접 실행되며 게스트 운영 체제는 하드웨어 위에서 2번째 수준으로 실행된다.
- Type 2 (hosted)
- 하이퍼바이저는 일반 프로그램과 같이 호스트 운영체제에서 실핼되며 VM 내부에서 동작되는 게스트 운영 체제는 하드웨어에서 3번째 수준으로 실행된다.
- VM의 대표적인 종류는 VMware Server, VMware Workstation, VMware Fusion, QEMu, 마이크로소프트의 버추얼 PC와 버추얼 서버, Oracle(SUN)의 버추얼박스, SWsoft의 Parallels Workstation과 Parallels Desktop이 있다.
- OS는 하드웨어를 추상화한다.
- 하드웨어 추상화
- 특정 플랫폼의 구체적인 부분과 하드웨어의 자원을 직접 접근을 흉내내는 소프트웨어들의 집합이다.
- 프로그래머가 프로그램을 장치 독립적인 프로그램을 작성하도록 하고 운영 체제의 하드웨어 호출을 무시함으로써 고성능의 응용 프로그램 작성을 허용한다.
- 하드웨어 추상화 계층
- 컴퓨터의 물리적인 하드웨어와 컴퓨터에서 실행되는 소프트웨어 사이의 추상화 계층이다.
- 하드웨어의 차이를 숨겨서 응용 프로그램이 작동할 수 있는 일관된 플랫폼을 제공한다.
- 운영 체제는 하드웨어 추상화 계층을 다른 하드웨어로 쉽게 이식할 수 있게 해주는 것으로 정의한다.
- 간단히 말해 듀얼 부팅처럼 시작시 선택해서 들어가는 것이아니라 OS가 동시에 돌고 있는것이다. 하지만 이 경우 Core가 한개라면 Core한개가 두개의 OS를 빠르게 처리하게 된다. 때문에 실시간성을 보장하기위해서는 여러개의 Core가 필요하다.
- 실시간 임베디드 시스템
- 실시간 임베디드 시스템
- 외부 이벤트에 대해 일정한 시간 안에 응답해야 하는 시스템
- 시간 제약에는 작업 완료 시간과 작업 시작 시간 두 가지가 있다.
- 작업 완료 시간 : 규정된 시간 안에 작업을 완료해야 하는 시간
- 작업 시작 시간 : 이벤트 발생 후 일정 시간 안에 작업을 시작해야 하는 시간
- 경성(Hard) 실시간 임베디드 시스템
- 시간 제약의 위반이 심각한 결과를 초래할 수 있는 시스템
- 시간 제약은 반드시 지켜야 함
- 예) 미사일 컨트롤러, 원자력 제어기, 자동차 에어백 등
- 연성(Soft) 실시간 임베디드 시스템
- 시간 제약의 위반이 심각한 결과를 가져오지는 않지만, 품질의 손상을 가져올 수 있는 시스템
- 시간 제약은 가급적 지켜줄수록 좋음
- 예) MPEG 플레이어, 무선 통신기기 등.
- 실시간 운영 체제 : RTOS, Real-Time Operating System
- 시스템의 실시간성을 보장할 수 있는 운영체제
- RTOS의 특징
- 멀티태스킹
- 우선 순위에 따라 처리될 수 있는 프로세서 쓰레드
- 충분한 개수의 인터럽트 레벨
- RTOS의 예
- uC/OS II/III
- VxWorks
- RTEMS
- Nucleus
- Neos
- Free RTOS <== 무료
- QNX
- 임베디드 리눅스 운영체제
- ftp.kernel.org 에서 무료로 받을 수 있다.
- 커널 버전 : 2.4.x <== 이제 거의 사라짐 / 다음 버전부터 구글이 참여하면서부터를 버전의 분기점?이라고 보면됨
- 2.6.x <== 아직도 안정적으로 잘돌아감 <== 이때부터 구글이 개발하기 시작(많은 기능을 넣음)
- 3.x.x
- 4.x.x
- Embedded system에 사용하기 위해서는 Kernel Porting 작업을 해야함
- Peripheral을 위해서는 해당 Device Driver 작성을 해야함
- GNU License에 대한 이해가 요구됨
- 일반적인 임베디드 소프트웨어 개발 환경의 구성 요소
- 호스트 시스템
- 툴 체인(tool chain)을 실행하면서 개발을 진행하는 시스템
- 툴 체인 : 통합 개발 환경(IDE, Interated Development Environment)로 제공되는 경우가 많다.
- 컴파일러
- 어셈블러
- 링커
- 디버거
- 소프트웨어 디버거
- 하드웨어 디버거
- 타겟 시스템
- 임베디드 소프트웨어를 실행시킬 시스템
- 로케이터(링커)
- 컴파일러 소스코드를 Section 단위로 나누어 구분시켜 Object를 생성
- 각 Object 내의 Section을 모아 독립적으로 메모리에 위치시키고, 링커가 이를 다시 하나로 모아 실행 파일을 생성
- 생성된 프로그램은 저장 위치인 NV memory에 위치
- 실행할 때 code 및 data영역이 RAM 영역으로 이동(이를 relocation이라 함)
- 프로그램 실행
- ROM보다 RAM이 더 빠르기 때문에 Startup code가 ROM에 저장된 프로그램을 RAM에 복사한 후 나머지 부분의 속도를 높여서 실행할 수 있다.
- 프로그램을 압축해서 ROM에 저장 할 수도 있다.
- 로케이터(Linker script)의 설정이 필요하다.
- RAM의 위치에서 돌아갈 것을 예상해서 링킹을 해야한다.
- ROM에 저장된 프로그램을 RAM에 복사하는 코드가 스타트업 코드 부분에 있어야 한다.
- 로케이터가 생성한 타겟 실행 이미지 파일 시스템에 내리(Download)는 방법
- Burning by ROM writer
- Emulating by ROM emulator
- Fusing Flash using JTAG Tool
- Downloading to RAM by JTAG Tool
- Downloading to RAM by monitor program (RAM에 바로 다운로드해서 테스트)
Fusing Flash는 NOR과 NAND가 있다.(요즘은 Flash를 많이 사용)
- Tera term이나 HyperTerminal같은 프로그램을 리눅스에서는 Boot Loader라고하며 펌웨어에서는 Monitor Program이라 부름
- Bootload가 0x0000:0000 번지에 들어가 있다. 0x0000:0000번지는 NOR/ROM 이라 보면 된다. 그리고 프로그램이 실행되면 RAM에 복사되어 실행된다. NOR/ROM에는 크게 DATA와 TEXT가 저장되어 있는데 TEXT(명령어)는 읽기만 하면 되기 때문에 ROM에 있으면 되지만 DATA는 읽고 써야하기 때문에 RAM에 복사되야 한다. 하지만 명령어도 RAM에서 돌리는것이 빠르기 때문에 Bootload를 0x3000:0000에 복사한다.
- 그리고 명령어를 이용해 (tftp 0x31000000 MDS2450.bin) 프로그래을 0x31000000에 올린다.
- 그리고 명령어를 이용해 Program Counter를 0x31000000로 옮긴다.
- ROM은 요즘 잘 없고 NOR Flash를 많이 사용한다. (NV Memory)
- 현재 사용한 bootload는 "u-boot"
- RAM.ld에 시작 주소가 들어가야함
- 아키텍처
- ARM
- 가장 큰 특징은 저전력으로 높은 성능을 내는것이다.
- 휴대용 단말기나 가전 제품등 임베디드 시스템에 폭 넓게 사용될 수 있는 프로세서이다.
- 가격적인 면에서도 다른 프로세서에 비해 상당히 저렴하기 때문에 대중적인 제품을 만들 수 있으며 다른 주변기기를 붙여서 쉽게 SoC화를 할 수 있다.
- PPC(PowerPC)
- 개인용 컴퓨터, 그래픽 워크스테이션, 메인 프레임 등 높은 성능을 요구하는 곳에 쓰이기 위해서 만들어졌다. 이런 이유로 인해 다른 프로세서에 비해 높은 성능을 보여주고 있으며 메인 프레임을 위한 멀티프로세서도 지원해 주고 있다.
- 대용량의 데이터를 처리를 필요로하는 통신용 장비에 많이 사용될 수 있다.
- MIPS
- 대표적인 RISC 프로세서로 64bit 구조를 가지고 있다. (32 bit도 지원해 주고 있다.)
- 특히 높은 성능을 보여주는 RISC이다.
- 다른 프로세서와는 다르게 DSP에 필요한 명령어들을 지원해 주고 있으며 그래픽 처리에 필요한 명령어 또한 지원해주고 있다.
- 다양한 용도로 사용되지만 특히 비디오콘솔로 많이 사용되고 있으며 높은 연산 처리율을 필요로 하는 제품, 그래픽처리를 많이 해야 되는 제품들에 많이 들어가 사용되고 있다.
- Pipelining
- 하나의 프로세서를 서로 다른 기능을 가진 여러 개의 서브프로세스 또는 스테이지로 분할
- 각 스테이지가 동시에 서로 다른 데이터를 처리
- 이때 각 스테이지에서 수행된 연산 결과는 다른 스테이지로 연속적으로 넘어가게되어 데이터가 마지막 스테이지를 통과하게되면 최종적인 연산 결과를 얻는다.
- 구조
- 1단계 : Fetch - 명령어를 메모리에서 인출
- 2단계 : Decode - 명령어 해석
- 3단계 : Execute - 명령어 실행
- 4단계 : Writeback - 라이트 백
- CISC ( Complex Instruction Set Computer )
- 고급 언어 명령어 하나에 각기 하나씩의 기계 명령어를 대응시킴 (컴파일러를 간단하게 하기 위해 명령어를 복잡하게 설계)
- 명령어 수가 많고, 가변 길이의 다양한 명령어를 갖는 CPU 구조
- 특정 기능을 소프트웨어가 아닌 하드웨어로 구현함으로써 처리 속도를 높이는게 목적
- 기능이 추가되면 하드웨어로 구현되는 명령어들이 추가되어 복잡해짐
- 다양항 주소 지정 방식
- 가변 길이 명령어 방식
- RISC ( Reduced Instruction Set Computer )
- 명령어의 수를 줄임으로써 하드웨어가 간단하게되고 동작 속도를 증가시키는 방법으로 프로세서의 성늘을 향상시킴
- 즉, 단순하고 고정길이의 명령어 집합을 제공하여 크기를 줄이고 속도를 높이고자한 CPU구조
- 반복적으로 많이 사용되는 명령어는 하드웨어적으로 구현하고, 다른 명령어들은 그 구성된 명령어들의 조합하여 소프트웨어적으로 구현
- 적은 실리콘 면적을 사용하고 남은 실리콘 면적은 캐시 메모리, 메모리 관리 기능, 부동-소수점 하드웨어 등 성능 강화목적으로 사용
- 상대적으로 적은 수의 명령어(100개 이내) 및 어드레싱
- 인식 기능 명령어 수를 줄임으로써 속도 향상
- 메로리와 CPU 간 데이터 이동 명령어가 단 2개인 구조 (회로가 단순해지고 불필요한 메모리 접근을 줄임)
- Load-Store 구조 : (Load) 메모리 -> 레지스터, (Store) 레지스터 -> 메모리
- 모든 데이터 처리는 레지스터에서만 수행됨
- 고정 길이 명령어 방식으로 디코딩이 간단
- 단일 사이클의 명령어 실행
- Fetch, Decode, Execute 단계를 Pipeline 방법으로 구현 (지연실행기법 이용)
- 마이크로 프로그램된 제어보다는 하드와이어(Hard-wired)된 제어를 채택
- 프로세서 내에 많은 수의 레지스터가 존재하는데 이것들을 이용하여 메모리 접근을 줄인다.
- RISC는 대부분의 현대 프로세서 디자인에 채택되고 있고, 또 비교적 전력 소모가 적기 때문에 임베디드 프로세서에도 채택되고 있다.
- CISC vs RISC
- 처리속도 : (CISC) 느림, (RISC) 빠름
- 명령어 수 : (CISC) 많음, (RISC) 적음
- 전련 소모 : (CISC) 많음, (RISC) 적음
- 프로그래밍 용이성 : (CISC) 간단, (RISC) 복잡
- 설계 용이성 : (CISC) 복잡, (RISC) 간단
- 최적화된 프로세서를 찾는 기준?
- COTS (Commercial Off-the-Shelf) : 상용제품
- 성능
- 프로세서는 정해진 시간 내에 작업을 완료할 수 있어야함
- 필요 이상으로 빠를 필요는 없음
- 필요한 디바이스 지원
- 네트워크 장치를 설계한다면, 네트워크 컨트롤러가 달려있는 프로세서가 더 경쟁력 있음
- 프로세서 외부에 컨트롤러를 달면 다음의 문제점 발생
- 비용 문제 : 컨트롤러 가격 만큼이 비싸진다.
- 시간 문제 :시스템을 설계하고 디버깅하는데 시간이 많이 든다.
- 공간 문제 : 부피가 작아야 하는 시스템의 경우 문제가 발생할 수 있다.
- 전력 문제 : 외부 장치가 많아지면 전력 소모가 커진다.
- 외부에 디바이스를 연결할 경우 여유 인터페이스가 있어야함
- 적절한 개발 툴
- 가격
- ROI ( Return On Investment) : 투자자본수익률 투자한 돈으로 얼마만큼의 수익을 냈는가를 뜻한다.)
- 32bit 프로레서의 경우에는 운영체제를 사용할 수 있다. 만약 프로세서에 이미 사용하고자 하는 임베디드 운영체제가 포팅되어 있다면, 개발 시간과 비용을 줄일 수 있다.
- Embedded Linux
- Android
- VxWorks
- Nucleus
- MDS's Neos
- In-house OS ( 직접 만든 OS)