HOME > 상세정보

상세정보

리눅스 커널 심층분석 개정 2판

리눅스 커널 심층분석 개정 2판 (126회 대출)

자료유형
단행본
개인저자
Love, Robert 강호관 이상근 성원호
서명 / 저자사항
리눅스 커널 심층분석 / Robert Love 저 강호관 이상근 역.
판사항
개정 2판
발행사항
의왕 :   에이콘 ,   2006.  
형태사항
401 p. ; 26 cm.
총서사항
에이콘 임베디드 시스템 프로그래밍 시리즈 ; 18
원표제
Linux Kernel Development. 2nd ed.
ISBN
8989975859
일반주기
Series Editor : 성원호  
서지주기
참고문헌(p.[362]-365)과 색인수록
000 00830namccc200289 k 4500
001 000045227390
005 20100807124939
007 ta
008 060202s2006 ggk b 001a kor
020 ▼a 8989975859 ▼g 93560: ▼c \25,000
040 ▼a 244002 ▼c 244002 ▼d 244002
041 1 ▼a kor ▼h eng
082 0 4 ▼a 005.432 ▼2 22
090 ▼a 005.432 ▼b 2006
100 1 ▼a Love, Robert ▼0 AUTH(211009)62922
245 1 0 ▼a 리눅스 커널 심층분석 / ▼d Robert Love 저 ▼e 강호관 ▼e 이상근 역.
246 1 9 ▼a Linux Kernel Development. 2nd ed.
250 ▼a 개정 2판
260 ▼a 의왕 : ▼b 에이콘 , ▼c 2006.
300 ▼a 401 p. ; ▼c 26 cm.
440 0 0 ▼a 에이콘 임베디드 시스템 프로그래밍 시리즈 ; ▼v 18
500 ▼a Series Editor : 성원호
504 ▼a 참고문헌(p.[362]-365)과 색인수록
700 1 ▼a 강호관
700 1 ▼a 이상근
700 1 ▼a 성원호

No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 중앙도서관/제2자료실(3층)/ 청구기호 005.432 2006 등록번호 111351526 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 2 소장처 중앙도서관/제2자료실(3층)/ 청구기호 005.432 2006 등록번호 111351527 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 3 소장처 과학도서관/Sci-Info(1층서고)/ 청구기호 005.432 2006 등록번호 121123610 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 4 소장처 과학도서관/Sci-Info(1층서고)/ 청구기호 005.432 2006 등록번호 121123611 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 5 소장처 세종학술정보원/과학기술실/ 청구기호 005.432 2006 등록번호 151195064 도서상태 대출가능 반납예정일 예약 서비스
No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 중앙도서관/제2자료실(3층)/ 청구기호 005.432 2006 등록번호 111351526 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 2 소장처 중앙도서관/제2자료실(3층)/ 청구기호 005.432 2006 등록번호 111351527 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 과학도서관/Sci-Info(1층서고)/ 청구기호 005.432 2006 등록번호 121123610 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 2 소장처 과학도서관/Sci-Info(1층서고)/ 청구기호 005.432 2006 등록번호 121123611 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 세종학술정보원/과학기술실/ 청구기호 005.432 2006 등록번호 151195064 도서상태 대출가능 반납예정일 예약 서비스

컨텐츠정보

책소개

리눅스 커널 2.6 버전을 중심으로 그 기본 설계와 동작 원리를 설명한 <임베디드 개발자를 위한 리눅스 커널 심층분석>의 개정판이다. 기본적인 커널 디자인과 구현 및 그 인테페이스에 대해 설명하고, 리눅스 커널의 주요 서브시스템과 기능들에 대해서도 언급하고 있다. 또한 2.6 리눅스 커널에 추가된 흥미로운 기능들, 즉 O(1) 스케줄러나 선점형 커널, 블록 I/O 레이어, I/O 스케줄러에 대해서도 상세하게 다뤘다.


정보제공 : Aladin

저자소개

로버트 러브(지은이)

