Linux 고급 프로그래밍 {개발} 튜토리얼 파트 1 Linux 커널 파트 2 Linux 커널 모듈 프로그래밍 가이드 파트 3 Linux 프로그래머 가이드 파트 4 Linux 커널 개념 시스템 구조 파트 5 Linux 커널 특정 시스템 구조
목차 Raymond 서문 소개 Linux 문서 엔지니어링 그룹 "발표" 번역가의 서문 1부 Linux 커널 서문 1장 하드웨어 기본 및 소프트웨어 기본 6 1.1 하드웨어 기본 사항 6 1.1.1 CPU 7 1.1.2 메모리 8 1.1.3 버스 8 1.1.4 컨트롤러 및 주변 장치 8 1.1.5 주소 공간 9 1.1.6 시계 9 1.2 소프트웨어 기초 9 1.2.1 컴퓨터 언어 9 1.2.2 운영체제란 무엇인가 11 1.2.3 커널 데이터 구조 13 2장 메모리 관리 15 2.1 가상 메모리 추상 모델 15 2.1.1 요청 페이징 17 2.1.2 교환 17 2.1.3 공유 가상 메모리 18 2.1.4 물리적 주소 지정 모드와 가상 주소 지정 모드 18 2.1.5 접근 통제 18 2.2 캐싱 19 2.3 리눅스 페이지 테이블 20 2.4 페이지 할당 및 재활용 21 2.4.1 페이지 할당 22 2.4.2 페이지 재활용 22 2.5 메모리 매핑 22 2.6 요청 페이지 23 2.7 리눅스 페이지 캐시 24 2.8 페이지 교체 및 제거 25 2.8.1 버퍼 및 페이지 캐시 크기 줄이기 25 2.8.2 System V 공유 메모리 페이지 교체 26 2.8.3 페이지 교체 및 폐기 27 2.9 스왑 캐시 27 2.10 페이지 변경 28 3장 프로세스 29 3.1 리눅스 프로세스 29 3.2 식별자 31 3.3 스케줄링 32 3.4 문서 34 3.5 가상 메모리 35 3.6 프로세스 생성 36 3.7 시간과 타이머 37 3.8 프로그램 실행 38 3.8.1 엘프 39 3.8.2 스크립트 파일 40 Chapter 4 프로세스 간 통신 메커니즘 41 4.1 신호 메커니즘 41 4.2 파이프 42 4.3 소켓 44 4.3.1 시스템 V의 프로세스 간 통신 메커니즘 44 4.3.2 메시지 큐 44 4.3.3 세마포어 45 4.3.4 공유 저장소 47 5장 PCI 49 5.1 PCI 주소 공간 49 5.2 PCI 구성 헤더 50 5.3 PCI I/O와 저장 주소 공간 51 5.4 PCI-ISA 브리지 51 5.5 PCI-PCI 브리지 51 5.5.1 PCI-PCI 브리지: PCI I/O 및 저장소 주소 51호 공간으로 향하는 창문 5.5.2 PCI-PCI 브리지: PCI 구성 주기 및 PCI 버스 번호 52 5.6 리눅스 PCI 초기화 53 5.6.1 리눅스 커널 PCI 데이터 구조 53 5.6.2 PCI 장치 드라이버 53 5.6.3 PCI BIOS 기능 56 5.6.4 PCI 수정 프로세스 57 6장 인터럽트 처리 및 장치 드라이버 60 6.1 인터럽트와 인터럽트 처리 60 6.1.1 프로그래밍 가능한 인터럽트 컨트롤러 61 6.1.2 인터럽트 처리 데이터 구조 초기화 61 6.1.3 인터럽트 처리 62 6.2 장치 드라이버 63 6.2.1 테스트 및 중단 64 6.2.2 직접 메모리 접근(DMA) 65 6.2.3 메모리 66 6.2.4 장치 드라이버와 커널 간의 인터페이스 66 6.2.5 하드디스크 69 6.2.6 네트워크 장비 74 7장 파일 시스템 77 7.1 두 번째 확장 파일 시스템 EXT2 78 7.1.1 EXT2 시스템의 Inode 노드 79 7.1.2 EXT2 시스템의 슈퍼 블록 80 7.1.3 EXT2 시스템을 위한 그룹 설명자 80 7.1.4 EXT2 시스템의 디렉토리 81 7.1.5 EXT2 파일 시스템에서 파일 찾기 81 7.1.6 EXT2 파일 시스템에서 파일 변경 사이즈 82 7.2 가상 파일 시스템 83 7.2.1 VFS 파일 시스템의 슈퍼 블록 84 7.2.2 VFS 파일 시스템의 Inode 노드 84 7.2.3 파일 시스템 등록 85 7.2.4 파일 시스템 어셈블링 85 7.2.5 가상 파일 시스템에서 파일 찾기 87 7.2.6 파일 시스템 마운트 해제 87 7.2.7 VFS 파일 시스템의 Inode 캐시 87 7.2.8 디렉토리 캐싱 88 7.3 버퍼 캐싱 88 7.3.1 bdflush 커널 데몬 90 7.3.2 업데이트 프로세스 90 7.4 /proc 파일 시스템 91 7.5 특수 장치 파일 91 8장 네트워크 92 8.1 TCP/IP 네트워크 개요 92 8.2 리눅스 95의 TCP/IP 네트워크 계층 8.3 BSD 소켓 인터페이스 96 8.4 INET의 소켓 계층 97 8.4.1 BSD 소켓 생성하기 98 8.4.2 INET BSD 소켓 99의 바인딩 주소 8.4.3 INET BSD 소켓 연결 설정 99 8.4.4 INET BSD 소켓 청취 100 8.4.5 연결 요청 수락 100 8.5 IP 계층 100 8.5.1 소켓 버퍼 100 8.5.2 IP 메시지 수신 101 8.5.3 IP 패킷 보내기 102 8.5.4 데이터 샤딩 102 8.6 주소 확인 프로토콜 103 8.7 IP 라우팅 104 9장 커널 메커니즘 및 모듈 107 9.1 커널 메커니즘 107 9.1.1 하반부 제어 107 9.1.2 작업 대기열 108 9.1.3 타이머 109 9.1.4 대기큐 110 9.1.5 스핀락 110 9.1.6 세마포어 110 9.2 모듈 111 9.2.1 모듈 로딩 112 9.2.2 모듈 제거 113 10장 프로세서 115 10.1X86 115 10.2 팔 115 10.3 알파 AXP 프로세서 115 11장 리눅스 커널 소스 코드 117 11.1 리눅스 커널 소스 코드를 얻는 방법 117 11.2 커널 소스코드 배열 117 11.3 시작점 118 12장 리눅스 데이터 구조 120 부록 A 유용한 웹 및 FTP 사이트 138 부록 B 용어집 139 2부 Linux 커널 모듈 프로그래밍 가이드 감사의 말 서문 1장 Hello, World 145 1.1 커널 모듈의 Makefile 146 1.2 다중 파일 커널 모듈 147 2장 문자 장치 파일 149 3장 /proc 파일 시스템 158 4장 입력을 위해 /proc 사용 162 5장 입력을 위해 장치 파일 사용 170 6장 시작 매개변수 182 7장 시스템 호출 185 8장 차단 처리 190 9장 printk 교체 199 10장 작업 스케줄링 202 11장 인터럽트 핸들러 207 12장 대칭 다중 처리 211 13장 일반적인 실수 212 부록 A 2.0과 2.2의 차이점 213 부록 B 기타 리소스 214 부록 C 평가해 주세요 215 3부 Linux 프로그래머 가이드 1장 Linux 운영 체제 219 2장 리눅스 커널 220 3장 Linux libc 패키지 221 4장 시스템 호출 222 5장 "스위스 군용 칼": ioctl 223 6장 Linux 프로세스 간 통신 224 6.1 소개 224 6.2 반이중 유닉스 파이프 224 6.2.1 기본 개념 224 6.2.2 C 언어로 파이프라인 만들기 225 6.2.3 간단한 방법 229 6.2.4 파이프에 대한 원자적 연산 233 6.2.5 반이중 파이프에 관해 주의할 몇 가지 사항 233호 6.3 명명된 파이프 234 6.3.1 기본 개념 234 6.3.2 FIFO 생성 234 6.3.3 FIFO 연산 235 6.3.4 FIFO 236에 대한 차단 조치 6.3.5 SIGPIPE 신호 237 6.4 시스템 V IPC 237 6.4.1 기본 개념 237 6.4.2 메시지 큐 239 6.4.3 세마포어 251 6.4.4 semtool: 대화형 세마포어 연산 프로그램 260 6.4.5 공유 메모리 267 7장 사운드 프로그래밍 274 7.1 내부 스피커 프로그래밍 274 7.2 사운드 카드 프로그래밍 274 8장 문자 단위 그래픽 276 8.1 libc 277의 I/O 함수 8.1.1 포맷된 출력 277 8.1.2 형식화된 입력 278 8.2 termcap 라이브러리 278 8.2.1 머리말 278 8.2.2 터미널 설명 얻기 279 8.2.3 단말기 설명 보기 279 8.2.4 termcap 기능 280 8.3 Ncurses 소개 280 8.4 초기화 282 8.5 윈도우 283 8.6 출력 284 8.6.1 포맷된 출력 285 8.6.2 문자/줄 삽입 286 8.6.3 문자/라인 삭제 286 8.6.4 상자와 선 287 8.6.5 배경 문자 287 8.7 입력 288 8.8 옵션 289 8.8.1 출력 옵션 289 8.8.2 입력 옵션 290 8.8.3 터미널 속성 291 8.8.4 옵션 사용 291 8.9 터미널 292 업데이트 8.10 비디오 속성 및 색상 293 8.11 커서 및 화면 좌표 294 8.12 롤링 294 8.13 키패드 295 8.14 소프트 태그 295 8.15 기타 295 8.16 낮은 수준의 접근 296 8.17 스크린 덤프 296 8.18 Termcap 시뮬레이션 296 8.19 Terminfo 함수 296 8.20 디버깅 기능 297 8.21 Terminfo 기능 297 8.21.1 부울 기능 297 8.21.2 수치적 능력 298 8.21.3 문자열 기능 299 8.22 [N]저주 기능 개요 306 9장 I/O 포트 프로그래밍 307 9.1 마우스 프로그래밍 307 9.2 모뎀 프로그래밍 308 9.3 프린터 프로그래밍 308 9.4 조이스틱 프로그래밍 308 10장 Linux로 애플리케이션 포팅 309 10.1 소개 309 10.2 신호 처리 309 10.2.1 SVR4, BSD 및 POSIX.1에서 신호 310 10.2.2 리눅스 신호 옵션 310 10.2.3 Linux 310에서의 신호 10.2.4 Linux 311에서 지원되는 신호 10.3 터미널 I/O 311 10.4 프로세스 정보 및 제어 311 10.4.1 kvm 프로세스 312 10.4.2 ptrace 및 /proc 파일 시스템 312 10.4.3 리눅스 312에서의 프로세스 제어 10.5 이식 가능한 조건부 컴파일 313 10.6 보충 지침 314 부록 알파벳순 시스템 호출 315 Part 4 리눅스 커널 개념 시스템 구조 요약 323 서문 324 1장 시스템 구조 325 1.1 시스템 개요 325 1.2 커널의 목표 325 1.3 커널 구조 개요 325 1.4 여러 개발자 지원 327 1.5 시스템 데이터 구조 328 1.5.1 작업 목록 328 1.5.2 메모리 매핑 328 1.5.3 인덱스 노드 328 1.5.4 데이터 연결 329 2장 하위 시스템의 시스템 구조 330 2.1 프로세스 스케줄러 시스템 구조 330 2.1.1 목표 330 2.1.2 모듈 330 2.1.3 데이터 표현 331 2.1.4 종속성, 데이터 흐름 및 제어 흐름 331 2.2 메모리 관리자 시스템 구조 331 2.2.1 목표 331 2.2.2 모듈 331 2.2.3 데이터 표현 331 2.2.4 데이터 흐름, 제어 흐름 및 종속성 332 2.3 가상 파일 시스템 시스템 구조 333 2.3.1 목표 333 2.3.2 모듈 333 2.3.3 데이터 표현 333 2.3.4 데이터 흐름, 제어 흐름 및 종속성 334 2.4 네트워크 인터페이스 시스템 구조 334 2.4.1 목표 334 2.4.2 모듈 334 2.4.3 데이터 표현 335 2.4.4 데이터 흐름, 제어 흐름 및 종속성 335 2.5 프로세스 간 통신 시스템 구조 335 3장 결론 336 부록 A 용어 정의 337 부록 B 참고문헌 338 5부 리눅스 커널의 구체적인 시스템 구조 요약 341 1장 서문 342 1.1 목표 342 1.2 리눅스 소개 342 1.3 소프트웨어 시스템 구조에 대한 배경지식 342 1.4 방법과 접근법 343 1.5 이 책의 대상 독자 344 1.6 이 부분의 장 구성 344 2장 시스템 구조 345 3장 하위 시스템 구조 346 3.1 프로세스 스케줄러 346 3.1.1 목표 346 3.1.2 외부 인터페이스 346 3.1.3 하위시스템 설명 346 3.1.4 데이터 구조 347 3.1.5 하위시스템 구조 348 3.1.6 하위시스템 종속성 348 3.2 메모리 관리자 348 3.2.1 목표 348 3.2.2 외부 인터페이스 349 3.2.3 하위시스템 설명 349 3.2.4 데이터 구조 350 3.2.5 하위시스템 구조 350 3.2.6 하위시스템 종속성 351 3.3 가상 파일 시스템 352 3.3.1 목표 352 3.3.2 외부 인터페이스 352 3.3.3 서브시스템 설명 353 3.3.4 장치 드라이버 353 3.3.5 논리 파일 시스템 354 3.3.6 모듈 354 3.3.7 데이터 구조 355 3.3.8 하위시스템 구조 355 3.3.9 하위시스템 종속성 355 3.4 프로세스 간 통신 355 3.4.1 목표 355 3.4.2 외부 인터페이스 357 3.4.3 서브시스템 설명 357 3.4.4 데이터 구조 358 3.4.5 하위시스템 구조 359 3.4.6 하위시스템 종속성 359 3.5 네트워크 인터페이스 360 3.5.1 목표 360 3.5.2 외부 인터페이스 361 3.5.3 서브시스템 설명 361 3.5.4 데이터 구조 362 3.5.5 하위시스템 구조 363 3.5.6 하위시스템 종속성 363 4장 결론 365 부록 A 용어 정의 366 부록 B 참고문헌 368 6부 부록 부록 A Linux 문서 프로젝트 라이센스 복사 372 부록 B GNU 일반 공중 라이선스 374