본문 바로가기

추천 검색어

실시간 인기 검색어

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리

Armv8-A와 Armv7-A로 배우는 시스템 반도체와 전기자동차 시스템 개발의 핵심
위키북스 임베디드 & 모바일 시리즈 42
김동현 지음
위키북스

2024년 03월 15일 출간

종이책 : 2023년 06월 22일 출간

(개의 리뷰)
( 0% 의 구매자)
eBook 상품 정보
파일 정보 pdf (14.35MB)
ISBN 9791158395100
듣기(TTS) 가능
TTS 란?
텍스트를 음성으로 읽어주는 기술입니다.
  • 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를​ 읽을 수 있습니다.
  • 전자책 화면에 표기된 주석 등을 모두 읽어 줍니다.
  • 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.
  • '교보 ebook' 앱을 최신 버전으로 설치해야 이용 가능합니다. (Android v3.0.26, iOS v3.0.09,PC v1.2 버전 이상)
소득공제
소장
정가 : 40,000원

쿠폰적용가 36,000

10% 할인 | 5%P 적립

이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.

카드&결제 혜택

  • 5만원 이상 구매 시 추가 2,000P
  • 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
  • 리뷰 작성 시, e교환권 추가 최대 300원

작품소개

이 상품이 속한 분야

친절한 선배 개발자가 Arm 아키텍처에 대해 꼼꼼하게 알려주듯, Arm 아키텍처(Armv8-A, Armv7-A) 아키텍처를 쉽고 친절하게 설명합니다!
이 책에서는 Arm 아키텍처를 구성하는 주요 기능 중에서 실전 프로젝트에 바로 적용될 만한 내용을 선별해 자세히 설명합니다. 또한 리눅스 커널이나 하이퍼바이저, 트러스티드 펌웨어 같은 시스템 소프트웨어에서 Arm 아키텍처를 구성하는 주요 기능들이 어떤 방식으로 활용되는지 상세하게 다룹니다. 각 장에서 설명하는 내용은 시스템 반도체나 전기자동차 같은 시스템 소프트웨어 개발에 그대로 적용될 수 있습니다.

★ 이 책에서 다루는 내용 ★

◎ Arm 아키텍처의 기본인 어셈블리 명령어, 레지스터, AAPCS
◎ Armv8-A에서 정의된 익셉션 레벨, Armv7-A의 동작 모드
◎ 익셉션의 동작 원리 및 익셉션 핸들러 코드 분석을 통한 원리 설명
◎ 하이퍼바이저의 근간인 가상화와 시큐리티 기술의 핵심인 트러스트존
◎ 메모리 아키텍처와 캐시, 메모리 모델과 배리어의 동작 원리
▣ 1장: Arm 프로세서 소개
1.1 Arm 프로세서의 역사
__1.1.1 에이콘의 설립
__1.1.2 Arm사의 설립
__1.1.3 2010년 이후의 모바일 시장 석권
1.2 Arm 프로세서의 시리즈
__1.2.1 Cortex-A 시리즈
__1.2.2 Cortex-R 시리즈
__1.2.3 Cortex-M 시리즈
1.3 Arm 프로세서의 전망
__1.3.1 Arm 프로세서의 출하량
__1.3.2 Arm의 생태계
1.4 Arm의 라이선스 모델
1.5 Arm 프로세서 관련 용어
__1.5.1 Arm 아키텍처란?
__1.5.2 Arm 프로세서란?
__1.5.3 Arm 코어란?
1.6 이 책의 구성
1.7 이 책에서 다루는 Arm 아키텍처와 운영체제
__1.7.1 Arm 아키텍처
__1.7.2 Arm 프로세서와 함께 다루는 운영체제
1.8 정리

▣ 2장: Arm 아키텍처 학습 방법
2.1 Arm 프로세서는 왜 배워야 할까?
__2.1.1 브링업을 잘 하기 위해
__2.1.2 디바이스 드라이버 개발을 잘 하기 위해
__2.1.3 RTOS나 리눅스 커널을 깊이 있게 이해하기 위해
__2.1.4 디버깅을 통한 문제 해결 능력을 키우기 위해
__2.1.5 Arm 아키텍처를 일반 소프트웨어 개발자도 배워야 하는 이유
2.2 Arm 프로세서를 공부하는 방법의 문제점
__2.2.1 Arm 어셈블리 명령어를 무리하게 암기한다
__2.2.2 Arm 아키텍처의 내용만 따로 배운다
__2.2.3 배운 내용이 실전 프로젝트에서 어떻게 활용되는지 파악하지 않는다
2.3 Arm 아키텍처는 어떻게 공부해야 할까?
__2.3.1 디버깅을 하면서 어셈블리 명령어를 익힌다
__2.3.2 운영체제의 기본 원리와 함께 Arm 아키텍처를 배운다
__2.3.3 실전 프로젝트에서 배운 내용이 어떤 방식으로 구현돼 있는지 확인한다
2.4 정리

▣ 3장: 레지스터
3.1 레지스터 소개
__3.1.1 레지스터란?
__3.1.2 Arm 아키텍처의 레지스터
3.2 Armv7 아키텍처의 레지스터
__3.2.1 범용 레지스터
____3.2.1.1 Arm 스펙에서 범용 레지스터 확인하기
____3.2.1.2 R0 ~ R15 레지스터의 역할
____3.2.1.3 범용 레지스터에서 뱅크드 레지스터란?
__3.2.2 CPSR와 SPSR 레지스터
____3.2.2.1 CPSR 레지스터
____3.2.2.2 SPSR 레지스터
3.3 Armv8 아키텍처의 레지스터
__3.3.1 Armv8 아키텍처의 범용 레지스터
____3.3.1.1 범용 레지스터 소개
__3.3.2 스페셜 레지스터
__3.3.3 PSTATE와 SPSR_ELx 레지스터
____3.3.3.1 PSTATE
____3.3.3.2 SPSR_ELx 레지스터
____3.3.3.3 PSTATE의 필드를 설정하는 명령어
__3.3.4 시스템 레지스터
__3.3.5 시스템 레지스터에 접근하는 명령어
3.4 정리

▣ 4장: 어셈블리 명령어
4.1 Arm 어셈블리 명령어 소개
__4.1.1 어셈블리 명령어란?
__4.1.2 어셈블리 명령어의 기본 형식
__4.1.3 어셈블리 명령어의 종류
__4.1.4 어셈블리 명령어로 무엇을 할 수 있을까?
__4.1.5 어셈블리 명령어의 진실과 오해
4.2 데이터 처리 명령어
__4.2.1 Move 명령어
____4.2.1.1 MOV 명령어
____4.2.1.2 MVN 명령어
__4.2.2 산술 명령어
____4.2.2.1 ADD 명령어
____4.2.2.2 SUB 명령어
____4.2.2.3 ADC 명령어
____4.2.2.4 SBC 명령어
____4.2.2.5 RSB 명령어
____4.2.2.6 RSC 명령어
__4.2.3 비트 시프트 명령어
____4.2.3.1 LSL 명령어
____4.2.3.2 LSR 명령어
____4.2.3.3 ASR 명령어
____4.2.3.4 ROR 명령어
__4.2.4 논리 비트 명령어
____4.2.4.1 AND 명령어
____4.2.4.2 ORR 명령어
____4.2.4.3 ORN 명령어
____4.2.4.4 BIC 명령어
____4.2.4.5 EOR 명령어
4.3 메모리 연산 명령어
__4.3.1 Load(ldr) 명령어
__4.3.2 Store(str) 명령어
4.4 Armv7 - A32 비교 및 분기 명령어
__4.4.1 플래그 설정 명령어
____4.4.1.1 CMP 명령어
____4.4.1.2 CMN 명령어
____4.4.1.3 TST 명령어
____4.4.1.4 TEQ 명령어
__4.4.2 조건부 코드
__4.4.3 B와 BL 명령어
____4.4.3.1 B 〈label〉 명령어
____4.4.3.2 BL 〈label〉 명령어
____4.4.3.3 BR 명령어
____4.4.3.4 BLR 명령어
4.5 Armv8 - A64 조건부 분기 명령어
__4.5.1 조건부 분기 명령어(B.COND)
__4.5.2 Compare/Test 분기 명령어
____4.5.2.1 CBZ 명령어
____4.5.2.2 CBNZ 명령어
____4.5.2.3 TBZ 명령어
____4.5.2.4 TBNZ 명령어
4.6 트랩 관련 명령어
__4.6.1 SVC 명령어
__4.6.2 HVC 명령어
__4.6.3 SMC 명령어
4.7 프로세서 상태 제어 명령어
__4.7.1 xPSR(CPSR, SPSR) 레지스터 설정 명령어
__4.7.2 PSTATE 설정 명령어
4.8 정리

▣ 5장: Armv7 - 동작 모드
5.1 Armv7 아키텍처의 동작 모드 소개
__5.1.1 PL와 동작 모드 소개
__5.1.2 어떤 동작 모드를 선택해야 할까?
5.2 동작 모드와 관련된 레지스터
__5.2.1 CPSR 레지스터
__5.2.2 SPSR 레지스터
5.3 동작 모드를 바꾸는 명령어
__5.3.1 MSR CPSR_C 명령어로 동작 모드 변경
____5.3.1.1 MSR CPSR_C 명령어를 실행하면 변경되는 비트
____5.3.1.2 MSR CPSR_C 명령어를 사용하는 예제 코드 분석
__5.3.2 SUBS와 MOVS 명령어
5.4 동작 모드를 활용한 리눅스 커널의 구현 방식
__5.4.1 동작 모드별로 스택을 저장
__5.4.2 익셉션이 유발된 후 슈퍼바이저 모드로 변경
5.5 정리

