리눅스 커널 심층분석 (개정 2판)
- 원서명Linux Kernel Development Second Edition (ISBN 9780672327209)
- 지은이로버트 러브(Robert Love)
- 옮긴이이상근, 강호관
- ISBN : 8989975859
- 25,000원
- 2005년 12월 28일 펴냄
- 페이퍼백 | 432쪽 | 190*255mm
- 시리즈 : 임베디드 시스템
판매처
개정판책 소개
이 책은 커널 코드를 작성하고 개발하는 것뿐만 아니라 운영체제에 대한 폭넓은 이해를 통해 좀더 효율적이고 생산적으로 코딩하고 싶어하는 프로그래머에게 도움이 되도록 리눅스 커널의 디자인과 구현방식에 대해 상세히 설명하고 있다.
이 책에서는 리눅스 커널의 주요 하부시스템과 기능들을 설명하면서 특히 그 설계 및 구현방식과 인터페이스에 대해 언급하고 있다. 따라서 다양한 방면에 관심을 갖고 필요성을 느끼는 독자들에게 모두 좋은 정보를 제공할 것이다.
핵심 커널 개발자이기도 한 이 책의 저자는 2.6 리눅스 커널에 대한 자신의 귀중한 지식과 경험을 독자들과 공유하고자 한다. 이 책에서 다루는 주제에는 프로세스 관리, 스케줄링, 시간 관리 및 타이머, 시스템 콜 인터페이스, 메모리 어드레싱, 메모리 관리, 페이지 캐시, VFS, 커널 동기화, 이식성 이슈, 디버깅 테크닉 등이다. 이 책은 2.6 리눅스 커널에 추가된 흥미로운 기능들, 즉 O(1) 스케줄러나 선점형 커널, 블록 I/O 레이어, I/O 스케줄러에 대해서도 상세히 다루고 있다.
★ 개정2판에서 추가된 내용 ★
• 현재 2.6 리눅스 커널의 주요 하위시스템과 기능들에 대한 최신 내용
• 커널 모듈에 대한 새롭고 상세한 설명
• 가상메모리와 메모리 할당에 대한 더욱 자세한 설명
• 커널 코드 디버깅에 대한 추가 정보
• 커널 동기화와 타이머에 대한 예제
• 커널 패치를 제출하거나 리눅스 커널 커뮤니티를 관리하기 위한 유용한 조언
이 책에서는 리눅스 커널의 주요 하부시스템과 기능들을 설명하면서 특히 그 설계 및 구현방식과 인터페이스에 대해 언급하고 있다. 따라서 다양한 방면에 관심을 갖고 필요성을 느끼는 독자들에게 모두 좋은 정보를 제공할 것이다.
핵심 커널 개발자이기도 한 이 책의 저자는 2.6 리눅스 커널에 대한 자신의 귀중한 지식과 경험을 독자들과 공유하고자 한다. 이 책에서 다루는 주제에는 프로세스 관리, 스케줄링, 시간 관리 및 타이머, 시스템 콜 인터페이스, 메모리 어드레싱, 메모리 관리, 페이지 캐시, VFS, 커널 동기화, 이식성 이슈, 디버깅 테크닉 등이다. 이 책은 2.6 리눅스 커널에 추가된 흥미로운 기능들, 즉 O(1) 스케줄러나 선점형 커널, 블록 I/O 레이어, I/O 스케줄러에 대해서도 상세히 다루고 있다.
★ 개정2판에서 추가된 내용 ★
• 현재 2.6 리눅스 커널의 주요 하위시스템과 기능들에 대한 최신 내용
• 커널 모듈에 대한 새롭고 상세한 설명
• 가상메모리와 메모리 할당에 대한 더욱 자세한 설명
• 커널 코드 디버깅에 대한 추가 정보
• 커널 동기화와 타이머에 대한 예제
• 커널 패치를 제출하거나 리눅스 커널 커뮤니티를 관리하기 위한 유용한 조언
목차
목차
- 1장 리눅스 커널
- 리눅스의 개발
- 운영체제와 커널
- 리눅스 커널과 전통적인 유닉스 커널
- 리눅스 커널 버전
- 리눅스 커널 개발 커뮤니티
- 시작하기 전에
- 2장 커널과의 첫 만남
- 커널 소스 구하기
- 커널 소스 트리
- 커널 빌드하기
- 다른 성질의 야수
- 이제 여기까지 왔다
- 3장 프로세스 관리
- 프로세스 서술자와 태스크 구조체
- 프로세스 생성
- 리눅스의 스레드 구현
- 프로세스 종료 35
- 4장 프로세스 스케쥴링
- 정책
- 스케쥴링 알고리듬
- 선점과 컨텍스트 스위칭
- 실시간
- 스케쥴러와 관련된 시스템 콜
- 5장 시스템 콜
- API, POSIX, C 라이브러리
- 시스콜
- 시스템 콜 핸들러
- 시스템 콜의 구현
- 시스템 콜 컨텍스트
- 6장 인터럽트와 인터럽트 핸들러
- 인터럽트
- 인터럽트 핸들러
- 인터럽트 핸들러 등록
- 인터럽트 핸들러 작성
- 인터럽트 컨텍스트
- 인터럽트 핸들링 구현
- 인터럽트 컨트롤
- 7장 보톰하프와 지연된 작업
- 보톰하프
- Softirq
- 태스크릿
- 워크큐
- 어떤 보톰하프를 사용해야 하는가?
- 보톰하프 사이의 록
- 8장 커널 동기화 개요
- 위험구역과 경쟁상태
- 락킹
- 데드락
- 경쟁과 확장성
- 코드 잠그기
- 9장 커널 동기화 방법
- 원자적 동작
- 스핀락
- 리더-라이터 스핀락
- 세마포어
- 리더-라이터 세마포어
- 비교: 스핀락과 세마포어
- 완료 변수
- 큰 커널 락
- 선점의 비활성화
- 오더링과 배리어
- 10장 타이머와 시간 관리
- 커널에 있어서의 시간의 개념
- 진동수 : HZ
- 지피
- 하드웨어 클럭과 타이머
- 타이머 인터럽트 핸들러
- 현재시각
- 타이머
- 실행 지연
- 11장 메모리 관리
- 페이지
- 영역
- 페이지 얻기
- kmalloc()
- vmalloc()
- 슬랩 레이어
- 슬랩 할당자 인터페이스
- 스택에 정적으로 할당하기
- 상위 메모리 매핑
- CPU별 할당
- 새로운 percpu 인터페이스
- CPU별 데이터를 사용하는 이유
- 어떤 할당 방법을 사용해야 하는가
- 12장 가상 파일시스템
- 공통 파일시스템 인터페이스
- 파일시스템 추상화 레이어
- 유닉스 파일시스템
- VFS 객체와 그 자료구조
- 슈퍼블록 객체
- inode 객체
- 덴트리 객체
- 파일 객체
- 파일시스템과 관련된 자료구조
- 프로세스와 연관된 자료구조
- 리눅스의 파일시스템
- 13장 블록 I/O 레이어
- 블록 디바이스에 대한 이해
- 버퍼와 버퍼헤드
- bio 구조체
- 요청 큐
- I/O 스케쥴러
- 14장 프로세스 주소영역
- 메모리 서술자
- 메모리 영역
- 메모리 영역 다루기
- mmap()과 do_mmap(): 주소공간 생성
- munmap()과 do_munmap(): 주소 공간 제거
- 페이지 테이블
- 15장 페이지 캐시와 페이지 라이트백
- 페이지 캐시
- 래딕스 트리
- 버퍼 캐시
- pdflush 데몬
- 16장 모듈
- 모듈 빌드
- 모듈 설치
- 모듈 종속성 생성
- 모듈 로드
- 설정 옵션 관리
- 모듈 매개변수
- 익스포트된 심볼들
- 17장 kobject와 sysfs
- kobject
- ktype
- kset
- 하위시스템
- 혼동되는 구조체
- kobject의 조작 및 관리
- 참조 카운트
- sysfs
- 커널 이벤트 레이어
- 18장 디버깅
- 먼저 시작해야 하는 것
- 커널에서의 버그
- printk()
- oops
- 커널 디버깅 옵션
- 버그 유발과 정보 덤프
- Magic SysRq 키
- 커널 디버거 이야기
- 시스템을 여러 각도에서 조사
- 범행을 저지른 변경을 찾기 위한 이진 탐색
- 모든 시도가 실패한 경우 : 커뮤니티
- 19장 이식성
- 리눅스: 이식성의 역사
- 워드 크기와 자료형
- 데이터 정렬
- 바이트 순서
- 시간
- 페이지 크기
- 프로세서 오더링
- SMP, 커널 선점, 상위 메모리
- 20장 패치, 해킹, 그리고 공동체
- 공동체
- 리눅스 코딩 스타일
- 명령 체계
- 버그 리포트 제출
- 패치 생성
- 패치 제출
- 부록A 연결 리스트
- 환형 연결 리스트
- 리눅스 커널에서의 구현
- 연결 리스트 조작
- 연결 리스트 순회하기
- 부록 B 커널 랜덤 숫자 발생기
- 디자인과 구현
- 엔트로피 입력 인터페이스
- 엔트로피 출력 인터페이스
- 부록C 알고리즘 복잡도
- 알고리즘
- O 표기법
- 빅 세타 표기법
- 모든 것을 모아 보자
- 시간 복잡도의 위험성
도서 오류 신고
정오표
[ p44 '실행큐' 절 2~3행 ]
한 프로세스당 하나의 → 한 프로세서당 하나의
한 프로세스당 하나의 → 한 프로세서당 하나의