Cortex Register에 대해 설명을 하다 잠깐 동작모드(Operating Mode)에 대한 내용이 나왔었다.

이번 포스트에서는 Cortex-M7의 동작모드에 대해 설명이 없었던 것 같아 짧게 짚고 넘어가보도록 하겠다. 

 

Cortex-M7에는 Thread Mode와 Handler Mode, 총 2가지의 Mode가 존재한다.

ARM사에서 A,R,M 시리즈 출시 이전에는 사용되던 Mode가 총 7가지(User, System, FIQ, IRQ, SVC, Abord, Undefined)가 있었는데 이부분은 추후 기회가 된다면 설명해보도록 하고 오늘은 Cortex-M7에 집중해보자.

 

- 동작모드(Operating Mode)

1. Thread Mode

먼저 Thread Mode는 Exception(Interrupt)이 발생하지 않은 보통의 상태에서 동작하는 모드이다.

다시 말하자면 Normal하게 Program이 동작할 때 이 Thread Mode에서 동작한다. 

 

Thread Mode에서 중요한 부분은 Privileged Thread ModeUn-Privileged Thread Mode가 존재한다는 점이다. 여기서 Privileged란 좀 더 높은 수준의 권한을 가지는 것을 의미한다.
예를 들어, System Resource나 Protected Memory 영역에는
일반적인 권한(Un-Privileged)으로는 접근이 불가하지만 높은 권한(Privileged)을 가진다면 접근할 수 있듯이 말이다. 

 

그러면 여기서 의문이 든다. 앞서 Thread Mode는 Normal하게 Program이 동작할 때 사용되는 Mode이라고 했다.따라서 일반적으로 프로그램을 동작시킬 때, 높은 권한이 필요하지 않은 작업이 거의 대부분일텐데 Privileged를 따로 둔 이유는 무엇일까?이에 대해서는 Reset Exception 발생 시를 통해 살펴보자. 

 

Reset Exception의 대표적인 예는 CPU에 전원이 인가되고 부팅이 시작되는 때이다.부팅이 시작되면 CPU는 각종 H/W, S/W를 초기화, 초기Setting을 해야하고 어쩌면 OS에도 접근을 해야한다. 부팅시 이런 일련의 작업들은 당연히 모두 권한이 있는 모드, 즉 Privileged Mode에서 이루어져야 할 것이다.따라서 초기 CPU 부팅과 같은 Reset Exception이 발생할 때, Privileged Thread Mode에 진입해서 각종 H/W, S/W Setting 등 일련의 과정을 거친다.이렇게 Privileged Thread Mode에서 초기 Setting 끝나면 Un-Privileged Thread Mode로 넘어와 일반적인 프로그램을 실행시키는 것이다. 

 

Thread Mode에 Privileged와 Un-Privileged로 2가지가 존재하는 이유는 어느정도 설명이 됐을 것이라 생각하고
추가적으로 이렇게 한번 Un-Privileged가 되면 일반적인 방법으로는 Privileged로 넘어갈 수 없다. 
이 부분은 Handler Mode에서 더 자세히 살펴보도록 하겠다.

 

2. Handler Mode

Handler Mode는 Thread Mode에서 Exception이 발생했을 때 진입하는 Mode이다. 다시말해 Thread Mode에서 일반적인 프로그램을 수행하다가 Interrupt나 Exception이 발생하면 Handler Mode로 진입하게 되고 Handler Mode에서 앞서 발생한 Exception을 처리하게 된다.

따라서 Handler Mode는 Exception을 처리해야하기 때문에 Privileged Handler Mode만이 존재한다.

즉, 한번 Un-Privileged(Thread Mode)가 되었다면 Privileged로 가기 위해서는 Exception이 발생해야만 한다. 

 


- State Diagram

그럼 위에서 글로 알아봤던 내용을 ARM Cortex 문서에 나타난 State Diagram으로 확인해보자.

Cortex-M7 Modes

먼저 Start(reset)이 들어오면 Privileged Thread Mode로 들어오는 부분을 볼 수 있는데 이것이 앞서 설명한 초기 부팅시점이다. 이렇게 초기 부팅이 끝나게 되면 User thread 즉, Un-Privileged Thread Mode로 전환이 되게 된다.

그리고 Exception이 발생하면 모두 Privileged Handler Mode로 넘어가는 화살표들을 확인할 수가 있고 이후 Exception 처리가 끝나고 기존 Mode로 복귀하는 것을 Exception exit 화살표를 통해 확인할 수가 있다.
또, Exception을 제외하고 User thread(Un-Privileged)에서 Privileged로 넘어가는 방법이 없는 것 또한 확인할 수가 있겠다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기