왜 프로세서는 주소가 없죠?
몇년 전, 저희 자일링스 사무실에서 삼성 엔지니어 분들에게 MPSoC의 프로세서 서브시스템에 대해서 강의를 한적이 있습니다.
그때 강의했던 내용을 머리속에 그려가면서 나눴던 얘기를 적어보려고 합니다.
프로세서를 학교에서 많이 써 봤겠지만, 내부 구조에 대해서 자세히 몰라도 우리는 대부분의 어플리케이션을 만들 수 있습니다.
여기서 잠깐 단어들을 섞어서 썼는데, 프로세서와 프로세서 서브시스템은 좀구별하는게 좋겠습니다.
프로세서는 프로세서 그 자체입니다. 리셋이 풀리면, 정해진 리셋벡터에 저장된 어드레스에 있는 코드를 읽고, 해석, 실행합니다.
읽고, 해석하고 실행하는데 구체적인 방법들은 프로세서 구조에 따라 다르긴 하지만, 이 3가지 동작은 크게 변하지 않습니다.
프로세서 서브시스템은 프로세서와 캐시, 스누프, 타이머, 인터럽트 콘트롤러, DMA와 같은 블록과 같이 묶은 개념입니다. MPSoC의 경우에는 DDR 메모리 콘트롤러와 사업계에서 많이 사용하는 주변장치들이 같이 포함되어 있습니다.
하버드 아키텍져가 무엇인지, 캐시가 왜 필요한지, L1캐시와 L2캐시의 차이점, 스누프 콘트롤러가 왜 필요한지, 스누프 콘트롤러가 없으면 어떤 바보같은 현상이 발생하는지에 대해서 쭉 그림을 그려가면서 설명했습니다.
좀 흥미가 떨어질 때면 이런 저런 질문을 해가면서 관심을 쭉 유지시켜 갔습니다.
임베디드 시스템에서는 버스 토폴로지라는 개념이 있는데, 여러개의 마스터와 슬레이브 (주변장치) 어떻게 연결해야 최대 시스템 성능을 보장할 것인가에 대한 고민에서 나온 개념입니다.
임베디드 시스템에서 마스터가 여러개 사용된다는 개념인 조금은 낯설었는지, 눈빛이 초롱초롱해져서, 프로세서와 DMA가 마스터 기능이 있다고 했습니다.
DMA에 대해서 자세히 설명하지 않아서 DMA가 왜 필요하진 그림을 그려가면서 설명하고 필연적으로 DDR 메모리 구조까지 덧붙여서 설명했습니다.
또 슬슬 졸리는지, 질문을 했습니다.
“모든 슬레이브(주변장치)는 주소가 있는데, 왜 프로세서는 주소가 없죠?”
좀 질문이 엉뚱하지 않습니까?
이 질문에 대해서 정확히 설명하려면, 마스터와 슬레이브가 뭔지 정확히 이해해야 합니다.
마스터 : 버스 트랜잭션 (Read/Write)를 요청할 수 있는 시스템
슬레이브: 마스터의 버스 트랜잭션에 반응하는 시스템
즉 프로세서는 슬레이브에서 읽고, 슬레이브에 쓰는 동작만 하는 시스템입니다. 어느 슬레이브도프로세서에게 너의 레지스터 값을 달라고 하지 않습니다. (디버깅할 때는 다르지만)
하여간 이 질문이 엉뚱했는지, 한참 고민을 하더군요.