2013년 1월 23일 수요일
ARM 프로세서 개요
들어가며...
ARM 프로세서에 대해 전체적인 개요에 대해 정리해보자. ARM System Developer's Guide를 참고하여 작성되었다.ARM 소개
ARM 코어는 RISC 아키텍처를 사용하고 있다. RISC는 간결한 명령어 세트를 가진 아키텍처로 하드웨어의 복잡도를 줄이는 것을 주요한 목표이다. 주로 임베디드 시스템에서 많이 사용되어 왔으나, 최근에는 코어 성능이 빠르게 올라가고 있어 서버 영역까지도 넘보고 있는 상황이다.범용레지스터
범용 레지스터는 데이터나 주소를 저장할 수 있으며, 일반적인 처리를 위해 범용으로 사용할 수 있는 레지스터를 말한다. ARM 프로세서는 7개의 서로 다른 모드를 지원하며, 각각의 모드에서 사용하는 레지스터들이 달라질 수 있다. 일반적으로 r0~r12는 범용으로 사용될 수 있으며, r13(sp), r14(lr), r15(pc)는 특수한 목적으로 사용된다. CPSR은 현재 프로세서의 상태를 저장하기 위한 다양한 비트를 가지고 있는 상태 레지스터 이다.CPSR 레지스터
ARM 코어는 내부동작을 모니터링하고 제어하기 위해 CPSR(Current Program Status Register) 을 사용한다. 아래 그림은 CPSR의 각 비트에 대한 레이아웃을 보여주고 있다.| CPSR 비트 |
ARM 프로세서 모드
프로세서의 모드는 6개의 특권 모드(abort, FIQ, IRQ, supervisor, system, undefined)와 하나의 일반모드(user)가 있으며, 각 모드에서 접근할 수 있는 레지스터가 달라지며, 일반 모드의 경우는 CPSR에 접근하는 권한이 제한적이다. 이러한 모드간의 전환은 Exception이나 Interrupt에 의해 전환되거나 User모드를 제외한 모드에서는 직접 CPSR의 해당 비트를 변경하여 전환 가능한다. 아래는 각 모드가 진입하는 조건에 대한 설명이다.- Abort (ABT) : 메모리 액세스가 실패했을 때
- FIQ : FIQ 인터럽트가 발생했을 때
- IRQ : 일반 인터럽트가 발생했을 때
- supervisor (SVC) : Reset시 진입하는 모드로 일반적으로 운영체제에서 커널이 동작하는 모드
- system (SYS) : user 모드의 특수한 버전으로 CPSR에 접근제한이 없다.
- undefined (UND) : 정의되지 않은 명령어를 만났을 때
- user (USR) : 일반 어플리케이션이 동작하는 모드
뱅크 레지스터
아래 그림은 ARM 프로세서가 가지고 있는 모든 레지스터를 보여준다. 그림에서 표시가 되어 있지 않은 레지스터는 프로세서 모드 간에 공유하는 레지스터이며, 표시가 된 레지스터는 해당 모드에만 따로 사용되는 레지스터이다. 표시가 된 레지스터들을 뱅크 레지스터라고 하며, 레지스터 이름 뒤에 _mode를 붙여 구분을 한다.| 전체 ARM 레지스터 세트 |
파이프라인
파이프라인은 RISC 프로세서가 명령어를 실행하기 위한 사용되는 매커니즘이다. 명령어가 실행되는 과정을 여러 단계로 나누어 동시에 처리하게 되며, 이에 따라 성능향상 효과를 볼 수 있다.| Cycle 별 명령어 수행 순서 |
위 그림은 기본적인 파이프라인 구성인 Fetch-Decode-Execute으로 명령어가 수행되는 과정이며 ARM7에 적용되어 있는 구성이다. 파이프라인 구성은 ARM 제품군에 따라 다르게 설계되어 있으며, 파이프라인의 단계가 많을수록 수행속도는 빠르지만, 초기 지연시간이 길어지는 문제점이 있다.
이러한 파이프라인 구성으로 인해 PC값의 경우에 "현재 실행되는 명령어 주소 + 8" 의 값을 가지게 된다. Fetch단계에서 PC값이 이미 바뀌기 때문에 2단계 앞선 주소를 가리키게 된다.
Exception
Exception이나 Interrupt가 발생하면 프로세서는 현재 PC에 특정 주소값을 넣는다. 이 주소값을 벡터테이블이라고 불리는 영역에 저장하고 있다. 벡터테이블에는 해당 exception이나 interrupt를 처리하기 위한 루틴으로의 분기 명령어를 수행한다.- Reset vector : 프로세서에 전원이 공급되고 처음으로 실행되는 위치이다.
- Undefined Instruction vector : 지원하지 않는 명령어를 만났을 때 사용된다.
- Software Interrupt vector : SWI 명령어에 의해 소프트웨어적으로 인터럽트를 발생시켰을 경우 호출된다.
- Prefetch Abort vector : 프로세서가 접근권한이 없는 메모리 주소에서 명령어를 읽어들이려고 시도할 때 발생된다.
- Data Abort vector : 프로세서가 접근권한이 없는 메모리 주소의 데이터를 읽어들일 때 발생한다.
- Interrupt Request vector : 외부 하드웨어 장치에 의해 인터럽트가 발생하였을 때 호출된다.
- Fast Interrupt Request vector : IRQ와 유사하나 더욱 빠른 응답시간을 요구하는 하드웨어를 위해 할당된다.
코프로세서
코프로세서는 ARM 프로세서에 부착되어 사용되는 것으로, 명령어 세트를 확장시키거나 다양한 레지스터를 설정할 수 있는 기능을 제공하여 코어의 처리 기능을 확장시켜 준다. 코프로세스의 레지스터에 접근하는 인터페이스(명령어)를 제공하며, CP15의 경우에는 캐쉬와 MMU등을 제어하기 위한 레지스터 설정을 지원한다.
피드 구독하기: 댓글 (Atom)
댓글 없음: