MMU(Memory Management Unit)

 

가상 메모리와 실제 메모리 사이에서 주소 변환 역할을 합니다.

 

CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품이죠.

 

MMU는 가상 메모리와 실제 메모리 주소 사이의 변환을 위해

 

TLB(Translation Lookaside Buffer)라는 고속의 보조기억장치를 참조합니다.

위키백과

여기서 만약 TLB에 원하는 변환 정보가 없다면 TLB ->Page Table -> Disk 순으로 접근합니다. 

 

 

 

 

 

 

'전자공학 > 임베디드' 카테고리의 다른 글

시스템 콜(System Call)이란?  (0) 2019.10.21
DMA(Direct Memory Access)란? (+PIO, 채널제어방식)  (2) 2019.10.20
CISC, RISC  (0) 2019.10.20
반가산기, 전가산기, 반감산기, 전감산기  (0) 2019.10.20
MCU, MPU, CPU  (0) 2019.10.20

마이크로프로세서의 구성요소는 명령세트, 레지스터, 메모리 등이 있습니다.

 

여기서 명령세트는 CISC, RISC로 구분됩니다.

CISC(Complex Instruction Set Computer)란?

 

모든 고급언어 문장에 기계 명령어가 대응되게 한 컴퓨터입니다.

 

즉, 하드웨어화 할 수 있는 것은 모두 하드웨어에게 맡긴다고 볼 수 있습니다..

 

그리고 특징이 명령어의 길이가 가변적입니다.

 

명령어가 복잡하여 해석(디코딩) 시간이 오래걸리며, 해석하는 회로가 복잡합니다.

 

가격이 비싸고 발열이 많고 전력소모가 많습니다.

 

메모리 사용이 효율적이라는 장점이 있습니다.

 

주로 볼 수 있는 컴퓨터가 CISC방식이며 인텔, 모토롤라, AMD가 대표적인 예입니다.

 

 

RSIC(Reduced Instruction Set Computer)란?

 

CISC의 많은 명령어 중 주로 쓰이는 몇가지만 추려서 하드웨어로 구현한 것입니다.

 

실행 속도를 높히기 위해 가능한 복합한 처리는 소프트웨어에게 맡기는 컴퓨터죠.

 

각 명령어가 한 클럭에 실행되도록 고정되어서 파이프라인 성능에 최적화 되어있습니다.

 

명령 길이가 고정되어 있어서 코드 효율이 낮습니다.

 

실행하는데에 상대적으로 많은 명령어가 필요합니다.

 

속도가 빠르다는 장점이 있습니다.

 

저장공간을 많이 차지한다는 단점이 있습니다.

 

워크스테이션, 대형서버가 주로 RISC 방식이며 ARM이 대표적인 예입니다.

반가산기 : 1비트의 두 입력과 출력으로 합과 자리올림을 계산하는 논리회로

전가산기 : 2진수 A와 B 그리고 하위비트의 자리올림을 포함하여

 

2진수 입력 3개를 덧셈 연산하는 논리회로

반감산기 : 2진수 1자리의 두 개의 비트를 빼는 회로

전감산기 : 아랫자리에서 요구하는 빌림 수 에 대한 감산까지 계산

 

'전자공학 > 임베디드' 카테고리의 다른 글

MMU란?(+TLB)  (0) 2019.10.20
CISC, RISC  (0) 2019.10.20
MCU, MPU, CPU  (0) 2019.10.20
PCB(Process Control Block) + 문맥교환  (0) 2019.10.20
크로스컴파일러(Cross Compiler)  (0) 2019.10.19

MCU, MPU, CPU 다 비슷해 보여서 정리를 해보려고 합니다.

 

MCU(Micro Controller Unit) 

집적 회로 안에 프로세서, 메모리, 입출력 버스 등의 컴퓨팅 요소를 내장한 초소형 컨트롤러

 

단일 또는 다중의 CPU와 타이머, PWM, I/O, 통신 등의 주변장치까지 포함하여 부르는 용어입니다.

 

하나의 작은 컴퓨터라고 생각하면 됩니다.

 

 

CPU(Central Processing Unit)

컴퓨터에서 구성단위 중 기억, 해석, 연산, 제어라는 4대 기능을 종합하는 장치

 

