본문 바로가기

인공지능/임베디드시스템설계

[임베디드 시스템 복습] chap1.2)

Computer Basics

소프트웨어는 하드웨어 위에서 돌아간다!

회로나 저항, 전압과 같은 하드웨어 지식은 일반 소프트웨어 개발자에게는 구석기시대의 이야기처럼 느껴질테지만..

임베디드 소프트웨어 개발자에게는 조선시대 정도..

 

컴퓨터 시스템은 하드웨어 시스템이 소프트웨어로 실행되는 플랫폼을 이야기 한다!

모든 임베디드 디바이스는 컴퓨터 시스템이다!

고로 컴퓨터 시스템이 어떻게 구성되어 있는지 이해하는 것이 중요하겠지요오?!

 

Computer System

Software

 

1) Task

1+2

 

2) Coding (Programming Languages 이용)

X = 1+2;
Compiler
Operating Systems / Device Drivers

 

3) Assembler -> Assembly 언어 (프로세서가 수행할 수 있는 기계어) / Execution Environment

load r1,#1
add r0,r1,#2

 

-------------------------------------------

Hardware

Instruction Set Architecture

 

4)  Microprocessor -> 레지스터 연산

Circuits
Physical Devices(Transistors and Wires)

 

Main Chipset

: 해당 시스템에서 가장 핵심적인 역할을 하는 SoC(Sytem on Chip)

 

- 내부에 CPU(실제 하드웨어 모듈) 존재한다.

- SoC를 제품의 프로세서라고 부르기도 하는데, 가장 중앙에 되는 처리장치라는 추상적인 개념을 내포하고 있는 것이며, 정확히는 SoC가 더 넓은 개념이다!

- Main Chipset과 함께 회사에서 SDK(Software Development Kit)도 제공한다!

 

MCU(Main Controller Unit) VS MPU(Main Processor Unit)

: MCU는 제어 개념이 더 크고, MPU는 연산 처리 개념이 크다. 단순 산업용 로봇의 동작이나 가전제품은 많은 연산을 필요로 하지 않으므로 컴트롤러의 개념을 더 필요로 하고, 그에 맞는 전용 SoC를 제작하여 사용한다. 통상 이 전용 칩셋들은 많은 메모리를 필요로 하지 않아 메모리를 내장하는 것이 보편적이다.

 

Clock? Frequency?

Clock

: 프로세서의 성능을 나타내는 척도

> clock 주파수가 높을 수록 Processor 처리 속도가 빠르다!

 

MIPS(Million Instructions Per Second)

: 프로세서가 1초에 수행하는 명령의 개수

: auch 프로세서의 성능을 나타내는 척도

> MIPS값이 클수록 한 번에 더 많은 명령을 수행한다는 의미! 더 많은 프로그램 코드를 수행할 수 있다는 의미!

 

과거에는 클럭 주파수와 MIPS 모두 성능 지표로 사용되었지만, 현재는 그렇지만은 않다.

MIPS는 높을수록 고성능으로 생각할 수 있겠지만, 클럭 주파수는 높을수록 전력 소모가 커져 고성능이라고 단언하기 어렵다.

주파수를 계속 높이는 게 어려워서 Core를 여러 개 사용하는 방식을 활용한다!

 

다양한 Clock

CPU 클럭과 CPU 클럭과 I2C 버스 클럭과 DDR 메모리 클럭 모두 다 다르다!

기준이 되는 클럭 Reference Clock이 반드시 존재해야 서로 간 통신과 동기화가 이루어질 수 있고, 이때 느린 녀석에 맞추는 게 일반적이다.

중간에 Buffer 역할을 하는 FIFO 큐를 두기도 한다!

 

메모리와 프로세서는 어떻게 서로 데이터를 주고 받을까?

더보기

버스는 컴퓨터 시스템에서 메모리와 프로세서 사이의 데이터 전송을 담당하는 통신 경로를 의미합니다. 여러 가지 유형의 버스가 있지만, 기본적으로 데이터, 주소 및 제어 신호를 전송하는 데 사용됩니다.

  1. 데이터 버스(Data Bus): 데이터 버스는 메모리와 프로세서 간 실제 데이터 전송을 담당합니다. 이것은 바이트 또는 워드 단위로 데이터를 전송할 수 있습니다.
  2. 주소 버스(Address Bus): 주소 버스는 메모리에서 읽거나 쓸 위치를 식별합니다. 프로세서가 메모리의 특정 위치로 데이터를 읽거나 쓸 때 사용됩니다.
  3. 제어 버스(Control Bus): 제어 버스는 데이터 및 주소 버스의 활성화와 함께 다양한 제어 신호를 전송합니다. 이러한 신호에는 읽기/쓰기 동작, 버스 사용 권한 및 타이밍 신호 등이 포함됩니다.

이러한 버스는 시스템 내에서 데이터 및 명령어의 효율적인 전송을 보장하며, 여러 장치 간의 통신을 용이하게 합니다. 그러나 버스 구조는 병목 현상을 일으킬 수 있으므로 고급 시스템에서는 다른 통신 체계나 버스 확장 기술이 사용될 수 있습니다.

 

버스에서 발생할 수 있는 병목 현상은 다양합니다. 여기에는 다음과 같은 것들이 포함됩니다:

  1. 대역폭 한계: 버스는 한 번에 전송할 수 있는 데이터의 양에 제한이 있습니다. 데이터 양이 많아지면 버스의 대역폭 한계에 도달하여 데이터 전송이 지연될 수 있습니다.
  2. 충돌(Collision): 여러 장치가 동시에 버스에 액세스하려고 할 때 충돌이 발생할 수 있습니다. 이는 버스가 동시에 한 번에 하나의 장치만을 처리할 수 있기 때문에 발생합니다. 충돌은 재전송이 필요하므로 전송 지연을 초래할 수 있습니다.
  3. 버스 사용 권한 충돌: 버스를 사용하는 장치들 간에 버스 사용 권한에 대한 충돌이 발생할 수 있습니다. 일부 장치가 지속적으로 버스를 점유하면 다른 장치들이 접근할 수 없게 되어 대기해야 합니다.
  4. 버스 프로토콜 지연: 버스 프로토콜은 데이터 전송 및 버스 액세스를 제어하기 위해 사용됩니다. 이 프로토콜의 추가 오버헤드는 데이터 전송 지연을 유발할 수 있습니다.
  5. 버스 액세스 시간: 버스가 다양한 장치들 간에 공유되기 때문에 각 장치의 버스 액세스 시간이 다릅니다. 이로 인해 한 장치가 다른 장치의 액세스를 지연시키는 현상이 발생할 수 있습니다.

이러한 병목 현상들은 버스의 성능을 제한하고 전체적인 시스템 성능에 영향을 줄 수 있습니다. 이를 해결하기 위해 버스 아키텍처를 최적화하거나 대체 기술을 도입하여 병목 현상을 완화할 수 있습니다.

 

데이터 버스와 주소 버스를 따로 두는 이유가 뭐야?

 

데이터 버스와 주소 버스를 따로 두는 이유는 효율성과 유연성을 높이기 위함입니다. 각각의 버스가 다른 역할을 수행하여 시스템의 성능을 최적화합니다.

  1. 기능: 데이터 버스는 데이터를 전송하는 데 특화되어 있으며, 주소 버스는 주소 정보를 전송하는 데 특화되어 있습니다. 이것은 각각의 버스가 자신의 역할에만 집중함으로써 전체 시스템의 복잡성을 줄이고 구현을 단순화합니다.
  2. 효율성: 데이터 버스는 주로 대량의 데이터 전송을 처리하는 데 사용되므로 넓은 폭의 데이터 전송을 지원합니다. 반면 주소 버스는 주로 메모리 주소를 전송하므로 비교적 좁은 폭의 데이터 전송을 지원합니다. 이렇게 분리된 구조는 데이터와 주소를 동시에 전송하는 것보다 더 빠르고 효율적인 데이터 전송을 가능하게 합니다.
  3. 확장성: 분리된 버스는 시스템의 확장성을 높입니다. 예를 들어, 데이터 버스의 폭을 늘리면 한 번에 전송되는 데이터 양을 늘릴 수 있고, 주소 버스의 폭을 늘리면 메모리 주소 공간을 확장할 수 있습니다. 이렇게 각각의 버스가 독립적으로 확장될 수 있기 때문에 시스템의 요구 사항에 따라 유연하게 대응할 수 있습니다.

따라서 데이터 버스와 주소 버스를 분리하는 것은 전체적인 시스템의 성능을 향상시키고 유연성을 제공하는 중요한 설계 결정입니다.

 

Raspberry CM4의 Main Chipset - BCM2711

- 4개의 ARM CPU(Cortex A72)

- 32/64 bit 모두 지원

- ARMv8-A

- 병렬처리 기술

- FPU 부동소수점 지원

- I-Cache / D-Cache : 하버드 아키텍쳐

 

더보기
 

FPU는 부동 소수점 연산장치(Floating Point Unit)의 약어로, 컴퓨터에서 부동 소수점 수를 처리하는 데 사용되는 하드웨어 장치입니다. 부동 소수점 연산은 소수점이 고정되지 않은 실수를 나타내는 데 사용되며, 이러한 연산은 특히 과학, 공학, 그래픽, 금융 등의 분야에서 중요합니다.

FPU는 주로 다음과 같은 기능을 수행합니다:

  1. 부동 소수점 연산 수행: FPU는 부동 소수점 수에 대한 산술 및 논리 연산을 수행합니다. 이러한 연산에는 덧셈, 뺄셈, 곱셈, 나눗셈, 제곱근 등이 포함됩니다.
  2. 정밀도 제어: FPU는 부동 소수점 연산의 정밀도를 제어할 수 있습니다. 정밀도는 소수점 아래의 자릿수를 결정하며, 연산 결과의 정확성에 영향을 미칩니다.
  3. 예외 처리: FPU는 부동 소수점 연산 중에 발생하는 예외 상황을 처리합니다. 예를 들어, 0으로 나누는 것과 같은 오류 조건을 감지하고 처리할 수 있습니다.
  4. 성능 최적화: FPU는 부동 소수점 연산을 빠르고 효율적으로 수행하기 위해 설계되었습니다. 이를 위해 하드웨어 수준에서 병렬 처리 및 파이프라이닝 기술을 사용합니다.

FPU는 CPU와 함께 동작하며, CPU가 부동 소수점 연산 명령을 수행할 때 FPU로 연산을 위임합니다. 이를 통해 CPU는 정수 연산과 부동 소수점 연산을 병렬로 처리하여 전체적인 성능을 향상시킵니다.

요약하자면, FPU는 컴퓨터에서 부동 소수점 연산을 처리하는 데 사용되는 하드웨어 장치로, 고성능 및 정확한 부동 소수점 연산을 제공하여 다양한 응용 프로그램 및 분야에서 활용됩니다.

 

메모리 계층 구조

 

컴퓨터의 메모리 계층 구조는 속도와 용량을 균형 있게 조절하여 전체적인 성능을 향상시키는 구조입니다. 주로 사용되는 메모리 계층은 다음과 같습니다:

1. **레지스터(Register)**:
   - 가장 빠르고 비용이 비싼 메모리 유형입니다.
   - CPU 내부에 위치하며, 매우 빠른 액세스 속도를 제공합니다.
   - 주로 CPU가 즉시 필요한 데이터나 명령어를 저장하는 데 사용됩니다.

2. **캐시(Cache)**:
   - 레지스터 다음으로 빠른 메모리 유형입니다.
   - CPU와 메인 메모리 간의 데이터 전송을 중개하며, 자주 액세스되는 데이터를 저장하여 CPU의 성능을 향상시킵니다.
   - 주로 L1, L2 및 L3 캐시로 나뉘며, 각각의 캐시는 크기와 액세스 속도 면에서 차이가 있습니다.

3. **메인 메모리(Main Memory 또는 RAM)**:
   - 컴퓨터가 실행 중인 프로그램 및 데이터를 저장하는 주요 메모리입니다.
   - 캐시보다는 느리지만, 용량이 더 크고 비교적 저렴합니다.
   - 주로 DRAM(Dynamic Random Access Memory)으로 구성되며, CPU가 직접 액세스할 수 있습니다.

4. **보조 기억장치(Secondary Storage)**:
   - 주로 HDD(Hard Disk Drive) 또는 SSD(Solid State Drive)와 같은 영구 저장 장치를 의미합니다.
   - 메인 메모리보다 용량이 크지만, 액세스 속도가 느립니다.
   - 주로 데이터 백업, 파일 저장 및 영구적인 데이터 보존에 사용됩니다.

메모리 계층 구조는 데이터의 액세스 패턴을 기반으로 한 다양한 알고리즘과 함께 사용되어 특정 데이터에 빠르게 액세스할 수 있도록 합니다. 이를 통해 전체적인 시스템 성능을 향상시키고 에너지 소비를 최적화할 수 있습니다.

 

