- 큰 기계적 또는 전기적 시스템 내에서 특정 기능을 수행하는 컴퓨터 시스템
- 큰 시스템 안에 여러 개의 임베디드 시스템이 동시에 존재할 수 있다.
- 특정 기능 수행
- 하드웨어 + 소프트웨어로 구성
- 하드웨어 변경이 쉽지 않음
- 대개 제한적인 자원으로 구현
- 고 신뢰성, 실시간성을 요구

하이퍼바이저(Hypervisor)
호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실핼하기 위한 논리적 플랫폼(platform)
가상화 머신 모니터(virtual machine monitor, 줄여서 VMM)라고도 부른다.
임베디드 시스템에서 가상머신
임베디드용 하이퍼바이저를 위한 요구사항 및 제한사항
한정된 리소스의 임베디드 시스템의 특성상 작은 메모리와 낮은 오버헤드
폭넓은 아키텍쳐 및 메커니즘으로 인하여 전가상화가 어려움
ARM의 TrustZone(하드웨어 아키텍처) 기술로 전가상화 지원
Type 1 (native 또는 bare-metal)
Type 2 (hosted)
하이퍼바이저는 일반 프로그램과 같이 호스트 운영체제에서 실핼되며 VM 내부에서 동작되는 게스트 운영 체제는 하드웨어에서 3번째 수준으로 실행된다.
VM의 대표적인 종류는 VMware Server, VMware Workstation, VMware Fusion, QEMu, 마이크로소프트의 버추얼 PC와 버추얼 서버, Oracle(SUN)의 버추얼박스, SWsoft의 Parallels Workstation과 Parallels Desktop이 있다.

OS는 하드웨어를 추상화한다.
하드웨어 추상화
하드웨어 추상화 계층
컴퓨터의 물리적인 하드웨어와 컴퓨터에서 실행되는 소프트웨어 사이의 추상화 계층이다.
하드웨어의 차이를 숨겨서 응용 프로그램이 작동할 수 있는 일관된 플랫폼을 제공한다.
운영 체제는 하드웨어 추상화 계층을 다른 하드웨어로 쉽게 이식할 수 있게 해주는 것으로 정의한다.

실시간 임베디드 시스템
실시간 임베디드 시스템
경성(Hard) 실시간 임베디드 시스템
시간 제약의 위반이 심각한 결과를 초래할 수 있는 시스템
시간 제약은 반드시 지켜야 함
예) 미사일 컨트롤러, 원자력 제어기, 자동차 에어백 등
연성(Soft) 실시간 임베디드 시스템
임베디드 리눅스 운영체제
커널 버전 : 2.4.x <== 이제 거의 사라짐 / 다음 버전부터 구글이 참여하면서부터를 버전의 분기점?이라고 보면됨
2.6.x <== 아직도 안정적으로 잘돌아감 <== 이때부터 구글이 개발하기 시작(많은 기능을 넣음)
3.x.x
4.x.x
Embedded system에 사용하기 위해서는 Kernel Porting 작업을 해야함
Peripheral을 위해서는 해당 Device Driver 작성을 해야함
GNU License에 대한 이해가 요구됨
- 로케이터(링커)
- 컴파일러 소스코드를 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를 많이 사용)
- 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
하나의 프로세서를 서로 다른 기능을 가진 여러 개의 서브프로세스 또는 스테이지로 분할
각 스테이지가 동시에 서로 다른 데이터를 처리
이때 각 스테이지에서 수행된 연산 결과는 다른 스테이지로 연속적으로 넘어가게되어 데이터가 마지막 스테이지를 통과하게되면 최종적인 연산 결과를 얻는다.
구조
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)