컴퓨터의 뇌라고 생각하면 됩니다.

 

제어장치(Control Unit), 연산장치(ALU), 레지스터(Resister) 이렇게 세 부분으로 구성됩니다.

 

 

MPU(Micro Processor Unit)

CPU를 단일 IC 칩에 집적시켜 만든 소자

 

주변장치가 없다면 동작이 불가능합니다.

 

 

 

일반적으로 CPU와 MPU는 거의 같은 의미로 사용되며

 

CPU는 컴퓨터에서 사용되는 용어고 MPU는 임베디드에서 사용됩니다.

 

 

 

우선 Serial 통신에 대해서 알고 가겠습니다.

 

시리얼 통신을 이해하려면 Parallel 통신하고 비교해서 이해하는게 편합니다.

 

만약 8비트의 데이터 0x00100111을 보낸다면 

다음과 같이 통신이 이뤄집니다.

 

이제 시리얼 통신의 종류를 알아보겠습니다.

 

UART(Universal Asynchronous Receiver Transmitter)

 

비동기식 통신(Clock 신호가 없음)입니다.

 

Baud Rate은 비동기 통신의 속도입니다.

 

여기서 BPS와 Baud Rate를 확인하고 가겠습니다.

 

BPS : Bit Per Second 즉 1초에 전송되는 비트 수 입니다.

 

Baud Rate : 1초에 데이터가 변조되는 횟수입니다. 다른 말로 하면 1초에 전송되는 신호의 수 입니다.

 

BPS = Baud Rate x 한 번에 변조되는 비트 수

 

시리얼 통신에서는 주로 bps = baud rate입니다.

 

RS-232, RS-422, RS-485와 같은 표준이 있습니다.

https://developer.electricimp.com/resources/uart

UART 프레임입니다. Parity Bit는 통신 오류를 확인할 수 있는 데이터 입니다. 

 

패리티 비트와 CRC는 무엇인가?

데이터는 오류에 민감합니다. 은행을 예로 들면 10만 원을 송금했는데 100만 원이 송금되면 큰일 나겠죠. 오류가 1개 났을 뿐인데 말이죠. 반면에 음성신호는 오류에 민감하지 않은 편입니다. 따라서 데이터 전송..

kkhipp.tistory.com

기본 옵션으로는 패리티 비트를 사용하지 않습니다. 기본 프레임은 Start Bit(1) + Data(8) + Stop Bit(1)입니다.

 

SPI(Serial Peripheral Interface)

동기식 통신방식, Full-Duplex(송신을 하면서 수신이 가능한 통신 방식)입니다. 

 

모토로라에서 제안하였고 SPI는 아래의 4개의 선이 있습니다.

https://en.wikipedia.org/wiki/Serial_Peripheral_Interface

1. MOSI : Master Out, Slave In

2. MISO : Master In, Slave Out

3. SCK : 동기 통신에 필요한 Clock

4. CS : Chip Seleck, 데이터를 수신할 기기 선택 신호

구현이 쉽고 속도가 빠르다는 장점이 있습니다.


1:n통신이 가능하지만 CS(칩 인가)신호 만큼의 선이 필요하다는 단점이 있습니다.

 

기기와 기기간, 칩과 칩간의 근거리 통신으로 많이 사용됩니다.


I2C(Inter-Integrated Circuit) 

역시나 동기식 방식이며 Half Duplex(송수신이 동시에 불가) 방식입니다.

 

데이터신호와 클럭신호, 2선으로만 구성되어 있습니다.

https://www.analog.com/en/technical-articles/i2c-primer-what-is-i2c-part-1.html#

1. SDA : Data 신호

2. SCK : Clock 신호

SPI와 마찬가지로 1:n 통신이 가능하며 n의 수가 늘어도 2개의 선으로만 할수 있다는 장점이 있습니다.
 
속도는 SPI보다 느립니다. 

'전자공학 > 통신' 카테고리의 다른 글

FTP 와 TFTP, TCP 와 UDP  (0) 2019.10.16
Big Endian vs Little Endian  (0) 2019.10.16
CAN 통신이란? + LIN, FlexRay  (0) 2019.03.18
OFDM 시스템 구조  (0) 2018.09.06
이동통신 시스템에서의 채널추정 방법(파일럿 신호)  (0) 2018.08.29

