보기만 해도 골치아픈 소스들이 별로 없이 개념만 공부하는데는 괜찮은책 같습니다.
커널 내부구조를 가장 빠르게 이해할 수 있는 이미지 학습법!
리눅스 커널은 다양한 분야에서 활용되고 있지만, 그 중에서도 임베디드 영역이 단연 으뜸일 것이다. 임베디드 영역에서 커널을 활용할 때는 기존의 커널에서 필요한 부분만 활용하는 경우가 많기 때문에 무엇보다 커널의 전체적인 이해가 중요하다. 또한, 필요할 때마다 해당 영역에 대한 동작원리를 알면 원하고자 하는 것을 구현하기가 수월하다.
이 책은 바로 이러한 필요성에 의해 집필되었다. 커널 학습 장벽을 최대한 낮춘 이미지 학습법으로 가장 빠르고 효과적으로 커널을 학습할 수 있는 길을 제시하였다. 먼저 관련 함수의 관계도를 그려서 명확하게 이해시키고, 그 함수의 소스를 라인별로 세세하게 분석해준다. 자연스럽게 응용력을 길러준다. 파일시스템을 제어하고 싶다면, 파일시스템 챕터를 펼쳐보면 된다. 그 원리를 알면 개발이 쉬워지고 문제해결에 걸리는 시간을 최소화할 수 있다. 커널을 해독하는 책이라고 해서 처음부터 단계별로 학습해야 하는 책은 결코 아니다. 필요할 때 필요한 기능과 개념을 찾아서 볼 수 있는 좋은 레퍼런스가 되어줄 것이다.
주요 내용
운영체제의 효율적인 동작에는 알고리즘도 중요하지만 자료구조도 중요합니다. 즉, 리눅스 커널에서 최적의 자료구조를 위해 어떤 선택을 했는지 생각하면서 책을 읽어본다면 책을 읽는 즐거움이 배가 될 것입니다. 리눅스 커널 분석이라는 긴 여행을 떠나는 모든 분들에게 이 책이 길을 잃지 않게 해주는 지표가 되기를 기대합니다.
- 감수자 서문에서
0장 리눅스 커널의 구성 요소 0.1 리눅스 커널이란? 0.2 리눅스 커널의 소스 코드 0.3 리눅스 커널 기본 기능 0.4 커널 프로그래밍 0.5 프로세스 관리 0.6 메모리 관리 0.7 파일시스템 0.8 네트워크 0.9 프로세스 간 통신 0.10 리눅스 커널의 부팅 과정 0.11 리눅스 커널의 동작 예 part 1 커널의 기본 기능 1장 프로세스 스케줄링 1.1 멀티태스크 1.2 프로세스란? 1.3 프로세스 전환 1.4 프로세스 디스패처의 구현 1.5 프로세스 스케줄러 1.6 프로세스 스케줄러의 구현 1.7 이벤트 대기 1.8 한마디 더 2장 인터럽트 2.1 인터럽트 처리란? 2.2 리눅스 커널 인터럽트 처리의 특징 2.3 하드웨어 인터럽트 처리 2.4 프로세서 간의 인터럽트 2.5 마스크 불가 인터럽트(NMI) 2.6 한마디 더 3장 지연 처리 3.1 인터럽트 처리의 지연 3.2 workqueue 4장 타이머 4.1 타이머의 역할 4.2 3개의 타이머 4.3 리눅스 타이머 4.4 각종 타이머 관련 하드웨어 4.5 시각 측정 4.6 시각 관리의 과제 4.7 타이머 리스트 4.8 구간 타이머 4.9 POSIX 타이머 5장 시스템 콜 5.1 시스템 콜과 커널 서비스 5.2 프로세스로부터 커널을 호출 5.3 int 0x80과 sysenter를 변환하는 vsyscall 5.4 부팅 및 코어 덤프 5.5 프로세스 공간 접근과 예외 테이블 5.6 커널의 실제 구현 5.7 한마디 더 6장 동기화 6.1 배제 처리 6.2 프로세스 콘텍스트 사이에서의 배제 6.3 인터럽트 콘텍스트의 배제 6.4 멀티프로세서 환경에서의 배제 6.5 배제 처리의 이용 예 - 디렉토리 엔트리 캐시 6.6 한마디 더 PART 2 프로세스 7장 프로세스 관리 7.1 프로세스 모델 7.2 프로세스에 관한 자료 구조 7.3 프로세스 및 프로세스 그룹의 관리 7.4 프로세스 라이프 사이클 7.5 프로세스 종료 후의 처리 7.6 특수한 프로세스나 스레드 7.7 스레드 관련 보충 사항 7.8 한마디 더 8장 시그널 처리 8.1 시그널 구현 8.2 시그널 처리의 커널 코드 8.3 한마디 더 part 3 메모리 관리 9장 주소 변환 9.1 가상 주소 공간의 모델 9.2 리눅스의 페이지 변환 테이블 9.3 Intel 아키텍처의 페이지 변환 테이블 9.4 그 외 아키텍처의 페이지 변환 테이블 9.5 TLB 9.6 메모리 캐시 9.7 주소 변환 처리에 대한 정리 10장 커널 공간의 레이아웃 10.1 IA-32의 커널 공간 레이아웃 10.2 그 밖의 커널 레이아웃 10.3 커널 공간 레이아웃의 정리 11장 물리 메모리 관리 11.1 제어 구조 11.2 빈 페이지의 관리 11.3 획득, 해제 인터페이스 11.4 페이지 할당 처리의 구현 11.5 버디 시스템의 사용 상황 11.6 물리 메모리 관리의 정리 12장 동적 메모리 할당 12.1 슬랩 할당자(Slab Allocator) 12.2 메모리 풀(Memory Pool) 12.3 vmalloc 12.4 동적 메모리 할당의 정리 13장 프로세스 공간 관리 13.1 기본 테크닉 13.2 제어 구조 13.3 프로세스 공간 처리의 구현 방법 13.4 스택 영역 관리 13.5 페이지 폴트(Page Fault) 구현 방법 13.6 그 밖의 주제 13.7 프로세스 공간 관리의 정리 14장 페이지 회수 처리 14.1 기본 전략 14.2 회수 대상 페이지의 관리 구조 14.3 회수 처리의 실체와 실행의 계기 14.4 회수 처리 구현 14.5 페이지 회수 처리의 정리 part 4 파일 관리 15장 가상 파일시스템(VFS) 15.1 VFS층이란? 15.2 VFS층의 데이터 구조 15.3 오픈 파일 관리 15.4 디렉토리 엔트리의 관리 구조 15.5 inode 구조체의 관리 구조 15.6 super_block 구조체의 관리 구조 15.7 이름 공간의 구성 15.8 파일 연산 15.9 이름 공간의 구현 15.10 가상 파일시스템의 정리 16장 파일 조작 16.1 파일 오픈 16.2 파일 생성 16.3 파일 삭제 16.4 파일 rename 16.5 파일 속성 변경 16.6 파일 truncate 16.7 그 밖의 파일 조작 16.8 파일 잠금 16.9 파일 잠금의 구현 17장 파일 읽기, 쓰기 17.1 읽기와 쓰기의 기본 17.2 파일 캐시의 데이터 구조 17.3 읽기 처리의 구현 17.4 쓰기 처리의 구현 17.5 디스크 쓰기의 구현 17.6 페이지 캐시의 쓰기 17.7 직접 전송의 구현 17.8 메모리 매핑의 I/O 처리 17.9 읽기와 쓰기 처리의 정리 18장 특수 파일의 접근 18.1 블록 디바이스층의 구현 18.2 문자 특수 파일의 구현 18.3 파이프 구현 19장 유사 파일시스템 19.1 proc 파일시스템 19.2 sysfs 20장 로컬 파일시스템 20.1 Ext3 파일시스템 20.2 저널링 part 5 네트워크 21장 소켓 인터페이스 21.1 계층 모델 21.2 네트워크 구현의 전체 모습 21.3 소켓 인터페이스 21.4 소켓 버퍼와 소켓 버퍼 헤드 21.5 넷 디바이스 21.6 라우팅 소켓 21.7 한마디 더 22장 IP층 22.1 이더넷 구조 22.2 IP 네트워크 구조 22.3 IPv4 소켓과 IP 패킷 타입 22.4 라우팅 처리 22.5 수신 처리 22.6 IP 패킷 송신 처리 22.7 ICMP 22.8 한마디 더 23장 UDP층 23.1 UDP 23.2 한마디 더 24장 TCP 연결 관리 24.1 TCP 구조와 커널 관련의 주요 포인트 24.2 TCP 소켓 배제 처리 24.3 포트 관리 24.4 TCP 연결 24.5 TCP 연결 종료 24.6 한마디 더 25장 TCP 흐름 제어 25.1 흐름 제어 25.2 재발송 25.3 리눅스 커널 내 구현 25.4 수신 처리 25.5 TCP 송신 25.6 타이머와 지연 확인 응답 25.7 한마디 더 26장 TCP 혼잡 제어 26.1 혼잡 제어(congestion control) 26.2 TCP 옵션 26.3 TCP 확장 26.4 혼잡 제어 26.5 한마디 더 part 6 그 밖의 주제 27장 커널의 초기화 27.1 커널의 로드 27.2 커널의 초기화 처리 28장 CPU 아키텍처 종속 부분 28.1 CPU 아키텍처 28.2 특권 레지스터 28.3 인터럽트 처리, 예외 처리, IPI 28.4 MMU 28.5 CPU 부팅과 정지 28.6 한마디 더 부록 A 리눅스 커널 2.6의 새로운 기능 A.1 개요 A.2 대규모 시스템 지원 강화 A.3 엔트리 시스템 지원 강화 A.4 그 밖의 강화된 기능