목차 일부
저자 서문 ... 4
이 책의 주요 내용 ... 6
이 책의 학습 로드맵 ... 10
CD 수록 내용 ... 12
CHAPTER 1 <B><FONT color ... #0000
01 리눅스 배포판의 종류 ... 26
02 가상 머신 소프트웨어: VMWare, VirtualPC ... 29
03 VMWare 환경 설정 ... 31
04 ...
더보기
목차 전체
저자 서문 ... 4
이 책의 주요 내용 ... 6
이 책의 학습 로드맵 ... 10
CD 수록 내용 ... 12
CHAPTER 1 <B><FONT color ... #0000
01 리눅스 배포판의 종류 ... 26
02 가상 머신 소프트웨어: VMWare, VirtualPC ... 29
03 VMWare 환경 설정 ... 31
04 데비안 설치하기 ... 41
데비안 리눅스 배포판 구하기 ... 41
데비안 리눅스 설치하기 ... 42
05 데비안 패키지 관리 ... 48
데비안 소스 관리 ... 73
데비안 배포판의 분류 ... 74
06 SSH 환경 설정하기 ... 77
putty 사용하기 ... 78
07 bash 환경 설정하기 ... 81
08 커널 프로그래밍 개발 도구 설치하기 ... 82
09 Hello World 테스트 컴파일 ... 84
10 부트 로더: LILO, GRUB ... 85
LILO 소개 ... 85
GRUB 소개 ... 86
참고자료 ... 89
CHAPTER 2 커널 컴파일 및 개발 환경 구축
01 커널 소스 코드 구하기 ... 92
커널 버전 번호의 의미 ... 92
리눅스에서 직접 내려받기 ... 93
02 커널 빌드 과정 ... 95
03 커널 2.4 빌드 ... 98
04 커널 2.6 빌드 ... 109
05 리눅스 환경의 커널 분석 도구 ... 115
Ⅵ 사용법 ... 117
개발자를 위한 Ⅵ 환경 설정하기 ... 120
grep을 이용한 커널 분석 ... 121
ctags를 이용한 커널 분석 ... 122
cscope를 이용한 커널 분석 ... 130
taglist를 이용한 커널 분석 ... 134
make와 Ⅵ 통합하기 ... 136
06 윈도우 환경의 커널 분석 도구 ... 142
Source Insight 설치하기 ... 143
커널 프로젝트 설정하기 ... 144
Source Insight를 통한 커널 분석 ... 146
07 윈도우와 VMWare 간에 파일 공유하기 ... 148
VMWare Tools 설치하기 ... 148
공유 폴더 설정하기 ... 153
마치면서 ... 156
참고자료 ... 158
CHAPTER 3 리눅스 시스템 호출
01 사용자 공간과 커널 공간 ... 162
02 인터럽트 처리 ... 166
03 IDT와 리눅스 시스템 호출 ... 169
04 리눅스 시스템 호출 ... 174
05 나만의 시스템 호출 추가하기 ... 181
시스템 호출 번호 할당 ... 181
시스템 호출 테이블(sys_call_table) 수정 ... 182
새로운 시스템 호출 함수 작성 ... 183
새로운 시스템 호출을 이용하는 응용프로그램 작성 ... 185
_syscall 매크로 ... 186
06 매개변수를 이용한 시스템 호출 ... 188
07 구조체를 이용한 시스템 호출 ... 192
08 CPU 정보를 보여주는 시스템 호출 ... 195
09 _syscall 매크로에서는 무슨 일이? ... 200
10 프로세스 주소 공간 매크로 ... 203
11 시스템 호출, call과 sysenter ... 206
마치면서 ... 213
참고자료 ... 215
CHAPTER 4 모듈 프로그래밍
01 모듈과 일체형 커널 ... 220
02 모듈 개발 ... 222
모듈 개발 절차 ... 222
모듈 프로그램의 구성 ... 223
Hello 모듈 작성 ... 226
03 모듈에 대해 알아야 할 것들 ... 232
모듈과 커널 버전 ... 232
모듈과 static 선언 ... 233
모듈과 커널 심볼 ... 234
심볼: 2.4와 2.6의 차이 ... 235
모듈의 라이선스 ... 236
04 모듈의 상호참조 ... 238
calle 모듈 작성 ... 238
caller 모듈 작성 ... 240
05 모듈과 매개변수 ... 243
06 매개변수 처리의 깊은 곳! ... 247
커널 2.4의 매개변수 처리 ... 247
커널 2.6의 매개변수 처리 ... 249
배열을 모듈 매개변수로 전달하기 ... 251
07 시스템 호출 래핑 ... 253
시스템 호출 래핑 개념 ... 253
sys_open( ) 시스템 호출 래핑 ... 254
시스템 호출 래핑의 문제점 ... 258
시스템 호출 래핑의 응용 ... 260
sys_call_table을 찾아서 ... 261
커널 2.6에서 sys_open( ) 시스템 호출 래핑 ... 268
08 커널 모듈 Hacks ... 272
마치면서 ... 274
참고자료 ... 276
CHAPTER 5 문자 디바이스 프로그래밍
01 디바이스의 이해 ... 280
디바이스 파일 ... 284
디바이스 번호 ... 285
디바이스 드라이버 구성 ... 287
02 문자 디바이스 관련 커널 구조 ... 289
03 문자 디바이스 작성 ... 294
04 kmalloc( ) 함수 ... 306
05 디바이스 사용 횟수 처리 ... 310
06 구조체의 함수 포인터 선언 방법 ... 313
07 IOCTL 프로그래밍 ... 315
IOCTL의 구조 ... 316
간단한 ioctl( ) 디바이스 예제 ... 317
IOCTL 관련 매크로 ... 320
IOCTL을 이용한 매개변수 전달 ... 324
08 cdev를 이용한 문자 디바이스 작성 ... 334
커널 2.4의 디바이스 드라이버 관련 구조 ... 336
커널 2.6의 디바이스 드라이버 관련 구조 ... 336
cdev 관련 함수 ... 339
자원할당 함수 ... 340
문자 디바이스 작성(2.6) ... 341
09 register_chrdev( ) 분석 ... 346
10 MD5 디바이스 실습 ... 350
MD5 알고리즘 ... 350
CryptoAPI 소개 ... 352
CryptoAPI 사용을 위한 커널 설정 ... 355
MD5 디바이스 드라이버 작성 ... 357
11 문자 디바이스 관련 커널 소스 분석 ... 377
함수 호출 과정 ... 377
참고자료 ... 383
CHAPTER 6 proc 파일시스템
01 proc 파일시스템이란? ... 388
proc 파일시스템의 구성 ... 388
02 procfs 함수 ... 393
procfs에 디렉터리 생성 ... 394
procfs에 파일 생성 ... 395
procfs에서 항목 삭제 ... 396
데이터 읽기 ... 396
데이터 쓰기 ... 398
03 simple proc 작성 ... 401
my_read( )에서 알아야 할 것 ... 404
04 adder proc 작성 ... 406
05 fun proc으로 root되기 ... 410
06 타이머와 jiffies ... 416
jiffies ... 416
시간지연 ... 418
TSC 레지스터 ... 425
07 정교한 시간측정 ... 429
CPU 사이클 ... 429
시간 관련 함수 ... 433
나노초 시간측정 예제 ... 434
TSC와 시간 해상도 ... 442
08 procfs의 동작 ... 448
마치면서 ... 450
참고자료 ... 451
CHAPTER 7 블록 디바이스 프로그래밍
01 하드디스크의 구조 ... 456
02 하드디스크의 성능 ... 458
03 블록 디바이스 구조 ... 460
버퍼 헤드 ... 460
DMA 전송과 세그먼트 ... 465
bio 구조체 ... 466
I/O 스케줄러 ... 469
04 I/O 관련 기본 자료구조 ... 480
05 블록 디바이스 드라이버 관련 구조(커널 2.4) ... 482
블록 디바이스 드라이버 관련 함수 ... 483
06 가상 램디스크 실습(커널 2.4) ... 486
07 블록 디바이스 드라이버 관련 구조(커널 2.6) ... 496
08 가상 램디스크 실습(커널 2.6) ... 498
마치면서 ... 508
참고자료 ... 510
CHAPTER 8 메모리 관리
01 메모리 모델 ... 514
메모리 모델의 배경 ... 514
메모리 모델의 종류 ... 516
02 가상 메모리와 페이지 테이블 ... 519
03 x86 아키텍처의 메모리 모델 ... 522
04 리눅스 커널의 메모리 모델 ... 525
64비트 시스템에서 리눅스 커널의 메모리 모델 ... 528
페이징 관련 자료구조 ... 530
page 구조체(커널 2.4) ... 535
page 구조체(커널 2.6) ... 536
page 상태 플러그 ... 537
mm_struct 구조체(커널 2.4) ... 539
mm_struct 구조체(커널 2.6) ... 540
프로세스 주소 공간 배치 ... 544
05 프로세스에서 바라본 메모리 ... 551
vm_area_struct 구조체(커널 2.4) ... 553
vm_area_struct 구조체(커널 2.6) ... 555
VMA 상태 플로그 ... 557
06 메모리 존 ... 559
메모리 존 구조 ... 561
07 메모리 할당 함수 ... 564
바이트 단위 할당 함수 ... 566
kmalloc( ) 실습 ... 572
vmalloc( ) 실습 ... 573
08 버디 시스템(Buddy System) ... 575
09 슬랩 할당자(Slab Allocator) ... 579
슬랩 생성 ... 582
캐시 설정 ... 587
캐시 생성 ... 589
캐시 할당 ... 591
캐시 해제 ... 591
캐시 크기 관리 ... 592
버디 시스템과 슬랩 ... 593
슬롭 할당자(Slob Allocator) ... 594
슬랩 할당자 실습 ... 594
10 메모리 매핑 ... 597
메모리 매핑 함수 ... 597
메모리 매핑 예제 ... 600
메모리 매핑 드라이버 실습(커널 2.4) ... 604
메모리 매핑 드라이버 실습(커널 2.6) ... 612
커널의 메모리 매핑 ... 622
상위 메모리 매핑 ... 624
11 커널 자료구조: 연결 리스트 ... 625
리스트 모듈 ... 639
12 프로세스 메모리 뷰어 ... 645
프로세스 메모리 뷰어 실습(커널 2.4) ... 646
프로세스 메모리 뷰어 실습(커널 2.6) ... 666
13 LRU 정책 ... 681
LRU/k 알고리즘 ... 681
LRU/2 알고리즘의 구현 ... 681
페이지 벡터 ... 683
LRU 리스트 분할 ... 685
LRU 정책과 메모리 존 ... 685
메모리 존의 잠금 ... 687
page로부터 소속 메모리 존 얻기 ... 688
active list에서 tail 얻기 ... 688
LRU 리스트 뷰어 실습(커널 2.6) ... 689
마치면서 ... 693
참고자료 ... 695
CHAPTER 9 프로세스 관리
01 프로세스 자료 구조 ... 702
프로세스 상태 ... 702
실행 도메인 ... 706
실행 포맷 ... 707
프로세스 리스트 ... 709
프로세스 관계 ... 709
콘솔 디바이스 ... 713
파일시스템 & 파일 ... 715
02 프로세스 생성 ... 718
프로세스 생성 방법1: system( ) 함수 ... 718
프로세스 생성 방법2: exec( ) 함수 ... 720
프로세스 생성 방법3: fork( ) 함수 ... 723
커널의 프로세스 생성(커널 2.4) ... 730
커널의 프로세스 생성(커널 2.6) ... 734
03 프로세스 종료 ... 736
커널의 프로세스 종료(커널 2.4) ... 736
커널의 프로세스 종료(커널 2.6) ... 740
04 프로세스 스케줄링 ... 746
스케줄링이란 ... 746
스케줄링 방법 ... 747
스케줄링 알고리즘 ... 748
05 리눅스의 스케줄링 ... 754
CPU 할당 시간 ... 760
O(n) 스케줄러(커널 2.4) ... 762
O(1) 스케줄러(커널 2.6) ... 773
06 SJF 스케줄러 구현 ... 786
sched.h 수정 ... 787
sched.c 수정 ... 789
exit.c 수정 ... 795
SJF 관련 시스템 호출 추가 ... 796
SJF 테스트 프로그램 ... 800
SJF 스케줄러 패치 ... 806
07 O(1) 스케줄러를 커널 2.4에 포팅하기 ... 811
time.c 수정 ... 812
bitops.h 수정 ... 813
sched.h 수정 ... 814
sched.c 수정 ... 821
exit.c 수정 ... 850
fork.c 수정 ... 850
커널 설정 변경 및 컴파일 ... 852
O(1) 스케줄러 테스트 프로그램 ... 853
참고자료 ... 858
CHAPTER 10 파일시스템
01 가상 파일시스템 ... 862
파일 ... 863
RCU 정책 ... 865
아이뉉
더보기 닫기