임베디드/[ ARM ]

[ ARM ] 00. ARM 프로세서와 우리가 이를 배워야 하는 이유

kim.svadoz 2021. 3. 9. 13:35
반응형

00. ARM 프로세서

ARM 아키텍쳐가 무엇인지 모르는 사람은 아래 포스팅을 보고 오시길 바란다.

https://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98

https://m.blog.naver.com/PostView.nhn?blogId=suresofttech&logNo=221249244004&proxyReferer=https:%2F%2Fwww.google.com%2F

그렇다면 ARM 프로세서를 배워야 하는 이유가 무엇일까?

  • 많은 소형기기에서 ARM 프로세서를 탑재

    • ARM 프로세스를 배우는 가장 큰 이유는 ARM 프로세서를 많이 사용하기 때문이다. 대부분의 휴대기기에는 ARM 프로세서가 탑재돼 있다. 우리가 항상 들고다니는 안드로이드 스마트폰에 탑재된 CPU가 바로 ARM 프로세서이다.

    • 휴대전화 뿐만 아니라 사물인터넷(IoT)에도 많이 사용하고 있다. ARM 프로세서가 저전력에 소모 전류가 적기 대문에 이렇듯 소형기기에 많이들 사용하고 있는 것!

      또한, 많은 ARM 프로세서 개발자 풀이 존재한다.

  • 프로그램의 세부 동작 원리를 파악

    • ARM 프로세서의 기본 원리를 알면 CPU가 프로그램을 어떻게 돌리는지 정확히 알 수 가 있다. 우리가 작성하는 코드는 C, C++, JAVA, Python 등의 언어일텐데, 이 코드들은 모ㄷ주 컴파일 후 ARM 어셈블리 코드로 돌게 되어있다. 따라서, ARM 프로세서의 동작 원리를 알면 자연히 프로그램이 정말 어떻게 돌아가는지 알 수 있다. 때문에 프로세서의 원리를 제대로 파악하는 개발자는 더욱 안정적인 코드를 작성할 수 있게 된다.
    • 물론, ARM 프로세서의 세부 원리를 잘 몰라도 개발하는 데 큰 지장은 없지만, 우리가 원하는 고급 개발자가 되기 위해서는 반드시 넘어야 하는 산이 바로 ARM 프로세서인 것!!
    • 스택 오염, Stack Overflow, StackUnderflow등 의 문제는 ARM 프로세서의 세부 동작 원리를 모르면 문제를 분석하거나 해결하기 힘들다. Secure Monitor Call 도 마찬가지이다.
  • RTOS나 운영체제 커널의 세부 동작 원리를 파악

    • 마지막으로 ARM 프로세서를 알아야 하는 이유는 RTOS운영체제(OS)의 세부 동작 원리를 알아야 할 때이다. ARM 프로세서RTOS나 리눅스와 같은 범용 운영체제와 함께 돌아가기 때문이다. -> RTOS나 리눅스와 같은 운영체제(os)의 핵심 원리를 알기 위해서 ARM 프로세서를 알아야 한다.
    • Exception, Scheduling과 같은 세부 동작은 대부분 ARM 어셈블리 코드로 되어있기 때문이다.
    • 시스템이 처음 부팅할 때 실행하는 코드를 스타트업 코드라고 하는데, 이를 작성하기 위해서는 ARM 프로세서의 기본 원리를 알아야 한다.

ARM 프로세서을 알고 모를 때 어떤 차이가 있을까?

이 차이는 평소에 잘 드러나지 않지만, 해결하기 어려운 문제를 만났을 때 드러난다.

Secure Monitor Call을 실행하고 나서 시스템이 무감됐다는 예시를 들어보자. 이 문제를 리포트 받은 후 ARM 프로세서를 잘 아는 개발자라면 이렇게 생각할 것이다.

-> 'Secure Monitor Call'을 실행하면 트러스트 존으로 동작 모드를 변경할 텐데. 이 때 실행하는 어셈블리 코드의 아규먼트는 제대로 전달이 된 것일까?

-> Secure Mode와 Non-Secure 모드 별로 페이지 테이블의 시작주소인 TTBR 이 다른데. 혹시 이 설정이 잘못됐나?

-> 트러스트 존에 로그를 추가해서 어디까지 실행되는지 확인해볼까?

-> 'Secure Monitor Call'을 여러 CPU가 실행하려고 시도하지는 않나? 해당 코드에 락을 좀 걸어볼까?

이렇게 전체 그림을 그리고 문제를 분석하는 개발자와 'Secure Monitor Call'이란 용어가 뭔 소리인지도 몰라 조용히 구글링을 하는 개발자 중 누가 먼저 빨리 문제를 해결할까요? 여러분이 관리자라면 둘 중 어느 개발자에게 문제를 맡길까요? 구글링을 하는 개발자는 아니겠죠?

반응형