본문내용 바로가기
MD의선택 무료배송 이벤트 사은품 소득공제

코드로 알아보는 ARM 리눅스 커널 ARM64 커널(v4.6)로 전면 개정 | 최신 ARM64 커널을 코드 레벨에서 상세히 분석하다!

2판
윤석훈 , 문영일, 구본규, 유희재 지음 | 제이펍 | 2018년 05월 24일 출간 이 책의 개정정보 : 2012년 출간
  • 정가 : 44,000원
    판매가 : 39,600 [10%↓ 4,400원 할인]
  • 통합포인트 :
    [기본적립] 2,200원 적립 [5% 적립] 안내 [추가적립] 5만원 이상 구매 시 2천원 추가적립 [회원혜택] 우수회원 5만원 이상 구매 시 2~3% 추가적립
  • 추가혜택 : 카드/포인트 안내 도서소득공제 안내 추가혜택 더보기
  • 배송비 : 무료 배송비 안내
  • 배송일정 : 서울특별시 종로구 세종대로 기준 지역변경
    09월 27일 출고 예정 배송일정 안내
  • 바로드림 : 인터넷으로 주문하고 매장에서 직접 수령 안내
장바구니 담기 바로구매

책 그리고 꽃 서비스
책 그리고 꽃 | 책과 꽃을 함께 선물하세요 자세히보기

닫기

바로드림 주문 선물하기 보관함 담기