초창기부터 리눅스를 사용하고 있으며 리눅스 커널과 GNOME 데스크톱 환경에 많은 기여를 하고 있다. 로버트는 구글에서 소프트웨어 엔지니어로 근무 중이며 과거에는 안드로이드팀에서 일했고 현재는 웹 검색 인프라팀에서 근무 중이다. 로버트는 플로리다 주립 대학에서 수학과 컴퓨터 과학을 전공했다. 현재 보스턴에 있다.

이상근(옮긴이)

한국항공대학교 전자과에서 학사, 석사, 박사 학위를 받았다. 삼성전자 통신 연구소와 KTF 무선 기술 팀장을 거쳐 현재는 청강문화산업대학교 이동통신 전공 교수로 재직 중이다. 이동통신 시스템 및 물리계층 관련 분야의 강의와 일을 하고 있으며, 저서로는 『3G/4G 이동통신 시스템』(홍릉과학출판사, 2009), 『IMT-2000/CDMA 기술』(세화, 2003) 등이 있다.

강호관(옮긴이)

포항공과대학교 컴퓨터공학과와 동대학원을 졸업하고, 주로 방화벽 개발을 비롯한 네트워크 보안 제품 관련 개발 업무에 참여해왔다. 2005년 현재 네트워크 보안 관련 업체에서 방화벽 개발과 OS, 특히 커널과 관련된 업무를 수행하고 있다.

정보제공 : Aladin

목차


목차

이 책에 쏟아진 각계 전문가의 찬사 = ⅳ

추천의 글 = ⅵ

저자 서문 & 소개 = ⅷ

역자 서문 & 소개 = ⅹ

들어가며 = xxii

1 리눅스 커널의 개요 = 1

 리눅스의 개발 = 2

 운영체제와 커널 = 4

 리눅스 커널과 전통적인 유닉스 커널 = 6

 리눅스 커널 버전 = 8

 리눅스 커널 개발 커뮤니티 = 9

 시작하기 전에 = 10

2 커널과의 첫만남 = 11

 커널 소스 구하기 = 11

  커널 소스 설치하기 = 11

  패치 이용하기 = 12

 커널 소스 트리 = 12

 커널 빌드하기 = 13

  빌드 노이즈 최소화하기 = 15

  다중 빌드 기법 = 15

  커널 설치하기 = 16

 다른 성질의 야수 = 16

  No libc = 17

  GNU C = 17

  메모리 보호가 없음 = 20

  부동소수점 연산의 어려움 = 20

  작은 고정 크기의 스택 = 20

  동기화와 동시성 = 21

  이식성 = 21

 이제 여기까지 왔다 = 22

3 프로세스 관리 = 23

 프로세스 서술자와 태스크 구조체 = 24

  프로세스 서술자의 할당 = 25

  프로세스 서술자의 저장 = 26

  프로세스 상태 = 27

  프로세스 상태 조작하기 = 29

  프로세스 컨텍스트 = 29

  프로세스 트리 = 29

 프로세스 생성 = 31

  Copy-on-Write = 31

  fork() = 31

  vfork() = 32

 리눅스의 스레드 구현 = 33

  커널 스레드 = 35

 프로세스 종료 = 35

  프로세스 서술자 제거 = 37

  부모없는 태스크의 딜레마 = 37

 프로세스 요약 = 38

4 프로세스 스케줄링 = 39

 정책 = 40

  I/O중심 vs 프로세서중심 프로세스 = 40

  프로세스 우선순위 = 41

  타임슬라이스 = 42

  프로세스 선점 = 43

  실제 상황에서의 스케줄링 정책 = 43

 리눅스 스케줄링 알고리즘 = 44

  실행큐 = 44

  우선순위 배열 = 47

  타임슬라이스의 재계산 = 48

  schedule() = 48

  우선순위와 타임슬라이스 계산 = 50

  휴면과 깨어남 = 52

  로드 밸런서 = 54

 선점과 컨텍스트 스위칭 = 57

  유저 선점 = 58

  커널 선점 = 58

 실시간 = 59

 스케줄러와 관련된 시스템 콜 = 60

  스케줄링 정책과 우선순위 관련 시스템 콜 = 61

  프로세서 상성관련 시스템 콜 = 61

  프로세서 시간의 양보 = 62

 스케줄러 마무리 = 62

5 시스템 콜 = 63

 API, POSIX, C 라이브러리 = 64

 시스콜 = 65

  시스템 콜 번호 = 65

  시스템 콜 성능 = 66

 시스템 콜 핸들러 = 66

  알맞은 시스템 콜 찾기 = 67

  매개변수 전달 = 67

 시스템 콜의 구현 = 67

  매개변수 검사 = 68

 시스템 콜 컨텍스트 = 70

  시스템 콜 등록을 위한 마지막 단계 = 71

  유저공간에서 시스템 콜 사용 = 72

  시스템 콜로 구현하지 않는 이유 = 73

 시스템 콜을 마치며 = 74

6 인터럽트와 인터럽트 핸들러 = 75

 인터럽트 = 75

 인터럽트 핸들러 = 76

  톱하프와 보톰하프 = 77

 인터럽트 핸들러 등록 = 77

  인터럽트 핸들러 제거 = 80

 인터럽트 핸들러 작성 = 80

  공유 핸들러 = 81

  실제 인터럽트 핸들러 = 82

 인터럽트 컨텍스트 = 84

 인터럽트 핸들링 구현 = 85

  /proc/interrupts = 87

 인터럽트 컨트롤 = 88

  인터럽트 활성화와 비활성화 = 89

  특정 인터럽트 비활성화 = 90

  인터럽트 시스템의 상태 = 91

 멈추지 마세요, 거의 끝나 갑니다! = 92

7 보톰하프와 지연된 작업 = 93

 보톰하프 = 93

  왜 보톰하프인가 = 94

  보톰하프의 세계 = 95

 softirq = 97

  softirq의 구현 = 97

  softirq 사용 = 99

 태스크릿 = 101

  태스크릿의 구현 = 101

  태스크릿의 사용 = 104

  ksoftirqd = 105

  낡은 BH 메커니즘 = 107

 워크큐 = 108

  워크큐의 구현 = 108

  워크큐의 사용 = 112

  낡은 태스크큐 메커니즘 = 114

 어떤 보톰하프를 사용해야 하는가? = 115

 보톰하프 사이의 락 = 116

  보톰하프의 비활성화 = 117

 보톰하프 처리의 마지막 = 118

8 커널 동기화 개요 = 119

 위험구역과 경쟁상태 = 120

  왜 보호가 필요한가? = 120

 락킹 = 122

  도대체 무엇이 동시성을 야기하는가? = 124

  그렇다면 보호 대상은 어떻게 결정할 수 있는가? = 125

 데드락 = 126

 경쟁과 확장성 = 128

 코드 잠그기 = 130

9 커널 동기화 방법 = 131

 원자적 동작 = 131

  원자적 정수 연산 = 132

  원자적 비트 연산 = 134

 스핀락 = 137

  다른 스핀락 함수들 = 140

  스핀락과 보톰하프 = 140

 리더-라이터 스핀락 = 141

 세마포어 = 143

  세마포어를 생성하고 초기화 = 145

  세마포어 사용 = 145

 리더-라이터 세마포어 = 146

 비교: 스핀락과 세마포어 = 148

 완료 변수 = 148

 큰 커널 락 = 149

  seq 락 = 150

 선점의 비활성화 = 151

 오더링과 배리어 = 153

 동기화에 대한 요약 = 156

10 타이머와 시간 관리 = 157

 커널에 있어서의 시간의 개념 = 158

 진동수: HZ = 158

  이상적인 HZ 값 = 160

 지피 = 162

  지피의 내부 표현 = 163

  지피 되돌림 = 164

  유저공간과 HZ = 166

 하드웨어 클럭과 타이머 = 166

  실시간 클럭 = 167

  시스템 타이머 = 167

 타이머 인터럽트 핸들러 = 167

 현재시각 = 170

 타이머 = 172

  타이머 사용 = 172

  타이머 경쟁 상태 = 174

  타이머의 구현 = 174

 실행 지연 = 175

  바쁜 루프 = 175

  짧은 지연 = 176

  schedule_timeout() = 177

 시간이 다 되었다 = 180

11 메모리 관리 = 181

 페이지 = 181

 영역 = 183

 페이지 얻기 = 185

  0으로 초기화된 페이지 얻기 = 186

  페이지 해제하기 = 187

 kmalloc() = 187

  gfp_mask 플래그 = 188

  kfree() = 192

 vmalloc() = 193

 슬랩 레이어 = 194

  슬랩 레이어의 구조 = 195

 슬랩 할당자 인터페이스 = 198

 스택에 정적으로 할당하기 = 201

  스택 올바로 사용하기 = 202

 상위 메모리 매핑 = 202

  영구적 매핑 = 203

  일시적 매핑 = 203

 CPU별 할당 = 204

 새로운 percpu 인터페이스 = 205

  컴파일 타임에서의 CPU별 데이터 = 205

  런타임에서의 CPU별 데이터 = 206

 CPU별 데이터를 사용하는 이유 = 207

 어떤 할당 방법을 사용해야 하는가 = 208

12 가상 파일시스템 = 209

 공통 파일시스템 인터페이스 = 209

 파일시스템 추상화 레이어 = 210

 유닉스 파일시스템 = 211

 VFS 객체와 그 자료구조 = 212

  다른 VFS 객체 = 213

 슈퍼블록 객체 = 213

  슈퍼블록 연산 = 215

 inode 객체 = 217

  inode 연산 = 219

 덴트리 객체 = 222

  덴트리 상태 = 223

  덴트리 캐시 = 223

  덴트리 연산 = 224

 파일 객체 = 226

  파일 연산 = 227

 파일시스템과 관련된 자료구조 = 231

 프로세스와 연관된 자료구조 = 232

 리눅스의 파일시스템 = 234

13 블록 I/O 레이어 = 235

 블록 디바이스에 대한 이해 = 236

 버퍼와 버퍼헤드 = 237

 bio 구조체 = 239

  새 것과 이전 것 = 242

 요청 큐 = 242

  요청 = 243

 I/O 스케줄러 = 243

  I/O 스케줄러의 역할 = 244

  리누스 엘리베이터 = 244

  데드라인 I/O 스케줄러 = 245

  예측 I/O 스케줄러 = 247

  완전 공평 큐잉 I/O 스케줄러 = 248

  눕 I/O 스케줄러 = 249

  I/O 스케줄러의 선택 = 249

 정리하며 = 250

14 프로세스 주소영역 = 251

 메모리 서술자 = 252

  메모리 서술자의 할당 = 254

  메모리 서술자의 해제 = 255

  mm_struct 구조체와 커널 스레드 = 255

 메모리 영역 = 256

  VMA 플래그 = 257

  VMA 연산 = 258

  메모리 영역에 대한 리스트와 트리 = 259

  메모리 영역의 실제 = 260

 메모리 영역 다루기 = 261

  find_vma() = 262

  find_vma_prev() = 263

  find_vma_intersection() = 263

  mmap()과 do_mmap(): 주소공간 생성 = 264

  mmap() 시스템 콜 = 265

 munmap()과 do_munmap(): 주소공간의 제거 = 266

  munmap() 시스템 콜 = 266

 페이지 테이블 = 266

 결론 = 268

15 페이지 캐시와 페이지 라이트백 = 269

 페이지 캐시 = 270

  address_space 객체 = 270

 래딕스 트리 = 273

  낡은 페이지 해시 테이블 = 273

 버퍼 캐시 = 274

 pdflush 데몬 = 274

  랩탑 모드 = 276

  bdflush와 kupdated = 276

  혼잡 회피: 왜 여러 스레드를 사용하는 것이 좋은가 = 277

 정리하며 = 278

16 모듈 = 279

  Hello, World! = 279

 모듈 빌드 = 281

  커널 소스 트리에 있는 경우 = 281

  커널 소스 트리 밖에 있는 경우 = 283

 모듈 설치 = 283

 모듈 종속성 생성 = 283

 모듈 로드 = 284

 설정 옵션 관리 = 285

 모듈 매개변수 = 287

 익스포트된 심볼들 = 289

 모듈을 마치며 = 290

17 kobject와 sysfs = 291

 kobject = 292

 ktype = 293

 kset = 294

 하위시스템 = 294

 혼동되는 구조체 = 295

 kobject의 조작 및 관리 = 296

 참조 카운트 = 297

  kref = 298

 sysfs = 299

  sysfs에서 kobject 추가 및 제거 = 301

  sysfs에 파일 추가 = 301

 커널 이벤트 레이어 = 304

 kobject와 sysfs를 마치며 = 306

18 디버깅 = 307

 먼저 시작해야 하는 것 = 307

 커널에서의 버그 = 308

 printk() = 308

  printk()의 안전성 = 309

  로그레벨 = 309

  로그 버퍼 = 310

  syslogd와 klogd = 311

  printk()와 커널 해킹에 대하여 = 311

 oops = 311

  ksymoops = 313

  kallsyms = 313

 커널 디버깅 옵션 = 313

  원자성 디버깅 = 314

 버그 어서션과 정보 덤프 = 314

 Magic SysRq 키 = 315

 커널 디버거 이야기 = 316

  gdb = 316

  kgdb = 317

  kdb = 317

 시스템을 여러 각도에서 조사 = 317

  UID를 조건으로 사용 = 318

  조건부 변수의 사용 = 318

  통계량 활용 = 318

  디버깅의 진도 제한 = 319

 범행을 저지른 변경을 찾기 위한 이진 탐색 = 320

 모든 시도가 실패할 경우: 커뮤니티 = 320

19 이식성 = 321

 리눅스: 이식성의 역사 = 322

 워드 크기와 자료형 = 323

  모호한 자료형 = 325

  특별한 자료형 = 325

  크기가 명시된 자료형 = 326

  char 자료형의 sign = 327

 데이터 정렬 = 327

  정렬 문제 방지 = 328

  비표준 자료형의 정렬 = 328

  구조체 패딩 = 328

 바이트 순서 = 330

  빅 엔디언과 리틀 엔디언의 유래 = 331

  커널의 바이트 오더링 = 332

 시간 = 332

 페이지 크기 = 333

 프로세서 오더링 = 334

 SMP, 커널 선점, 상위 메모리 = 334

  이식성은 즐거운 경험이다 = 334

20 패치, 해킹, 그리고 공동체 = 335

 공동체 = 335

 리눅스 코딩 스타일 = 336

  들여쓰기 = 336

  괄호 = 336

  한 줄의 길이 = 337

  명명법 = 338

  함수 = 338

  주석 = 338

  typedef = 339

  이미 제공되는 것을 사용 = 340

  ifdef는 사용하지 않는다 = 340

  구조체 초기화 = 340

  코드 고치기 = 341

  명령 체계 = 341

  버그 리포트 제출 = 342

  패치 생성 = 342

  패치 제출 = 343

  결론 = 344

부록

 A 연결 리스트 = 345

  환형 연결 리스트 = 346

   연결 리스트 순회 = 347

  리눅스 커널에서의 구현 = 347

   연결 리스트 구조 = 348

  연결 리스트의 조작 = 349

  연결 리스트 순회 = 351

 B 커널 랜덤 숫자 발생기 = 353

  디자인과 구현 = 354

   시스템 시작의 딜레마 = 356

  엔트로피 입력 인터페이스 = 356

  엔트로피 출력 인터페이스 = 357

 C 알고리즘 복잡도 = 359

  알고리즘 = 359

  O 표기법 = 359

  빅 세타 표기법 = 360

  모든 것을 모아 보자 = 360

  시간 복잡도의 위험성 = 361

참고문헌과 추천도서 = 362

 운영체제 설계 관련 = 362

 유닉스 커널 관련 = 363

 리눅스 커널 관련 = 363

 기타 커널 관련 = 364

 유닉스 API 관련 = 364

 C 프로그래밍 언어 관련 = 364

 그 밖에 = 365

 웹 사이트 = 365

찾아보기 = 367



관련분야 신착자료