🏷️ARM의 동작 모드
📌USR (User mode)
- 일반적으로 사용하는 모드
- ARM모드와 Thumb모드로 동작한다.
- 운영체제를 사용한다면 사용자 프로세스는 이 모드에서 동작한다.
1. ARM 모드 명령어
- 32비트 명령어 집합이다.
- Thumb 모드에 비해 속도가 빠르다.
2. Thumb 모드 명령어
- 16비트 명령어 집합이다.
- ARM 모드에 비해 바이너리 크기가 작다.
- ARM은 ARM 모드와 Thumb 모드를 하나의 펌웨어에서 섞어 쓰는 것을 허용한다.
📌SYS (System mode)
- 사용자 프로세스가 임시로 커널 모드를 획득해야 하는 경우가 있을때 사용한다.
- 또는 사용자 모드와 커널 모드를 구분하는 운영체제가 아닌 운영체제라면 SYS 모드가 기본 동작 모드인 경우가 많다.
- 소프트웨어로 모드 전환을 해서 진입할 수 있다.
📌FIQ (Fast Interrupt mode)
- FIQ 익셉션이 발생하면 이 모드로 전환된다.
- FIQ 모드는 ARM 상태일 때만 동작한다.
- 빠른 처리를 위해 별도의 레지스터를 몇개 더 갖고 있는데, 이를 뱅크드 레지스터라고 한다.
📌IRQ (Interrupt mode)
- IRQ 익셉션이 발생하면, 이 모드로 전환된다.
- ARM 상태일 때와 Thumb 상태일 때 모두 동작 가능하다.
📌SVC (Supervisor mode)
- 운영체제에서 시스템 코드를 수행하기 위한 보호 모드다.
- 보통 system call을 호출하면 SVC 익셉션을 발생시켜 이 모드로 전환한 다음, 커널 동작을 수행한다.
- SVC 익셉션은 메모리나 하드웨어와 상관없이 순수하게 소프트웨어에 의해서만 발생하는 익셉션이다. (system call 같은)
📌ABT (Abort mode)
- Data Abort나 Prefetch Abort가 발생 했을 때, 전환되는 모드다.
- Data Abort: 메모리에서 데이터를 읽을 때 발생하는 Abort
- Prefetch Abort: 메모리에서 명령어를 읽을 때 발생하는 Abort
📌UND (Undefined Mode)
- Undefined Instruction이 발생했을 때, 전환되는 모드다.