▣ 6장: Armv8 - 익셉션 레벨
6.1 Armv8 아키텍처의 익셉션 레벨
__6.1.1 익셉션 레벨 소개
__6.1.2 익셉션 레벨과 특권 레벨
__6.1.3 익셉션 레벨은 어떻게 변경될까?
6.2 익셉션 레벨과 관련된 레지스터
__6.2.1 PSTATE와 CurrentEL 레지스터
__6.2.2 SPSR_ELx 레지스터
__6.2.3 ELR_ELx 레지스터
6.3 익셉션 레벨과 관련된 명령어
__6.3.1 mrs 〈Xt〉 CurrentEL
__6.3.2 ERET 명령어
__6.3.3 슈퍼바이저 콜(시스템 콜 발생)
__6.3.4 하이퍼바이저 콜
__6.3.5 시큐어 모니터 콜
6.4 익셉션 레벨을 읽고 제어하는 예제 코드 분석
__6.4.1 리눅스 커널에서 익셉션 레벨을 읽고 제어하는 루틴
__6.4.2 XEN 하이퍼바이저에서 익셉션 레벨을 체크
6.5 정리

▣ 7장: 익셉션 소개
7.1 익셉션 소개
__7.1.1 CPU 아키텍처 관점에서 익셉션이란?
__7.1.2 Arm 아키텍처 관점에서 익셉션이란?
__7.1.3 소프트웨어 관점에서 익셉션이란?
7.2 익셉션의 동작 원리를 잘 알아야 하는 이유
__7.2.1 실전 프로젝트에서 문제해결 능력을 키울 수 있다
__7.2.2 운영체제를 깊이 있게 이해하기 위해
__7.2.3 하이퍼바이저, 트러스트존을 이해하기 위해
7.3 익셉션을 배우기 어려운 이유
__7.3.1 익셉션의 주요 내용은 CPU 설계 관점으로 설명한 내용이 많다
__7.3.2 익셉션이 발생하면 지정된 주소로 분기하는 동작이 낯설다
7.4 익셉션을 효과적으로 배우는 방법
__7.4.1 익셉션을 배우는 데 필요한 기반 지식을 함께 배운다
__7.4.2 익셉션의 기본 동작 원리를 먼저 배운다
__7.4.3 운영체제 커널에 구현된 익셉션 코드를 함께 분석한다
__7.4.4 실습을 하면서 익셉션을 배운다
7.5 익셉션을 구성하는 주요 개념
__7.5.1 익셉션이 발생할 때의 기본 동작
__7.5.2 익셉션 벡터 테이블
__7.5.3 익셉션과 관련된 레지스터
__7.5.4 익셉션 관련 코드는 어디에 구현됐을까?
____7.5.4.1 익셉션과 관련된 코드는 무엇일까?
____7.5.4.2 익셉션 핸들러란?
7.6 정리

▣ 8장: Armv7 - 익셉션
8.1 Armv7 익셉션의 주요 동작
__8.1.1 Armv7 아키텍처의 익셉션 소개
__8.1.2 익셉션을 구성하는 주요 개념
8.2 익셉션의 전체 실행 흐름
__8.2.1 메모리 어보트 타입 익셉션의 실행 흐름
__8.2.2 인터럽트 타입 익셉션의 실행 흐름
__8.2.3 소프트웨어 인터럽트 익셉션의 실행 흐름
__8.2.4 익셉션의 전체 실행 흐름 정리
8.3 익셉션 종류별 레지스터 변경
__8.3.1 메모리 어보트 타입 익셉션
____8.3.1.1 Prefetch Abort가 발생할 때 Arm 코어의 세부 동작
____8.3.1.2 Data Abort를 유발할 때 Arm 코어의 세부 동작
____8.3.1.3 Undefined Instruction 익셉션을 유발할 때의 Arm 코어의 세부 동작
__8.3.2 인터럽트 타입 익셉션을 유발할 때 Arm 코어의 세부 동작
__8.3.3 소프트웨어 인터럽트
8.4 파이프라인과 익셉션
__8.4.1 파이프라인의 어느 단계에서 익셉션이 발생할까?
__8.4.2 익셉션이 유발된 시점의 이전 모드로 복귀하는 방법 정리
8.5 익셉션 벡터 테이블
__8.5.1 익셉션 벡터 테이블이란?
__8.5.2 익셉션 벡터 테이블과 익셉션 핸들러
__8.5.3 익셉션 핸들러란?
8.6 익셉션과 같이 배워야 하는 운영체제 지식
__8.6.1 익셉션이 발생하면 프로세스는 어떻게 동작할까?
__8.6.2 익셉션 벡터는 프로세스의 어느 공간에서 실행될까?
8.7 메모리 어보트 타입 익셉션은 실제로 어떻게 유발될까?
__8.7.1 Undefined Instruction 익셉션이 발생하는 사례
__8.7.2 Prefetch Abort 익셉션이 발생하는 사례
__8.7.3 Data Abort 익셉션이 발생하는 사례
8.8 정리

▣ 9장: Armv8 - 익셉션
9.1 Armv8 아키텍처의 익셉션 소개
__9.1.1 Armv8 익셉션의 특징
__9.1.2 Armv8 아키텍처의 익셉션을 잘 알아야 하는 이유
9.2 Armv8 익셉션의 종류와 분류 체계
__9.2.1 Synchronous 타입 익셉션
__9.2.2 Asynchronous 익셉션 타입
9.3 익셉션 클래스와 익셉션 신드롬 레지스터(ESR_ELx)
__9.3.1 익셉션 신드롬 레지스터(ESR_ELx)
__9.3.2 익셉션 클래스
____9.3.2.1 메모리 어보트 관련 익셉션 클래스
____9.3.2.2 트랩 관련 익셉션 클래스
____9.3.2.3 코프로세서의 트랩 관련 익셉션 클래스
____9.3.2.4 브레이크포인트 관련 익셉션 클래스
____9.3.2.5 기타 익셉션 클래스
9.4 Armv8 익셉션을 구성하는 주요 개념
__9.4.1 익셉션의 유발 요인
__9.4.2 레지스터 업데이트
__9.4.3 익셉션 레벨 변경
__9.4.4 익셉션 벡터 테이블
__9.4.5 익셉션 핸들러
9.5 익셉션의 전체 실행 흐름
__9.5.1 Synchronous 익셉션의 실행 흐름
____9.5.1.1 메모리 어보트로 Synchronous 익셉션이 처리되는 전체 흐름
____9.5.1.2 소프트웨어 인터럽트로 Synchronous 익셉션이 처리되는 전체 흐름
__9.5.2 인터럽트 타입 익셉션의 실행 흐름
__9.5.3 익셉션의 전체 실행 흐름 정리
9.6 익셉션 종류별 레지스터 변경
__9.6.1 Synchronous 익셉션을 유발할 때 변경되는 레지스터
__9.6.2 IRQ 인터럽트 익셉션을 유발할 때 Arm 코어의 세부 동작
9.7 익셉션 벡터 테이블 분석
__9.7.1 익셉션 벡터 테이블을 구성하는 용어
__9.7.2 익셉션 벡터 테이블의 내용 해석하기
__9.7.3 익셉션 레벨별 익셉션 벡터 테이블 분석
____9.7.3.1 VBAR_EL1을 기준으로 익셉션 벡터 테이블 분석
____9.7.3.2 VBAR_EL2 기준 익셉션 벡터 테이블 분석하기
__9.7.4 익셉션 핸들러 코드 분석
__9.7.5 VBAR_EL1, VBAR_EL2 기준으로 익셉션 핸들러는 어디에 존재할까?
9.8 익셉션과 익셉션 모델
__9.8.1 EL0에서 익셉션 유발
__9.8.2 EL1에서 익셉션 유발
9.9 Illegal Return Event(허용되지 않는 익셉션 레벨 복귀)
__9.9.1 Illegal Return Event란?
__9.9.2 Illegal Return Event의 후속 처리
9.10 정리

▣ 10장: GIC
10.1 인터럽트 컨트롤러 소개
__10.1.1 인터럽트 컨트롤러가 필요한 이유
__10.1.2 인터럽트 컨트롤러의 기본 구조
10.2 GIC 소개
__10.2.1 GIC는 왜 배워야 할까?
__10.2.2 GIC의 기본 기능
__10.2.3 GIC 버전과 주요 기능
10.3 GIC의 기본 구조
__10.3.1 인터럽트 소스와 타입
____10.3.1.1 SPI(Shared Peripheral Interrupt)
____10.3.1.2 PPI(Private Peripheral Interrupt)
____10.3.1.3 SGI 인터럽트
____10.3.1.4 GIC 인터럽트 종류와 인터럽트 아이디
____10.3.1.5 인터럽트 아이디를 읽어 제어하는 코드 리뷰
__10.3.2 인터럽트 상태 머신
____10.3.2.1 레벨 센서티브 타입 인터럽트의 상태 머신
____10.3.2.2 에지 트리거 타입 인터럽트의 상태 머신
10.4 GIC의 프로그래머 모델
__10.4.1 디스트리뷰터(GICD_*) 시스템 레지스터
____10.4.1.1 GICD_IROUTER〈n〉 레지스터
____10.4.1.2 GICD_IPRIORITYR〈n〉 레지스터
____10.4.1.3 GICD_ICFGR〈n〉 레지스터
____10.4.1.4 GICD_IGROUPR〈n〉 레지스터
____10.4.1.5 GICD_IGRPMODR〈n〉 레지스터
__10.4.2 리디스트리뷰터 - Redistributors(GICR_*)
____10.4.2.1 GICR_ISENABLER0 레지스터
____10.4.2.2 GICR_ICFGR0 레지스터
____10.4.2.3 GICR_IPRIORITYR〈n〉 레지스터
____10.4.2.4 GICR_IGROUPR0 레지스터
____10.4.2.5 GICR_IGRPMODR0 레지스터
__10.4.3 CPU 인터페이스(ICC_*_ELn)
____10.4.3.1 ICC_IAR1_EL1 레지스터
____10.4.3.2 ICC_EOIR1_EL1 레지스터
____10.4.3.3 ICC_PMR_EL1 레지스터
____10.4.3.4 ICC_RPR_EL1 레지스터
____10.4.3.5 ICC_BPR0_EL1 레지스터
____10.4.3.6 ICC_CTLR_EL1 레지스터
____10.4.3.7 ICC_SRE_EL1 레지스터
____10.4.3.8 ICC_IGRPEN1_EL1 레지스터
10.5 인터럽트 그룹
__10.5.1 인터럽트 그룹이 생겨난 이유
__10.5.2 인터럽트 그룹이란?
10.6 GIC 레지스터 설정
__10.6.1 전반적인 설정(GICD_CTRL)
__10.6.2 PE에서 설정하는 GIC 시스템 레지스터
____10.6.2.1 리디스트리뷰터 설정
____10.6.2.2 CPU 인터페이스 설정
____10.6.2.3 익셉션 벡터 베이스 주소와 SCR_EL3, HCR_EL2 설정
__10.6.3 SPI, PPI, SGI 설정
____10.6.3.1 기본 속성 설정
____10.6.3.2 SPI를 특정 CPU 코어에 타깃팅: Affinity 설정
__10.6.4 주요 기능 설정 및 동작 원리
____10.6.4.1 시큐어 인터럽트 라우팅
____10.6.4.2 러닝 우선순위와 인터럽트 동작
10.7 GIC 인터럽트 핸들러에서 인터럽트 처리하기
__10.7.1 Arm 코어의 익셉션 핸들러 루틴
__10.7.2 GIC 인터럽트 핸들러 루틴
__10.7.3 GIC 인터럽트 핸들러 코드 분석
10.8 정리

