2008년 6월 16일 월요일

Wince에서 cached와 uncached를 사용하는 이유

CPU Core 내부에 Cache Controller 가 있으면 캐쉬를 인에이블시켜 쓰던데 ...
CPU내부 core에서 CPU의 내부에 있는 Register나 SDRAM 또는 NAND 또는 Address로 접근 가능한 장치를 address mapping 할때 cache와 uncache로 구분해서 사용합니다.
Oemaddress Table에는 physical address와 cached address만 기록하면 cached address에서 0x2000_0000만큼 높은 번지는 Uncached address가 됩니다.

가령 physical 0x000__0000을 cached로 0x8000_0000이면 uncached는 0xa000_0000 이됩니다.
WINCE에서 Cached address는 0x8000_0000 ~0x9FFF_FFFF까지 이고 Uncached는 0xA000_0000 ~ 0xB000_0000까지 입니다.
cached로 사용하면 Core에서 Address를 access하는 순간 바로 해당 주소를 access하는 반면 uncached로 addressing 하면 그 즉시 access하지 않고 지연되어 read/write가 됩다.


Uncached를 주로 사용하는 경우는 다음과 같습니다.
- CPU내부 register - DMA descriptor
- CPU외부의 chip selector 에 연결되어 있는 IO device - SDRAM의 특정 영역(global 영역등 sharing 을 위한 목적)

Cached를 주로 사용하는 경우는 다음과 같습니다.
- OS가 access하는 SDRAM
- 대용량 memory share(display area / audio dma area 등등)

Cache와 Uncached 의 가장 큰 차이점은 속도 입니다. Uncached로 선언된 영역을 access하면 core의 command가 나갈때 마다 실제로 memory를 access하여야하는데 이과정에서 속도가 떨어지게됩니다. 왜냐면 만약 core는 400Mhz로 작동하는데 외부 버스는 100Mhz나 50Mhz로 작동되는 상황을 생각해 보시기 바랍니다

댓글 없음: