임베디드/임베디드 개념

빠른 프로세스와 느린 메모리

fish9903 2023. 3. 25. 09:35

빠른 프로세서와 느린 메모리

다른 시스템들과 마찬가지로 임베디드 시스템에서도 속도가 중요하다. 속도를 올리려면 prcoessor와 memory의 속도를 높여야 하지만, processor의 속도는 계속해서 증가하고 있는 것에 반해, memory의 속도는 processor만큼 증가하지 못하고 있다. Processor와 memory는 서로 상호작용하는 관계이기 때문에, processor의 속도를 높인다고 그래도 시스템의 전체적인 속도가 비례하여 중가하는 것은 아니다.

 

작업 관리자로 확인한 RAM의 속도는 2400MHz이다. CPU의 속도인 3.50GHz와 차이가 큰 것을 볼 수 있다.

 

메모리의 특징과 속도의 한계

메인 메모리로 많이 사용되는 메모리인 DRAM과 HDD를 보자.

 

DRAM은 축전기로 이루어진 battery와 비슷한 구조이다. 한 bit를 한 cell에 저장하는데, 이 cell이 축전기이고, 춘전기의 전기용량이 특정 비율보다 높으면 1, 낮으면 0으로 인식하여 이렇게 정보를 유지한다. 여기서 DRAM의 속도의 한계의 원인을 알 수 있는데, 축전기에 전기를 충전 또는 방전시키는데 걸리는 시간을 줄이는 것에 한계가 있다는 것이다. 축전기에 전기를 충전 또는 방전하는 것은 화학분야의 문제이므로 이 시간을 줄이는 것에는 한계가 존재한다.

 

다른 문제로는 battery가 용량이 다 달면 작동하지 않는 것처럼, DRAM도 전력공급이 끊기면 정보를 저장할 수 없다는 것이다. 따라서 DRAM은 주기적으로 메모리의 각 cell이 정보를 잃지 않도록 전기를 계속해서 공급해줘야 하는데, 이것을 refresh동작이라고 한다.

이 동작은 일정 주기마다 메모리를 순회하면서 방전되지 않도록 전기를 공급하는데, 이 동작 중에는 메모리에서 정보를 읽고 쓰는 동작이 제한된다. 따라서 refresh동작은 DRAM의 속도에 한계를 준다. 축전기를 사용하지 않는 SRAM을 사용하는 방법도 있는데, SRAM은 DRAM보다 비싸기 때문에 대용량의 메인 메모리를 전부 SRAM으로 사용하기에는 비용이 너무 많이 든다.

 

HDD도 속도의 한계가 존재한다. HDD는 원판의 앞 뒷면에 정보를 저장하고 이 원판을 여러개 모아둔 것을 메모리로 사용하는 방식으로, 물리적인 동작을 통해 머모리에 접근한다. HDD에는 header가 존재하여 메모리의 특정 위치에 접근할 때 그 메모리 주소에 해당하는 원판의 특정위치로 원판과 header를 움직여서 접근한다. 방법에서 알 수 있듯이, 메모리의 속도를 높이려면 원판의 회전 속도와 header의 움직임을 빠르게 해야 하는데, 이는 물리적인 동작이므로 한계가 존재한다. 또한 빠르게 움직일수록 소음이 심해진다는 단점이 있다. 게다가 메모리의 위치에 따라 원판을 얼마나 움직여야하는지 달라지기 때문에 메모리에 접근하는 시간이 가변적이어서 임베디드 시스템에선 사용하지 않는다.

 

속도 차이를 극복하는 방법

소제목을 '극복하는 방법'이라고 적었지만, 사실 '완화하는 방법'이 더 적절한 표현일 수도 있다.

 

메모리를 계층적 구조로 설계하는 방법Havard architecture를 사용하는 방법이 있다.

Memoy hierarchy와 Haravard architecture

메모리를 계층적 구조로 설계한다는 것은 그 메모리를 그 특징과 사용용도에 따라 여러 계층으로 나눈다는 것이다. 속도가 빠르지만 가격이 비싼 메모리들은 상위 계층에, 속도가 느리지만 가격이 싼 메모리들은 하위 계층에 위치시킨다. 여기서 상위 계층은 processor에 가깝다는 것이다. Register와 cache가 대표적인 상위 계층의 메모리이고, HDD가 대표적인 하위 계층 메모리이다.

 

상위 계층으로 갈수록 메모리의 비용이 비싸기 때문에 메모리의 용량이 적어딘다. 따라서 메모리를 계층구조로 나눌 때에는 메모리 계층의 상위 메체에 저장되어 있는 모든 파일, 정보는 하위 메체에도 저장되어 있어야하는 inclusion property를 만족하는지 고려해야 한다. 이는 data 일관성 문제를 막기 위한 것으로, 서로 다른 계층에 존재하는 메모리가 같은 변수에 대해 다른 값을 저장하고 있으면 어떤 값이 진짜인지 혼란이 발생하기 때문이다. 이 문제를 해결하기 위해 write through와 write back 방법이 사용된다.

 

Write through방법은 한 계층에서 데이터에 변화가 생겼다면 이 데이터를 가지고 있는 메모리를 모두 갱신하는 방법이다. 데이터를 가진 메모리를 모두 갱신해야 하므로 시간이 걸린다는 단점이 있지만 데이터 일관성 문제를 완벽히 해결할 수 있다.

Write back방법은 한 계층에서 데이터에 변화가 생겼다고 이 데이터를 가지고 이쓴ㄴ 모든 메모리를 갱신하는 것이 아닌, 일단 변화가 생긴 메모리만 갱신하고, 나중에 이 데이터를 사용하는 event가 발생했을 때만 다른 계층의 메모리를 갱신하는 방법이다. 이 방법은 속도가 빠르다는 장점이 있지만 데이터 일관성이 완전히 해결되진 않는다.

 

다른 방법으로는 Harvard architecture를 사용하는 것이 있다. Harvard architecture는 메모리를 instruction만 저장하는 메모리와 data만 저장하는 메모리로 분리시킨 것이다. 보통 사용하는 Von Neumann architecture는 instrctuon과 data를 한 메로리에 같이 저장하기 때문에 어떤 동작을 수행하려면 instruction 1번, data 1번 총 2번의 메모리 접근이 필요한데, Harvard architecture는 instruction와 data를 동시에 읽어올 수 있기 때문에 더 빠른 동작이 가능하다.

Instruction은 변경이 없고, data에 대해서만 동작하는 임베디드 시스템의 특성상 Harvard architecture는 적용하기 매우 좋은 구조이다.

 

참고: DSP