ARM 아키텍처

**ARM 아키텍처**(ARM architecture, 과거 명칭: Advanced RISC Machine, 최초 명칭: Acorn RISC Machine)는 컴퓨터 프로세서를 위한 RISC 명령어 집합 아키텍처(ISA) 제품군이다. ARM 홀딩스는 이 ISA를 개발하여 다른 회사에 라이선스를 부여하고, 이 회사들은 해당 명령어 집합을 사용하는 물리적 장치를 제작한다. 또한 이 ISA를 구현하는 코어를 설계하고 라이선스를 부여한다.

저렴한 비용, 낮은 전력 소비, 낮은 발열 덕분에 ARM 프로세서는 스마트폰, 랩톱, 태블릿 컴퓨터는 물론 임베디드 시스템을 포함한 가볍고 휴대하기 편리하며 배터리로 구동되는 장치에 유용하다. 그러나 ARM 프로세서는 2020년부터 2022년까지 세계에서 가장 빠른 슈퍼컴퓨터였던 후가쿠를 포함하여 데스크톱 컴퓨터 및 서버에도 사용된다. 2,300억 개 이상의 ARM 칩(그중 최소 1,300억 개가 ARM 프로세서)이 생산되면서, , ARM은 가장 널리 사용되는 명령어 집합 아키텍처 제품군이다.

ARM 설계는 여러 세대에 걸쳐 발전해왔다. 원래의 ARM1은 32비트 내부 구조를 사용했지만, 64&nbsp;MB의 주기억장치로 제한되는 26비트 주소 공간을 가졌다. 이러한 제한은 32비트 주소 공간을 가진 ARMv3 시리즈에서 제거되었고, ARMv7까지 여러 세대에 걸쳐 32비트 구조를 유지했다. 2011년에 발표된 ARMv8-A 아키텍처는 새로운 32비트 고정 길이 명령어 집합을 통해 64비트 주소 공간과 64비트 연산 지원을 추가했다. ARM 홀딩스는 또한 다양한 역할을 위한 추가 명령어 집합을 발표했다. "Thumb" 확장 기능은 코드 밀도 향상을 위해 32비트 및 16비트 명령어를 모두 추가했으며, Jazelle은 자바 바이트코드를 직접 처리하기 위한 명령어를 추가했다. 최근의 변경 사항으로는 성능이나 내결함성 향상을 위한 동시 멀티스레딩 (SMT) 추가가 있다.

## 역사

### BBC 마이크로

아콘 컴퓨터의 첫 번째 성공적인 설계는 1981년 12월에 출시된 BBC 마이크로였다. 이 기기는 MOS 6502 CPU를 기반으로 한 비교적 평범한 기기였지만, 더 빠른 동적 램(DRAM)을 사용하여 애플 II와 같은 경쟁 설계보다 약 두 배의 성능을 냈다. 당시 일반적인 DRAM은 약 2&nbsp;MHz로 작동했지만, 아콘은 더 빠른 4&nbsp;MHz 부품을 공급받기 위해 히타치 제작소와 계약했다.

당시의 기기들은 일반적으로 프로세서와 프레임버퍼 사이에 메모리를 공유하여, 프로세서가 별도의 I/O를 수행할 필요 없이 화면 내용을 빠르게 업데이트할 수 있었다. 비디오 디스플레이의 타이밍은 매우 정밀하기 때문에, 비디오 하드웨어는 해당 메모리에 우선적으로 접근해야 했다. 6502 설계의 특성상 CPU는 시간의 절반 동안 메모리를 건드리지 않았다. 따라서 CPU를 1&nbsp;MHz로 실행함으로써, 비디오 시스템은 이러한 휴지 시간 동안 데이터를 읽을 수 있었고, 이는 RAM의 총 2&nbsp;MHz 대역폭을 모두 사용했다. BBC 마이크로에서는 4&nbsp;MHz RAM을 사용하여 동일한 기술을 두 배 빠른 속도로 사용할 수 있었다. 이로 인해 당시 시장의 유사한 어떤 기기보다도 뛰어난 성능을 낼 수 있었다.

### 아콘 비즈니스 컴퓨터

1981년은 IBM PC가 출시된 해이기도 했다. 최근 출시된 인텔 8088을 사용하여, 6502의 8비트 설계에 비해 16비트 CPU는 전반적으로 더 높은 성능을 제공했다. 이 제품의 출시는 데스크톱 컴퓨터 시장을 급진적으로 변화시켰다. 지난 5년간 주로 취미 및 게임 시장이었던 것이, 이전 8비트 설계로는 도저히 경쟁할 수 없는 필수적인 비즈니스 도구 시장으로 바뀌기 시작했다. 모토로라 68000과 내셔널 세미컨덕터 NS32016 같은 새로운 32비트 설계도 시장에 출시되고 있었다.

아콘은 이 시장에서 경쟁하는 방법을 모색하기 시작하여 아콘 비즈니스 컴퓨터라는 새로운 종이 설계를 만들었다. 그들은 BBC 마이크로의 10배 성능을 가지면서도 동일한 가격으로 기기를 생산하는 것을 목표로 했다. 이는 PC보다 성능이 뛰어나고 가격도 저렴할 것이다. 동시에 최근 출시된 애플 리사는 GUI 개념을 더 넓은 대중에게 알렸고, 미래가 GUI를 갖춘 기기에 속할 것임을 시사했다. 그러나 리사는 지원 칩, 대량의 메모리, 하드 디스크 드라이브 등 당시 매우 비싼 부품으로 가득 차 있어 9,995달러나 되었다.

엔지니어들은 모든 사용 가능한 CPU 설계를 연구하기 시작했다. 기존 16비트 설계에 대한 그들의 결론은 훨씬 비쌌고 여전히 "조금 형편없다"는 것이었다. BBC 마이크로 설계보다 약간만 더 높은 성능을 제공했을 뿐이었다. 또한 이러한 설계는 거의 항상 많은 지원 칩을 필요로 하여 컴퓨터 전체 비용을 증가시켰다. 이 시스템들은 설계 목표를 달성할 수 없었다. 그들은 또한 새로운 32비트 설계도 고려했지만, 이들은 훨씬 더 비쌌고 지원 칩 문제도 동일했다. 소피 윌슨에 따르면, 당시 테스트된 모든 프로세서들은 약 4&nbsp;Mbit/s의 대역폭으로 거의 동일한 성능을 보였다.

두 가지 중요한 사건이 아콘을 ARM의 길로 이끌었다. 하나는 캘리포니아 대학교 버클리에서 발표된 일련의 보고서로, 간단한 칩 설계가 시장에 나와 있는 최신 32비트 설계보다 훨씬 더 높은 성능을 가질 수 있음을 시사했다. 두 번째는 스티브 퍼버와 소피 윌슨이 빌 멘쉬와 그의 누이가 운영하는 회사인 웨스턴 디자인 센터를 방문한 것이었다. 이 회사는 MOS 팀의 논리적 후계자가 되었고 WDC 65C02와 같은 새로운 버전을 제공하고 있었다. 아콘 팀은 고등학생들이 애플 II 기기에서 칩 레이아웃을 생산하는 것을 보고, 누구든 할 수 있다는 생각을 했다. 이와 대조적으로, 현대 32비트 CPU를 개발하는 다른 설계 회사를 방문했을 때, 그들은 이미 설계의 H 버전을 진행 중임에도 불구하고 여전히 버그를 포함하고 있는 12명 이상의 팀을 발견했다. 이는 1983년 말 자체 CPU 설계인 아콘 RISC 머신을 시작하기로 한 그들의 결정을 확고히 했다.

### 설계 개념
원래 버클리 RISC 설계는 어떤 면에서 순수한 성능을 목표로 설계된 것이 아니라 교육 시스템이었다. RISC의 기본적인 레지스터 중심 및 로드/스토어 개념에 ARM은 6502의 잘 받아들여진 설계 특징들을 추가했다. 그중 가장 중요한 것은 인터럽트를 빠르게 처리하는 능력으로, 이를 통해 기기는 추가 외부 하드웨어 없이도 합리적인 입출력 성능을 제공할 수 있었다. 6502와 유사한 성능으로 인터럽트를 제공하기 위해, ARM 설계는 물리적 주소 공간을 총 64&nbsp;MB의 주소 지정 가능 공간으로 제한하여 26비트의 주소를 요구했다. 명령어가 4바이트(32비트) 길이이고 4바이트 경계에 정렬되어야 했기 때문에, 명령어 주소의 하위 2비트는 항상 0이었다. 이는 프로그램 카운터(PC)가 24비트만 필요하다는 것을 의미했으며, 8비트 프로세서 플래그와 함께 단일 32비트 레지스터에 저장할 수 있게 했다. 이는 인터럽트가 발생하면 전체 기기 상태를 단일 연산으로 저장할 수 있음을 의미했으며, 만약 PC가 전체 32비트 값이었다면 PC와 상태 플래그를 저장하기 위해 별도의 연산이 필요했을 것이다. 이 결정은 인터럽트 오버헤드를 절반으로 줄였다.

또 다른 변화이자 실제 성능 면에서 가장 중요한 변화 중 하나는 페이지 모드 DRAM을 활용하도록 명령어 집합을 수정한 것이었다. 최근 도입된 페이지 모드는 메모리에 대한 후속 접근이 DRAM 칩의 동일한 위치 또는 "페이지"에 대략적으로 위치할 경우 두 배 빠르게 실행될 수 있게 했다. 버클리 설계는 페이지 모드를 고려하지 않고 모든 메모리를 동일하게 취급했다. ARM 설계는 "S-사이클"이라는 특수 벡터형 메모리 접근 명령어를 추가하여 페이지 모드를 사용하여 단일 페이지에서 여러 레지스터를 채우거나 저장할 수 있게 했다. 이는 사용 가능한 경우 메모리 성능을 두 배로 높였으며, 특히 그래픽 성능에 중요했다.

버클리 RISC 설계는 레지스터 윈도를 사용하여 프로시저 호출에서 수행되는 레지스터 저장 및 복원 횟수를 줄였지만, ARM 설계는 이를 채택하지 않았다.

윌슨은 명령어 집합을 개발했으며, BBC 마이크로에서 BBC 베이직으로 프로세서 시뮬레이션을 작성하여 6502 보조 프로세서를 사용하여 실행했다. 이것은 아콘 엔지니어들이 올바른 방향으로 가고 있음을 확신시켰다. 윌슨은 아콘의 CEO인 헤르만 하우저에게 더 많은 자원을 요청했다. 하우저는 승인했고, 윌슨의 ISA를 기반으로 실제 프로세서를 설계할 소규모 팀을 구성했다. 공식 아콘 RISC 머신 프로젝트는 1983년 10월에 시작되었다.

### ARM1
섬네일|오른쪽|위로1.4|BBC 마이크로용 ARM1 2차 프로세서
아콘은 아콘을 위한 ROM 및 맞춤형 칩 공급원인 VLSI 테크놀로지를 "실리콘 파트너"로 선택했다. 아콘은 설계를 제공하고 VLSI는 레이아웃과 생산을 담당했다. ARM 실리콘의 첫 번째 샘플은 1985년 4월 26일에 처음 수령되어 테스트되었을 때 제대로 작동했다. ARM1으로 알려진 이 버전은 6&nbsp;MHz로 작동했다.

첫 번째 ARM 애플리케이션은 BBC 마이크로의 보조 프로세서였는데, 여기서는 지원 칩(VIDC, IOC, MEMC) 개발을 완료하기 위한 시뮬레이션 소프트웨어를 개발하고, ARM2 개발에 사용되는 CAD 소프트웨어의 속도를 높이는 데 도움이 되었다. 윌슨은 나중에 BBC 베이직을 ARM 어셈블리어로 다시 작성했다. 명령어 집합 설계에서 얻은 깊이 있는 지식 덕분에 코드가 매우 밀집되어 ARM BBC 베이직은 모든 ARM 에뮬레이터에 대한 매우 좋은 테스트가 되었다.

### ARM2
ARM1 보드 시뮬레이션 결과 1986년 말에 8&nbsp;MHz로 작동하는 ARM2 설계가 도입되었고, 1987년 초에는 10~12&nbsp;MHz로 속도가 향상된 버전이 출시되었다. 기본 아키텍처의 중요한 변화는 부스 곱셈기의 추가였다. 이전에는 곱셈을 소프트웨어로 수행해야 했다. 또한 FIQ(Fast Interrupt reQuest)라는 새로운 모드가 추가되어 레지스터 8부터 14까지를 인터럽트의 일부로 교체할 수 있게 되었다. 이는 FIQ 요청이 레지스터를 저장할 필요가 없어 인터럽트 속도를 더욱 높였다.

ARM2의 첫 번째 사용은 1986년 7월부터 BBC 마이크로 및 마스터 머신의 보조 프로세서로 제공된 ARM 평가 시스템, 내부 아콘 A500 개발 머신, 그리고 1987년 6월 6일에 출시된 아콘 아르키메데스 개인용 컴퓨터 모델 A305, A310, A440이었다.

드라이스톤 벤치마크에 따르면, ARM2는 아미가나 매킨토시 SE와 같은 일반적인 7&nbsp;MHz 68000 기반 시스템보다 약 7배 빠른 성능을 보였다. 16&nbsp;MHz로 작동하는 i386보다 2배 빨랐고, 멀티프로세서 VAX-11/784 슈퍼미니컴퓨터와 거의 같은 속도를 냈다. ARM2를 능가하는 유일한 시스템은 선 SPARC와 MIPS R2000 RISC 기반 워크스테이션이었다. 또한 CPU는 고속 I/O를 위해 설계되었기 때문에, 이 기기들에서 볼 수 있는 많은 지원 칩들을 없앴다. 특히, 워크스테이션에서 흔히 발견되는 전용 DMA 컨트롤러가 없었다. 그래픽 시스템 또한 메모리 및 타이밍에 대한 동일한 기본 가정에 기반하여 단순화되었다. 그 결과, dramatically 단순화된 설계는 고가 워크스테이션과 동등한 성능을 제공하면서도 현대 데스크톱과 유사한 가격대를 유지했다.

ARM2는 32비트 데이터 버스, 26비트 주소 공간, 그리고 27개의 32비트 프로세서 레지스터를 특징으로 했으며, 이 중 16개는 언제든지 접근 가능했다(PC 포함). ARM2는 트랜지스터 수가 30,000개에 불과했으며, 이는 6년 전에 출시된 모토로라의 68000 모델이 약 68,000개였던 것과 비교된다. 이러한 단순함의 대부분은 68000 트랜지스터의 약 1/4에서 1/3을 차지하는 마이크로코드의 부재와 (대부분의 당시 CPU와 마찬가지로) 캐시의 부재에서 비롯되었다. 이러한 단순함 덕분에 ARM2는 전력 소비가 적고 전원 공급 트랜지스터 수가 적어 열 관리가 더 간단했다. 그럼에도 불구하고 ARM2는 1987년 당시 인텔 80286을 사용하던 IBM PS/2 모델 50 (10&nbsp;MHz에서 1.8 MIPS)보다 뛰어난 성능을 제공했으며, 같은 해 후반에는 Intel 386 DX가 장착된 PS/2 70의 16&nbsp;MHz에서 2 MIPS와 비슷한 속도를 냈다.

후속작인 ARM3은 4 KB 캐시를 갖추어 성능을 더욱 향상시켰다. 주소 버스는 ARM6에서 32비트로 확장되었지만, 프로그램 코드는 상태 플래그를 위한 예약 비트 때문에 26비트 호환성 모드에서 여전히 메모리의 첫 64MB 내에 있어야 했다.

### 어드밴스드 RISC 머신즈 Ltd. – ARM6
[오른쪽|위로2.1|섬네일|마이크로프로세서 기반 [시스템 온 칩]]

[섬네일|위로1.4|ARM610 마이크로프로세서의 [다이 샷]]
1980년대 후반, 애플과 VLSI 테크놀로지는 아콘과 협력하여 ARM 코어의 새로운 버전을 개발하기 시작했다. 1990년, 아콘은 디자인 팀을 어드밴스드 RISC 머신즈 Ltd.라는 새로운 회사로 분사시켰다. 이 회사는 1998년 모회사인 ARM 홀딩스 plc가 런던 증권거래소와 나스닥에 상장되면서 ARM Ltd.가 되었다. 새로운 애플-ARM 협력은 결국 1992년 초에 처음 출시된 ARM6으로 발전했다. 애플은 ARM6 기반의 ARM610을 애플 뉴턴 PDA의 기반으로 사용했다.

### 초기 라이선스 사용자
1994년에 아콘은 ARM610을 RiscPC 컴퓨터의 주요 CPU로 사용했다. DEC는 ARMv4 아키텍처를 라이선스 받아 StrongARM을 생산했다. 233&nbsp;MHz에서 이 CPU는 단 1와트의 전력만 소비했다(최신 버전은 훨씬 적은 전력을 소비한다). 이 작업은 나중에 소송 합의의 일환으로 인텔에 넘어갔고, 인텔은 이 기회를 통해 i960 라인에 StrongARM을 보강했다. 인텔은 나중에 자체 고성능 구현인 XScale을 개발했으며, 이를 마벨에 매각했다. ARM 코어의 트랜지스터 수는 이러한 변화에도 불구하고 거의 동일하게 유지되었다. ARM2는 30,000개의 트랜지스터를 가졌고, ARM6는 35,000개로 증가했을 뿐이다.

### 시장 점유율
2005년에는 판매된 모든 휴대폰의 약 98%가 최소 하나의 ARM 프로세서를 사용했다. 2010년에는 ARM 아키텍처 기반 칩 제조업체들이 61억 개의 ARM 기반 프로세서를 출하했다고 보고했는데, 이는 스마트폰의 95%, 디지털 텔레비전 및 셋톱박스의 35%, 모바일 컴퓨터의 10%를 차지한다. 2011년에는 32비트 ARM 아키텍처가 모바일 장치에서 가장 널리 사용되는 아키텍처였고, 임베디드 시스템에서 가장 인기 있는 32비트 아키텍처였다. 2013년에는 100억 개가 생산되었고, "ARM 기반 칩은 전 세계 모바일 장치의 거의 60%에서 발견된다."

## 라이선스

[섬네일|위로1.4|[ST마이크로일렉트로닉스의 STM32&shy;F103VGT6 ARM Cortex-M3 마이크로컨트롤러의 다이 샷으로, 1&nbsp;MB 플래시 메모리를 포함한다.]]

### 코어 라이선스
ARM 홀딩스의 주요 사업은 IP 코어 판매이며, 라이선스 사용자는 이를 사용하여 해당 코어를 기반으로 마이크로컨트롤러(MCU), CPU, 그리고 시스템 온 칩을 제작한다. 원천 디자인 제조업자는 ARM 코어를 다른 부품과 결합하여 완전한 장치를 생산하며, 일반적으로 기존의 반도체 제조 공장(팹)에서 저렴한 비용으로 제작될 수 있고 상당한 성능을 제공한다. 가장 성공적인 구현은 ARM7TDMI로, 수억 개가 판매되었다. 아트멜은 ARM7TDMI 기반 임베디드 시스템에서 선구적인 설계 센터였다.

스마트폰, PDA 및 기타 모바일 장치에 사용되는 ARM 아키텍처는 ARMv5부터 까지 다양하다.

2009년, 일부 제조업체는 인텔 아톰 기반 넷북과 직접 경쟁하기 위해 ARM 아키텍처 CPU를 기반으로 한 넷북을 출시했다.

ARM 홀딩스는 비용 및 제공물에 따라 다양한 라이선스 조건을 제공한다. ARM 홀딩스는 모든 라이선스 사용자에게 ARM 코어의 통합 가능한 하드웨어 설명과 완전한 소프트웨어 개발 도구 세트(컴파일러, 디버거, 소프트웨어 개발 키트), 그리고 ARM CPU가 포함된 제조된 실리콘을 판매할 권리를 제공한다.

ARM의 코어 설계를 통합하는 SoC 패키지에는 엔비디아 테그라의 첫 3세대, CSR plc의 쿼트로 제품군, ST-에릭슨의 노바 및 노바토르, 실리콘 랩스의 Precision32 MCU, 텍사스 인스트루먼츠의 OMAP 제품, 삼성의 Hummingbird 및 삼성 엑시노스 제품, 애플의 A4, A5, 및 A5X가 포함된다. 그리고 NXP 반도체의 i.MX도 포함된다.

자체 칩 설계에 ARM 코어를 통합하려는 팹리스 라이선스 사용자들은 일반적으로 즉시 제조 가능한 검증된 반도체 IP 코어를 획득하는 데만 관심이 있다. 이러한 고객을 위해 ARM 홀딩스는 선택된 ARM 코어의 게이트 넷리스트 설명과 추상화된 시뮬레이션 모델 및 설계 통합 및 검증을 돕기 위한 테스트 프로그램을 제공한다. 통합 디바이스 제조업체(IDM) 및 파운드리 사업자를 포함한 더 야심찬 고객들은 합성 가능한 RTL (베릴로그) 형태로 프로세서 IP를 획득하는 것을 선택한다. 합성 가능한 RTL을 통해 고객은 아키텍처 수준의 최적화 및 확장을 수행할 수 있다. 이는 수정되지 않은 넷리스트로는 불가능한 이국적인 설계 목표(높은 클럭 속도, 매우 낮은 전력 소비, 명령어 집합 확장 등)를 달성할 수 있게 한다. ARM 홀딩스는 라이선스 사용자에게 ARM 아키텍처 자체를 재판매할 권리를 부여하지 않지만, 라이선스 사용자들은 칩 장치, 평가 보드 및 완전한 시스템과 같은 제조된 제품을 자유롭게 판매할 수 있다. 파운드리 업체는 특별한 경우일 수 있다. 그들은 ARM 코어를 포함하는 완성된 실리콘을 판매할 수 있을 뿐만 아니라, 일반적으로 다른 고객을 위해 ARM 코어를 재제조할 권리를 가진다.

ARM 홀딩스는 인식된 가치에 따라 IP 가격을 책정한다. 성능이 낮은 ARM 코어는 일반적으로 성능이 높은 코어보다 라이선스 비용이 낮다. 구현 측면에서, 합성 가능한 코어는 하드 매크로(블랙박스) 코어보다 비용이 더 많이 든다. 가격 문제를 복잡하게 만드는 것은, 삼성이나 후지쯔와 같이 ARM 라이선스를 보유한 파운드리 업체가 팹 고객에게 라이선스 비용을 줄여줄 수 있다는 점이다. 파운드리의 사내 설계 서비스를 통해 ARM 코어를 획득하는 대가로, 고객은 ARM의 초기 개발비(NRE) 지불을 줄이거나 없앨 수 있다.

사내 설계 서비스가 없는 전용 반도체 파운드리(TSMC 및 UMC 등)와 비교할 때, 후지쯔/삼성은 제조된 웨이퍼당 2~3배 더 높은 비용을 청구한다. 저용량에서 중용량 애플리케이션의 경우, 설계 서비스 파운드리는 더 낮은 전체 가격(라이선스 비용 보조를 통해)을 제공한다. 고용량 대량 생산 부품의 경우, 낮은 웨이퍼 가격을 통해 달성할 수 있는 장기적인 비용 절감은 ARM의 NRE 비용 영향을 줄여 전용 파운드리를 더 나은 선택으로 만든다.

ARM이 설계한 코어로 칩을 개발한 회사에는 아마존닷컴의 아나푸르나 랩스 자회사, 아날로그 디바이스, 애플, 어플라이드마이크로 (현재: MACOM 테크놀로지 솔루션즈), 아트멜, 브로드컴, 카비움, 사이프러스 세미컨덕터, 프리스케일 세미컨덕터 (현재 NXP 반도체), 화웨이, 인텔, 맥심 인터그레이티드, 엔비디아, NXP, 퀄컴, 르네사스, 삼성전자, ST마이크로일렉트로닉스, 텍사스 인스트루먼트, 자일링스가 있다.

### ARM Cortex 기술 라이선스 기반 구축
2016년 2월, ARM은 Built on ARM Cortex Technology 라이선스를 발표했으며, 이는 종종 Built on Cortex(BoC) 라이선스로 줄여 부른다. 이 라이선스는 기업이 ARM과 협력하여 ARM Cortex 설계를 수정할 수 있도록 허용한다. 이러한 설계 수정 사항은 다른 회사와 공유되지 않는다. 이러한 세미 커스텀 코어 설계는 브랜드 자유도 가지는데, 예를 들어 Kryo 280이 있다.

Built on ARM Cortex Technology의 현재 라이선스 사용자로는 퀄컴이 있다.

### 아키텍처 라이선스
기업은 ARM 명령어 집합을 사용하여 자체 CPU 코어를 설계하기 위한 ARM 아키텍처 라이선스도 얻을 수 있다. 이 코어는 ARM 아키텍처를 완전히 준수해야 한다. ARM 아키텍처를 구현하는 코어를 설계한 회사로는 애플, 어플라이드마이크로 (현재: 앰페어 컴퓨팅), 브로드컴, 카비움 (현재: 마벨), 디지털 이큅먼트 코퍼레이션, 인텔, 엔비디아, 퀄컴, 삼성전자, 후지쯔, NUVIA Inc. (2021년 퀄컴에 인수됨)가 있다.

### ARM 플렉서블 액세스
2019년 7월 16일, ARM은 ARM 플렉서블 액세스를 발표했다. ARM 플렉서블 액세스는 개발을 위해 포함된 ARM IP에 대한 무제한 액세스를 제공한다. 고객이 파운드리 테이프아웃 또는 프로토타이핑에 도달하면 제품당 라이선스 수수료가 필요하다.

지난 2년간 ARM의 최신 IP 중 75%가 ARM 플렉서블 액세스에 포함된다. 2019년 10월 현재:
* CPU: Cortex-A5, Cortex-A7, Cortex-A32, Cortex-A34, Cortex-A35, Cortex-A53, Cortex-R5, Cortex-R8, Cortex-R52, Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23, Cortex-M33
* GPU: Mali-G52, Mali-G31. Mali 드라이버 개발 키트(DDK) 포함.
* 인터커넥트: CoreLink NIC-400, CoreLink NIC-450, CoreLink CCI-400, CoreLink CCI-500, CoreLink CCI-550, ADB-400 AMBA, XHB-400 AXI-AHB
* 시스템 컨트롤러: CoreLink GIC-400, CoreLink GIC-500, PL192 VIC, BP141 TrustZone Memory Wrapper, CoreLink TZC-400, CoreLink L2C-310, CoreLink MMU-500, BP140 Memory Interface
* 보안 IP: CryptoCell-312, CryptoCell-712, TrustZone True Random Number Generator
* 주변기기 컨트롤러: PL011 UART, PL022 SPI, PL031 RTC
* 디버그 및 트레이스: CoreSight SoC-400, CoreSight SDC-600, CoreSight STM-500, CoreSight System Trace Macrocell, CoreSight Trace Memory Controller
* 디자인 키트: Corstone-101, Corstone-201
* 물리적 IP: Artisan PIK for Cortex-M33 TSMC 22ULL (메모리 컴파일러, 논리 라이브러리, GPIO 및 문서 포함)
* 도구 및 자료: Socrates IP ToolingARM Design Studio, Virtual System Models
* 지원: 표준 ARM 기술 지원, ARM 온라인 교육, 유지보수 업데이트, 현장 교육 및 설계 검토 크레딧

## 코어

ARM은 ARM 코어를 설계에 구현하는 벤더 목록(애플리케이션 특정 표준 제품(ASSP), 마이크로프로세서 및 마이크로컨트롤러)을 제공한다.

### ARM 코어의 응용 사례
[섬네일|오른쪽|위로1.2|[록칩 기반 쿼드코어 안드로이드 "미니 PC"인 트론스마트 MK908. 크기 비교를 위해 옆에 microSD 카드가 있다.]]

ARM 코어는 여러 제품, 특히 PDA 및 스마트폰에 사용된다. 몇 가지 컴퓨팅 사례는 마이크로소프트의 1세대 서피스, 서피스 2 및 포켓 PC 장치 (2002년 이후), 애플의 아이패드, 에이수스의 이패드 트랜스포머 태블릿 컴퓨터, 그리고 여러 크롬북 랩톱이다. 다른 제품으로는 애플의 아이폰 스마트폰 및 아이팟 포터블 미디어 플레이어, 캐논 파워샷 디지털 카메라, 닌텐도 스위치 하이브리드, Wii 보안 프로세서 및 3DS 휴대용 콘솔 게임기, 그리고 톰톰 내비게이션 시스템 등이 있다.

2005년, ARM은 맨체스터 대학교의 스핀내커 컴퓨터 개발에 참여했는데, 이 컴퓨터는 인간의 뇌를 시뮬레이션하기 위해 ARM 코어를 사용했다.

ARM 칩은 라즈베리 파이, 비글보드, 비글본, 팬더보드 및 기타 단일 보드 컴퓨터에도 사용되는데, 이는 매우 작고 저렴하며 전력 소모가 매우 적기 때문이다.

## 32비트 아키텍처
[alt=|섬네일|2015년 출시된 라즈베리 파이 2와 같은 인기 있는 [라즈베리 파이 단일 보드 컴퓨터의 구형 버전에는 ARMv7이 사용되었다.]]
[섬네일|오른쪽|위로1.2|[CuBox 단일 보드 컴퓨터 제품군에도 ARMv7이 사용된다.]]

**ARMv7-A** (AArch32 구현; 자세한 내용은 Armv8-A 섹션 참조)와 같은 32비트 ARM 아키텍처(**ARM32**)는  모바일 장치에서 가장 널리 사용되는 아키텍처였다.

1995년부터 ARM 아키텍처 참조 매뉴얼의 다양한 버전(외부 링크 참조)은 ARM 프로세서 아키텍처 및 명령어 집합에 대한 주요 문서 소스가 되었으며, 모든 ARM 프로세서가 지원해야 하는 인터페이스(예: 명령어 의미론)와 달라질 수 있는 구현 세부 사항을 구별한다. 아키텍처는 시간이 지남에 따라 발전했으며, 아키텍처의 7번째 버전인 ARMv7은 세 가지 아키텍처 "프로필"을 정의한다:
* A-프로필: "애플리케이션" 프로필로, Cortex-A 시리즈의 32비트 코어 및 일부 비-ARM 코어에 의해 구현된다.
* R-프로필: "실시간" 프로필로, Cortex-R 시리즈의 코어에 의해 구현된다.
* M-프로필: "마이크로컨트롤러" 프로필로, Cortex-M 시리즈의 대부분의 코어에 의해 구현된다.

아키텍처 프로필은 ARMv7에서 처음 정의되었지만, ARM은 나중에 ARMv6-M 아키텍처(Cortex M0/M0+/M1에 사용됨)를 더 적은 명령어를 가진 ARMv7-M 프로필의 하위 집합으로 정의했다.

### CPU 모드
M-프로필을 제외하고, 32비트 ARM 아키텍처는 구현된 아키텍처 기능에 따라 여러 CPU 모드를 지정한다. 특정 시점에 CPU는 하나의 모드에만 있을 수 있지만, 외부 이벤트(인터럽트) 또는 프로그래밍 방식으로 모드를 전환할 수 있다.
* 사용자 모드: 비특권 모드 중 유일한 모드.
* FIQ 모드: 프로세서가 고속 인터럽트 요청을 수락할 때마다 진입하는 특권 모드.
* IRQ 모드: 프로세서가 인터럽트를 수락할 때마다 진입하는 특권 모드.
* 감독자(svc) 모드: CPU가 리셋되거나 SVC 명령이 실행될 때마다 진입하는 특권 모드.
* 중단 모드: 미리 페치된 중단 또는 데이터 중단 예외가 발생할 때마다 진입하는 특권 모드.
* 정의되지 않은 모드: 정의되지 않은 명령 예외가 발생할 때마다 진입하는 특권 모드.
* 시스템 모드 (ARMv4 이상): 예외에 의해 진입되지 않는 유일한 특권 모드. 다른 특권 모드(사용자 모드 제외)에서 현재 프로그램 상태 레지스터(CPSR)의 모드 비트에 명시적으로 쓰는 명령을 실행해야만 진입할 수 있다.
* 모니터 모드 (ARMv6 및 ARMv7 보안 확장, ARMv8 EL3): ARM 코어에서 TrustZone 확장을 지원하기 위해 도입된 모니터 모드.
* Hyp 모드 (ARMv7 가상화 확장, ARMv8 EL2): CPU의 비보안 작동을 위한 포펙과 골드버그의 가상화 요구를 지원하는 하이퍼바이저 모드.
* 스레드 모드 (ARMv6-M, ARMv7-M, ARMv8-M): 특권 또는 비특권으로 지정될 수 있는 모드. 메인 스택 포인터(MSP) 또는 프로세스 스택 포인터(PSP) 중 어느 것을 사용할지는 특권 접근으로 CONTROL 레지스터에서도 지정할 수 있다. 이 모드는 RTOS 환경에서 사용자 작업을 위해 설계되었지만, 일반적으로 베어메탈에서 슈퍼 루프에 사용된다.
* 핸들러 모드 (ARMv6-M, ARMv7-M, ARMv8-M): 예외 처리(스레드 모드에서 처리되는 RESET 제외) 전용 모드. 핸들러 모드는 항상 MSP를 사용하며 특권 수준에서 작동한다.

### 명령어 집합
원래(및 후속) ARM 구현은 이전 아콘 마이크로컴퓨터에 사용된 훨씬 더 간단한 8비트 MOS 6502 프로세서처럼 마이크로코드 없이 하드와이어링되었다.

32비트 ARM 아키텍처(대부분의 64비트 아키텍처도 마찬가지)에는 다음 RISC 기능이 포함되어 있다.
* 로드-스토어 아키텍처.
* 원래 아키텍처 버전에서는 정렬되지 않은 메모리 접근을 지원하지 않는다. ARMv6 및 이후 버전(일부 마이크로컨트롤러 버전 제외)은 일부 제한(예: 원자성 보장 없음)이 있지만 하프워드 및 단일 워드 로드/스토어 명령에 대해 정렬되지 않은 접근을 지원한다.
* 균일한 16 × 32비트 레지스터 파일 (프로그램 카운터, 스택 포인터, 링크 레지스터 포함).
* 디코딩 및 파이프라이닝을 용이하게 하기 위한 32비트의 고정 명령어 폭. 코드 밀도 감소 비용을 감수한다. 나중에 Thumb 명령어 집합이 16비트 명령어를 추가하여 코드 밀도를 높였다.
* 주로 단일 클럭 사이클 실행.

인텔 80286 및 모토로라 68020과 같은 프로세서와 비교하여 더 간단한 설계를 보완하기 위해 몇 가지 추가 설계 기능이 사용되었다.
* 대부분의 명령어에 대한 조건부 실행은 분기 오버헤드를 줄이고 초기 칩의 분기 예측 부재를 보완한다.
* 산술 명령은 원하는 경우에만 조건 코드를 변경한다.
* 32비트 배럴 시프터는 대부분의 산술 명령 및 주소 계산에서 성능 저하 없이 사용할 수 있다.
* 강력한 인덱싱 주소 지정 방식을 가지고 있다.
* 링크 레지스터는 빠른 리프 함수 호출을 지원한다.
* 간단하지만 빠른 2단계 우선순위 인터럽트 서브시스템은 레지스터 뱅크를 전환한다.

#### 산술 명령어
ARM에는 더하기, 빼기, 곱하기를 위한 정수 산술 연산이 포함되어 있다. 아키텍처의 일부 버전은 나누기 연산도 지원한다.

ARM은 32비트 결과 또는 64비트 결과와 함께 32비트 × 32비트 곱셈을 지원하지만, Cortex-M0/M0+/M1 코어는 64비트 결과를 지원하지 않는다. 일부 ARM 코어는 16비트 × 16비트 및 32비트 × 16비트 곱셈도 지원한다.

나누기 명령어는 다음 ARM 아키텍처에만 포함된다.
* Armv7-M 및 Armv7E-M 아키텍처는 항상 나누기 명령어를 포함한다.
* Armv7-R 아키텍처는 항상 Thumb 명령어 집합에 나누기 명령어를 포함하지만, 32비트 명령어 집합에는 선택적으로 포함된다.
* Armv7-A 아키텍처는 나누기 명령어를 선택적으로 포함한다. 이 명령어는 구현되지 않을 수도 있고, Thumb 명령어 집합에만 구현되거나, Thumb 및 ARM 명령어 집합 모두에 구현되거나, 가상화 확장이 포함된 경우에만 구현될 수 있다.

#### 레지스터

R0부터 R7까지의 레지스터는 모든 CPU 모드에서 동일하며, 절대 뱅크되지 않는다.

R8부터 R12까지의 레지스터는 FIQ 모드를 제외한 모든 CPU 모드에서 동일하다. FIQ 모드는 자체적으로 구별되는 R8부터 R12까지의 레지스터를 가진다.

R13과 R14는 시스템 모드를 제외한 모든 특권 CPU 모드에서 뱅크된다. 즉, 예외로 인해 진입할 수 있는 각 모드는 자체적인 R13과 R14를 가진다. 이 레지스터들은 일반적으로 각각 스택 포인터와 함수 호출의 반환 주소를 포함한다.

별칭:
* R13은 또한 스택 포인터인 SP로 참조된다.
* R14는 또한 링크 레지스터인 LR로 참조된다.
* R15는 또한 프로그램 카운터인 PC로 참조된다.

현재 프로그램 상태 레지스터(CPSR)에는 다음 32비트가 있다.
* M (비트 0–4)은 프로세서 모드 비트이다.
* T (비트 5)는 Thumb 상태 비트이다.
* F (비트 6)는 FIQ 비활성화 비트이다.
* I (비트 7)는 IRQ 비활성화 비트이다.
* A (비트 8)는 부정확한 데이터 중단 비활성화 비트이다.
* E (비트 9)는 데이터 엔디언 비트이다.
* IT (비트 10–15 및 25–26)는 if-then 상태 비트이다.
* GE (비트 16–19)는 크거나 같음 비트이다.
* DNM (비트 20–23)는 수정 금지 비트이다.
* J (비트 24)는 자바 상태 비트이다.
* Q (비트 27)는 스티키 오버플로 비트이다.
* V (비트 28)는 오버플로 비트이다.
* C (비트 29)는 캐리/차용/확장 비트이다.
* Z (비트 30)는 제로 비트이다.
* N (비트 31)는 음수/작음 비트이다.

#### 조건부 실행
거의 모든 ARM 명령어에는 조건부 실행이라는 기능이 있으며, 4비트 조건 코드 선택기(프레디케이트)로 구현된다. 무조건 실행을 허용하기 위해 4비트 코드 중 하나는 명령어가 항상 실행되도록 한다. 다른 대부분의 CPU 아키텍처는 분기 명령에만 조건 코드를 가지고 있다.

프레디케이트는 명령어 코드의 32비트 중 4비트를 차지하여 메모리 접근 명령어의 변위 사용 가능한 인코딩 비트를 크게 줄이지만, 작은 `if` 문에 대한 코드를 생성할 때 분기 명령어를 피할 수 있다. 분기 명령어 자체를 없애는 것 외에도, 이는 건너뛴 명령어당 단 한 사이클의 비용으로 페치/디코드/실행 파이프라인을 유지한다.

조건부 실행의 좋은 예시를 제공하는 알고리즘은 뺄셈 기반의 유클리드 호제법으로 최대 공약수를 계산하는 것이다. C 프로그래밍 언어로 이 알고리즘은 다음과 같이 작성할 수 있다.


```c
int gcd(int a, int b) {
  while (a != b)  // a < b 또는 a > b일 때 루프에 진입하지만, a == b일 때는 아님
    if (a > b)   // a > b일 때 이를 수행
      a -= b;
    else         // a < b일 때 이를 수행 (while 조건에서 a != b를 확인하므로 "if (a < b)"는 필요 없음)
      b -= a;
  return a;
}
```


동일한 알고리즘은 ARM 명령어에 더 가깝게 다음과 같이 다시 작성할 수 있다.


```c
loop:
    // a와 b를 비교
    GT = a > b;
    LT = a < b;
    NE = a != b;

    // 플래그 결과에 따라 연산 수행
    if (GT) a -= b;    // '보다 큼'인 경우에만 뺄셈
    if (LT) b -= a;    // '보다 작음'인 경우에만 뺄셈
    if (NE) goto loop; // 비교값이 같지 않은 경우에만 루프
    return a;
```

그리고 어셈블리어로 다음과 같이 코딩할 수 있다.

```nasm
; r0에 a 할당, r1에 b 할당
loop:   CMP    r0, r1       ; (a ≠ b)이면 "NE" 조건 설정,
                            ; (a > b)이면 "GT" 조건 설정,
                            ; (a < b)이면 "LT" 조건 설정
        SUBGT  r0, r0, r1   ; "GT" (Greater Than)이면 a = a − b
        SUBLT  r1, r1, r0   ; "LT" (Less    Than)이면 b = b − a
        BNE  loop           ; "NE" (Not Equal)이면 loop
        B    lr             ; 반환
```

이는 `then`과 `else` 절 주변의 분기를 피한다. 만약 `r0`과 `r1`이 같다면 `SUB` 명령어 중 어느 것도 실행되지 않아, 예를 들어 `SUBLE`(작거나 같음)가 사용되었을 경우 루프 상단에서 `while` 검사를 구현하기 위한 조건부 분기가 필요 없어진다.

