Top

[임베디드 개발자를 위한]
리눅스 커널 심층 분석

  • 원서명Linux Kernel Development (ISBN 9780672325120)
  • 지은이로버트 러브(Robert Love)
  • 옮긴이이상근
  • ISBN : 8989975441
  • 25,000원
  • 2004년 03월 10일 펴냄
  • 페이퍼백 | 340쪽 | 0*0mm
  • 시리즈 : 임베디드 시스템

판매처

개정판

책 소개

<책 소개>

이 책은 최신 리눅스 커널인 버전 2.6 커널을 중심으로 그 기본 설계와 동작 원리를 설명하고 있다. 하지만 기본 원리와 함께 실제로 코드를 이해하고 작성하기 위한 상세한 설명을 담고 있으므로, 리눅스 커널을 공부하고자 하는 독자로부터 실제로 디바이스 드라이버를 작성하거나 임베디드 시스템 설계를 위해 리눅스를 고려하고 있는 시스템 프로그래머 모두에게 좋은 레퍼런스가 되리라 확신한다. 이 책은 2.6 커널에서 성능 향상을 위해 구조를 변경하거나 새로운 알고리즘을 도입한 부분들에 대해서도 상세히 설명하고 있다.


• 리눅스 커널 디자인 구축을 위한 실용 가이드
• 임베디드 시스템 설계를 위한 리눅스 커널 설명
• 최신 리눅스 커널 2.6 중심
• 소스 이해와 실제 개발에 바로 적용할 수 있는 최고의 참고서


이 책은 리눅스 커널 디자인과 구현, 인터페이스와 함께, 리눅스 커널의 주요 서브시스템과 기능들에 대해 상세히 설명하고 있다. 중요한 컴퓨터 과학적 개념과 운영체제 설계에 대해서도 구체적으로 설명하고 있다. 이 책은 또한 이론과 응용이라는 두가지 측면을 모두 다룸으로써 다양한 관심을 갖는 독자들에 대한 배려를 하고 있다.

핵심 커널 개발자인 이 책의 저자는 2.6 리눅스 커널에 대한 귀중한 지식과 경험을 제공하고 있다. 이 책에 소개된 주제로는 프로세스 관리, 스케쥴링, 시간 관리와 타이머, 시스템 콜 인터페이스, 메모리 어드레싱, 메모리 관리, 페이지 캐시, VFS, 커널 동기화, 이식성, 디버깅 기법 등이 있다.

또한 이 책은 2.6 커널에 새롭게 추가된 O(1) 스케쥴러나 선점형 커널, 새 블록 I/O 레이어, 새 I/O 스케쥴러에 대해서도 설명하고 있다.


<이 책의 구성>