▣ 11장: AAPCS(함수 호출 규약)
11.1 AAPCS 소개
__11.1.1 함수 호출과 관련된 진실과 오해
__11.1.2 Arm 스펙 문서에서의 AAPCS
11.2 소프트웨어 개발자는 왜 AAPCS를 알아야 할까?
__11.2.1 프로그램의 근본 동작 원리 파악
__11.2.2 안정적이고 최적화된 코드 작성
__11.2.3 실전 프로젝트에서의 디버깅을 위한 기초 체력 증진
11.3 AAPCS를 배우는 방법
__11.3.1 AAPCS를 배우기 어려운 이유
__11.3.2 AAPCS를 효과적으로 배우는 방법
11.4 AAPCS를 배우기 위해 알아야 하는 지식
__11.4.1 스택 자료구조란?
__11.4.2 프로세스의 스택 공간이란?
__11.4.3 스택 포인터와 스택 프레임
__11.4.4 AAPCS와 관련된 레지스터
11.5 정리

▣ 12장: Armv7 - AAPCS
12.1 Armv7 아키텍처에서의 AAPCS 관련 레지스터
__12.1.1 SP와 LR 레지스터란?
__12.1.2 함수를 호출하기 위한 설계
12.2 서브루틴(함수)으로 분기될 때 실행되는 어셈블리 명령어
__12.2.1 스택과 관련된 명령어
____12.2.1.1 PUSH 명령어
____12.2.1.2 SUB 명령어
____12.2.1.3 POP 명령어
__12.2.2 분기 명령어
12.3 AAPCS와 관련된 레지스터와 어셈블리 명령어 분석
__12.3.1 SP 레지스터의 세부 동작
__12.3.2 LR(R14) 링크 레지스터와 어셈블리 명령어 분석
__12.3.3 함수를 호출할 때 쓰이는 R0 ~ R3 레지스터와 명령어 분석
12.4 AAPCS와 C 코드 최적화
__12.4.1 함수 인자의 개수는 4개 이하로 제한
__12.4.2 함수 반환형은 워드 단위로 지정
__12.4.3 매우 자주 호출되는 함수는 inline 키워드로 선언
12.5 정리

▣ 13장: Armv8 - AAPCS
13.1 Armv8 아키텍처의 AAPCS 관련 레지스터
__13.1.1 SP_ELn과 X30 레지스터란?
__13.1.2 함수를 호출하기 위한 설계
13.2 서브루틴(함수)으로 분기될 때 실행되는 어셈블리 명령어
__13.2.1 스택과 관련된 명령어
____13.2.1.1 STP 명령어
____13.2.1.2 SUB 명령어
____13.2.1.3 LDP 명령어
__13.2.2 분기와 복귀 명령어
____13.2.2.1 BL 명령어
____13.2.2.2 RET 명령어
13.3 AAPCS와 관련된 레지스터와 어셈블리 명령어 분석
__13.3.1 스택 포인터 레지스터의 세부 동작
__13.3.2 X30 링크 레지스터와 어셈블리 명령어 분석
__13.3.3 함수를 호출할 때 쓰이는 X0 ~ X7 레지스터와 명령어 분석
13.4 AAPCS와 C 코드 최적화
__13.4.1 함수 인자의 개수는 8개 이하로 제한
__13.4.2 매우 자주 호출되는 함수는 inline 키워드로 선언
13.5 정리

