<임베디드 입문에 앞서 전반적인 이야기>
임베디드 시스템
: 다른 시스템에 내장되어 해당 시스템의 기능 수행을 담당하는 컴퓨팅 시스템이다.
특정 업무를 수행하기 위해 H/W와 S/W를 밀접하게 통합한 컴퓨팅 장치
1) 다른 시스템에 내장
2) 컴퓨팅 시스템(CPU, 메모리, 입출력 장치, 임베디드 SW가 내장)
3) 특정 기능 수행
- 범용 시스템이 아님(특수 목적을 수행하기 위해 만들어짐)
- 수행 기능에 특화된 H/W 및 S/W 사용
4) 임베딩하는 시스템에 따라 임베디드 시스템의 요구사항이 달라짐
- 배터리를 이용하는 휴대폰의 경우, 전력 소모의 최소화가 중요함
- 원자로 제어 시스템에 경우에는 실시간 처리가 필요함
임베디드 시스템은 대표적으로 두 부분으로 구분할 수 있다.
** 무조건 아래 두 분류로 나뉘는건 아니다.
① Real-Time System
: 외부 이벤트에 대해 정해진 시간 내에 행동 또는 반응해야 하는 시스템
- 기능 정확성 및 시간 정확성을 보장한다.
- 경성 실시간 시스템, Hard Real-Time System
- 원자로 제어기, 미사일 유도 장치
② Soft Real-Time System
: 외부 이벤트에 대해 즉각적인 반응을 요구하지 않는 시스템
- 연성 실시간 시스템
- 스마트폰
임베디드 시스템 하드웨어 구성
= 전용하드웨어(Processor, Memory, I/O) + 전용소프트웨어(Application, System S/W, Operating System)
< Embedded System - HW Basics편 - >
- 프로세서
: 명령어, 기계어 들을 해석하여 지시하는 방식, 내부 레지스터를 통해 데이터를 읽어들이게 하여 CU(Control Unit)을 통해 제어신호를 내부 버스로 보낸다. 따라서 각 명령어에 해당하는 ALU로 들어간다.
- 레지스터
: 프로세서 내부에서 데이터를 일시적으로 보관하는 기억 장치
범용 레지스터, 제어 레지스터, 상태 레지스터
- 연산 장치(ALU) : 데이터에 대한 수학적 연산 수행
- 제어장치(CU)
: 명령어를 해석하고 실행하며, 이를 위한 내부 데이터 흐름 제어를 담당한다. 실제 과정은 프로그램 카운터(PC)가 기억장치(즉, 메모리)에 access 하여 명령어를 가져온 후, IR(명령어 레지스터)를 통과하고 명령어 해독기를 지나, 제어 신호를 발생시킨다.
- 버스(Bus)
: 디지털 회로에서 시스템의 여러 장치를 연결하는 경로
1) 내부버스 : ALU 사이에서 연결
2) 외부버스 : 프로세서와 I/O 장치를 연결
- SoC(System on Chip) : 반도체 부품이 하나로 직접 되는 기술
- MCU(Micro Controller Unit), MPU(Micro Processor Unit) : 내장한 SoC
- DSP(Digital Signal Processor) : 주로 영상 처리를 위해 사용됨
- CISC(Complex Instruction Set Computer) // 명령어 복잡, 메모리 참조 연산, 성능 낮다, 배터리 소모 빠름
- RISC(Reduced Instruction Set Computer) // 명령어 단순, load/store 구조, 성능 높다, 배터리 소모 느림
** Q. 임베디드 시스템에 적합한 프로세서 구조는? 때에 따라 다르다.
메모리 종류
(종류) - 휘발성 메모리 : DRAM, SRAM => RAM
- 비휘발성 메모리 : ROM, Hybrid 메모리(FLASH)
(용도별 종류) - 주기억 장치 : 프로그램이 실행되는 동안 프로그램과 데이터 저장, DRAM
- 보조 기억 장치 : 주기억장치보다 빈번하게 사용되지 않는 프로그램과 데이터 저장, HDD, SD, MMC
- Cache : 주기억장치의 접근 속도를 빠르게 하기 위해서 프로세서 주변에 배치된 소용량 메모리, SRAM
// 주기억장치와 프로세서 사이에 저장된다. 아무리 빠른 메모리 일지라도 프로세스보다 느림
- FLASH 메모리 : 임베디드 시스템에서 사용하는 메모리
1) Wear-leveling
: 메모리를 일차원으로 펼치면 벡터로 보인다. 특정 위치를 쓰거나 읽으면 고장 날 수 있기 때문에 메모리를 골고루 쓰게 하도록 해야한다.
2) Out-place update
: 반드시 기존에 쓰여있던 메모리를 지우고, 데이터를 넣어야 한다.(업데이트가 느리다.)
3) 블록 단위로 동작한다.
4) MCU는 동시에 쓸 수 없다. // 일시적으로 다른 위치에 저장해야한다.
(종류) - NOR flash : 병렬연결, code 저장
- NAND Flash : 직렬연결, cheap, 저장용량 high, data저장
=> 1,2번 특징 때문에 FTL, JFFS, JFFS2 등과 같은 일반적인 파일 시스템을 사용할 수 없다.
- Cache메모리
: 메인 메모리부터 읽어들인 데이터를 임시 저장
data inconsistency 발생 가능(똑같은 데이터를 기준으로 메모리 내용은 10이고, 캐시는 7이라고 한다.)
따라서 일치하지 않게 되는데 이를 해결하는 방법은 아래와 같다.
1) Write-Through : 캐쉬를 업데이트할 때마다 같이 업데이트를 한다. -> 속도가 느려질 수밖에 없다.
2) Write-Back : 캐쉬가 replace 될 때 캐시에 있던 내용을 메모리에 업데이트한다.
입출력 장치 제어
: 입/출력 장치 제어를 위해서 address 할당이 필요하다.
(Address 할당 방식)
1) IO-Mapped : 메모리 영역과는 별도로 IO 주소 공간 할당, 명령어로 구분, 구분 신호 존재, x86
2) Memory-Mapped : 메모리 영역의 일부를 IO장치로 사용, 주소로 구분, 회로에서 구분, ARM
입출력 장치 자원 관리
- polling : 주기적으로 disk controller를 검사
- interrupt : 현재 진행중인 명령을 멈춘다. -> multitasking 기능
- DMA : CPU 개입없이 입/출력 장치와 기억 장치 사이에 데이터를 전송
** DMA Controller가 필요함. 프로세서도 시스템 버스를 사용하고 있을 때, 시스템 버스를 사용하지 않도록 함.
interrupt 구현 // 추후 작성할 내용
- mask 레지스터
- pending 레지스터
Q. 인터럽트를 어떻게 처리하는가? A. 인터럽트를 처리를 프로세스에 요청
Q. 누가함? A. Interrupt Vector(ISR 또는 ISR의 위치가 저장된 메모리 공간 : 인터럽트를 처리해주기 위한 코드)
Q. 어떤 인터럽트인지는 어떻게 아는가?
- Fixed Interrupt : interrupt 발생 시 처리할 주소가 지정되어 변경되지 않음(인터럽트 벡터가 인터럽트 서비스 주소 자체)
- Vectored Interrupt : 일반적인 마이크로 프로세서(인터럽트 벡트 주소 안에 interrupt 서비스 루틴의 주소가 존재)
'학교 공부 > 내장형 시스템' 카테고리의 다른 글
[내장형 시스템] 모듈 프로그래밍 (0) | 2020.12.02 |
---|---|
[내장형 시스템] 시스템 콜이란? (0) | 2020.12.02 |
[내장형 시스템] make 파일과 임베디드 파일 시스템 (0) | 2020.09.21 |
[내장형 시스템] 인터럽트와 ISR, IVT (0) | 2020.09.11 |
댓글