ARM은 대표적인 RISC 계열 마이크로프로세서로, 구조가 단순하고 낮은 소비전력이 강점이다.
ARMv4부터 시장의 성장기에 경쟁하던 아키텍처에 비해 저전력 고성능을 인정받으면서 자리 잡게 됬다.
시장의 요구에 따라 아키텍처가 지속적으로 발전하여 VFP와 SIMD 등 퍼포먼스를 위한 기능과 코드 크기 감소,
가상화와 시큐리티 지원 기능이 추가되며 현재의 ARMv8에까지 이르게 됬다.
ARMv8은 Cortex-A/R/M 시리즈에 따라 다르게 구현된다.
이 중 가장 먼저 발표된 ARMv8-A는 애플리케이션 프로세서 프로파일에 해당한다.
ARMv8의 가장 큰 특징은 64비트 아키텍처다.
하지만 실행 상태(execution state)라는 개념이 도입하여 32비트 ARMv7용 코드도 실행 가능하다.
실행 상태는 프로세서의 실행 환경을 정의하는 개념이다.
지원하는 레지스터의 폭, 인스트럭션 세트, 익셉션(exception) 모델, 메모리 아키텍처 등의 정의한다.
64비트 실행 상태인 AArch64와 32비트 실행 상태인 AArch32를 제공한다.
AArch32는 ARMv7 소프트웨어에 대한 하위 호환성을 지원한다.
aarch64는 몇 가지 성능상의 이점을 제공한다.
산술 연산 시 64비트 정수 데이터를 1개의 인스트렉션으로 처리할 수 있다.
이전 아키텍처에서 여러 개의 인스트럭션이 필요했던 것에 비해 연산에 필요한 클록 사이클 수가 절약된다.
64비트 가상 주소 공간을 제공하므로 애플리케이션도 넓어진 가상 주소 공간을 사용할 수 있다.
단점도 존재하는데, 포인터의 크기가 64비트로 증가해 포인터 변수가 차지하는 메모리가 증가하는 것이다.
이 외에도 ARMv8의 다양한 변화!!
- 물리 주소 범위가 확장되어 프로세서가 4GB 이상 주소에 접근 가능
- 레지스터 파일이 확장되어 항상 접근 가능한 64비트 범용 레지스터 31개를 제공(X0 ~ X30)
- PC 상대 주소 지정 범위가 '현재 PC(Program Counter) 주소 +/- 4GB'로 커졌다.
공유 라이브러리나 위치 독립적인 코드에서 데이터 주소 지정을 위해 주로 사용한다. - 새로운 익셉션 모델이 도입되어 OS와 하이퍼바이저의 소프트웨어 복잡성을 줄여준다.
- 하드웨어 암호화(crypto) 인스트럭션의 지원으로 암호화 및 복호화 시 속도가 빨라진다.
- 16KB와 64KB 변환 단위를 추가 지원하면서 TLB(Translation Lookaside Buffer) 미스(miss)가 감소하고, 여러 단계로 구성된 페이지 테이블을 찾아 들어가는 페이지 테이블 탐색(page table walk) 시 탐색 깊이를 줄여준다.
- load-acquire, store-release 인스트럭션이 C++11, 자바 메모리 모델에서 사용되므로 명시적인 배리어 인스트럭션 없이도 스레드 세이프한(thread-safe) 코드 구현이 가능하다.
- 레지스터의 크기가 커진 고급(advanced) SIMD 지원이 추가되면서 SIMD 벡터 연산 성능이 향상되었다.
'리버싱 > ARM' 카테고리의 다른 글
실행 상태 (0) | 2021.02.09 |
---|---|
Exception Level 변경 (0) | 2021.02.09 |
ARMv8 Exception Model (0) | 2021.02.09 |
ARM Assembly (0) | 2021.02.09 |
ARM 크로스 컴파일러 및 실행 (0) | 2021.02.01 |