https://www.geeksforgeeks.org/process-table-and-process-control-block-pcb/

PCB(Process Control Block)란?

 

프로세스 제어 블록

 

운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳, 프로세스의 상태 정보를 저장하는 구조체입니다.

 

프로세스 상태관리와 문맥 교환을 위해 필요합니다.

 

PCB는 프로세스의 중요한 정보를 포함하기 때문에 일반 사용자가 접근 못하도록 보호된 메모리 영역 안에 있습니다.

 

프로세스 : 실행되고 있는 프로그램(주 기억장치에 올라가있는 프로그램), 모든 프로세스는 고유 PCB를 가집니다.

 

 

 

문맥교환이란?

 

하나의 프로세스가 CPU를 사용중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해

 

이전의 프로세스의 상태를 PCB에 보관하고 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정입니다.

 

문맥교환 중에는 다른 작업을 할 수 없기 때문에 이 시간을 오버헤드라고 봅니다.

 

이러한 문맥교환은 인터럽트 때 발생합니다.

https://www.codecademy.com/articles/cpp-compile-execute-locally

컴파일러란?

 

고급언어(C, CHILL, FORTRAN, COBOL)로 작성된 프로그램을 기계어(0,1)로 번역하는 것

 

즉 개발자가 고급언어로 프로그래밍 한 코드를 CPU가 이해할 수 있게 변환해주는 것이 컴파일러입니다.

 

컴파일과 빌드의 차이점은 무엇일까요?

 

컴파일은 단순히 소스를 기계어로 번역해주는 것이고

 

빌드는 실행 가능한 파일로 만들어주는 것입니다. 빌드 안에 컴파일이 포함된다고 생각하시면 됩니다.

 

 

절차

 

원시프로그램.c -> 프리프로세서(어휘, 구문, 의미 분석) -> 컴파일러(중간코드 생성)

-> 어셈블러(결과 : 목적프로그램.obj) -> 로더/링커 -> 실행파일

 

 

어셈블러(Assembler) : 어셈블리어용 번역기, 보통 컴파일러의 목적코드가 어셈블리어가 됩니다.

 

프리프로세서(preprocesser) : 고급언어를 또 다른 고급언어로 번역하는 고급언어 번역기

 

전처리기라고도 불림, 컴파일 전에 미리 처리한다고 생각하시면 됩니다. ex) #include, #define, #undef

 

링커(Linker) : 목적 파일들을 합쳐서 하나의 실행 파일을 만듦

 

로더(Loader) : 실행 파일을 읽고 메인 메모리에 내용을 올림

 

로더의 기능 - 할당(공간 확보), 연결(시작주소 호출), 재배치, 적재

 

인터프리터(Interpreter) : 문장 단위로 번역과 동시에 실행한 후 그 결과를 출력하는 번역기

 

목적 파일(Object File) : 모듈별로 개발되어 컴파일된 파일, 수행코드, 데이터, 저장 주소 존재

 

로더의 종류

 

1. Compile And Go 로더 : 별도의 로더 없이 

 

실행 시마다 컴파일해야 함

 

2. 절대로더 : 단순히 목적 프로그램을 메모리에 로드하는 기능만 수행

 

3. 직접 연결 로더 : 일반적인 로더, 4가지 기능을 수행

 

4. 동적 적재 로더 : 실행 시 필요한 부분만 적재, 주기억 장치의 효율성이 높으나 로드 시간 딜레이 존재

 

 

 

 

 

 

크로스컴파일러란?

 

http://voidpointer.maltion.com/cross-compiler-toolchain-build/

컴파일러가 실행되는 플랫폼이 아닌 다른 플랫폼에서 실행 가능한 코드를 생성할 수 있는 컴파일러입니다.

 

ex) 운영체제를 지원하지 않는 마이크로컨트롤러와 같이 컴파일이 실현 불가능한 플랫폼에 컴파일하는데 사용

 

임베디드 시스템 개발을 하기 위해서는 반드시 크로스 컴파일러가 필요하죠.

 