Thumb 코드가 더 밀집된 인코딩을 제공하는 방법 중 하나는 비분기 명령어에서 4비트 선택기를 제거하는 것이다.

#### 기타 기능
명령어 집합의 또 다른 특징은 시프트 및 회전 연산을 데이터 처리(산술, 논리, 레지스터-레지스터 이동) 명령어에 포함시킬 수 있다는 점이다. 따라서, 예를 들어 C 언어의 문:


```c
a += (j << 2);
```


는 한 단어, 한 사이클 명령어:


```nasm
ADD  Ra, Ra, Rj, LSL #2
```


로 표현될 수 있다. 이는 일반적인 ARM 프로그램이 예상보다 더 밀집되어 메모리 접근이 적어져 파이프라인이 더 효율적으로 사용된다는 결과를 낳는다.

ARM 프로세서는 다른 RISC 아키텍처에서는 보기 드문 기능도 가지고 있는데, 예를 들어 PC-상대 주소 지정(실제로 32비트 ARM에서는 PC가 16개의 레지스터 중 하나이다)과 전후 증분 주소 지정 모드 등이 있다.

ARM 명령어 집합은 시간이 지남에 따라 증가했다. 예를 들어 일부 초기 ARM 프로세서(ARM7TDMI 이전)는 2바이트 수량을 저장하는 명령어가 없었다.

#### 파이프라인 및 기타 구현 문제
ARM7 및 이전 구현은 3단계 파이프라인을 가지고 있다. 단계는 페치, 디코드, 실행이다. ARM9와 같은 고성능 설계는 더 깊은 파이프라인을 가지고 있다. Cortex-A8은 13단계이다. 고성능을 위한 추가 구현 변경 사항에는 더 빠른 가산기와 더 광범위한 분기 예측 논리가 포함된다. 예를 들어 ARM7DI와 ARM7DMI 코어의 차이점은 개선된 곱셈기였다. 따라서 "M"이 추가되었다.

#### 코프로세서
ARM 아키텍처(Armv8 이전)는 MCR, MRC, MRRC, MCRR 및 유사한 명령어를 사용하여 주소 지정할 수 있는 "코프로세서"를 통해 명령어 집합을 확장하는 비침해적인 방법을 제공한다. 코프로세서 공간은 논리적으로 0부터 15까지 16개의 코프로세서로 나뉘며, 코프로세서 15(cp15)는 캐시 및 MMU 작업 관리와 같은 일부 일반적인 제어 기능을 위해 예약되어 있다.

ARM 기반 기기에서 주변 장치는 일반적으로 물리적 레지스터를 ARM 메모리 공간, 코프로세서 공간에 매핑하거나 프로세서에 연결된 다른 장치(버스)에 연결하여 프로세서에 연결된다. 코프로세서 접근은 지연 시간이 짧으므로, 일부 주변 장치(예: XScale 인터럽트 컨트롤러)는 메모리를 통해서와 코프로세서를 통해서 모두 접근할 수 있다.

다른 경우, 칩 설계자는 코프로세서 메커니즘을 사용하여 하드웨어만 통합한다. 예를 들어, 이미지 처리 엔진은 특정 HDTV 트랜스코딩 기본 요소를 지원하는 특수 연산을 가진 코프로세서와 결합된 작은 ARM7TDMI 코어일 수 있다.

### 디버깅

모든 최신 ARM 프로세서에는 하드웨어 디버깅 기능이 포함되어 있어 소프트웨어 디버거가 리셋부터 코드의 정지, 단계별 실행, 중단점 설정과 같은 작업을 수행할 수 있다. 이러한 기능은 JTAG 지원을 사용하여 구축되지만, 일부 최신 코어는 ARM의 자체 2선 "SWD" 프로토콜을 선택적으로 지원한다. ARM7TDMI 코어에서 "D"는 JTAG 디버그 지원을 나타내고, "I"는 "EmbeddedICE" 디버그 모듈의 존재를 나타냈다. ARM7 및 ARM9 코어 세대의 경우, JTAG를 통한 EmbeddedICE는 사실상 디버그 표준이었지만 아키텍처적으로 보장된 것은 아니었다.

ARMv7 아키텍처는 아키텍처 수준에서 기본적인 디버그 기능을 정의한다. 여기에는 "디버그 모드"에서의 중단점, 감시점, 명령어 실행이 포함된다. 유사한 기능은 EmbeddedICE에서도 제공되었다. "정지 모드" 및 "모니터" 모드 디버깅이 모두 지원된다. 디버그 기능에 접근하는 데 사용되는 실제 전송 메커니즘은 아키텍처적으로 지정되지 않지만, 구현은 일반적으로 JTAG 지원을 포함한다.

별도의 ARM "CoreSight" 디버그 아키텍처가 있으며, 이는 ARMv7 프로세서에 아키텍처적으로 요구되는 것은 아니다.

#### 디버그 액세스 포트
디버그 액세스 포트(DAP)는 ARM 디버그 인터페이스의 구현이다.
직렬 와이어 JTAG 디버그 포트(SWJ-DP)와 직렬 와이어 디버그 포트(SW-DP)의 두 가지 지원되는 구현이 있다.
CMSIS-DAP는 호스트 PC의 다양한 디버깅 소프트웨어가 USB를 통해 하드웨어 디버거에서 실행되는 펌웨어와 통신하는 방법을 설명하는 표준 인터페이스이며, 이 펌웨어는 SWD 또는 JTAG를 통해 CoreSight 지원 ARM Cortex CPU와 통신한다.

### DSP 향상 명령어
디지털 신호 처리 및 멀티미디어 애플리케이션을 위한 ARM 아키텍처를 개선하기 위해 DSP 명령이 명령어 집합에 추가되었다. 이는 ARMv5TE 및 ARMv5TEJ 아키텍처 이름의 "E"로 표시된다. E-변형은 또한 T, D, M, I를 의미한다.

새로운 명령어들은 DSP 아키텍처에서 흔히 볼 수 있다. 여기에는 부호 있는 곱셈-누산 변형, 포화 더하기 및 빼기, 선행 0 계산이 포함된다.

1999년에 처음 도입된 이 코어 명령어 집합 확장은 이전에 "피콜로"로 알려진 ARM의 DSP 코프로세서와 대조를 이뤘다. 피콜로는 별도의 프로그램 카운터를 사용하는 호환되지 않는 별개의 명령어 집합을 사용했다. 피콜로 명령어는 16개의 32비트 레지스터로 구성된 별개의 레지스터 파일을 사용했으며, 일부 명령어는 레지스터를 결합하여 48비트 누산기로 사용하고 다른 명령어는 16비트 하프 레지스터를 직접 다뤘다. 일부 명령어는 두 개의 16비트 값을 병렬로 처리할 수 있었다. 피콜로 레지스터 파일과의 통신은 8개의 32비트 항목으로 구성된 두 개의 버퍼를 통해 피콜로 로드 및 피콜로 저장 코프로세서 명령을 통해 이루어졌다. 히타치의 SH-DSP 및 모토로라의 68356과 같은 다른 접근 방식을 연상시킨다고 설명된 피콜로는 전용 로컬 메모리를 사용하지 않았고, DSP 피연산자 검색을 위해 ARM 코어의 대역폭에 의존하여 동시 성능에 영향을 미쳤다. 피콜로의 별개의 명령어 집합은 또한 "좋은 컴파일러 대상"이 아니라는 것이 입증되었다.

### 멀티미디어용 SIMD 확장
ARMv6 아키텍처에 도입된 이 기능은 고급 SIMD의 전신이었고, Neon으로도 불렸다.

### Jazelle

Jazelle DBX (Direct Bytecode eXecution)는 자바 바이트코드를 ARM 아키텍처에서 기존 ARM 및 Thumb 모드와 함께 세 번째 실행 상태(및 명령어 집합)로 직접 실행할 수 있게 해주는 기술이다. 이 상태에 대한 지원은 ARMv5TEJ 아키텍처 및 ARM9EJ-S, ARM7EJ-S 코어 이름의 "J"로 표시된다. 이 상태에 대한 지원은 ARMv6부터(ARMv7-M 프로필 제외) 필수적이지만, 최신 코어는 하드웨어 가속을 제공하지 않는 단순한 구현만 포함한다.

### Thumb
컴파일된 코드 밀도를 개선하기 위해 ARM7TDMI(1994년 출시) 이후의 프로세서들은 자체 상태를 가진 Thumb 압축 명령어 집합을 특징으로 한다. ("TDMI"의 "T"는 Thumb 기능을 나타낸다.) 이 상태에서 프로세서는 ARM 명령어 집합의 하위 집합에 대한 간결한 16비트 인코딩인 Thumb 명령어 집합을 실행한다. 대부분의 Thumb 명령어는 일반 ARM 명령어로 직접 매핑된다. 공간 절약은 명령어 피연산자 중 일부를 암묵적으로 만들고 ARM 명령어 집합 상태에서 실행되는 ARM 명령어에 비해 가능성을 제한하는 데서 비롯된다.

Thumb에서는 16비트 연산 코드가 기능이 적다. 예를 들어, 분기만 조건부일 수 있으며, 많은 연산 코드는 CPU의 일반 목적 레지스터 중 절반만 접근하도록 제한된다. 더 짧은 연산 코드는 일부 연산에 추가 명령어가 필요함에도 불구하고 전반적으로 향상된 코드 밀도를 제공한다. 메모리 포트 또는 버스 폭이 32비트 미만으로 제한되는 상황에서는, 더 짧은 Thumb 연산 코드가 32비트 ARM 코드에 비해 향상된 성능을 제공한다. 이는 제한된 메모리 대역폭을 통해 프로세서로 로드해야 하는 프로그램 코드가 더 적을 수 있기 때문이다.

크레이-1이나 히타치 슈퍼H와 같이 가변 길이(16비트 또는 32비트) 명령어를 가진 프로세서 아키텍처와 달리, ARM 및 Thumb 명령어 집합은 서로 독립적으로 존재한다. 게임보이 어드밴스와 같은 임베디드 하드웨어는 일반적으로 완전한 32비트 데이터 경로로 접근할 수 있는 소량의 RAM을 가지고 있으며, 대부분은 16비트 또는 더 좁은 보조 데이터 경로를 통해 접근된다. 이러한 상황에서는 일반적으로 Thumb 코드를 컴파일하고 가장 CPU 집약적인 섹션 중 일부를 완전한 32비트 ARM 명령어를 사용하여 수동으로 최적화하여 이러한 더 넓은 명령어를 32비트 버스 접근 가능 메모리에 배치하는 것이 합리적이다.

