이 상품은 구매 후 지원 기기에서 예스24 eBook앱 설치 후 바로 이용 가능한 상품입니다.
|
▣ 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 명령어____4.4.3.2 BL 명령어____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 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장: GIC10.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 레지스터____10.4.1.2 GICD_IPRIORITYR 레지스터____10.4.1.3 GICD_ICFGR 레지스터____10.4.1.4 GICD_IGROUPR 레지스터____10.4.1.5 GICD_IGRPMODR 레지스터__10.4.2 리디스트리뷰터 - Redistributors(GICR_*)____10.4.2.1 GICR_ISENABLER0 레지스터____10.4.2.2 GICR_ICFGR0 레지스터____10.4.2.3 GICR_IPRIORITYR 레지스터____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 스펙 문서에서의 AAPCS11.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 - AAPCS12.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 - AAPCS13.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 구현 사례: QSEE14.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 - CCA16.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 인라인 어셈블리 명령어 형식 1C.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 디버깅 코드 활용
|
김동현의 다른 상품
|
* 이 책에서다루는내용 *- Arm 아키텍처의 기본인 어셈블리 명령어, 레지스터, AAPCS- Armv8-A에서 정의된 익셉션 레벨, Armv7-A의 동작 모드- 익셉션의 동작 원리 및 익셉션 핸들러 코드 분석을 통한 원리 설명- 하이퍼바이저의 근간인 가상화와 시큐리티 기술의 핵심인 트러스트존- 메모리 아키텍처와 캐시, 메모리 모델과 배리어의 동작 원리
|