◎ 1장은 운영체제와 커널, 유닉스, 그리고 리눅스 자체에 대해 소개하고 있다. 이미 유닉스나 리눅스, 혹은 운영체제에 대한 다른 책을 읽은 사람이라면 이 부분이 친숙하게 느껴질 것이다.
◎ 2장은 커널의 프로세스 추상화와 커널이 어떻게 프로세스를 생성, 파괴, 관리하는가를 설명하고 있다. 운영체제가 결국 유저로 하여금 프로그램을 실행하도록 하기 위해 존재한다는 관점에서 볼 때, 이 장의 내용은 매우 중요하다.
◎ 3장에서는 스케쥴링 디자인에 대한 개요로부터 시작하여, 리눅스 스케쥴러의 세부 사항을 설명하게 된다.
◎ 4장은 시스템 콜을 다루는데, 이것은 응용프로그램이 커널의 인터페이스를 사용하기 위한 표준 매커니즘이다. 시스템 콜의 철학과 시스템 콜 핸들러의 디자인, 그리고 어떻게 새 시스템 콜을 구현하는가에 대해 살펴본다.
◎ 5장에서는 인터럽트와 인터럽트 핸들러에 대해 다룬다.
◎ 6장에서는 보톰하프와 지연된 작업을 위한 다른 방법들에 대해 살펴본다. 이러한 개념들은 디바이스 드라이버를 제작하거나 하드웨어를 관리할 때 유용하게 사용된다.
◎ 7장은 경쟁상태나 데드록과 같은 동기화와 동시성 문제에 대해 다루고 있다. 이러한 문제에 대한 해결책으로 록킹을 제시하고 있으며, 관련된 다른 문제들, 예를 들면 데드록에 대해 설명하고 있다.
◎ 8장에서는 커널에서 동기화를 유지하기 위한 실제적인 방법들, 즉 스핀록과 세마포어 등에 대해 설명하고 있다. 7장이 기본적인 정보를 제공한다면, 8장은 커널 록킹 인터페이스에 대한 좋은 참고서 역할을 한다고 할 수 있겠다.
◎ 9장은 커널에서의 시간의 흐름에 대해 다루고 있다. 운영체제에 있어서의 시간의 의미와 표현, 그리고 어떻게 커널이 시간을 관리하는가에 대해 설명한다. 그 다음 커널 타이머의 구현과 사용 방법에 대해서도 다루고 있다.
◎ 10장에서는 메모리 관리와 커널 안에서 어떻게 메모리를 할당하는가에 대해 다룬다.
◎ 11장에서는 가상 파일시스템(VFS)에 대해 다루는데, 이것은 유저공간에게 표준적인 파일시스템 인터페이스를 제공해 준다. 즉 VFS는 하드웨어와 파일시스템, 그리고 유저 공간을 서로 연결하는 레이어라고 할 수 있다.
◎ 12장에서는 하드드라이브와 같은 디바이스를 관리하는 커널의 서브시스템인 블록 I/O 레이어에 대해 설명한다. 블록 디바이스는 성능에 민감하므로, 블록 I/O 레이어는 커널에서 중요한 의미를 갖게 된다. 다음
◎ 13장에서는 프로세스 주소 공간과 프로세스에게 제공되는 메모리의 가상화에 대해 다룬다.
◎ 14장에서는 페이지 캐시와 어떻게 커널이 페이지 라이트백을 수행하는가에 대해 다루고 있다. 페이지 캐시는 리눅스에 있는 주 메모리 캐시이다. 메모리 캐시는 디스크 접근 회수를 줄임으로써 시스템 성능을 높이기 위해 사용된다.
◎ 15장에서는 커널 디버깅 방법에 대해 설명한다. 커널은 유저공간과 같은 편리한 기능을 제공하지 않으므로, 커널 디버깅은 유저공간에서의 디버깅보다 매우 어려운 경우가 많다. 커널을 디버깅하기 위한 기본적인 방법들과, 사용 가능한 애드온(add-on) 커널 디버거들, 그리고 어려운 경우에 유용하게 사용할 수 있는 디버깅 팁을 설명한다.
◎ 16장에서는 이식성과 다양한 시스템에서 발생할 수 있는, 코드 작성시에 반드시 기억해야 할 점들에 대해 설명한다. 이식성은 아키텍처 디자인의 차이점을 고려해야 한다는 점에서 매우 흥미롭다. 리눅스는 이식성이 있는 운영체제이고, 따라서 서로 다른 많은 아키텍처에서 운용 가능해야 하므로 좋은 커널 코드를 작성함에 있어 이식성은 매우 중요한 고려 대상이 된다.
◎ 17장에서는 패치의 생성/사용과 리눅스 커널 공동체에 대해 설명하고 있다.
◎ 4개의 부록과 참고문헌 목록이 이 책을 마무리짓고 있다. 이 부록들은 각각 커널의 연결 리스트 구현, 프로세서별 할당 인터페이스, 커널 랜덤 숫자 발생기, 그리고 알고리즘 복잡도에 대해 다루고 있다.
◎ 참고문헌 목록은 또한 이 책과 관련된 주제에 대한 추천도서 목록을 포함하고 있다.

저자/역자 소개

<저자 소개>

로버트 러브(Robert Love)
는 리눅스를 초기 버전부터 사용해 왔으며, 오픈 소스 커뮤니티에서도 활발히 활동하고 있는 인물이다. 현재 그는 몬타 비스타 소프트웨어(MontaVista Software)의 소프트웨어 엔지니어로서 리눅스 커널을 연구하고 있다.
그가 참여한 커널 프로젝트로는 프로세스 스케줄러, 선점형 커널, VM, 멀티프로세싱 개선 등이 있다. 또한 schedutils와 procps라는 오픈 소스 프로젝트를 관리하고 있다. 그는 리눅스 커널에 대해 많은 강연을 했으며, 리눅스 저널(Linux Journal)의 Contributing Editor이기도 하다. 그는 현재 플로리다주의 Gainesville에 살고 있으며, 사진과 식도락을 즐기기도 한다.


<역자소개>

이상근

서울대학교 컴퓨터공학부 졸업
㈜ 브리지텍에서 ITI 서버 플랫폼과 프로토콜 개발
임베디드 리눅스 기반 PDA 개발
㈜ 넥슨에서 크레이지 아케이드 BnB 개발
현재 서울대학교 컴퓨터공학과 바이오지능 연구소(http://bi.snu.ac.kr)에서 바이오 데이터를 이용한 기계 학습 및 정보 추출 기법에 대한 연구를 하고 있다.

목차

목차
  • 1 리눅스 커널
    • 리눅스
    • 운영체제와 커널
    • 리눅스 커널과 전통적인 유닉스 커널
    • 리눅스 커널 버전
    • 리눅스 커널 개발 커뮤니티
    • 다른 성질의 존재
    • 커널 빌드
    • 시작하기 전에
  • 2 프로세스 관리
    • 프로세스 서술자와 태스크 구조체
    • 프로세스 생성
    • 리눅스의 스레드 구현
    • 프로세스 종료
  • 3 스케줄링
    • 정책
    • 스케줄링 알고리즘
    • 선점과 컨텍스트 스위칭
    • 실시간
    • 스케줄러와 관련된 시스템 콜
  • 4 시스템 콜 53
    • API, POSIX, 그리고 C 라이브러리
    • 시스콜
    • 시스템 콜 핸들러
    • 시스템 콜의 구현
    • 시스템 콜 컨텍스트
  • 5 인터럽트와 인터럽트 핸들러
    • 인터럽트
    • 인터럽트 핸들러
    • 인터럽트 핸들러 등록
    • 인터럽트 핸들러 작성
    • 인터럽트 핸들링의 구현
    • /proc/interrupts
    • 인터럽트 컨트롤
  • 6 보톰하프와 지연된 작업
    • 보톰하프
    • Softirq
    • 태스크릿
    • 워크큐
    • 어떤 보톰하프를 사용해야 하는가?
    • 보톰하프 사이의 락
  • 7 커널 동기화 개요
    • 위험구역과 경쟁상태
    • 록킹
    • 데드락
    • 경쟁과 확장성
    • 잠그기
  • 8 커널 동기화 방법
    • 원자적 동작
    • 스핀록
    • 리더-라이터 스핀록
    • 세마포어
    • 리더-라이터 세마포어
    • 완료 변수
    • BKL: 큰 커널 록
    • Seq 록
    • 선점의 비활성화
    • 배리어
  • 9 타이머와 시간 관리
    • 커널에 있어서의 시간의 개념
    • 진동수 : HZ
    • 지피
    • 하드웨어 클럭과 타이머
    • 타이머 인터럽트 핸들러
    • 현재시각
    • 타이머
    • 실행 지연
  • 10 메모리 관리
    • 페이지
    • 영역
    • 페이지 얻기
    • kmalloc()
    • kfree()
    • vmalloc()
    • 슬랩 레이어
    • 슬랩 할당자 인터페이스
    • 스택에 정적으로 할당
    • 상위 메모리 매핑
    • 어떤 할당 방법을 사용해야 하는가?
  • 11 가상 파일시스템
    • 공통 파일시스템 인터페이스
    • 파일시스템 추상화 레이어
    • 유닉스 파일시스템
    • VFS 객체와 그 자료구조
    • 슈퍼블록 객체
    • Inode 객체
    • 덴트리 객체
    • 파일 객체
    • 파일시스템과 관련된 자료구조
    • 프로세스와 연관된 자료구조
    • 리눅스의 파일시스템
  • 12 블록 I/O 레이어
    • 블록 디바이스에 대한 이해
    • 버퍼와 버퍼헤드
    • bio 구조체
    • 요청 큐
    • I/O 스케줄러
  • 13 프로세스 주소 공간
    • 메모리 서술자
    • 메모리 영역
    • 메모리 영역 다루기
    • mmap() 과do_mmap(): 주소공간 생성
    • munmap() 과do_munmap(): 주소 공간의 제거
    • 페이지 테이블
  • 14 페이지 캐시와 페이지 라이트백
    • 페이지 캐시
    • 래딕스 트리
    • 버퍼 캐시
    • pdflush 데몬
  • 15 디버깅
    • 먼저 시작해야 하는 것
    • 커널에서의 버그
    • printk()
    • Oops
    • 커널 디버깅 옵션
    • 버그 유발과 정보 덤프
    • Magic SysRq 키
    • 커널 디버거 이야기
    • 시스템을 여러 각도에서 조사
    • 범행을 저지른 변경을 찾기 위한 2진 탐색
    • 모든 시도가 실패한 경우 : 커뮤니티
  • 16 이식성
    • 리눅스 : 이식성의 역사
    • 워드 크기와 자료형
    • 데이터 정렬
    • 바이트 순서
    • 시간
    • 페이지 크기
    • 프로세서 오더링
    • SMP, 커널 선점, 상위 메모리
    • 이식성은 즐거운 경험이다
  • 17 패치, 해킹, 그리고 공동체
    • 공동체
    • 리눅스 코딩 스타일
    • 명령 체계
    • 버그 리포트 제출
    • 패치 생성
    • 패치 제출
  • A 연결 리스트
    • 환형 연결 리스트
    • 리눅스 커널에서의 구현
    • 연결 리스트 조작
    • 연결 리스트 순회
  • B 각 CPU별 인터페이스
    • 새로운 percpu 인터페이스
    • CPU별 데이터를 사용하는 이유
  • C 커널 랜덤 숫자 발생기
    • 디자인과 구현
    • 엔트로피 입력 인터페이스
    • 엔트로피 출력 인터페이스
  • D 알고리즘 복잡도
    • 알고리즘
    • 빅 O 표기법
    • 빅 세타 표기법
    • 모든 것을 모아 보자
    • 시간 복잡도의 위험성
  • 참고문헌과 추천도서

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안