Thumb 명령어 디코더를 가진 최초의 프로세서는 ARM7TDMI였다. ARM9부터 시작하여 32비트 명령어 집합을 지원하는 모든 프로세서는 XScale을 포함하여 Thumb 명령어 디코더를 포함했다. 여기에는 ARM이 라이선스한 히타치 슈퍼H (1992년)에서 채택된 명령어가 포함된다. ARM의 가장 작은 프로세서 제품군(Cortex M0 및 M1)은 최저 비용 애플리케이션에서 최대 성능을 위해 16비트 Thumb 명령어 집합만 구현한다. 32비트 주소 지정을 지원하지 않는 ARM 프로세서도 Thumb을 생략한다.

### Thumb-2

Thumb-2 기술은 2003년에 발표된 ARM1156&nbsp;코어에 도입되었다. Thumb-2는 Thumb의 제한된 16비트 명령어 집합을 추가 32비트 명령어로 확장하여 명령어 집합에 더 넓은 범위를 부여함으로써 가변 길이 명령어 집합을 생성한다. Thumb-2의 목표는 32비트 메모리에서 Thumb과 유사한 코드 밀도를 ARM 명령어 집합과 유사한 성능으로 달성하는 것이었다.

Thumb-2는 비트 필드 조작, 테이블 분기, 조건부 실행으로 Thumb 명령어 집합을 확장한다. 동시에 ARM 명령어 집합도 두 명령어 집합에서 동등한 기능을 유지하도록 확장되었다. 새로운 "통합 어셈블리 언어"(UAL)는 동일한 소스 코드에서 Thumb 또는 ARM 명령어를 생성하는 것을 지원한다. ARMv7 프로세서에서 볼 수 있는 Thumb 버전은 기본적으로 ARM 코드만큼 능력이 있다(인터럽트 핸들러 작성 능력 포함). 이는 약간의 주의와 새로운 "IT"(if-then) 명령어를 사용해야 한다. 이 명령어는 테스트된 조건 또는 그 역에 따라 최대 4개의 연속 명령어를 실행할 수 있도록 허용한다. ARM 코드로 컴파일할 때는 이것이 무시되지만, Thumb으로 컴파일할 때는 실제 명령어를 생성한다. 예를 들면:


```nasm
; if (r0 == r1)
CMP r0, r1       ; r0과 r1을 비교
ITE EQ           ; ARM: 코드 없음... Thumb: IT 명령어
; then r0 = r2;
MOVEQ r0, r2     ; ARM: 조건부; Thumb: ITE 'T' (then)를 통한 조건
; else r0 = r3;
MOVNE r0, r3     ; ARM: 조건부; Thumb: ITE 'E' (else)를 통한 조건
; 참고로 Thumb MOV 명령어는 "EQ" 또는 "NE"를 인코딩할 비트가 없습니다.
```


모든 ARMv7 칩은 Thumb 명령어 집합을 지원한다. ARMv7을 지원하는 Cortex-A 시리즈의 모든 칩, 모든 Cortex-R 시리즈, 모든 ARM11 시리즈는 "ARM 명령어 집합 상태"와 "Thumb 명령어 집합 상태"를 모두 지원하는 반면, Cortex-M 시리즈의 칩은 Thumb 명령어 집합만 지원한다.

### Thumb 실행 환경 (ThumbEE)
Jazelle RCT (Runtime Compilation Target)로 판매되었던 ThumbEE(일부 ARM 문서에서는 Thumb-2EE로 잘못 불림)는 2005년에 발표되었고 2011년에 사용이 중단되었다. 이는 Cortex-A8 프로세서에서 처음 등장했다. ThumbEE는 Thumb-2 확장 명령어 집합에 작은 변경 사항을 적용하여 네 번째 명령어 집합 상태를 제공한다. 이러한 변경 사항은 관리형 실행 환경에서 런타임에 생성된 코드(예: JIT 컴파일)에 특히 적합하도록 명령어 집합을 만든다. ThumbEE는 자바, C 샤프, 펄, 파이썬과 같은 언어의 대상이며, JIT 컴파일러가 성능 저하 없이 더 작은 컴파일된 코드를 출력할 수 있도록 한다.

ThumbEE가 제공하는 새로운 기능에는 모든 로드 및 스토어 명령어에 대한 자동 널 포인터 검사, 배열 경계 검사를 수행하는 명령어, 핸들러를 호출하는 특수 명령어가 포함된다. 또한, Thumb-2 기술을 활용하므로 ThumbEE는 레지스터 r8–r15(Jazelle/DBX Java VM 상태가 저장되는 곳)에 접근할 수 있도록 한다. 핸들러는 자주 호출되는 코드의 작은 부분으로, 새로운 객체를 위한 메모리 할당과 같은 고수준 언어를 구현하는 데 일반적으로 사용된다. 이러한 변경 사항은 몇몇 연산 코드를 재활용하고, 코어가 새로운 ThumbEE 상태에 있다는 것을 아는 데서 비롯된다.

2011년 11월 23일, ARM은 ThumbEE 명령어 집합의 모든 사용을 중단했고, Armv8은 ThumbEE 지원을 제거한다.

### 부동소수점 (VFP)
VFP (Vector Floating Point) 기술은 ARM 아키텍처에 대한 FPU 코프로세서 확장이며 (Armv8에서는 다르게 구현되며 – 코프로세서는 거기에 정의되어 있지 않다). 이는 ANSI/IEEE Std 754-1985 이진 부동소수점 산술 표준을 완전히 준수하는 저비용의 단정밀도 및 배정밀도 부동소수점 연산을 제공한다. VFP는 PDA, 스마트폰, 음성 압축 및 압축 해제, 3차원 그래픽 및 디지털 오디오, 프린터, 셋톱박스, 자동차 애플리케이션과 같은 광범위한 애플리케이션에 적합한 부동소수점 연산을 제공한다. VFP 아키텍처는 짧은 "벡터 모드" 명령어 실행을 지원하기 위한 것이었지만, 이들은 각 벡터 요소를 순차적으로 처리했기 때문에 진정한 SIMD 벡터 병렬 처리의 성능을 제공하지 못했다. 따라서 이 벡터 모드는 도입 직후 제거되었고, 훨씬 더 강력한 고급 SIMD(Neon으로도 불림)로 대체되었다.

ARM Cortex-A8과 같은 일부 장치는 전체 VFP 모듈 대신 축소된 VFPLite 모듈을 가지고 있으며, 부동소수점 연산당 약 10배 더 많은 클럭 사이클을 요구한다. Armv8 이전 아키텍처는 코프로세서 인터페이스를 통해 부동소수점/SIMD를 구현했다. ARM 기반 프로세서에서 코프로세서 인터페이스를 사용하는 다른 부동소수점 및 SIMD 장치에는 FPA, FPE, iwMMXt가 포함되며, 일부는 트랩을 통해 소프트웨어로 구현되었지만 하드웨어로 구현될 수도 있었다. 이들은 VFP와 동일한 기능 중 일부를 제공하지만 opcode 호환성은 없다. FPA10은 또한 확장 정밀도를 제공하지만, IEEE 754에서 요구하는 정확한 반올림은 단정밀도에서만 구현한다.

; VFPv1: 구식
; VFPv2: ARMv5TE, ARMv5TEJ 및 ARMv6 아키텍처의 ARM 명령어 집합에 대한 선택적 확장. VFPv2는 16개의 64비트 FPU 레지스터를 가진다.
; VFPv3 또는 VFPv3-D32: 대부분의 Cortex-A8 및 A9 ARMv7 프로세서에 구현된다. VFPv2와 하위 호환되지만, 부동소수점 예외를 트랩할 수 없다. VFPv3는 표준으로 32개의 64비트 FPU 레지스터를 가지며, 스칼라, 부동소수점 및 배정밀도 간 변환을 위한 VCVT 명령어를 추가하고, 상수를 FPU 레지스터에 로드할 수 있도록 VMOV에 즉시 모드를 추가한다.
; VFPv3-D16: 위와 동일하나, 16개의 64비트 FPU 레지스터만 가진다. Cortex-R4 및 R5 프로세서와 테그라 2 (Cortex-A9)에 구현된다.
; VFPv3-F16: 흔하지 않음; 저장 형식으로 IEEE754-2008 반정밀도 (16비트) 부동소수점을 지원한다.
; VFPv4 또는 VFPv4-D32: Cortex-A12 및 A15 ARMv7 프로세서에 구현된다. Cortex-A7은 Neon이 있는 FPU의 경우 선택적으로 VFPv4-D32를 가진다. VFPv4는 표준으로 32개의 64비트 FPU 레지스터를 가지며, VFPv3의 기능에 저장 형식으로 반정밀도 지원과 퓨즈드 곱셈-덧셈 명령어를 모두 추가한다.
; VFPv4-D16: 위와 동일하나, 16개의 64비트 FPU 레지스터만 가진다. Neon이 없는 FPU의 경우 Cortex-A5 및 A7 프로세서에 구현된다.
; VFPv5-D16-M: 단정밀도 및 배정밀도 부동소수점 코어 옵션이 있을 경우 Cortex-M7에 구현된다.

데비안 리눅스 및 우분투와 리눅스 민트와 같은 파생 배포판에서 **armhf** (**ARM 하드 플로트**)는 추가 VFP3-D16 부동소수점 하드웨어 확장(및 Thumb-2)을 포함하는 ARMv7 아키텍처를 의미한다. 소프트웨어 패키지와 크로스 컴파일러 도구는 armhf 대 arm/armel 접미사를 사용하여 구별한다.

### 고급 SIMD (Neon)
고급 SIMD 확장 (Neon 또는 "MPE" Media Processing Engine으로도 알려짐)은 미디어 및 신호 처리 애플리케이션을 위한 표준화된 가속을 제공하는 64비트 및 128비트 SIMD 명령어 집합이다. Neon은 모든 Cortex-A8 장치에 포함되지만, Cortex-A9 장치에서는 선택 사항이다. Neon은 10&nbsp;MHz로 작동하는 CPU에서 MP3 오디오 디코딩을 실행할 수 있으며, 13&nbsp;MHz에서 GSM 적응형 멀티레이트 (AMR) 음성 코덱을 실행할 수 있다. 포괄적인 명령어 집합, 별도의 레지스터 파일, 독립적인 실행 하드웨어를 특징으로 한다. Neon은 8비트, 16비트, 32비트, 64비트 정수 및 단정밀도(32비트) 부동소수점 데이터와 오디오 및 비디오 처리, 그래픽 및 게임 처리를 위한 SIMD 연산을 지원한다. Neon에서 SIMD는 최대 16개의 연산을 동시에 지원한다. Neon 하드웨어는 VFP에서 사용되는 부동소수점 레지스터를 공유한다. ARM Cortex-A8 및 Cortex-A9와 같은 장치는 128비트 벡터를 지원하지만 한 번에 64비트로 실행하며, 최신 Cortex-A15 장치는 한 번에 128비트로 실행할 수 있다.

