디버깅을 통해 배우는 리눅스 커널의 구조와 원리 2 : 라즈베리 파이로 따라하면서 쉽게 이해할 수 있는 리눅스 커널

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 2 : 라즈베리 파이로 따라하면서 쉽게 이해할 수 있는 리눅스 커널

$46.14
Description
신입 리눅스 시스템 개발자부터 5년차 개발자가 실무를 하기 위해 알아야 할
리눅스 커널의 주요 서브시스템을 다룹니다!
실전 개발에서 신입 사원 옆에 친절한 선배 개발자가 앉아서 리눅스 커널에 대해 꼼꼼하게 알려주듯, 리눅스 커널을 쉽고 친절하게 설명하는 책입니다. 이 책은 최신 버전(LTS: 4.19)의 리눅스 커널 소스를 함수 흐름을 따라가며 자세히 분석하고 ftrace와 TRACE32 같은 디버깅 툴을 활용해 커널의 동작 원리를 설명합니다. 또한 라즈베리 파이에서 리눅스 커널의 소스코드를 직접 수정해 설치한 다음 커널을 디버깅하는 방법을 다룹니다. 각 장에서 소개하는 커널 디버깅 방법은 실무 개발에 그대로 적용할 수 있습니다.

▣ [1부] 커널 디버깅(ftrace), 프로세스, 인터럽트, 인터럽트 후반부, 워크큐 편
먼저 커널을 디버깅하는 방법과 함께 ftrace 사용법을 소개합니다. 커널을 실행하는 주인공인 프로세스와 인터럽트를 커널이 처리하는 세부 동작 원리를 다룹니다. 인터럽트 후반부를 처리하는 IRQ 스레드(threaded IRQ)와 Soft IRQ 기법과 커널에서 후반부를 처리하는 워크큐에 대해 설명합니다.

▣ [2부] 타이머, 동기화, 스케줄링, 시스템 콜, 시그널, 가상 파일 시스템, 메모리 관리 편
커널이 시간의 흐름을 관리하는 동작 원리와 동기화 기법(스핀락, 뮤텍스)을 다룹니다. 여러 프로세스의 실행 흐름을 관리하는 스케줄링의 세부 구현 방식과 시스템 콜과 시그널을 커널에서 어떤 방식으로 처리하는지 설명합니다. 다양한 파일 시스템을 공존해 실행시킬 수 있는 가상 파일 시스템과 커널의 메모리를 관리하는 방식에 대해 다룹니다.

부록으로 리눅스 커널의 메일링 리스트를 활용하는 방법과 리눅스 커널에 기여하는 방법을 자세히 소개합니다.

저자

김동현

저자:김동현
LG전자에서11년째임베디드리눅스BSP엔지니어로일하고있다.주로리눅스커널드라이버를안정화(KernelStabilityTroubleshooting)하거나보드를브링업하는과제에참여했다.로우레이어소프트웨어(부트로더,리눅스커널드라이버)의다양한문제를해결할수있는디버깅방법에관심이많으며실무지식을블로그를통해다른개발자와공유하는것을즐긴다.

목차

▣08장:커널타이머관리
8.1커널타이머(저해상도타이머)의주요개념
___8.1.1HZ란?
___8.1.2SoftIRQ의타이머서비스란?
___8.1.3SoftIRQ타이머(TIMER_SOFTIRQ)서비스와동적타이머란?
___8.1.4커널이실행시각을관리하는방식을왜잘알아야할까?
___8.1.5커널타이머용어정리
8.2jiffies란?
___8.2.1jiffies소개
___8.2.2jiffies와jiffies_64변수
___8.2.3jiffies값은누가언제증가시킬까?
___8.2.4msecs_to_jiffies()함수란?
8.3커널에서시간을흐름을제어하는방법
___8.3.1time_after()/time_before()매크로함수
___8.3.2time_after()/time_before()함수의사용예
8.4동적타이머초기화
___8.4.1동적타이머의전체흐름
___8.4.2동적타이머자료구조
___8.4.3동적타이머초기화함수
8.5동적타이머등록
___8.5.1동적타이머의등록
___8.5.2동적타이머등록과정의주요함수
___8.5.3동적타이머등록과정에서호출하는함수분석
8.6동적타이머는누가언제실행할까?
___8.6.1SoftIRQ타이머서비스에서동적타이머를실행하는과정
___8.6.2SoftIRQ타이머서비스의1~2단계분석
___8.6.3SoftIRQ타이머서비스에서등록된동적타이머를체크하는단계의코드분석
___8.6.4SoftIRQ타이머서비스핸들러에서등록된동적타이머를실행하는단계의코드분석
8.7라즈베리파이에서의동적타이머실습및로그분석
___8.7.1ftrace의동적타이머디버깅이벤트소개
___8.7.2라즈베리파이에서의동적타이머등록및실행과정을ftrace로확인하기
8.8정리