이 책의 이벤트 해외주문/바로드림/제휴사주문/업체배송건의 경우 1+1 증정상품이 발송되지 않습니다.

  • 행사도서 포함 3만원 이상 구매 시, 개발자굿즈(양장 데스크노트..
    2018.09.18 ~ 2018.10.18
  • 제이펍의 도서를 한 눈에 살펴보세요
    2017.11.23 ~ 2019.12.31
  • #리드잇 페이스북 페이지 팔로우 하시고, 신간소식 빠르게 받아보..
    2017.06.22 ~ 2025.07.31
상품상세정보
ISBN 9791188621156(1188621157)
쪽수 936쪽
크기 189 * 247 * 38 mm /1597g 판형알림

책소개

이 책이 속한 분야

최신 ARM64 커널을 코드 레벨에서 상세히 분석하다!

현업에서 커널 업무를 하고 있거나, 취미로 커널 분석을 시작했지만 방대한 양과 난해한 코드 때문에 어려움을 겪고 있는가? 시간이 부족하여 어디서부터 시작해야 할지 갈피조차 잡지 못하고 있는가? 오래전에 구입한 책을 뒤적거리지만 커널 버전이 맞지 않아 시간만 낭비하고 있지는 않은가? 최신 커널 학습에 어려움을 겪는 이런 분들을 위해 《코드로 알아보는 ARM 리눅스 커널》을 전면 개정하여 출간했다. 이 책은 최신 ARM64 커널의 주요 서브시스템을 코드 레벨에서 분석하고 있으며, 기존 원리를 코드를 직접 쫓아가며 명쾌하게 소개하고 있어 커널 엔지니어들에게 훌륭한 길잡이가 될 것이다.

저자소개

저자 : 윤석훈

저자 윤석훈
9년째 임베디드 리눅스 엔지니어로 일하고 있다. 주로 커널을 최적화하는 업무에 참여했으며, 임베디드 리눅스 커널에 관한 콘텐츠를 지속적으로 생산, 배포하는 것과 디버깅 툴에 관심이 많다. 커널 엔지니어로 오래 먹고 살기 위한 궁리의 일환으로 최근에는 잘 다니던 회사를 나와 무언가를 준비 중에 있다.

저자 : 문영일

저자 문영일
수년간 광통신을 이용하여 기가비트 인터넷을 전송하는 시스템인 저자 PON 네트워크 관련 개발을 하고 있다. 이전에는 ARM, PPC, MIPS 아키텍처 기반의 각종 임베디드 시스템뿐 아니라 콜센터 및 데이터센터 분야의 애플리케이션 설계와 개발을 수행했었다.

저자 : 구본규

저자 구본규
국내 손꼽히는 SoC 팹리스에서 리눅스 엔지니어로 근무하고 있다. 10년 넘게 각종 IT 세미나, 콘퍼런스, 커뮤니티 활동을 했으며, 요즘은 로봇과 인공지능이 바꿀 미래를 꿈꾸며 머신러닝 스터디 모임을 운영하고 있다.

저자 : 유희재

저자 유희재
임베디드 리얼타임 컴퓨팅 랩에서 멀티코어 환경에서의 임베디드 시스템을 전공했다. 대학원을 졸업한 후에는 시스템 엔지니어로 컴퓨터 비전을 활용한 스마트 네트워크 시스템과 x-ray 디텍터 및 바이오 진단기기를 개발했고, 플래그십 AP와 FP저자 A를 활용한 펌웨어 엔지니어로 최첨단 의료기기인 복강경 수술로봇의 국산화에도 힘썼다. 지금은 종합 반도체 회사에서 UFS를 위한 모바일 펌웨어 엔지니어로 근무하고 있다.

목차

1장 ARMv8 아키텍처 1
1.1 ARMv8 소개 4
1.1.1 익셉션 모델 5
1.1.2 익셉션 레벨 변경 6
1.1.3 실행 상태 7
1.1.4 실행 상태 변경 7

1.2 ARMv8 레지스터 8
1.2.1 프로세서 상태 레지스터(PSTATE) 9
1.2.2 AArch64 특수 목적 레지스터 10
1.2.3 시스템 레지스터 12
1.2.4 ABI의 레지스터 사용 규칙 12

1.3 AArch64 익셉션 핸들링 13
1.3.1 익셉션 타입 14
1.3.2 동기 및 비동기 익셉션 15
1.3.3 익셉션 핸들링 16
1.3.4 익셉션에 의해 변경되는 실행 상태와 익셉션 레벨 17
1.3.5 AArch64 익셉션 벡터 테이블 19
1.3.6 인터럽트 핸들링 20
1.3.7 저자 IC 표준 인터럽트 컨트롤러 21

1.4 캐시 21
1.4.1 캐시 구조 22
1.4.2 캐시 컨트롤러 24
1.4.3 캐시 정책 24
1.4.4 캐시 일관성의 두 가지 관점 25
1.4.5 캐시 관리 27
1.4.6 캐시 탐색 27

1.5 MMU 28
1.5.1 가상 주소를 물리 주소로 변환 29
1.5.2 AArch64의 테이블 디스크립터 종류 30
1.5.3 커널과 애플리케이션의 가상 주소 공간 분리 32
1.5.4 변환 테이블의 cacheable과 shareable 속성 33
1.5.5 디스크립터 메모리 속성 34
1.5.6 시큐리티와 MMU 36
1.5.7 컨텍스트 스위칭 36

1.6 메모리 오더링 37
1.6.1 메모리 타입 39
1.6.2 배리어 41
1.6.3 메모리 속성 42

1.7 멀티코어 프로세서 44
1.7.1 멀티프로세싱 시스템 44
1.7.2 캐시 일관성 47
1.7.3 클러스터 내의 멀티코어 캐시 일관성 48
1.7.4 버스 프로토콜과 캐시 일관성 인터커넥트 51

1.8 전력 관리 52
1.8.1 유휴 상태 관리 52
1.8.2 소비전류 관련 인스트럭션 54
1.8.3 PSCI 54

2장 커널 시작하기 57
2.1 커널의 진입점 head.S 60
2.1.1 부트 파라미터 저장 62
2.1.2 EL2 설정 63
2.1.3 CPU 부트 모드 저장 64
2.1.4 페이지 테이블 생성 65
2.1.5 CPU 초기화 71

2.2 익셉션 핸들링 78
2.2.1 익셉션 벡터 79
2.2.2 익셉션 테이블 엔트리 84

2.3 디바이스 트리 94
2.3.1 디바이스 트리의 필요성 94
2.3.2 디바이스 트리 작성하기 95
2.3.3 early FDT 사용 96
2.3.4 FDT를 풀어낸 후 사용 107

3장 페이징과 매핑 125
3.1 ARM64 페이징 127
3.1.1 가상 주소 공간 127
3.1.2 페이지 테이블 개요 130
3.1.3 페이징 초기화 134
3.1.4 페이지 테이블 생성 142
3.1.5 페이지 테이블 레지스터 설정 151
3.1.6 페이지 테이블 및 주소 변환 API 158

3.2 고정 매핑(fixmap) 161
3.2.1 고정 매핑 초기화 162
3.2.2 고정 매핑과 언매핑 164
3.2.3 고정 매핑 관련 API 166

3.3 연속된 가상 주소 공간 매핑(vmap) 168
3.3.1 vmap 영역 관리 168
3.3.2 vmap 172
3.3.3 vmap_area 할당 176
3.3.4 vunmap 186
3.3.5 vmap_area 할당과 해제 192

3.4 I/O 메모리 매핑(ioremap) 200
3.4.1 early I/O 메모리 매핑 200
3.4.2 I/O 메모리 매핑 205

3.5 페이지 디스크립터 매핑(vmemmap) 213
3.5.1 vmemmap 활성화 214

4장 메모리 관리 219
4.1 early 메모리 할당자: memblock 221
4.1.1 memblock 구조 222
4.1.2 memblock 초기화 224
4.1.3 memblock 할당과 해제 229
4.1.4 memblock 추가 232
4.1.5 memblock 삭제 240

4.2 메모리 모델 245
4.2.1 메모리 모델의 종류 246
4.2.2 메모리 맵(mem_map) 249

4.3 존 254
4.3.1 존 타입 254
4.3.2 부트 메모리 초기화 257
4.3.3 vmemmap을 사용하는 sparse 메모리 모델 277

4.4 버디 시스템 309
4.4.1 버디 시스템의 구조 309
4.4.2 최초 버디 구성 과정 312
4.4.3 버디 시스템의 페이지 할당 322
4.4.4 버디 시스템의 페이지 해제 336

4.5 per-cpu 페이지 프레임 캐시(pcp) 343
4.5.1 pcp 초기화 과정 344
4.5.2 pcp 구성하기 344
4.5.3 pcp에서의 페이지 할당 346
4.5.4 pcp로의 페이지 해제 349
4.5.5 pcp를 버디 시스템으로 회수하기 354

4.6 페이지 할당자 356
4.6.1 구조 356
4.6.2 NUMA 지원 357
4.6.3 존 구성 및 zonelist 358
4.6.4 zonelist 초기화 361
4.6.5 NUMA 메모리 정책 초기화 370
4.6.6 페이지 할당 373
4.6.7 fastpath 페이지 할당 375
4.6.8 더티 페이지 384
4.6.9 slowpath 페이지 할당 388
4.6.10 워터마크 395

4.7 슬랩 할당자 410
4.7.1 슬랩, 슬럽, 슬롭 410
4.7.2 슬랩 객체 구조 412
4.7.3 kmem_cache 초기화 413
4.7.4 kmem 캐시 생성 426
4.7.5 슬랩 페이지 할당 442
4.7.6 슬랩 객체 할당 449
4.7.7 슬랩 객체 해제 472

4.8 kmalloc과 vmalloc 487
4.8.1 kmalloc과 vmalloc의 특징 487
4.8.2 저자 FP(저자 et Free Pa저자 e) 플래그 488
4.8.3 kmalloc 할당 490
4.8.4 kmalloc으로 할당한 메모리 해제 496
4.8.5 vmalloc 초기화 498
4.8.6 vmalloc을 사용한 메모리 할당 500
4.8.7 vmalloc( )으로 할당받은 메모리 해제 505

4.9 per-cpu 할당자 507
4.9.1 개요 507
4.9.2 per-cpu 초기화 523
4.9.3 first chunk 구성 545
4.9.4 슬랩 할당자 활성화 후 per-cpu 초기화 555
4.9.5 per-cpu 동적 할당 556

5장 태스크 관리 575
5.1 태스크 표현 577
5.1.1 프로세스와 스레드의 차이, 그리고 태스크 577
5.1.2 태스크를 표현하는 자료구조 578
5.1.3 초기화 과정 579
5.2 PID 관리하기 586
5.2.1 PID를 표현하는 자료구조 586
5.2.2 PID 할당하기 591
5.2.3 PID 해제하기 598
5.2.4 PID 할당을 위한 초기화 과정 600
5.2.5 관련 API 603
5.3 실행 상태 관리하기 604
5.3.1 태스크의 주요 실행 상태 605
5.3.2 관련 API 606
5.4 우선순위 관리하기 607
5.4.1 nice 값과 우선순위 607
5.4.2 static priority, normal priority, dynamic priority 608
5.4.3 우선순위 설정하기 608
5.4.4 PI boostin저자 priority leak과 우선순위 리셋 613
5.5 태스크 생성하기 614
5.5.1 _do_fork( ): 태스크 생성의 시작점 614
5.5.2 copy_process( ): 태스크 복사하기 616
5.6 태스크 종료하기 636
5.6.1 do_exit( ) 637
5.7 idle 스레드(swapper) 640
5.7.1 idle 스레드가 실행되는 과정 641
5.7.2 idle 스레드가 하는 일 642
5.7.3 idle 스레드가 설정되는 과정 645
5.7.4 초기화 과정 분석 646
5.8 태스크 관련 자료구조의 필드 설명 652
5.8.1 task_struct 구조체 652
5.8.2 thread_info 구조체 655
5.8.3 thread_struct 구조체 656

6장 태스크 스케줄링 657
6.1 스케줄러의 주요 개념 660
6.1.1 load wei저자 ht와 virtual runtime 660
6.1.2 스케줄링 레이턴시와 타임 슬라이스 663
6.1.3 런큐와 CFS 런큐, 레드 블랙 트리 666
6.1.4 태스크 그룹과 스케줄링 엔티티 669
6.1.5 스케줄링 클래스, 스케줄링 정책 674
6.2 메인 스케줄러 675
6.2.1 타이머 인터럽트를 이용한 주기적인 스케줄링 676
6.2.2 비주기적인 스케줄링 678
6.2.3 스케줄링 시작하기: schedule( ), preempt_schedule_irq( ), preempt_schedule_common( ) 682
6.2.4 스케줄링 요청하기, 요청 체크해서 스케줄링 시도하기 685
6.2.5 스케줄링의 핵심: _ _schedule( ) 688
6.2.6 태스크 깨우기: try_to_wake_up( ) 697
6.3 CFS(Completely Fair Schedulin저자 ) 710
6.3.1 태스크를 런큐에 삽입하기 710
6.3.2 태스크를 런큐에서 선택하기 717
6.3.3 태스크를 런큐에서 제거하기 729
6.3.4 주기적으로 발생하는 틱 처리하기 734
6.3.5 스케줄링 엔티티의 실행시간 관리하기 737
6.3.6 타임 슬라이스 관리하기 742
6.4 스케줄러 초기화하기 747
6.4.1 sched_init( ): 스케줄러 초기화하기 747

7장 SMP와 cpu 토폴로지 755
7.1 SMP를 위한 커널 지원 757
7.2 cpu 토폴로지 758
7.2.1 MPIDR 해시 테이블 762
7.2.2 cpumask map 768
7.3 Secondary Bootin저자 770
7.3.1 ARM: SMP 오퍼레이션 770
7.3.2 ARM64: cpu 오퍼레이션 772
7.3.3 PSCI(Power State Coordination Interface) 777
7.3.4 ARM64 non-boot cpu 부팅 781

8장 인터럽트 803
8.1 인터럽트의 개념 805
8.1.1 인터럽트란 무엇인가? 805
8.1.2 인터럽트 컨트롤러 805
8.2 리눅스 인터럽트 서브시스템 807
8.2.1 irq_chip: 인터럽트 컨트롤러 807
8.2.2 irq_domain: 인터럽트 도메인 808
8.2.3 irq_desc: 인터럽트 디스크립터 809
8.3 인터럽트 핸들러 등록과 처리 810
8.3.1 인터럽트 핸들러 등록 810
8.3.2 인터럽트 핸들러 호출 과정 813
8.3.3 인터럽트 활성화와 비활성화 816
8.3.4 인터럽트 초기화 과정 819
8.4 인터럽트 지연 처리 825
8.4.1 top-half와 bottom-half 825
8.4.2 softirq 826
8.4.3 워크큐 833
8.4.4 threaded irq 843

9장 시간과 타이머 관리 847
9.1 공통 클록 프레임워크(CCF) 849
9.1.1 클록 850
9.1.2 기본적인 클록의 구성요소 850
9.1.3 CLK 프레임 계층 구현을 위한 인터페이스 853
9.1.4 관련 초기화 함수 857

9.2 타임 서브시스템 859
9.2.1 기본 구성 개요 860
9.2.2 클록 소스 860
9.2.3 클록 이벤트 865
9.2.4 틱 디바이스 868
9.3 타이머 관리 872
9.3.1 타이머 개요 872
9.3.2 저해상도 타이머 874
9.3.3 고해상도 타이머 879

찾아보기 887

책 속으로

이 책은 ARM64 기반의 최신 리눅스 커널의 주요 서브시스템을 코드 수준에서 분석하고 있다. 특정 기능이 동작하는 코드플로우를 코드 레벨에서 설명하고 있으며, 약 360개의 그림을 통해 주요 동작을 시각화하고 있다. 새롭게 시작하거나 좀 더 깊은 이해를 위해 커널을 분석하는 개발자가 커널의 미로에서 길을 찾는 데 큰 도움이 될 것이다. _xix쪽

프로세서가 가상 주소를 발행하면 MMU에 의해 물리 주소로 변환된다. MMU는 변환 테이블을 통해 이 주소 변환 과정을 수행한다. 변환 테이블에는 가상 주소를 물리 주소로 변환하는 ... 더보기

출판사 서평

ARM64 커널의 작동 구조 전격 공개!
최신 커널을 분석하거나 수정하기 위해 라인 단위로 코드 설명!

현업에서 커널 업무를 하고 있거나, 취미로 커널 분석을 시작했지만 방대한 양과 난해한 코드 때문에 어려움을 겪고 있는가? 시간이 부족하여 어디서부터 시작해야 할지 갈피조차 잡지 못하고 있는가? 오래전에 구입한 책을 뒤적거리지만 커널 버전이 맞지 않아 시간만 낭비하고 있지는 않은가? 최신 커널 학습에 어려움을 겪는 이런 분들을 위해 《코드로 알아보는 ARM 리눅스 커널》을 전면 개정하여 출간했다. 이 책은 최신 ARM64 커... 더보기

북로그 리뷰 (0) 쓰러가기

도서 구매 후 리뷰를 작성하시면 통합포인트를 드립니다.
결제 90일 이내 작성 시 300원 / 발송 후 5일 이내 작성시 400원 / 이 상품의 첫 리뷰 작성 시 500원
(포인트는 작성 후 다음 날 적립되며, 도서 발송 전 작성 시에는 발송 후 익일에 적립됩니다.
외서/eBook/음반/DVD/GIFT 및 잡지 상품 제외)
안내
  • 해당도서의 리뷰가 없습니다.

Klover 평점/리뷰 (0)

교환/반품/품절안내

※ 상품 설명에 반품/교환 관련한 안내가 있는 경우 그 내용을 우선으로 합니다. (업체 사정에 따라 달라질 수 있습니다.)

교환/반품/품절안내
반품/교환방법 마이룸 > 주문관리 > 주문/배송내역 > 주문조회 > 반품/교환신청 ,
[1:1상담>반품/교환/환불] 또는 고객센터 (1544-1900)

※ 오픈마켓, 해외배송주문, 기프트 주문시 [1:1상담>반품/교환/환불]
    또는 고객센터 (1544-1900)
반품/교환가능 기간 변심반품의 경우 수령 후 7일 이내,
상품의 결함 및 계약내용과 다를 경우 문제점 발견 후 30일 이내
반품/교환비용 변심 혹은 구매착오로 인한 반품/교환은 반송료 고객 부담
반품/교환 불가 사유
  • 소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우
    (단지 확인을 위한 포장 훼손은 제외)
  • 소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
    예) 화장품, 식품, 가전제품(악세서리 포함) 등
  • 복제가 가능한 상품 등의 포장을 훼손한 경우
    예) 음반/DVD/비디오, 소프트웨어, 만화책, 잡지, 영상 화보집
  • 소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우 ((1)해외주문도서)
  • 디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우
  • 시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
  • 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에
    해당되는 경우
(1) 해외주문도서 : 이용자의 요청에 의한 개인주문상품으로 단순변심 및 착오로 인한 취소/교환/반품 시 ‘해외주문 반품/취소 수수료’ 고객 부담 (해외주문 반품/취소 수수료 : ①양서-판매정가의 12%, ②일서-판매정가의 7%를 적용)
상품 품절 공급사(출판사) 재고 사정에 의해 품절/지연될 수 있으며, 품절 시 관련 사항에 대해서는
이메일과 문자로 안내드리겠습니다.
소비자 피해보상
환불지연에 따른 배상
  • 상품의 불량에 의한 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은
    소비자분쟁해결 기준 (공정거래위원회 고시)에 준하여 처리됨
  • 대금 환불 및 환불지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의
    소비자 보호에 관한 법률에 따라 처리함

이 분야의 베스트

더보기+

이 분야의 신간

  • 크리스토퍼 비숍
    41,400원
  • 정권우
    24,300원
  • 길벗R&D
    18,900원
  • 길벗R&D
    17,100원
  • 조현영
    28,800원
더보기+

바로가기

  • 우측 확장형 배너 2
  • 우측 확장형 배너 2

최근 본 상품