시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 (Armv8-A와 Armv7-A로 배우는 시스템 반도체와 전기자동차 시스템 개발의 핵심)

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 (Armv8-A와 Armv7-A로 배우는 시스템 반도체와 전기자동차 시스템 개발의 핵심)

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

★ 이 책에서 다루는 내용 ★

◎ Arm 아키텍처의 기본인 어셈블리 명령어, 레지스터, AAPCS
◎ Armv8-A에서 정의된 익셉션 레벨, Armv7-A의 동작 모드
◎ 익셉션의 동작 원리 및 익셉션 핸들러 코드 분석을 통한 원리 설명
◎ 하이퍼바이저의 근간인 가상화와 시큐리티 기술의 핵심인 트러스트존
◎ 메모리 아키텍처와 캐시, 메모리 모델과 배리어의 동작 원리
저자

김동현

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

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

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

목차

▣1장:Arm프로세서소개
1.1Arm프로세서의역사
__1.1.1에이콘의설립
__1.1.2Arm사의설립
__1.1.32010년이후의모바일시장석권
1.2Arm프로세서의시리즈
__1.2.1Cortex-A시리즈
__1.2.2Cortex-R시리즈
__1.2.3Cortex-M시리즈
1.3Arm프로세서의전망
__1.3.1Arm프로세서의출하량
__1.3.2Arm의생태계
1.4Arm의라이선스모델
1.5Arm프로세서관련용어
__1.5.1Arm아키텍처란?
__1.5.2Arm프로세서란?
__1.5.3Arm코어란?
1.6이책의구성
1.7이책에서다루는Arm아키텍처와운영체제
__1.7.1Arm아키텍처
__1.7.2Arm프로세서와함께다루는운영체제
1.8정리

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

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

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

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

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

▣7장:익셉션소개
7.1익셉션소개
__7.1.1CPU아키텍처관점에서익셉션이란?
__7.1.2Arm아키텍처관점에서익셉션이란?
__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.1Armv7익셉션의주요동작
__8.1.1Armv7아키텍처의익셉션소개
__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.1PrefetchAbort가발생할때Arm코어의세부동작
____8.3.1.2DataAbort를유발할때Arm코어의세부동작
____8.3.1.3UndefinedInstruction익셉션을유발할때의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.1UndefinedInstruction익셉션이발생하는사례
__8.7.2PrefetchAbort익셉션이발생하는사례
__8.7.3DataAbort익셉션이발생하는사례
8.8정리

▣9장:Armv8-익셉션
9.1Armv8아키텍처의익셉션소개
__9.1.1Armv8익셉션의특징
__9.1.2Armv8아키텍처의익셉션을잘알아야하는이유
9.2Armv