▣09장:커널동기화
9.1커널동기화의주요개념
___9.1.1임계영역과레이스컨디션
___9.1.2레이스컨디션은왜발생할까?
___9.1.3레이스컨디션관련커널패치
9.2레이스컨디션발생실습
___9.2.1유저프로세스에서시스템콜을호출할때발생하는레이스컨디션
___9.2.2커널프로세스의레이스컨디션
___9.2.3인터럽트발생으로인한레이스컨디션발생
9.3커널동기화기법
___9.3.1스핀락과뮤텍스기법
___9.3.2스핀락과뮤텍스기법의차이점
9.4스핀락
___9.4.1스핀락의특징
___9.4.2스핀락자료구조
___9.4.3스핀락사용예제
___9.4.4스핀락처리흐름
___9.4.5spin_lock()함수의인라인어셈블리코드분석
___9.4.6spin_lock()함수의어셈블리코드분석
___9.4.7spin_unlock()함수분석
___9.4.8스핀락플러그인함수:spin_lock_irq()/spin_unlock_irq()
___9.4.9스핀락플러그인함수:spin_lock_irqsave()/spin_unlock_irqrestore()
9.5뮤텍스란?
___9.5.1뮤텍스의기본개념
___9.5.2뮤텍스의fastpath동작
___9.5.3뮤텍스slowpath:mutex_lock()함수분석
___9.5.4뮤텍스slowpath:mutex_unlock()함수분석
9.6커널동기화디버깅
___9.6.1스핀락
___9.6.2뮤텍스디버깅
9.8정리

▣10장:프로세스스케줄링
10.1스케줄링의주요개념
___10.1.1스케줄링이란?
___10.1.2선점스케줄링과비선점스케줄링이란?
___10.1.3컨텍스트스위칭이란?
___10.1.4스케줄링정책이란?
___10.1.5스케줄러클래스란?
___10.1.6런큐란?
___10.1.7우선순위(nice)란?
10.2프로세스상태관리
___10.2.1프로세스상태
___10.2.2.프로세스상태변화
___10.2.3어떤함수가프로세스상태를바꿀까?
___10.2.4프로세스상태를ftrace로확인하기
10.3스케줄러클래스
___10.3.1스케줄러클래스자료구조
___10.3.25가지스케줄러클래스란?
___10.3.3프로세스는스케줄러클래스를어떻게등록할까?
___10.3.4프로세스는스케줄러클래스로스케줄러의세부함수를어떻게호출할까?
10.4런큐
___10.4.1런큐자료구조(rq)소개
___10.4.2runqueues변수
___10.4.3런큐에접근하는함수
___10.4.4런큐자료구조
10.5CFS스케줄러
___10.5.1CFS스케줄러의주요개념
___10.5.2CFS스케줄러알고리즘
___10.5.3CFS관련세부함수분석
___10.5.4vruntime을ftrace로확인하는실습
10.6선점스케줄링
___10.6.1선점스케줄링이란?
___10.6.2선점스케줄링진입점은어디일까?
___10.6.3선점스케줄링의발생시점을아는것은왜중요할까?
___10.6.4선점스케줄링의진입점:커널모드중인터럽트발생
___10.6.5선점스케줄링진입점:유저프로세스실행중인터럽트발생
___10.6.6선점스케줄링진입점:유저프로세스가시스템콜처리를마무리한후
___10.6.7선점스케줄링비활성화/활성화함수preempt_disable()/preempt_enable()소개
10.7프로세스는어떻게깨울까?
___10.7.1.프로세스를깨운다는것은무엇을의미할까?
___10.7.2프로세스를깨울때호출하는함수
___10.7.3깨우는프로세스를런큐에삽입하는동작
10.8스케줄링의핵심schedule()함수
___10.8.1schedule()함수분석
___10.8.2schedule()함수의동작정리
10.9컨텍스트스위칭
___10.9.1컨텍스트스위칭이란?
___10.9.2컨텍스트스위칭관련자료구조
___10.9.3컨텍스트스위칭의세부코드분석
___10.9.4ftrace를이용한컨텍스트스위칭동작확인
___10.9.5컨텍스트스위칭디버깅
10.10스케줄링디버깅
___10.10.1ftrace:sched_switch와sched_wakeup이벤트소개
___10.10.2ftrace:스케줄링과프로세스를깨울때의콜스택파악
___10.10.3프로세스를깨울때의콜스택분석
10.11정리