C코드를 MCU에 맞게 컴파일을 해서 바이너리 파일로 만들어줍니다.

 

그렇다면 네이티브(Native) 컴파일러(호스트용 C 컴파일러)와 크로스 컴파일러의 차이는 무엇일까요?

 

우선 네이티브 컴파일러는 컴파일을 하고 나면 프로그램 실행 결과를 바로 확인할 수 있습니다.

 

프로그램이 실행되는 호스트 PC의 MCU에 맞게 실행 바이너리가 만들어지기 때문이죠.

 

크로스 컴파일러는 프로그램이 실행되는 MCU에 맞게 실행 바이너리가 만들어지기 때문에 다릅니다.

 

그리고 Startup파일도 필요합니다. 이 스타트업에 관해서 추후에 포스팅을 또 하겠습니다.

 

이러한 크로스 컴파일러는 아무래도 MCU 제작 업체에서 주로 잘 만드는 편입니다.

 

따라서 개발자는 비용이 들어가지만 MCU를 최적으로 사용하기 위해 비용을 주고 크로스 컴파일러를 구매하죠.

 

 

 

또한 리눅스에 gcc라는 좋은 컴파일러가 있습니다.

 

툴체인을 통해 원하는 프로세스의 크로스 컴파일을 합니다. ex) arm-linux-gcc

 

툴체인에 대해서도 추후에 포스팅을 하겠습니다.

 

 

 

 

 

 

 

 

http://recipes.egloos.com/5312701

 

임베디드 개발자를 위한 강좌가 있는 블로그

캐시메모리란?

https://www.xtremegaminerd.com/types-of-cache-memory/

속도가 빠른 장치(CPU)와 느린 장치(메모리) 사이에서 속도차이에 따른 병목현상을 줄이기 위한 범용 메모리입니다.

 

병목현상 : 어떤 시스템 내 데이터의 집중적인 사용으로 인해, 전체 시스템에 절대적 영향을 미치는 부분의

사용 빈도가 늘어나 그 부분의 성능이 저하되어 전체 시스템이 마비되는 현상을 의미

 

입출력 데이터를 버퍼링하여 Memory 접근 없이 빠른 입출력 제공합니다.

 

최근에 사용된 데이터나 자주 사용되는 데이터를 임시로 저장해두죠.

 

캐시메모리는 빠르지만 용량이 적고 비싸다는 단점이 있습니다.

 

대부분의 프로그램은 한번 사용한 데이터를 다시 사용할 가능성이 높고

 

그 주변의 데이터도 곧 사용될 가능성이 높은 데이터 지역성을 가지고 있습니다. 

 

1. 공간적 지역성 : CPU가 요청한 주소 지점에 인접한 데이터들이 앞으로 참조될 가능성이 높은 현상

2. 시간적 지역성 : 최근 사용된 데이터, 변수가 재사용될 가능성이 높은 현상

3. 순차적 지역성 : 데이터가 기억장치에 저장된 순서대로 순차적으로 인출 되고 실행될 가능성이 높은 현상

 

캐쉬를 보다보면 L1, L2 용어가 나옵니다.

 

L1에는 I-Cache(Instruction Cache)와 D-Cache(Data Cache)가 따로 있고 L2에는 구분없이 하나의 캐시로 구성됩니다.

 

보통 CPU에서 L1부터 빠르게 접근하며 속도가 빠릅니다.

 

L1에 찾고자하는 데이터가 없으면 L2에 접근하여 데이터를 찾습니다.

 

속도는 L1>L2>RAM입니다.

 

L3는 있는 경우도 있고 없는 경우도 있습니다.

 

여기서 보통 명령어(Instruction)는 공간 지역성이 높고 데이터는 시간 지역성이 높습니다.

 

CPU가 캐시에서 데이터를 찾는데 데이터가 없다면 이를 캐시 미스라고 합니다.

 

1. Compulsory miss  : 해당 메모리 주소를 처음 부르는 경우

2. Conflict miss : 서로 다른 데이터가 같은 캐시 메모리 주소에 할당되는 경우

3. Capacity miss : 캐시 메모리에 공간이 부족해서 나는 경우

 

적중률(Hit Ratio) : 얼마나 캐시를 통해서 데이터를 잘 찾았는지의 정도 

 

 

 

