시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 또는 당신은 창업하지 않을 수 없다
땅끝
2024-12-18 10:33
81
0
본문
시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리

도서명 : 시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리
저자/출판사 : 김동현, 위키북스
쪽수 : 744쪽
출판일 : 2023-06-22
ISBN : 9791158394349
정가 : 48000
▣ 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 디버깅 코드 활용
당신은 창업하지 않을 수 없다

도서명 : 당신은 창업하지 않을 수 없다
저자/출판사 : 이정협, 스노우폭스북스
쪽수 : 300쪽
출판일 : 2023-06-15
ISBN : 9791191769432
정가 : 16800
PROLOGUE
chapter 1 왜 해야 하는가
1. 지금 당장 내 미래를 확인하는 방법
2. 오르지 않는 것도 방법이다
3. 회사는 절대 내 인생을 책임지지 않는다
4. 수단일까, 목적일까?
5. 돈 ≠ 직장생활
6. 고민의 시작
7. 30년 직장생활로는 남은 인생을 대비하지 못한다
8. 창업하지 않을 수 없다
9. 창업으로 얻을 수 있는 것들
chapter 2 어떤 방법들이 있는가
11. 내가 세운 가설이 실제인지 확인하는 일일 뿐이다
12. 라면 끓이기
13. 잘하자
14. 수신제단치사평여생修身齊團治社平餘生
15. 저절로 하게 되는 공부의 맛
16. 테라포밍Terraforming
17. 맹모삼천지교 대신 자가삼천지교
18. 달콤한 유혹
19. 회사는 최고의 교육기관이다
20. 날기 전까지는 달려야 한다
21. 확실히 준비되었을 때 출발해도 충분히 빠르다
chapter 3 어떻게 하면 되는가
22. 회사를 다니면서 창업하는 방법
23. 시작 그리고 팀 빌딩
24. 대표는 대표다
25. 당연한 것 같은 사고는 정말 당연하다
26. 가볍게 시작해도 괜찮다. 너무 신중하지 않게
27. 이도저도 잘 되지 않을 땐 그냥 ‘되는 것’을 하면 된다
28. 예측은 상상일 뿐이다
29. 즐거운 사람과 함께 일하는 즐거움
30. 똥과 된장을 구별해 내는 게 아니라 그냥 찍어 먹어보는 게 목적이다
31. 그 많은 서퍼들은 파도타기 순서를 어떻게 알아낼까
32. 어떤 돈으로 시작할 것인가
33. 셀 수 없이 많을 정도의 창업지원 창구들
34. 투자에 대한 이해
35. 돈 벌 궁리
36. 실패 밖에 더 하겠는가? 다시 도전하면 될 일 아닌가!
37. 신사업 VS 연쇄창업
38. 계속해서 회사를 만들어 내는 것
39. 문제를 여기저기 말하면 답이 돌아온다
40. 대표로 있는 동안 지속해야 될 일
chapter 4 무엇이 필요한가
41. 대박은 고사하고 생존 할 수 있는 전략을 짜는 일이 창업이다
42. 현혹되지 말지어다
43. 빠르게 실패하기
44. 당신의 피트인Pit in은 무엇인가?
45. 짜장면을 먹든 짬뽕을 먹든, 배는 부르다
46. 직접 움직이는 것만큼 확실한 건 없다
47. 뻔한 말이지만 정말로 위기에서 기회가 나온다
48. 아무리 적어도 꼭 만들어야 할 것
49. 창업 법인에서 성패보다 중요한 것은 누가 뭐래도 사람이다
50. 겁먹지 마라. 쫄게 없다 그래봤자 재취업이다
chapter 5 지금부터다
51. 월급은 나를 안주하게 만드는 마약이다
52. 월요병 없는 월요일 아침이 기다려지는 평일
53. 해 봐서 알게 된다
54. 돈을 배우다
55. 시간을 쓰다
56. 만문불여일행萬聞不如一行
57. 불확실성에 대한 내성
58. 인생 레버리지
59. 남에게 받는 인정보다 내가 나에게 준 인정이 더 크고 오래 간다
60. 이제 선택만이 남았다ㆍ
EPILOGUE
댓글목록0