더보기

메모리 계층 구조는 데이터 액세스의 속도와 비용을 최적화하기 위해 설계되었습니다. 모든 데이터를 디스크에만 저장한다면 속도와 성능에 있어서 매우 큰 문제가 발생할 수 있습니다. 이러한 이유로 메모리 계층 구조가 필요합니다. 여기에는 몇 가지 이유가 있습니다:

1. **액세스 속도**: 디스크는 비교적 느린 액세스 시간을 가집니다. 디스크에서 데이터를 읽거나 쓰는 데는 밀리초 단위의 시간이 걸릴 수 있습니다. 반면에 메모리 계층의 상위에 있는 레지스터 및 캐시는 나노초 단위의 액세스 시간을 가집니다. 따라서 자주 사용되는 데이터를 메모리 계층의 상위에 위치시켜 더 빠른 액세스를 가능하게 합니다.

2. **데이터 복제 및 캐싱**: 메모리 계층 구조를 사용하면 데이터를 여러 위치에 복제하여 동일한 데이터에 대한 여러 액세스를 허용할 수 있습니다. 이를 통해 CPU가 동일한 데이터에 반복적으로 액세스할 때 디스크로부터 데이터를 다시 로드할 필요가 없으며, 이로 인해 시스템 성능이 향상됩니다.

3. **용량**: 디스크는 매우 큰 데이터 저장 용량을 제공합니다. 메모리 계층 구조를 사용함으로써 컴퓨터 시스템은 메모리 계층 상위의 상대적으로 적은 용량의 메모리로도 빠른 액세스와 성능을 유지할 수 있습니다.

4. **비용**: 레지스터 및 캐시와 같은 상위 메모리 계층은 디스크에 비해 훨씬 비싸며, 용량이 제한됩니다. 메모리 계층 구조를 사용함으로써 시스템은 비용을 절약하면서도 성능을 유지할 수 있습니다.

따라서 메모리 계층 구조는 속도, 용량, 비용 등의 측면에서 디스크에만 의존하는 것보다 훨씬 효율적이고 성능이 우수합니다.

--------------------------------------------------------

컴퓨터를 끄면 메모리 계층 구조의 각 계층에 저장되어 있던 데이터는 다음과 같이 처리됩니다:

1. **레지스터(Register)**:
   - 레지스터는 CPU 내부에 위치하며 전원이 끊기면 내용이 손실됩니다. 레지스터에 저장된 데이터는 전원이 다시 켜질 때까지 유지되지 않습니다.

2. **캐시(Cache)**:
   - 캐시는 주로 CPU와 함께 동작하며, 전원이 끊기면 캐시에 저장된 데이터도 손실됩니다. 캐시는 주로 빠른 액세스를 위해 설계되었으며, 데이터의 지속성을 보장하지 않습니다.

3. **메인 메모리(Main Memory 또는 RAM)**:
   - 메인 메모리에 저장된 데이터는 일반적으로 전원이 끊겨도 유지됩니다. 그러나 일부 메모리 유형은 전원이 끊기면 데이터가 손실될 수 있습니다. 대부분의 경우 메인 메모리는 비휘발성 메모리(NVRAM 등)로 구성되어 전원이 다시 공급될 때까지 데이터를 보존합니다.

4. **보조 기억장치(Secondary Storage)**:
   - 보조 기억장치(예: HDD, SSD)에 저장된 데이터는 전원이 끊겨도 보존됩니다. 이러한 기기는 데이터를 비휘발성 저장소에 저장하여 전원이 끊겨도 데이터를 보존합니다. 데이터는 필요할 때마다 메모리로 다시 로드될 수 있습니다.

따라서 컴퓨터를 끄면 레지스터와 캐시에 저장된 데이터는 손실되고, 메인 메모리의 데이터는 종류에 따라 보존될 수 있습니다. 그러나 보조 기억장치에 저장된 데이터는 전원이 끊겨도 보존되므로 나중에 다시 액세스할 수 있습니다.

 

컴퓨터를 켜면 처음으로 하는 일은?

: 컴퓨터를 ON하면 PC를 본다! PC는 0으로 세팅되어 있으므로 Memory의 0주소에 있는 명령어부터 수행하는데.. 문제? 컴퓨터를 끄면 DRAM도 volatile 메모리라 날라가! So.. 주소 0값은 ROM, Flash Memory를 가리켜야 한다!