▣11장:시스템콜
11.1시스템콜의주요개념
___11.1.1시스템콜이란?
___11.1.2시스템콜의전체흐름과계층
___11.1.3시스템콜의특징
___11.1.4ARM프로세서관점의시스템콜처리
___11.1.5시스템콜테이블이란?
11.2유저공간에서시스템콜은어떻게발생할까?
___11.2.1GNUC라이브러리의실행흐름
___11.2.2유저공간에서시스템콜이발생할때의어셈블리코드분석
11.3커널모드에서시스템콜을어떻게실행할까?
___11.3.1소프트웨어인터럽트벡터vector_swi는어떻게실행될까?
___11.3.2소프트웨어인터럽트벡터vector_swi코드분석
___11.3.3커널공간에서시스템콜테이블확인
11.4시스템콜핸들러는어떻게동작할까?
___11.4.1시스템콜종류별시스템콜핸들러의동작
___11.4.2매개변수점검
11.5시스템콜의실행을완료한후에는무슨일을할까?
___11.5.1ret_fast_syscall레이블의복귀과정
___11.5.2ret_fast_syscall레이블의전체실행흐름
___11.5.3시그널전달및스케줄링실행조건점검
___11.5.4유저공간으로복귀
11.6시스템콜관련함수
___11.6.1SYSCALL_DEFINEx매크로분석
___11.6.2전처리코드에서시스템콜핸들러확인
11.7시스템콜디버깅
___11.7.1ftrace시스템콜이벤트
___11.7.2ftrace시스템콜핸들러의콜스택확인
___11.7.3strace를이용한시스템콜디버깅
___11.7.4strace와ftrace를이용한시스템콜디버깅
11.8정리

▣12장:시그널
12.1시그널이란?
___12.1.1유저프로세스입장에서시그널이란?
___12.1.2시그널번호와동작방식
___12.1.3시그널을받으면프로세스는어떻게동작할까?
___12.1.4커널에서시그널은어떻게처리할까?
___12.1.5커널이시그널을처리하는동작을왜잘알아야할까?
12.2시그널설정은어떻게할까?
___12.2.1유저공간에서의시그널설정
___12.2.2커널공간에서의시그널설정
___12.2.3시그널관련시스템호출함수는무엇일까?
12.3커널공간의시그널설정함수분석
___12.3.1유저공간에서sigaction()함수를호출했을때의커널실행흐름
___12.3.2유저공간에서pause()함수호출시의커널실행흐름파악
12.4시그널생성과정의함수분석
___12.4.1유저프로세스의kill()함수실행
___12.4.2유저프로세스의tgkill()함수실행
___12.4.3커널은언제시그널을생성할까?
___12.4.4__send_signal()함수분석
___12.4.5complete_signal()함수분석
12.5프로세스는언제시그널을받을까?
___12.5.1ret_fast_syscall레이블분석
___12.5.2인터럽트핸들링후__irq_usr레이블코드분석
12.6시그널전달과처리는어떻게할까?
___12.6.1do_work_pending()/do_signal()함수분석
___12.6.2get_signal()함수분석
___12.6.3handle_signal()함수와시그널핸들러호출코드분석
12.7시그널제어suspend()제어를위한분석
___12.7.1유저공간의suspend()함수
___12.7.2커널공간의sys_rt_sigsuspend()함수분석
12.8시그널에대한ftrace디버깅
___12.8.1ftrace의시그널이벤트소개
___12.8.2ftrace를이용한시그널의기본동작로그분석
___12.8.3ftrace의시그널핸들러동작로그분석
12.9정리<

출판사 서평

▣[1부]커널디버깅(ftrace),프로세스,인터럽트,인터럽트후반부,워크큐편
먼저커널을디버깅하는방법과함께ftrace사용법을소개합니다.커널을실행하는주인공인프로세스와인터럽트를커널이처리하는세부동작원리를다룹니다.인터럽트후반부를처리하는IRQ스레드(threadedIRQ)와SoftIRQ기법과커널에서후반부를처리하는워크큐에대해설명합니다.

▣[2부]타이머,동기화,스케줄링,시스템콜,시그널,가상파일시스템,메모리관리편
커널이시간의흐름을관리하는동작원리와동기화기법(스핀락,뮤텍스)을다룹니다.여러프로세스의실행흐름을관리하는스케줄링의세부구현방식과시스템콜과시그널을커널에서어떤방식으로처리하는지설명합니다.다양한파일시스템을공존해실행시킬수있는가상파일시스템과커널의메모리를관리하는방식에대해다룹니다.

부록으로리눅스커널의메일링리스트를활용하는방법과리눅스커널에기여하는방법을자세히소개합니다.