▣ 14장: 트러스트존
14.1 트러스트존이란?
__14.1.1 트러스트존이 도입된 이유
14.2 트러스트존의 주요 개념
__14.2.1 논시큐어 월드와 시큐어 월드란?
__14.2.2 시큐어 모니터 콜
14.3 Armv7 아키텍처의 트러스트존
__14.3.1 시큐어 월드로 실행 흐름이 변경되는 과정
__14.3.2 시큐어 모드와 익셉션 벡터 테이블
__14.3.3 시큐어 상태와 SCR 레지스터
__14.3.4 시큐어 월드의 익셉션 핸들러 구현
__14.3.5 모니터 모드의 익셉션 핸들러 리뷰
14.4 Armv8 아키텍처의 트러스트존
__14.4.1 익셉션 레벨과 시큐어 모드와의 관계
__14.4.2 시큐어 상태와 SCR_EL3 레지스터
__14.4.3 SCR_EL3 레지스터에 접근하는 명령어
__14.4.4 트러스트존에서 구현된 익셉션 핸들러
14.5 트러스트존과 관련된 하드웨어 기능
__14.5.1 AWPROT, ARPROT 시그널
__14.5.2 트러스트존의 5가지 하드웨어 기능
14.6 트러스트존의 실제 구현 방식
__14.6.1 시큐어 월드에서 트러스티드 OS는 어떻게 구동할까?
__14.6.2 시큐어 RTOS 구현 사례: QSEE
14.7 Arm 트러스티드 펌웨어 EL3 모니터 코드 리뷰
__14.7.1 Arm 트러스티드 펌웨어란?
__14.7.2 EL3 모니터 익셉션 핸들러 코드 분석
____14.7.2.1 EL3 모니터 익셉션 핸들러 코드
____14.7.2.2 익셉션 종류별 익셉션 핸들러 코드 분석
____14.7.2.3 익셉션 핸들러 코드 분석
14.8 정리

▣ 15장: 가상화(Virtualization)
15.1 하이퍼바이저 소개
__15.1.1 하이퍼바이저란?
__15.1.2 하이퍼바이저 타입
__15.1.3 하이퍼바이저를 구성하는 요소
__15.1.4 하이퍼바이저는 왜 알아야 할까?
15.2 가상화 관련 명령어
__15.2.1 HVC 명령어
__15.2.2 WFE, WFI 명령어
15.3 가상화 관련 레지스터
__15.3.1 HCR_EL2 레지스터
__15.3.2 HCR_EL2 레지스터에 접근하는 명령어
__15.3.3 HCR_EL2 레지스터에 접근하는 어셈블리 코드 분석
15.4 가상화와 익셉션 벡터 테이블
__15.4.1 익셉션 벡터 테이블 확인하기
__15.4.2 가상화 관점의 익셉션 벡터 테이블 분석
15.5 XEN 하이퍼바이저 코드 리뷰
__15.5.1 XEN 하이퍼바이저 소개
__15.5.2 EL2 익셉션 핸들러 코드 분석
____15.5.2.1 익셉션 핸들러 코드 소개
____15.5.2.2 익셉션 핸들러 코드 분석
__15.5.3 게스트 Exit를 처리하는 코드 분석
15.6 정리

▣ 16장: Armv9 - CCA
16.1 CCA 소개
__16.1.1 CCA란?
__16.1.2 CCA가 도입된 이유
__16.1.3 CCA를 구성하는 요소
__16.1.4 CCA와 관련된 오픈소스 프로젝트
16.2 RME
__16.2.1 Realm 상태란?
__16.2.2 Realm 월드의 소프트웨어 스택
__16.2.3 RMM
____16.2.3.1 RMM의 주요 기능
____16.2.3.2 RMM에 접근하는 두 가지 채널
16.3 GPT와 주소 접근 권한 제어
__16.3.1 GPT(Granule Protection Table)란?
__16.3.2 GPC(Granule Protection Check)의 동작 원리
16.4 RME 관련 시스템 레지스터
__16.4.1 SCR_EL3와 시큐어 상태
__16.4.2 GPTBR_EL3 레지스터
__16.4.3 GPCCR_EL3 레지스터
16.5 정리

▣ 17장: 메모리 모델
17.1 메모리 모델 소개
__17.1.1 노멀 메모리 타입이란?
__17.1.2 디바이스 메모리란?
__17.1.3 메모리 맵과 메모리 모델
17.2 메모리 리오더링과 Weakly Ordered 속성
__17.2.1 메모리 리오더링 소개
__17.2.2 어드레스 의존성이란?
__17.2.3 메모리 리오더링 예시
17.3 메모리 배리어
__17.3.1 Data Memory Barrier(DMB)
__17.3.2 Data Synchronization Barrier(DSB)
__17.3.3 Instruction Synchronization Barrier(ISB)
17.4 Shareability 도메인과 배리어 명령어 옵션
__17.4.1 멀티 코어 시스템에서 데이터 동기화
__17.4.2 Qualifier 및 Shareable 메모리 속성
__17.4.3 배리어 명령어 옵션
__17.4.4 배리어 명령어에 Qualifier를 적용하는 방법
17.5 배리어 명령어 사용 케이스 스터디
__17.5.1 리눅스 커널: 스핀락 해제 시 배리어 사용
__17.5.2 시스템 레지스터 설정 시 ISB 배리어 설정
17.6 정리