버퍼메모리란(Buffer)?

 

버퍼메모리도 캐시메모리랑 비슷한 역할을 합니다. 두 장치간의 속도 차이를 극복하기 위해 사용하죠. 

 

간단히 말하면 일시적인 데이터 저장소로 이용하는 기억 장치입니다.

 

 

흠 표현하자면 캐시는 작업속도를 빠르게 해주고

 

버퍼는 빠른 쪽에서 데이터가 느린 쪽으로 갈 때 데이터 손실이 나지 않게 합니다.

 

캐시는 CPU가 놀고있는 시간을 줄이고 버퍼는 주변기기가 놀고있는 시간을 줄입니다.

 

그리고 버퍼는 순차적으로 데이터를 접근하고 캐시는 데이터에 직접적으로 접근할 수 있습니다.

 

소프트웨어 테스트 기법에 화이트 박스 테스트와 블랙 박스 테스트가 있습니다.

 

이 둘은 구분하는 기준은 정보 획득 대상으로 볼 수 있습니다.

 

화이트 박스 검사(White-box testing)

 

응용 프로그램의 내부 구조와 동작을 검사하는 테스트 방식입니다.

 

소프트웨어 내부 소스 코드를 테스트 하는 기법입니다.

 

개발자 관점의 단위 테스트 방법이라 볼 수 있다. 구현 기반 테스트라고 볼 수 있다.

 

개발자가 내부 소스코드 동작을 추적 할 수 있기 때문에

 

동작의 유효성 뿐만 아니라 코드를 꼼꼼하게 테스트 할 수 있습니다.

 

테스트의 종류

1. 제어 흐름 테스트 : 프로그램의 제어구조(if, case, loop)를 테스트 함

2. 데이터 흐름 테스트 : 제어 흐름 그래프에 데이터 사용 현황(정의, 소멸, 사용)을 테스트함

3. 분기 테스트

4. 경로 테스트

 

 

 

 

구조 기반 테스팅 검증 기준 (커버리지)

 

문장 검증 : 모든 문장이 한번씩 수행되도록 검증하는 기준

 

선택(분기) 검증 : 경로에서 나타나는 모든 분기점 파악

 

경로 검증 : 수행 가능한 모든 경로를 검사

 

조건 검증 : if, while문 안에 있는 조건 검사

 

 

블랙 박스 검사(Black-box testing)

 

소프트웨어의 내부 구조나 작동 원리를 모르는 상태에서 동작을 검사하는 방식

 

올바른 입력과 올바르지 않은 입력을 입력하여 올바른 출력이 나오는지 검사한다.

 

사용자 관점의 테스트 방법이라고 볼 수 있다. 명세 기반 테스트 방법이라 볼 수 있다.

 

필요한 것은 특징, 요구사항, 설계도 등이다.

 

동등 분할 기법 : 입력 데이터를 특성에 따라 클래스로 분류, 경험에 의존

ex) x값이 0~100인 경우 x<0, x=50, x>100

 

경계값 분석 기법 : 경계값에서 에러가 발생될 확률이 높다는 점을 이용.

ex) x값이 0~100인 경우 x=0, x=100, x=-1, x=101

 

오류 예측 기법 : 각 시험 기법들이 놓치기 쉬운 오류들을 감각, 경험으로 테스트 

 

원인 결과 그래프 기법 : 입력 데이터간 관계가 출력에 미치는 영향을 그래프로 표현

 

요구사항 추적 매트릭스 : 고객의 요구사항 중 빠진 사항은 없는지 추적하는 매트릭스

 

상태 전이 테스팅 : 시스템의 상태(모드)가 변화함에 따른 테스트

 

의사결정 테이블 테스팅 : 논리적인 조건이나 상황을 구현하는 시스템 요구사항을 도출하거나

 

내부 시스템 디자인을 문서화하는 테스팅 

https://www.ibm.com

 

 

 

 

http://www.jidum.com

 

지식덤프

지덤 사전 '지식덤프'의 줄임말로 해당 주제에 대한 지식을 집대성하여 정리한 내용을 의미합니다.

www.jidum.com

테스트에 관한 내용이 좋은 사이트

+ Recent posts