Armv7 장치의 Neon의 특이한 점은 모든 서브노멀 수를 0으로 플러시한다는 것이다. 그 결과 GCC 컴파일러는 데노멀 손실을 허용하는 가 켜져 있지 않으면 Neon을 사용하지 않는다. Armv8 이후 정의된 "향상된" Neon은 이러한 특이한 점이 없지만,  현재까지 Neon 명령어를 활성화하려면 동일한 플래그가 여전히 필요하다. 반면에 GCC는 AArch64에서 Armv8에 대해 Neon을 안전하다고 간주한다.

ProjectNe10은 ARM의 첫 번째 오픈 소스 프로젝트이다(시작부터; 이전 프로젝트를 인수하여 현재 Mbed TLS라는 이름이 붙었다). Ne10 라이브러리는 Neon과 C(호환성을 위해)로 작성된 공통적이고 유용한 함수들의 집합이다. 이 라이브러리는 개발자들이 Neon 최적화를 배우지 않고도 Neon을 사용할 수 있도록 만들어졌지만, 일반적인 DSP, 산술 및 이미지 처리 루틴에 대한 고도로 최적화된 Neon 내장 함수 및 어셈블리 코드 예제 세트 역할도 한다. 소스 코드는 GitHub에서 사용할 수 있다.

### ARM 헬륨 기술
헬륨은 M-프로필 벡터 확장(MVE)이다. 150개 이상의 스칼라 및 벡터 명령을 추가한다.

### 보안 확장

#### TrustZone (Cortex-A 프로필용)
TrustZone 기술로 판매되는 보안 확장은 ARMv6KZ 및 이후 애플리케이션 프로필 아키텍처에 있다. 하드웨어 기반 접근 제어로 지원되는 두 개의 가상 프로세서를 제공하여 SoC에 다른 전용 보안 코어를 추가하는 저렴한 대안을 제공한다. 이를 통해 애플리케이션 코어는 두 가지 상태, 즉 월드(기능 도메인의 다른 이름과의 혼동을 줄이기 위해) 사이를 전환하여 더 신뢰할 수 있는 월드에서 덜 신뢰할 수 있는 월드로 정보가 유출되는 것을 방지할 수 있다. 이 월드 전환은 일반적으로 프로세서의 다른 모든 기능과 직교하므로, 각 월드는 동일한 코어를 사용하면서 서로 독립적으로 작동할 수 있다. 그런 다음 메모리와 주변 장치는 코어의 작동 월드를 인식하고 이를 사용하여 장치의 비밀 및 코드에 대한 접근 제어를 제공할 수 있다.

일반적으로, 풍부한 운영 체제는 덜 신뢰할 수 있는 월드에서 실행되고, 더 작은 보안 특화 코드는 더 신뢰할 수 있는 월드에서 실행되어 공격 표면을 줄이는 것을 목표로 한다. 일반적인 응용 프로그램에는 ARM 기반 장치에서 미디어 사용을 제어하는 DRM 기능과 장치의 무단 사용 방지가 포함된다.

실제로, 독점 TrustZone 구현의 특정 세부 사항이 공개적으로 검토를 위해 공개되지 않았기 때문에, 주어진 위협 모델에 대해 어떤 수준의 보장이 제공되는지는 불분명하지만, 공격에 면역되지 않는다.

Open Virtualization은 TrustZone을 위한 트러스트 월드 아키텍처의 오픈 소스 구현이다.

AMD는 TrustZone 기술을 라이선스하여 보안 프로세서 기술에 통합했다. AMD의 APU에는 보안 처리를 담당하는 Cortex-A5 프로세서가 포함되어 있으며, 일부 제품에서 활성화되지만 모든 제품에서 활성화되는 것은 아니다. 실제로 Cortex-A5 TrustZone 코어는 이전 AMD 제품에도 포함되어 있었지만, 시간 제약으로 인해 활성화되지 않았다.

삼성 녹스는 TrustZone을 사용하여 커널 수정 감지, 인증서 저장, 키 증명 등의 목적으로 사용한다.

#### Armv8-M용 TrustZone
Armv8-M용 TrustZone 기술로 판매되는 보안 확장은 Armv8-M 아키텍처에 도입되었다. Armv8-A용 TrustZone과 유사한 개념을 포함하지만, 월드 전환이 예외를 사용하는 대신 분기 명령을 사용하여 수행되므로 아키텍처 설계가 다르다. 또한 현재 보안 상태와 관계없이 어느 월드에서든 안전하게 인터리브된 인터럽트 처리를 지원한다. 이러한 기능들은 보안 월드로의 낮은 지연 시간 호출과 응답성이 뛰어난 인터럽트 처리를 제공한다. ARM은 Trusted Firmware for M 및 PSA Certified 형태의 보안 월드 코드 참조 스택을 제공한다.

### 실행 금지 페이지 보호
ARMv6부터 ARM 아키텍처는 실행 금지(eXecute Never)를 의미하는 XN으로 불리는 실행 금지 페이지 보호를 지원한다.

### 대규모 물리 주소 확장 (LPAE)
대규모 물리 주소 확장(LPAE)은 물리 주소 크기를 32비트에서 40비트로 확장하며, 2011년 Armv7-A 아키텍처에 추가되었다.

물리 주소 크기는 64비트(Armv8-A) 아키텍처 기반 프로세서에서 더 커질 수 있다. 예를 들어, Cortex-A75 및 Cortex-A65AE에서는 44비트이다.

### Armv8-R 및 Armv8-M
Armv8-A 아키텍처 이후에 발표된 **Armv8-R** 및 **Armv8-M** 아키텍처는 Armv8-A와 일부 기능을 공유한다. 그러나 Armv8-M은 64비트 AArch64 명령어를 포함하지 않으며, Armv8-R은 원래 AArch64 명령어를 포함하지 않았지만, 나중에 Armv8-R에 추가되었다.

#### Armv8.1-M
2019년 2월에 발표된 Armv8.1-M 아키텍처는 Armv8-M 아키텍처의 향상된 버전이다. 여기에는 다음과 같은 새로운 기능이 포함된다.
* 새로운 벡터 명령어 세트 확장. M-프로필 벡터 확장(MVE) 또는 헬륨은 신호 처리 및 기계 학습 애플리케이션을 위한 것이다.
* 루프 및 분기를 위한 추가 명령어 세트 향상(Low Overhead Branch Extension).
* 반정밀도 부동소수점 지원을 위한 명령어.
* 부동소수점 장치(FPU)에 대한 TrustZone 관리를 위한 명령어 세트 향상.
* 메모리 보호 장치(MPU)의 새로운 메모리 속성.
* 성능 모니터링 장치(PMU), 비특권 디버그 확장 및 신호 처리 애플리케이션 개발에 중점을 둔 추가 디버그 지원을 포함한 디버그 향상.
* 신뢰성, 가용성 및 서비스 가능성(RAS) 확장.

## 64/32비트 아키텍처

섬네일|Cortex A57/A53 MPCore Big.LITTLE CPU 칩이 장착된 Armv8-A 플랫폼

### Armv8

#### Armv8-A

2011년 10월에 발표된 **Armv8-A**(Armv8-R도 사용 가능하므로 종종 ARMv8로 불림)는 ARM 아키텍처에 근본적인 변화를 가져왔다. 이는 AArch64라는 64비트 상태와 AArch32라는 32비트 상태의 두 가지 실행 상태를 지원한다. AArch64 상태에서는 새로운 64비트 A64 명령어 집합이 지원되며, AArch32 상태에서는 원본 32비트 명령어 집합인 A32와 32비트 Thumb-2 명령어 집합인 T32의 두 가지 명령어 집합이 지원된다. AArch32는 Armv7-A와 사용자 공간 호환성을 제공한다. 프로세서 상태는 예외 수준 변경 시 변경될 수 있다. 이를 통해 32비트 애플리케이션은 AArch32 상태에서 AArch64 상태에서 커널이 실행되는 64비트 OS 아래에서 실행될 수 있으며, 32비트 OS는 AArch64 상태에서 실행되는 64비트 하이퍼바이저의 제어 아래 AArch32 상태에서 실행될 수 있다. ARM은 2012년 10월 30일에 Cortex-A53 및 Cortex-A57 코어를 발표했다. 애플은 소비자 제품 (아이폰 5S의 애플 A7)에 Armv8-A 호환 코어를 처음으로 출시했다. 어플라이드마이크로는 FPGA를 사용하여 Armv8-A를 처음으로 시연했다. 삼성전자의 첫 Armv8-A SoC는 갤럭시 노트 4에 사용된 엑시노스 5433으로, 빅.리틀 구성에서 4개의 Cortex-A57 및 Cortex-A53 코어 두 클러스터를 특징으로 하지만, AArch32 모드에서만 실행된다.

AArch32 및 AArch64 모두에 대해 Armv8-A는 VFPv3/v4 및 고급 SIMD (Neon) 표준을 만든다. 또한 AES, SHA-1/SHA-256 및 유한장 산술을 지원하는 암호화 명령어를 추가한다. AArch64는 Armv8-A 및 그 후속 개정판에 도입되었다. AArch64는 32비트 Armv8-R 및 Armv8-M 아키텍처에는 포함되지 않는다.

ARMv8-A 프로세서는 AArch32와 AArch64 중 하나 또는 둘 다를 지원할 수 있다. 하위 예외 수준에서는 AArch32와 AArch64를 지원하고, 상위 예외 수준에서는 AArch64만 지원할 수 있다. 예를 들어, ARM Cortex-A32는 AArch32만 지원하고, ARM Cortex-A34는 AArch64만 지원하며, ARM Cortex-A72는 AArch64와 AArch32를 모두 지원한다. ARMv9-A 프로세서는 모든 예외 수준에서 AArch64를 지원해야 하며, EL0에서 AArch32를 지원할 수 있다.

#### Armv8-R
Armv8-R 프로필에 선택적 AArch64 지원이 추가되었으며, 이를 구현한 첫 번째 ARM 코어는 Cortex-R82이다. A64 명령어 집합을 추가한다.

### Armv9