▣ 18장: 캐시
18.1 캐시 소개
__18.1.1 캐시란?
__18.1.2 메모리 아키텍처에서 캐시란?
__18.1.3 L1 캐시와 L2 캐시란?
__18.1.4 캐시 알고리즘의 배경
____18.1.4.1 공간 지역성
____18.1.4.2 시간 지역성
____18.1.4.3 알고리즘 지역성
18.2 캐시의 기본 동작 원리
__18.2.1 캐시의 검색 방법
____18.2.1.1 캐시에 접근하기 위해 주소를 분류하는 방식
____18.2.1.2 캐시의 구성
__18.2.2 캐시 룩업의 동작 원리
____18.2.2.1 캐시 히트 동작
____18.2.2.2 캐시 미스 동작
__18.2.3 Way와 Set의 개념
18.3 멀티 레벨 캐시
__18.3.1 캐시의 성능 지표
__18.3.2 멀티 캐시를 구성하는 원리
__18.3.3 멀티 캐시 정책
18.4 Arm Cortex 프로세서의 캐시 구조
__18.4.1 Direct-Mapped 캐시 구조
__18.4.2 Set-Associative 캐시 구조
__18.4.3 Arm 프로세서별 캐시 스펙
18.5 캐시 제어 레지스터
__18.5.1 CTR_EL0 레지스터
__18.5.2 CLIDR_EL1 레지스터
__18.5.3 CCSIDR_EL1 레지스터
18.6 캐시 제어 어셈블리 명령어
__18.6.1 캐시 관련 용어 알아보기
__18.6.2 캐시 관련 어셈블리 명령어
18.7 정리

▣ 19장: 메모리 매니지먼트
19.1 메모리 매니지먼트 소개
__19.1.1 메모리 매니지먼트란?
__19.1.2 MMU란?
__19.1.3 가상 주소와 물리 주소의 개념
__19.1.4 운영체제 관점에서 메모리 매니지먼트란?
19.2 MMU의 세부 동작
__19.2.1 MMU를 구성하는 주요 기능
__19.2.2 MMU에서 주소를 변환하는 과정
19.3 익셉션 레벨별 가상 주소 영역
__19.3.1 가상화 시스템에서 가상 주소 공간
__19.3.2 가상 주소 공간과 관련된 변환 테이블 베이스 주소
__19.3.3 가상 주소 영역의 사이즈는 어떻게 설정될까?
19.4 메모리 컨트롤 시스템 레지스터
__19.4.1 TTBR0_EL1, Translation Table Base Register 0(EL1)
__19.4.2 TCR_EL1 레지스터
__19.4.3 SCTLR_EL1 레지스터
__19.4.4 FAR_EL1, Fault Address Register(EL1)
19.5 메모리 속성과 MMU를 설정하는 예제 코드 분석
__19.5.1 메모리 속성 정보를 설정하는 루틴의 예
__19.5.2 MMU를 설정하는 명령어 루틴 소개 - XEN 하이퍼바이저
19.6 정리

▣ 부록A: 어셈블리 명령어
A.1 Armv7 어셈블리 명령어
__A.1.1 이동, 산술, 비트 연산 명령어
__A.1.2 비교 및 분기 명령어
__A.1.3 로드 및 스토어 명령어
__A.1.4 곱셈 명령어
__A.1.5 스택 제어 명령어
__A.1.6 시스템 명령어
__A.1.7 배리어 명령어
A.2 Armv8 - A64(Aarch64) 명령어
__A.2.1 이동, 산술, 비트 연산 명령어
__A.2.2 비교 및 분기 명령어
__A.2.3 로드 및 스토어 명령어
__A.2.4 시스템 명령어
__A.2.5 배리어 명령어

▣ 부록B: 레지스터
B.1 Armv7 레지스터
__B.1.1 범용 레지스터
__B.1.2 시스템 레지스터
B.2 Armv8 레지스터
__B.2.1 범용 레지스터
__B.2.2 스페셜 레지스터
__B.2.3 시스템 레지스터

▣ 부록C: 인라인 어셈블리
C.1 인라인 어셈블리 소개
C.2 인라인 어셈블리 명령어 형식 1
C.3 인라인 어셈블리 명령어 형식 2

▣ 부록D: Arm 아키텍처 관련 실전 프로젝트 케이스 스터디
D.1 스택 오염
__D.1.1 스택 오염은 왜 발생할까?
__D.1.2 스택 오염이 발생한 실제 예시
__D.1.3 스택 오염 문제는 어떻게 디버깅할까?
D.2 스택 오버플로란?
__D.2.1 스택 오버플로 증상과 그 원인
__D.2.2 스택 오버플로가 발생하면 시스템은 어떻게 오동작할까?
__D.2.3 스택 오버플로는 어떻게 방지할까?
____D.2.3.1 코드를 Arm 아키텍처 관점으로 분석
____D.2.3.2 컴파일러에서 스택 오버플로 검출 기능 활성화
____D.2.3.3 배열 대신 동적 메모리를 할당하는 코드를 사용
____D.2.3.4 스택 크기를 증가
____D.2.3.5 디버깅 코드 활용

