본문 바로가기
ARM 동작 Modes - 나는 어느 mode를 써야 하나

ARM을 다루는데 있어 가장 먼저 나오는 용어 중 하나가, 바로 ARM 동작 Mode일 것입니다. ARM을 접근 하는데 가장 기초적인 내용이니까 열심히 보고 또 보고 해서 익혀 두세용. 이 Mode를 잘 익혀 두어야, 여러 가지 면에서 System을 Design한다던가, Debugging할 때 유용하게 쓸 수 있으니까요. 실행 Mode를 잘 살펴 보면 User Mode는 표준 사용자 mode라고 부르며, 나머지 6개 Mode는 Privileged mode라고 분류됩니다. ARM User Manual을 살펴 보면 그 Mode들의 설명이 아래와 같이 되어 있어요.

User : Normal Program execution mode
System : Run privileged operating system tasks
FIQ : When a high priority (fast) interrupt is raised
IRQ : When a low priority (normal) interrupt is raised
Supervisor : A protected mode for the operating system ,entered when a SWI instruction is executed
Abort : Used to handle memory access violations
Undef : Used to handle undefined instructions자,

이 상황에서 ARM core는 7가지 동작 Mode를 사용한다는데 설명을 잘 읽어 보고도, 감이 잘 안 오지요. 의문의 연속입니다. 뭔 Mode가 이렇게 많아. 어쨌거나, 저쨌거나 Mode가 많으니까 참으로 난감하기 짝이 없는 거죠.일단은 mode는 다음과 같이 3글자 약자로 많이 쓰니까 그거 익혀 두세요. 뭐 다 쓰기 귀찮아서 그렇기도 하고 3글자로 통일하면 뭐 있어 보이잖아요?

대체대체대체, ARM은 도대체 왜 이렇게 많은 동작 mode를 갖는 것일까, 도대체, 이런 Mode들의 목적은 무엇인가? 나는 도대체 무슨 mode를 사용해야 하는가? 하는 의문들이 나올 수 밖에 없습니다.

그 의문들에 대한 해답을 알지 못하는 한 이런 문화적 충격의 트라우마는 오래 지속 될 것이고, 개발을 오래 했음에도 불구하고 그 해답을 찾지 못하는 결과가 뻔히 보입니다.

이중에 보면, 비슷비슷해 보이는 Mode가 세가지 있네요?

System mode, User mode, Supervisor (SVC) mode 요 세 개가 눈에 띄네요.

User Mode는 Application Program을 Execution 하는 Mode이고, System Mode는 Privileged Operating system task가 실행되는 mode이고, Supervisor mode는 SWI instruction이 실행될 때, 사용되는 보호된 Operating system mode라네요. 좀 어렵죠.

여기서 의문!
그러면, 평소에 Application을 실행할 때는 User Mode를 쓰고, OS level의 task들을 실행할 때는system mode를 사용하면 되는 것인가요? 그런 것 인가요? 또는 OS는 사용하지 않는 경우에는 User mode만 사용하면 되는 것인가요? 아 복잡 합니다. 머리 아프다. 쩝.

정답은 두두두두두두두두두두 뭐 사용자 취향에 따라 쓰고 싶은 mode를 쓰면 된다 이것이 정답입니다.

예를 들어, Hello, world 라는 Hello, world를 Display하는 Code를 짰다고 생각해 봅시다. 이런 Hello, world 라는 Program은 OS도 필요치 않고, Interrupt도 필요치 않습니다. 그냥 Power를 넣어주면, 무조건 Hello, world를 display해주고 아무것도 하지 않는 형태라고 합시다.

이런 프로그램은, User mode로 짜도 되고, System mode로 짜도 되고, SVC로 짜도 됩니다. 심지어 IRQ mode로 짜도 되고, FIQ로 짜도 됩니다. ABORT, Undef 모두 마찬가지 입니다. 각각의 mode는 각각 독립된 stack을 가질 수 있으며, 어느 mode가 되었든, Hello, world를 표시하고 무한 loop를 도는 프로그램을 짜기에는 전혀 무리가 없습니다. 호, 별거 아니네요.

이제 이 mode라는 것에 대해서 Detail들을 살펴 보는 건 ARM이 어떻게 동작하는지 이해 할 수 있는 절호의 찬스 이겠네요.

그러니까, 각 Mode들의 특성을 잘 이해 한다면, 사용자 편리대로 Mode를 선택 할 때에, 조금 더 적합한 Mode를 선택하여 Software를 구성할 수 있다니까요. 쿨럭. 각 Mode의 특징을 살펴 볼까요.

먼저, Privileged Mode와 그것이 아닌 normal Mode를 구분해야 해요. 일단 User Mode는 Privileged Mode가 아닌 normal Mode이며, 나머지 SYS, FIQ, IRQ, ABT, SVC, 그리고, UND는 Privileged Mode라고 구분합니다. 이런 구분은 두 가지 점에서 차이가 나는데, 그것은 다음과 같습니다.

첫 번째로 Privileged Mode (특권 모드)는 IRQ나 FIQ등의 Interrupt의 사용 가능 유무를 직접 설정 할 수 있습니다.
두 번째로, Privileged Mode는 자기들끼리, 자기네들 스스로 서로 Mode 변경이 자유자재로 가능 합니다만, Normal Mode는 자기 스스로 Privileged Mode로 Mode의 변경이 불가능 합니다.
그것은 예를 들어, SYS ↔ FIQ, IRQ ↔ SVC과 같이 Privileged Mode → Normal Mode (USR)은 가능하지만, USR → Privileged Mode로의 변경은 불가능합니다. 아주 중요한 사실입니다. 기억해 주세요

결국 Privileged Mode는 자기들 멋대로 Mode에 관한 한 자유롭게 왔다 갔다 할 수 있지만, USR Mode는 가능하지 않다는 사실. 

  ARM의 default Mode는 무엇일까요? SVC Mode입니다. Supervisor Mode에서 출발해야 boot up시에 ARM에 대한 모든 권한을 행사할 수 있으니까 말이에요

 Mode라는 것은 도대체 왜 필요한 것일까요?  분명히 쓸모가 있을테니까  존재할 꺼라 생각합니다. ㅋㅋ

 
 
Linked at 임베디드 시스템 개발자 되기 .. at 2009/06/12 23:06

... ARM inside ⓒ ARM mode와 THUMB mode ⓓ ARM 동작 Modes - 나는 어느 Mode를 써야 하나 ⓔ ARM Register와 Context ⓕ ARM E ... more

친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





친절한 임베디드 개발자 되기 강좌 글 전체 리스트 (링크) -