#### Armv9-A
2021년 3월에 발표된 업데이트된 아키텍처는 보안 실행과 구획화에 중점을 둔다. 첫 번째 ARMv9-A 프로세서는 같은 해 후반에 출시되었으며, Cortex-A510, Cortex-A710 및 Cortex-X2가 포함되었다.

## ARM SystemReady
ARM SystemReady는 데이터센터 서버부터 산업용 엣지 및 IoT 장치에 이르기까지 ARM 기반 하드웨어에서 운영 체제의 상호 운용성을 보장하는 데 도움이 되는 규정 준수 프로그램이다. 이 프로그램의 핵심 구성 요소는 운영 체제 및 하이퍼바이저가 의존할 수 있는 최소 하드웨어 및 펌웨어 요구 사항에 대한 사양이다.

* 기본 시스템 아키텍처(BSA) 및 시장 부문별 보충 자료(예: 서버 BSA 보충 자료)
* 기본 부팅 요구 사항(BBR) 및 기본 부팅 보안 요구 사항(BBSR)

이러한 사양은 ARM과 System Architecture Advisory Committee(SystemArchAC)의 파트너가 공동으로 개발한다.

아키텍처 규정 준수 스위트(ACS)는 이러한 사양의 규정 준수를 확인하는 데 도움이 되는 테스트 도구이다. ARM SystemReady 요구 사항 사양은 인증 요구 사항을 문서화한다.

이 프로그램은 ARM이 2020년 첫 DevSummit 행사에서 도입했다. 이의 전신인 ARM ServerReady는 2018년 ARM TechCon 행사에서 도입되었다. 이 프로그램은 현재 두 가지 밴드를 포함한다.

* SystemReady 밴드: 이 밴드는 ACPI 환경에서 운영 체제 상호 운용성에 중점을 둔다. 여기서는 일반 운영 체제를 수정 없이 새 하드웨어 또는 기존 하드웨어에 설치할 수 있다. 이 밴드는 Windows, 리눅스, VM웨어, BSD 환경을 사용하는 시스템에 관련된다.
* SystemReady Devicetree 밴드: 이 밴드는 devicetree가 하드웨어 설명의 선호되는 방법인 임베디드 시스템에 대한 설치 및 부팅을 최적화하며, 향후 호환성에 중점을 둔다. 이는 특히 리눅스 배포판 및 BSD 환경에 적용된다.

## PSA Certified
이전에는 플랫폼 보안 아키텍처(Platform Security Architecture)로 불렸던 PSA Certified는 아키텍처에 구애받지 않는 보안 프레임워크 및 평가 제도이다. 이는 IoT 장치가 SoC 프로세서에 구축될 때 보안을 강화하는 것을 목표로 한다. 이는 완전한 신뢰 실행 환경이 너무 크거나 복잡할 때 보안을 강화하기 위해 도입되었다.

이 아키텍처는 ARM이 2017년 연례 TechCon 행사에서 도입했다. 이 제도는 아키텍처에 구애받지 않지만, 처음에는 마이크로컨트롤러 사용을 위한 ARM Cortex-M 프로세서 코어에 구현되었다. PSA Certified에는 일반적인 IoT 제품에서 보안 기능을 결정하는 과정을 보여주는 무료 위협 모델 및 보안 분석이 포함되어 있다. 또한 무료로 다운로드할 수 있는 API 패키지, 아키텍처 사양, 오픈 소스 펌웨어 구현 및 관련 테스트 스위트도 제공한다.

2017년 아키텍처 보안 프레임워크 개발에 이어, PSA Certified 보증 제도는 2년 후 2019년 임베디드 월드에서 출범했다. PSA Certified는 칩 벤더, OS 제공업체 및 IoT 장치 제조업체를 위한 다단계 보안 평가 제도를 제공한다. 임베디드 월드 프레젠테이션에서는 칩 벤더에게 레벨 1 인증이 소개되었다. 레벨 2 보호 초안은 동시에 발표되었다. 레벨 2 인증은 2020년 2월에 사용 가능한 표준이 되었다.

이 인증은 PSA 공동 이해관계자들이 다양한 IoT 제품에 대한 보안-설계(security-by-design) 접근 방식을 가능하게 하기 위해 만들어졌다. PSA Certified 사양은 구현 및 아키텍처에 구애받지 않으므로 어떤 칩, 소프트웨어 또는 장치에도 적용될 수 있다. 이 인증은 또한 IoT 제품 제조업체 및 개발자를 위한 산업 파편화를 제거한다.

## 운영체제 지원

### 32비트 운영체제

#### 과거 운영체제
최초의 32비트 ARM 기반 개인용 컴퓨터인 아콘 아르키메데스는 원래 ARX라는 야심 찬 운영체제를 실행하도록 의도되었다. 이 기기들은 RISC OS와 함께 출시되었으며, 이후 아콘 및 다른 벤더의 ARM 기반 시스템에도 사용되었다. 일부 초기 아콘 기기는 유닉스 포트인 RISC iX도 실행할 수 있었다. (어느 것도 RISC/os, MIPS 아키텍처를 위한 동시대 유닉스 변형과 혼동해서는 안 된다.)

#### 임베디드 운영체제
32비트 ARM 아키텍처는 다음과 같은 다수의 임베디드 운영체제 및 실시간 운영체제를 지원한다.

* A2
* 안드로이드
* ChibiOS/RT
* 데오스
* DRYOS
* eCos
* embOS
* FreeBSD
* FreeRTOS
* INTEGRITY
* 리눅스
* 마이크로-컨트롤러 운영체제
* Mbed
* MINIX 3
* MQX
* Nucleus PLUS
* NuttX
* OKL4
* OSE
* OS-9
* Pharos
* 플랜 9
* PikeOS
* QNX
* RIOT
* RTEMS
* RTXC Quadros
* SCIOPTA
* ThreadX
* 타이젠RT
* T-Kernel
* VxWorks
* Windows Embedded Compact
* Windows 10 IoT Core
* 제퍼

#### 모바일 장치 운영체제
2024년 3월 현재, 32비트 ARM 아키텍처는 다음을 포함한 대부분의 모바일 장치 운영체제의 주요 하드웨어 환경이었지만, 안드로이드 및 애플 iOS와 같은 많은 플랫폼은 64비트 ARM 아키텍처로 진화했다.

* 안드로이드
* 크롬OS
* 모비안
* 세일피시
* 포스트마켓OS
* 타이젠
* 우분투 터치
* 웹OS

이전에는 있었지만 현재는 단종된 운영체제:

* 바다
* 블랙베리 OS/블랙베리 10
* 파이어폭스 OS
* 미고
* 뉴턴 OS
* iOS 10 이하
* 심비안
* 윈도우 10 모바일
* 윈도우 RT
* 윈도우 폰
* 윈도우 모바일

#### 데스크톱 및 서버 운영체제
32비트 ARM 아키텍처는 RISC OS 및 다음을 포함한 여러 유닉스 계열 운영체제에서 지원된다.
* FreeBSD
* NetBSD
* OpenBSD
* 오픈솔라리스
* 여러 리눅스 배포판, 예:
** 데비안
** 아르비안
** 젠투
** 우분투
** 라즈베리 파이 OS (이전 라즈비안)
** 슬랙웨어

### 64비트 운영체제

#### 임베디드 운영체제
* INTEGRITY
* OSE
* SCIOPTA
* seL4
* Pharos
* FreeRTOS
* QNX
* VxWorks
* 제퍼

#### 모바일 장치 운영체제
* 안드로이드는 안드로이드 롤리팝 (5.0) 이상에서 Armv8-A를 지원한다.
* iOS는 iOS 7 이상에서 64비트 애플 SoC에서 Armv8-A를 지원한다. iOS 11 이상과 iPadOS는 64비트 ARM 프로세서 및 애플리케이션만 지원한다.
* 하모니OS NEXT는 2024년 출시부터 ARM 프로세서용으로 특별히 개발되었다.
* 모비안
* 포스트마켓OS
* 아치 리눅스 ARM
* 만자로

#### 데스크톱 및 서버 운영체제
* Armv8-A 지원은 2012년 후반 리눅스 커널 버전 3.7에 병합되었다. Armv8-A는 다음을 포함한 여러 리눅스 배포판에서 지원된다.
** 데비안
** 아르비안
** 알파인 리눅스
** 우분투
** 페도라
** NixOS
** 오픈수세
** 수세 리눅스 엔터프라이즈
** RHEL
** 라즈베리 파이 OS (이전 라즈비안)
* Armv8-A 지원은 2014년 후반 FreeBSD에 병합되었다.
* OpenBSD는  Armv8 지원을 한다.
* NetBSD는 2018년 초부터 Armv8 지원을 한다.
* 마이크로소프트 윈도우 - 윈도우 10은 32비트 "X86 및 32비트 ARM 애플리케이션"을 실행하며, 기본 ARM64 데스크톱 앱도 실행한다. 윈도우 11은 기본 ARM64 앱을 실행하며 에뮬레이션을 통해 x86 및 X86-64 앱도 실행할 수 있다. 마이크로소프트 스토어에서 64비트 ARM 앱 지원은 2018년 11월부터 제공되었다.
* macOS는 2020년 후반부터 ARM을 지원하며, ARM을 지원하는 첫 번째 릴리스는 macOS 빅서이다. Rosetta 2는 X86-64 애플리케이션에 대한 지원을 추가하지만 x86-64 컴퓨터 플랫폼의 가상화는 지원하지 않는다.

### 32비트 또는 64비트 ARM 운영 체제로 포팅
ARM용으로 재컴파일되고 와인 프로젝트의 Winelib와 연결된 Windows 애플리케이션은 Linux, FreeBSD 또는 기타 호환 운영 체제에서 32비트 또는 64비트 ARM에서 실행될 수 있다. x86 바이너리는 (예: ARM용으로 특별히 컴파일되지 않은 경우) QEMU와 와인(리눅스 및 기타에서)을 사용하여 ARM에서 시연되었지만, Winelib와 동일한 속도나 기능을 발휘하지는 않는다.

## 같이 보기
* 애플 실리콘
* Big.LITTLE
* 멜트다운 (버그)
* 축소 명령어 집합 컴퓨터
* RISC-V
* 스펙터 (버그)

## 각주

; 내용주


## 참고 문헌
* [참고] ARM Cortex-M4-based STM32F4 MCU Series
* [참고] STM32F4 MCU - nucleo-f303k8

## 외부 링크

*  


분류:마이크로프로세서
분류:임베디드 시스템
분류:임베디드 마이크로프로세서
분류:마이크로컨트롤러
분류:명령어 집합 구조