작가정보

저자(글) 김동현

《디버깅을 통해 배우는 리눅스 커널의 구조와 원리》의 저자이며, LG전자에서 12년째 Arm 프로세서 기반 리눅스 시스템 엔지니어로 일하고 있다. 주로 Arm 프로세서에서 설계된 신규 칩셋(SoC: Application Processor) 기반의 프로젝트에서 시스템(타깃 보드)을 브링업하거나 다양한 트러블슈팅으로 크래시 이슈를 해결하는 과제에 참여했다. Arm 아키텍처에 관심이 많고 특히 Arm 아키텍처를 구성하는 기능들이 리눅스 커널, 부트로더 혹은 하이퍼바이저에 어떤 방식으로 구현됐는지 디버깅하는 것을 즐긴다. 로우 레벨 소프트웨어의 다양한 문제를 해결하는 디버깅 방법에 관심이 많고, 실무 지식을 다른 동료 개발자와 공유하면서 기쁨을 느낀다.

- 유튜브: https://www.youtube.com/@schezokim
- 블로그: https://austindhkim.tistory.com

* 저자의 Arm(Armv8-A, Armv7-A) 아키텍처 직강(유료): https://wikibook.co.kr/arm-arch

이 상품의 총서

Klover리뷰 (0)

Klover리뷰 안내
Klover(Kyobo-lover)는 교보를 애용해 주시는 고객님들이 남겨주신 평점과 감상을 바탕으로, 다양한 정보를 전달하는 교보문고의 리뷰 서비스입니다.
1. 리워드 안내
구매 후 90일 이내에 평점 작성 시 e교환권 100원을 적립해 드립니다.
  • - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다.
  • - 리워드는 한 상품에 최초 1회만 제공됩니다.
  • - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
2. 운영 원칙 안내
Klover리뷰를 통한 리뷰를 작성해 주셔서 감사합니다. 자유로운 의사 표현의 공간인 만큼 타인에 대한 배려를 부탁합니다. 일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
  • 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
  • 도서와 무관한 내용의 리뷰
  • 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
  • 의성어나 의태어 등 내용의 의미가 없는 리뷰

구매 후 리뷰 작성 시, e교환권 100원 적립

문장수집

문장수집 안내
문장수집은 고객님들이 직접 선정한 책의 좋은 문장을 보여 주는 교보문고의 새로운 서비스 입니다. 교보eBook 앱에서 도서 열람 후 문장 하이라이트 하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다. 마음을 두드린 문장들을 기록하고 좋은 글귀들은 ‘좋아요’ 하여 모아보세요. 도서 문장과 무관한 내용 등록 시 별도 통보없이 삭제될 수 있습니다.
리워드 안내
  • 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
  • e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다.
  • 리워드는 한 상품에 최초 1회만 제공됩니다.
  • sam 이용권 구매 상품/오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.

구매 후 문장수집 작성 시, e교환권 100원 적립

    교보eBook 첫 방문을 환영 합니다!

    신규가입 혜택 지급이 완료 되었습니다.

    바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
    지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!

    교보e캐시 1,000원
    TOP
    신간 알림 안내
    시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 웹툰 신간 알림이 신청되었습니다.
    신간 알림 안내
    시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 웹툰 신간 알림이 취소되었습니다.
    리뷰작성
    • 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
    • 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
    • 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
    감성 태그

    가장 와 닿는 하나의 키워드를 선택해주세요.

    사진 첨부(선택) 0 / 5

    총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.

    신고/차단

    신고 사유를 선택해주세요.
    신고 내용은 이용약관 및 정책에 의해 처리됩니다.

    허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
    있으니 유의하시어 신중하게 신고해주세요.


    이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.

    문장수집 작성

    구매 후 90일 이내 작성 시, e교환권 100원 적립

    eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.

    P.
    시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리
    Armv8-A와 Armv7-A로 배우는 시스템 반도체와 전기자동차 시스템 개발의 핵심
    저자 모두보기
    저자(글)
    낭독자 모두보기
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 프리미엄 이용권입니다.
    선물하실 sam이용권을 선택하세요.
    결제완료
    e캐시 원 결제 계속 하시겠습니까?
    교보 e캐시 간편 결제
    sam 열람권 선물하기
    • 보유 권수 / 선물할 권수
      0권 / 1
    • 받는사람 이름
      받는사람 휴대전화
    • 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
    • 열람권은 1인당 1권씩 선물 가능합니다.
    • 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
    • 선물한 열람권의 등록유효기간은 14일 입니다.
      (상대방이 기한내에 등록하지 않을 경우 소멸됩니다.)
    • 무제한 이용권일 경우 열람권 선물이 불가합니다.
    이 상품의 총서 전체보기
    네이버 책을 통해서 교보eBook 첫 구매 시
    교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 네이버 책을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)
    구글북액션을 통해서 교보eBook
    첫 구매 시 교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 구글북액션을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)