2024.02.08 (목)
임베디드 시스템
임베디드 시스템이란?
- 하드웨어와 소프트웨어가 조합되어 특정한 목적을 수행하는 시스템
- 특정한 기능을 수행하도록 마이크로 프로세서와 입출력 장치를 내장하고, 이를 제어하기 위한 프로그램이 내장되어 있다.
- 일상생활에서 사용되는 각종 전자기기, 가전제품, 제어장치 등에 사용된다.
임베디드 시스템 응용분야
- 정보 가전 : 세탁기, 오디오, 인터넷 냉장고, HDTV 등
- 제어 분야 : 공장 자동화, 가정 자동화, 로봇 제어, 공정 제어 등
- 정보 단말 : 핸드폰, PDA, 스마트폰, 네비게이션, MP3, PMP, 디지털 카메라 등
- 네트워크 기기 : 교환기, Router, 공유기, 홈 게이트웨이 등
- 게임 기기 : 가정용 게임기(PS2, XBox), 지능형 장난감 등
- 항공/군용 : 비행기, 우주선, 로켓, 야전 이동단말(GPS, GIS)
- 물류/금융 : ATM, RFID, 물류 단말, 영업 단말 등
- 차량/교통 : 자동차, ITS 등
- 사무, 의료 : 전화기, 프린터, Heart pacer, 수술 로봇, 증강현실장비
Ubiquitous Computing이란?
Ubiquitous Computing은 사용자가 네트워크나 컴퓨터를 의식하지 않고 장소에 상관없이 자유롭게 네트워크에 접속할 수 있는 정보통신 환경
임베디드 시스템의 특징
- 마이크로 프로세서/컨트롤러를 비롯한 하드웨어와 소프트웨어를 내장(embedded)하여 특정한 기능을 수행
- 수행하는 기능은 미리 정해진다.
- 소형, 경량, 저전력
- 가격에 민감하다
- 안정성이 뛰어나야 한다.
- Real-time 기능을 필요로 하는 시스템이 많다.
Real-time System
- 주어진 입력 조건을 주어진 시간 내에 처리하는 시스템
- 리얼타임 시스템의 종류
- 하드 리얼타임 시스템
- 리얼 타임이 보장되지 않으면 시스템에 치명적인 오류를 유발
- 대부분의 제어용 기기
- 예) 공장 자동화 등
- 소프트 리얼타임 시스템
- 주어진 시간 내에 결과를 출력하지 않아도 시스템 전반에 큰 영향이 없는 시스템
- 예) 네트워크 장비
임베디드 시스템의 구성
- 하드웨어
- 프로세서(컨트롤러), 메모리 장치(ROM, RAM), 입출력 장치(네트워크 장치, 센서, 구동기 등)
- 소프트웨어
- 운영체제(OS), 시스템 S/W, 응용 S/W
프로세서
프로세서란?
- 디지털 시스템의 핵심 부분으로 CPU(Central Processor Unit)라고도 한다.
- 프로그램을 메모리 장치에서 읽어 연산처리, 비교처리, 데이터 전송, 편집, 변환, 테스트와 분기 등의 데이터 처리와 각종 입출력 장치를 구동시킨다.
- 제어 장치, 연산 장치, 레지스터와 데이터 버스로 구성된다.
프로세서의 구조
- 레지스터 (Register)
- 산술 논리 연산 장치 (ALU : Arithmetic Logic Unit)
- 제어 장치 (CU : Control Unit)
- 버스 (BUS)

레지스터
- 프로세서 내부에서 데이터를 일시적으로 보관하는 기억 장치
- Flip-flop과 Latch로 구성되어 있다
- 프로세서 레지스터의 종류
- 범용 레지스터
- 프로그램 또는 데이터 처리에 필요한 작업을 수행하기 위해서 사용
- 제어용 레지스터
- 프로그램이나 프로세서를 제어
- 프로그램 카운터(PC) 등
- 상태 레지스터
산술 논리 연산 장치 (ALU)
- 산술 연산 수행 (덧셈, 뺄셈 등)
- 논리 연산 수행 (AND, OR 등)
- 상태 레지스터 또는 flag 레지스터에 연산 결과 기록 (Carry 발생, overflow 발생 등)
제어 장치 (CU)
- 명령을 해석하고 실행
- 명령을 읽고 실행하기 위한 내부 데이터 흐름 제어

프로세서 버스
- 버스
- 디지털 회로에서 시스템의 여러 장치들을 연결하는 경로
- 내부 버스 (Internal Bus)
- 프로세서 내부에서 레지스터와 ALU 사이의 신호를 교환하고 그 결과를 다시 레지스터에 전달하는 경로
- 외부 버스 (External Bus)
- 프로세서와 외부의 기억장치 사이, 프로세서와 I/O 장치 사이에 존재한느 버스
- 외부버스의 구성
- 데이터 버스(data bus) : 데이터를 외부 장치에 전달하거나 외부 장치로부터 읽어오는 경로
- 어드레스 버스(address bus) : 프로세서에서 기억장치나 I/O장치의 주소 정보 전송 경로
- 제어 버스(control bus) : 프로세서에서 기억장치나 I/O 장치에 입출력 동작을 지시하는 제어 신호를 전송하는 경로
프로세서의 종류
- i386
- 오랜 기간의 사용으로 안정성 확보
- PC와 동일한 개발 환경 구성
- ARM
- 간단한 명령어를 사용하고 개발 환경이 간단하다.
- 전력 소모가 작아서 휴대폰이나 PDA 같은 휴대 단말기에 많이 사용한다
- PowerPC
- 강력한 네트워크 기능을 포함한 SoC로 널리 알려졌다
- M68K
- 네트워크 장비 및 휴대 단말기에서 많이 사용한다
- MIPS
- 고속의 처리 능력
- 고속 네트워크 장비 등에 많이 사용
파이프라인
- 프로세서로 가는 명령어들의 움직임 또는 명령어를 수행하기 위해 프로세서에 의해 취해진 산술적인 단계가 연속적이고 겹치는 것을 말한다.
- 파이프라인이 없으면 하나의 명령을 읽어 와서 요구하는 연산을 수행하고, 다음 명령을 메모리에서 가져온다
- 파이프라인을 사용하면 프로세서가 산술 연산을 수행하는 동안에 다음 명령어를 메모리에서 가져온다
파이프라인의 장점
- 명령어를 가져오고 실행하는 단계가 끊임없이 계속된다.
- 주어진 시간 동안에 수행될 수 있는 명령어의 수가 증가한다.
ARM 명령어 파이프라인의 구조

컴파일 직접 실행하기 - GCC
GCC는 GNU Compiler Collection의 약자이다. GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러이다.
컴파일러 : 어떤 프로그래밍 언어로 쓰여진 소스파일을 다른 언어로 바꾸어주는 번역기이다.
ex) C언어 코드를 컴퓨터가 이해할 수 있는 기계어로 바꿔주는 것

ubuntu@ubuntu09:~/linuxC/gcc.d$ vi main.c
1 #include <stdio.h>
2 #define BUFFSIZE 100
3 int main(int argc, char *argv[])
4 {
5 int i;
6 char buf[BUFFSIZE];
7
8 while(1)
9 {
10 printf("Hello World!\n");
11 }
12
13 return 0;
14 }
ubuntu@ubuntu09:~/linuxC/gcc.d$ gcc main.c -o main -save-temps
ubuntu@ubuntu09:~/linuxC/gcc.d$ ls -l
아래와 같은 결과가 나옴
total 52
-rwxrwxr-x 1 ubuntu ubuntu 16696 2월 8 10:42 main
-rw-rw-r-- 1 ubuntu ubuntu 163 2월 8 10:42 main.c
-rw-rw-r-- 1 ubuntu ubuntu 16389 2월 8 10:42 main.i
-rw-rw-r-- 1 ubuntu ubuntu 1704 2월 8 10:42 main.o
-rw-rw-r-- 1 ubuntu ubuntu 739 2월 8 10:42 main.s
전역변수
- 전역변수를 초기화하지 않을 시 대부분 0으로 자동 초기화된다.
이유는 start 파일과 관련이 있다.