이번 시간에는 ARM 프로세스를 왜 배워야하는지 이야기를 해보겠습니다.
 
우리가 어떤 것을 처음 배울 때는 그것을 왜 배워야 하는지 알면 좋습니다. 왜냐면, 무엇을 공부하기 전에 왜 배워야 하는지 알면 더 동기 부여가 되기 때문이죠. 다른 동료들이나 친구들이 ARM 프로세서는 잘 배워야 한다고 해서 등떠밀려 공부하면 잘 집중이 안되는 거 같습니다. 그렇지 않나요? 무엇보다 배운 내용이 어떻게 활용되는지 알면 공부할 때 더 힘이 날 겁니다.
 
소형 기기에서 ARM 프로세서를 많이 탑재
 
ARM 프로세스를 배우는 가장 큰 이유는 ARM 프로세서를 많이 쓰기 때문이에요. 대부분 휴대 기기에는 ARM 프로세서가 많이 탑재돼 있어요. 여러분들, 모두 휴대폰 1개는 다 들고 다니죠? 안드로이드 스마트폰에 탑재된 CPU가 무엇일까요? 그것은 ARM 프로세서에요.
 
휴대 전화 뿐만 아니라 사물 인터넷에도 ARM 프로세서를 많이 써요. 이렇게 소형 기기에서는 ARM 프로세서를 많이 사용하고 있어요. 여러분들은 ARM 프로세서가 저전력에 소모 전류가 적다는 사실을 알고 있죠? 그래서 소행 기기에 ARM을 많이 쓰는 거에요.
 
근데 ARM 프로세서를 소형 기기에 많이 쓴다는 사실은 조금 달리 생각해볼 수 있어요. 많은 소형 기기에서 ARM 프로세서를 사용하고 있다는 이야기는 많은 개발자들이 ARM 프로세서와 관련된 부분에 일을 하고 있따고 할 수 있죠. 많은 ARM 프로세서 개발자 풀이 있다고 볼 수 있는 거에요.
 
프로그램의 세부 동작 원리를 파악
 
이번에는 ARM 프로세서를 배워야 하는 다른 이유에 대해서 알아볼까요? ARM 프로세서의 기본 원리를 알면 프로그램을 CPU가 어떻게 돌리는지 정확히 알 수 있어요. 우리가 작성하는 코드는 C나 C++ 혹은 자바, 파이썬 언어인데요. 사실 이 코드들은 컴파일이 돼서 모두 ARM 어셈블리 코드로 돌게 돼 있어요. ARM 프로세서의 동작 원리를 알면 자연히 프로그램이 정말 어떻게 돌아가는지 알 수 있어요. 그래서 ARM 프로세서의 원리를 제대로 파악하는 개발자들은 조금 더 안정적인 코드를 작성할 수 있어요.
 
물론 ARM 프로세서의 세부 원리를 잘 몰라도 개발하는데 큰 지장은 없어요. 그런데 고급 개발자로 인정 받으려면 반드시 넘어야 하는 산이 ARM 프로세서랍니다. 혹시 '스택 오염, 스택 Overflow, 스택 Underflow' 이런 용어를 들어본 적이 있나요? 이런 문제는 ARM 프로세서의 세부 동작 원리를 모르면 문제를 분석하거나 해결할 수 없어요. 또한 Secure Monitor Call이란 소리를 들어본 적이 있나요? 'Secure Monitor Call'을 실행하고 나니 시스템이 무감이 됐다고 합니다. 음, 듣기만 해도 깝깝하군요. 모두 ARM 프로세서와 관련된 용어랍니다.
 
RTOS나 운영체제 커널의 세부 동작 원리를 파악
 
마지막으로 ARM 프로세서를 알아야 하는 이유는 RTOS나 운영체제의 세부 동작 원리를 배우고 싶을 때에요. 사실 ARM 프로세서는 RTOS을 돌리거나 리눅스와 같은 범용 운영체제와 함께 돌아가거든요. ARM 프로세서 혼자만 돌아가는 경우는 사실 없어요.
 
그런데 RTOS나 리눅스와 같은 운영체제의 핵심 원리를 알려면 ARM 프로세서를 알아야 돼요. 익셉션, 스케줄링과 같은 세부 동작은 대부분 ARM 어셈블리 코드로 돼 있기 때문이죠.
 
그리고 스타트업 코드라고 들어본 적이 있나요? 시스템이 처음 부팅할 때 실행하는 코드에요. RTOS나 리눅스 개발자들은 ARM의 스타트업 코드를 작성하기 마련인데, ARM 프로세서의 기본 원리를 알아야 관련 코드를 작성할 수 있죠.
 
사실, ARM 프로세서만을 잘하기 위해 ARM 프로세서를 배우는 사람은 많지는 않아요. 임베디드 분야의 개발자들이나 고급 시스템 개발자가 되고 싶은 분들이 ARM 프로세서를 배우려고 하죠. 
 
ARM 프로세서를 알고 모를 때 어떤 차이가 있을까?
 
ARM 프로세서를 잘 알고 모르고는 평소에 잘 들어나진 않는데요. 해결하기 어려운 문제를 만났을 때는 달라요.
 
'Secure Monitor Call'을 실행하고 나서 시스템이 무감됐다는 예시를 들었잖아요. 이 문제를 리포트 받고 ARM 프로세서를 잘 아는 분과 모르는 분이 어떻게 생각할까요? ARM 프로세서를 잘 모르는 분은 이게 뭔 소리인지 이해를 못하겠죠. 그래서 조용히 구글링을 하겠죠.
 
그런데 ARM 프로세서를 잘 아는 분은 이렇게 생각할 겁니다.
 
  * 'Secure Monitor Call'을 실행하면 트러스트 존으로 동작 모드를 변경할 텐데. 이 때 실행하는 어셈블리 코드의 아규먼트는 제대로 전달이 된 것일까?
 * Secure Mode와 Non-Secure 모드 별로 페이지 테이블의 시작주소인 TTBR 이 다른데. 혹시 이 설정이 잘못됐나?
 * 트러스트 존에 로그를 추가해서 어디까지 실행되는지 확인해볼까?
'Secure Monitor Call'을 여러 CPU가 실행하려고 시도하지는 않나? 해당 코드에 락을 좀 걸어볼까?
 
이렇게 전체 그림을 그리고 문제를 분석하는 개발자와 'Secure Monitor Call'이란 용어가 뭔 소리인지도 몰라 조용히 구글링을 하는 개발자 중 누가 먼저 빨리 문제를 해결할까요? 여러분이 관리자라면 둘 중 어느 개발자에게 문제를 맡길까요? 구글링을 하는 개발자는 아니겠죠?

< '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리' 저자>

 
 

+ Recent posts