목차
1장 서설 = 1
1.1 서설 = 1
1.1.1 간략한 역사 = 2
1.1.2 초창기 = 2
1.1.3 확산(Proliferation) = 3
1.1.4 BSD = 4
1.1.5 System V = 6
1.1.6 UNIX의 상업화 = 6
1.1.7 Mach = 7
1.1.8 표준(Standards) = 7
1.1.9 OSF와 UI = 9
1.1.10 SVR 4와 그 이후 = 10
1.2 필수적인 변화 = 10
1.2.1 기능 = 11
1.2.2 네트워킹 = 11
1.2.3 성능 = 12
1.2.4 하드웨어의 변화 = 13
1.2.5 질적 향상 = 13
1.2.6 패러다임의 전환 = 14
1.2.7 여타 응용 영역 = 15
1.2.8 작은 것이 아름답다(Small is Beautiful) = 15
1.2.9 신축성 = 16
1.3 과거와 미래 = 17
1.3.1 UNIX의 장점은 무엇인가? = 17
1.3.2 UNIX의 단점 = 19
1.4 이 책의 범위 = 20
1.5 참고 문헌 = 21
2장 프로세스와 커널 = 23
2.1 개요 = 23
2.2 모드, 공간 및 문맥 = 26
2.3 프로세스 추상 개념(abstraction) = 29
2.3.1 프로세스 상태 = 29
2.3.2 프로세스 문맥 = 31
2.3.3 사용자 신임장(user credentials) = 32
2.3.4 u 에리어와 proc 구조 = 34
2.4 커널 모드에서 수행 = 35
2.4.1 시스템 호출 인터페이스 = 36
2.4.2 인터럽트 처리 = 37
2.5 동기화 = 40
2.5.1 봉쇄 연산 = 41
2.5.2 인터럽트 = 43
2.5.3 다중 처리기 = 44
2.6 프로세스 스케줄링 = 44
2.7 시그널 = 45
2.8 새로운 프로세스와 프로그램 = 46
2.8.1 fork와 exec = 47
2.8.2 프로세스 생성 = 48
2.8.3 fork 최적화 = 49
2.8.4 새로운 프로그램의 호출 = 50
2.8.5 프로세스 종료 = 52
2.8.6 프로세스 종료의 대기 = 53
2.8.7 좀비(zombie) 프로세스 = 54
2.9 요약 = 54
2.10 연습 문제 = 54
2.11 참고 문헌 = 56
3장 쓰레드와 경량 프로세스 = 57
3.1 개요 = 57
3.1.1 동기 = 58
3.1.2 다중 쓰레드들과 처리기들 = 59
3.1.3 동시성(concurrency)과 병렬성(parallelism) = 61
3.2 기본 추상 개념 = 62
3.2.1 커널 쓰레드 = 62
3.2.2 경량 프로세스 = 63
3.2.3 사용자 쓰레드 = 65
3.3 경량 프로세스의 설계 - 고려해야 할 이슈 = 69
3.3.1 fork의 의미 = 69
3.3.2 기타 시스템 콜 = 70
3.3.3 시그널 전달과 처리 = 71
3.3.4 가시성 = 72
3.3.5 스택의 성장 = 73
3.4 사용자 수준 쓰레드 라이브러리 = 73
3.4.1 프로그래밍 인터페이스 = 73
3.4.2 쓰레드 라이브러리의 구현 = 74
3.5 스케줄러 액티베이션 = 76
3.6 Solaris와 SVR4의 다중 쓰레드 = 77
3.6.1 커널 쓰레드 = 77
3.6.2 경량 프로세스의 구현 = 78
3.6.3 사용자 쓰레드 = 79
3.6.4 사용자 쓰레드의 구현 = 81
3.6.5 인터럽트 핸들링 = 81
3.6.6 시스템 호출의 처리 = 83
3.7 Mach의 쓰레드 = 84
3.7.1 Mach의 추상 개념 - 태스크와 쓰레드 = 84
3.7.2 Mach C-threads = 85
3.8 Digital UNIX = 86
3.8.1 UNIX 인터페이스 = 87
3.8.2 시스템 콜과 시그널 = 89
3.8.3 pthreads 라이브러리 = 89
3.9 Mach 3.0의 계속(continuations) = 90
3.9.1 프로그래밍 모델 = 90
3.9.2 계속(continuations)의 사용 = 91
3.9.3 최적화(optimizations) = 93
3.9.4 분석 = 94
3.10 요약 = 94
3.11 연습 문제 = 95
3.12 참고 문헌 = 96
4장 시그널과 세션 관리 = 99
4.1 개요 = 99
4.2 시그널의 생성과 처리 = 100
4.2.1 시그널의 처리 = 100
4.2.2 시그널의 생성 = 103
4.2.3 전형적인 시나리오 = 104
4.2.4 슬리프(sleep)와 시그널 = 105
4.3 신뢰할 수 없는 시그널(unreliable signals) = 105
4.4 신뢰할 수 있는 시그널(reliable signals) = 107
4.4.1 주요 특성 = 107
4.4.2 SVR3의 구현 = 108
4.4.3 BSD 시그널 관리 = 109
4.5 SVR4의 시그널 = 111
4.6 시그널의 구현 = 112
4.6.1 시그널의 발생 = 113
4.6.2 전달과 처리 = 113
4.7 예외(exceptions) = 114
4.8 Mach의 예외 처리 = 115
4.8.1 예외 포트(exception port) = 116
4.8.2 오류 처리 = 117
4.8.3 디버거와의 상호 작용 = 117
4.8.4 분석(Analysis) = 118
4.9 프로세스 그룹과 터미널 관리 = 119
4.9.1 공통 개념 = 119
4.9.2 SVR3 모델 = 120
4.9.3 제한점(limitations) = 122
4.9.4 4.3BSD 그룹과 터미널 = 123
4.9.5 단점들 = 125
4.10 SVR4 세션 구조(session architecture) = 125
4.10.1 동기(motivation) = 126
4.10.2 세션과 프로세스 그룹 = 126
4.10.3 자료 구조(data structures) = 128
4.10.4 제어 터미널(controlling terminals) = 129
4.10.5 4.4BSD 세션 구현 = 130
4.11 요약 = 131
4.12 연습 문제 = 131
4.13 참고 문헌 = 132
5장 프로세스 스케줄러 = 135
5.1 개요 = 135
5.2 클락 인터럽트 처리(clock interrupt handling) = 136
5.2.1 콜 아웃(callouts) = 137
5.2.2 얼람(alarms) = 139
5.3 스케줄러의 목적(scheduler goals) = 140
5.4 전통적인 UNIX 스케줄링 = 141
5.4.1 프로세스의 우선 순위 = 142
5.4.2 스케줄러 구현 = 144
5.4.3 실행 큐 조작(run queue manipulation) = 145
5.4.4 분석(Analysis) = 146
5.5 SVR4 스케줄러 = 146
5.5.1 클래스 독립 층(class-independent layer) = 147
5.5.2 스케줄링에 클래스에 대한 인터페이스 = 149
5.5.3 시분할 클래스 = 151
5.5.4 실시간 클래스 = 153
5.5.5 priocntl 시스템 호출 = 154
5.5.6 분석 = 155
5.6 Solaris 2.x의 스케줄링 향상 = 157
5.6.1 선점형 커널 = 157
5.6.2 다중 처리기 지원 = 157
5.6.3 숨겨진 스케줄링(hidden scheduling) = 159
5.6.4 우선 순위 역전(priority inversion) = 160
5.6.5 우선 순위 상속의 구현 = 162
5.6.6 우선 순위 상속의 제약점 = 164
5.6.7 회전 문(turnstiles) = 165
5.6.8 분석 = 166
5.7 Mach의 스케줄링 = 166
5.7.1 다중 처리기 지원 = 167
5.8 Digital UNIX 실시간 스케줄러 = 169
5.8.1 다중 처리기 지원 = 171
5.9 기타 스케줄링 구현 = 171
5.9.1 공평한 몫(fair-share) 스케줄링 = 172
5.9.2 마감시간 구동형(deadline-driven) 스케줄링 = 172
5.9.3 3-수준 스케줄러 = 173
5.10 요약 = 174
5.11 연습 문제 = 174
5.12 참고 문헌 = 176
6장 프로세스간 통신 = 179
6.1 개요 = 179
6.2 보편적인 IPC 기능 = 180
6.2.1 시그널 = 180
6.2.2 파이프 = 181
6.2.3 SVR4 파이프 = 183
6.2.4 프로세스 트레이싱 = 184
6.3 시스템 V IPC = 186
6.3.1 공통 요소들 = 186
6.3.2 세마포 = 188
6.3.3 메시지 큐 = 192
6.3.4 공유 메모리 = 194
6.3.5 토의 = 196
6.4 Mach IPC = 197
6.4.1 기본 개념 = 198
6.5 메시지 = 200
6.5.1 메시지 자료구조 = 200
6.5.2 메시지 패싱 인터페이스 = 202
6.6 포트 = 203
6.6.1 포트 이름 공간 = 203
6.6.2 포트 자료구조 = 204
6.6.3 포트 변환 = 204
6.7 메시지 패싱 = 206
6.7.1 포트 권한 전송 = 207
6.7.2 조화되지 않은(out-of-line) 메모리 = 209
6.7.3 제어의 흐름 = 211
6.7.4 통지(notifications) = 211
6.8 포트 연산(port operations) = 212
6.8.1 포트의 파괴 = 212
6.8.2 백업 포트 = 212
6.8.3 포트 집합 = 213
6.8.4 포트 개찬(interpolation) = 214
6.9 확장성 = 216
6.10 Mach 3.0의 개선 사항 = 217
6.10.1 일회 보내기 권한 = 218
6.10.2 Mach 3.0 통지 = 218
6.10.3 보내기 권한에 대한 사용자 참조 계수 = 219
6.11 토론 = 219
6.12 요약 = 220
6.13 연습 문제 = 220
6.14 참고 문헌 = 221
7장 동기화와 다중 처리기 = 223
7.1 개요 = 223
7.2 전통적인 UNIX 커널 내의 동기화 = 224
7.2.1 인터럽트 마스킹 = 225
7.2.2 Sleep와 Wakeup = 225
7.2.3 전통적 방법의 제한점 = 226
7.3 다중 처리기 시스템 = 228
7.3.1 메모리 모델 = 228
7.3.2 동기화 지원 = 230
7.3.3 소프트웨어 구조 = 231
7.4 다중 처리기 동기화 문제 = 232
7.4.1 Wakeup 유실 문제 = 233
7.4.2 우레 같은 무리(thundering herd) 문제 = 234
7.5 세마포(semaphores) = 234
7.5.1 세마포를 이용한 상호 배제 = 236
7.5.2 세마포를 이용한 사건-대기 = 236
7.5.3 셀 수 있는 자원(countable resource)을 제어하는 세마포 = 237
7.5.4 세마포의 단점 = 237
7.5.5 호위(convoys) = 238
7.6 스핀 락(spin locks) = 239
7.6.1 스핀 락의 사용 = 240
7.7 조건 변수 = 241
7.7.1 구현 시 고려 사항 = 243
7.7.2 사건 = 244
7.7.3 봉쇄적 락(blocking locks) = 244
7.8 읽기-쓰기 락(read-write locks) = 245
7.8.1 설계 시 고려 사항 = 245
7.8.2 구현 = 246
7.9 참조 계수(reference counts) = 249
7.10 그 외의 고려 사항 = 249
7.10.1 교착 상태 회피 = 250
7.10.2 재귀적 락(recursive locks) = 251
7.10.3 봉쇄할 것인가 또는 스핀할 것인가 = 252
7.10.4 무엇을 락할 것인가 = 253
7.10.5 입도(granularity)와 지속 시간(duration) = 253
7.11 사례 연구 = 254
7.11.1 SVR4.2/MP = 254
7.11.2 Digital UNIX = 256
7.11.3 그 밖의 구현들 = 258
7.12 요약 = 259
7.13 연습 문제 = 259
7.14 참고 문헌 = 260
8장 파일 시스템 인터페이스와 프레임워크 = 263
8.1 개요 = 263
8.2 파일에 대한 사용자 인터페이스 = 264
8.2.1 파일과 디렉토리 = 264
8.2.2 파일 속성 = 266
8.2.3 파일 디스크립터 = 268
8.2.4. 파일 I/O = 271
8.2.5 흩뿌리기-모으기(scatter-gather) I/O = 272
8.2.6 파일 락킹 = 273
8.3 파일 시스템 = 274
8.3.1 논리적 디스크 = 275
8.4 특수 파일들 = 276
8.4.1 심블릭 링크 = 276
8.4.2 파이프와 FIFO = 278
8.5 파일 시스템 프레임워크 = 279
8.6 Vnode/Vfs 구조 = 280
8.6.1 목적 = 280
8.6.2 디바이스 입출력을 통한 교훈 = 281
8.6.3 vnode/vfs 인터페이스의 개관 = 284
8.7 구현의 개관 = 286
8.7.1 목적 = 286
8.7.2 Vnode와 열린(open) 파일들 = 287
8.7.3 Vnode = 289
8.7.4 vnode 참조 계수 = 289
8.7.5 vfs 객체 = 291
8.8 파일 시스템 의존적 객체들 = 292
8.8.1 파일 별 사유(private) 데이터 = 292
8.8.2 vnodeops 벡터 = 293
8.8.3 vfs 층의 파일 시스템 의존적 부분 = 294
8.9 파일 시스템을 마운트하기 = 295
8.9.1 가상 파일 시스템 스위치 = 296
8.9.2 mount의 구현 = 296
8.9.3 VFS_MOUNT의 처리 = 297
8.10 파일에 대한 연산들 = 297
8.10.1 경로이름 순회 = 297
8.10.2 디렉토리 룩업 캐시(directory lookup cache) = 299
8.10.3 VOP_LOOKUP 연산 = 300
8.10.4 파일 열기 = 301
8.10.5 파일의 I/O = 302
8.10.6 파일의 속성(attribute) = 302
8.10.7 사용자 신임장(credentials) = 303
8.11 분석 = 303
8.11.1 SVR 4 구현의 단점 = 304
8.11.2 4.4BSD 모델 = 305
8.11.3 OSF/1의 접근법 = 306
8.12 요약 = 307
8.13 연습 문제 = 308
8.14 참고 문헌 = 309
9장 파일 시스템 구현 = 311
9.1 개요 = 311
9.2 System V 파일 시스템(s5fs) = 312
9.2.1 디렉토리 = 313
9.2.2 Inodes = 314
9.2.3 수퍼블록 = 317
9.3 S5fs 커널 구성 = 318
9.3.1 인코어 inode = 318
9.3.2 inode 찾아보기 = 318
9.3.3 파일 I/O = 319
9.3.4 Inode의 할당과 회수 = 321
9.4 s5fs의 분석 = 322
9.5 버클리 패스트 파일 시스템(fast file system) = 323
9.6 하드디스크 구조 = 324
9.7 디스크 상 구조 = 325
9.7.1 블록과 단편 = 325
9.7.2 할당 정책 = 326
9.8 FFS의 기능 개선 = 328
9.9 분석 = 329
9.10 임시 파일 시스템 = 331
9.10.1 메모리 파일 시스템 = 331
9.10.2 tempfs 파일 시스템 = 332
9.11 특수 목적 파일 시스템 = 333
9.11.1 Specfs 파일 시스템 = 333
9.11.2 /proc 파일 시스템 = 334
9.11.3 처리기 파일 시스템 = 336
9.11.4 반투명(translucent) 파일 시스템 = 337
9.12 과거의 버퍼 캐시 = 338
9.12.1 기본 연산 = 339
9.12.2 버퍼 헤더 = 340
9.12.3 장점 = 340
9.12.4 단점 = 341
9.12.5 파일 시스템의 일관성 유지 = 341
9.13 요약 = 343
9.14 연습 문제 = 343
9.15 참고 문헌 = 344
10장 분산 파일 시스템 = 347
10.1 개요 = 347
10.2 분산 파일 시스템의 일반적 특성 = 348
10.2.1 설계 고려 사항 = 348
10.3 Network File System(NFS) = 350
10.3.1 사용자 측면 = 350
10.3.2 설계 목표 = 352
10.3.3 NFS의 구성요소 = 352
10.3.4 무상태성(statelessness) = 354
10.4. 프로토콜 집합(protocol suite) = 355
10.4.1 확장 데이터 표현(Extended Data Representation, XDR) = 355
10.4.2 원거리 프로시저 호출(Remote Procedure Calls, RPC) = 357
10.5 NFS 구현 = 359
10.5.1 제어 흐름(control flow) = 359
10.5.2 파일의 핸들(file handles) = 360
10.5.3 마운트 연산(mount operation) = 361
10.5.4 경로이름 찾기(pathname lookup) = 361
10.6 UNIX의 의미(semantics) = 362
10.6.1 오픈 파일 허가(open file permissions) = 363
10.6.2 오픈 파일의 삭제(deletion of open files) = 363
10.6.3 읽기와 쓰기(reads and writes) = 364
10.7 NFS 성능(NFS performance) = 364
10.7.1 성능의 병목(performance bottlenecks) = 365
10.7.2 클라이언트 측 캐싱(client-side caching) = 365
10.7.3 쓰기의 연기(deferral of writes) = 366
10.7.4 재전송 캐시(retransmissions cache) = 367
10.8 전용(dedicated) NFS 서버 = 369
10.8.1 Auspex Functional Multiprocessor Architecture = 369
10.8.2 IBM의 HA-NFS 서버 = 370
10.9 NFS 보안(security) = 372
10.9.1 NFS 접근 제어(access control) = 372
10.9.2 UID 재매핑(remapping) = 373
10.9.3 루트 재매핑(remapping) = 374
10.10 NFS 버전 3 = 374
10.11 원격 파일 공유(Remote File Sharing, RFS) = 376
10.12 RFS 구조(architecture) = 376
10.12.1 원격 메시지 프로토콜 = 377
10.12.2 상태형 연산(stateful operation) = 378
10.13 RFS 구현 = 379
10.13.1 원격 마운트 = 379
10.13.2 RFS 클라이언트와 서버 = 381
10.13.3 크래시 회복(crash recovery) = 382
10.13.4 기타 이슈들 = 382
10.14 클라이언트 측(client-side) 캐싱 = 383
10.14.1 캐시 일관성 = 384
10.15 Andrew 파일 시스템 = 385
10.15.1 규모 가변적(scalable) 아키텍처 = 386
10.15.2 저장 장치와 이름 공간의 구성(organization) = 387
10.15.3 세션 의미(semantics) = 388
10.16 AFS 구현 = 389
10.16.1 캐싱과 일관성 = 389
10.16.2 경로이름 룩업 = 390
10.16.3 보안 = 391
10.17 AFS의 단점들(shortcomings) = 391
10.18 DCE 분산 파일 시스템(DCE DFS) = 392
10.18.1 DFS 아키텍처 = 393
10.18.2 캐시 일관성 = 394
10.18.3 토큰 관리자 = 396
10.18.4 다른 DFS 서비스들 = 397
10.18.5 분석 = 397
10.19 요약 = 398
10.20 연습문제 = 399
10.21 참고 문헌 = 400
11장 고급 파일 시스템(Advanced File Systems) = 403
11.1 개요 = 403
11.2 전통적 파일 시스템의 한계 = 404
11.2.1 FFS의 디스크 배치 = 405
11.2.2 쓰기의 우세 = 406
11.2.3 메타데이터의 갱신 = 407
11.2.4 크래시 복구 = 408
11.3 파일 시스템 클러스터링(Sun-FFS) = 409
11.4 저널링 접근법 = 410
11.4.1 기본 특성들 = 410
11.5 로그 구조 파일 시스템 = 411
11.6 4.4BSD 로그 구조 파일 시스템 = 412
11.6.1 로그를 쓰기 = 414
11.6.2 데이터 꺼내오기 = 414
11.6.3 고정(crash) 복구 = 415
11.6.4 Cleaner 프로세스 = 416
11.6.5. 분석 = 416
11.7 메타데이터 로깅 = 418
11.7.1 정상 연산(normal operation) = 418
11.7.2 로그의 일관성 = 420
11.7.3 회복 = 422
11.7.4 분석 = 422
11.8 Episode 파일 시스템 = 423
11.8.1 기본 추상 개념 = 424
11.8.2 구조 = 424
11.8.3 로깅 = 426
11.8.4 기타 기능 = 426
11.9 워치독(watchdogs) = 427
11.9.1 디렉토리 watchdog = 429
11.9.2 메시지 채널 = 429
11.9.3 응용 = 430
11.10 4.4BSD Potal File System = 430
11.10.1 포탈의 이용 = 432
11.11 스태커블 파일 시스템 층 = 432
11.11.1 프레임워크와 인터페이스 = 433
11.11.2 SunSoft 프로토타입 = 435
11.12 4.4BSD 파일 시스템 인터페이스 = 436
11.12.1 Nullfs와 Union Mount 파일 시스템 = 437
11.13 요약 = 437
11.14 연습 문제 = 438
11.15 참고 문헌 = 439
12장 커널 메모리 할당 = 441
12.1 개요 = 441
12.2 기능적 요구 사항 = 443
12.2.1 평가 기준(evaluation criteria) = 444
12.3 자원 맵 할당기 = 446
12.3.1 분석 = 447
12.4 단순한 2의 멱수 자유 리스트 = 449
12.4.1 분석 = 450
12.5 McKusick-Karels 할당기 = 452
12.5.1 분석 = 454
12.6 동료(buddy) 시스템 = 454
12.6.1 분석 = 456
12.7 SVR4의 게으른(lazy) 동료(buddy) 알고리즘 = 457
12.7.1 게으른(lazy) 합병 = 458
12.7.2 SVR4 구현 상세 = 459
12.8 Mach-OSF/1 구역(Zone) 할당기 = 460
12.8.1 가베지 수집 = 461
12.8.2 분석 = 462
12.9 다중 처리기를 위한 계층적 할당기 = 463
12.9.1 분석 = 464
12.10 Solaris 2.4 슬랩(slab) 할당기 = 465
12.10.1 객체 재사용 = 465
12.10.2 하드웨어 캐시 사용 = 466
12.10.3 할당기의 발자국(footprint) = 467
12.10.4 설계와 인터페이스 = 467
12.10.5 구현 = 469
12.10.6 분석 = 470
12.11 요약 = 471
12.12 연습 문제 = 472
12.13 참고 문헌 = 473
제13장 가상 메모리(Virtual Memory) = 475
13.1 개요 = 475
13.1.1 석기시대의 메모리 관리 = 477
13.2 요구 페이징 = 480
13.2.1 기능적 요구 사항 = 480
13.2.2 가상 주소 공간 = 482
13.2.3 페이지에 대한 초기 접근 = 482
13.2.4 스왑 영역 = 483
13.2.5 변환 맵들 = 484
13.2.6 페이지 교체(replacement) 정책 = 486
13.3 하드웨어 요구 사항 = 487
13.3.1 MMU 캐시 = 489
13.3.2 인텔 80x86 = 490
13.3.3 IBM RS/6000 = 493
13.3.4 MIPS R3000 = 497
13.4 4.3BSD - 사례연구 = 499
13.4.1 물리 메모리 = 500
13.4.2 주소 공간 = 502
13.4.3 페이지는 어디에 있나? = 503
13.4.4 스왑 공간 = 505
13.5 4.3BSD 메모리 관리 연산 = 507
13.5.1 프로세스 생성 = 507
13.5.2 페이지 폴트의 취급 = 508
13.5.3 자유 페이지 리스트 = 511
13.5.4 스와핑(swapping) = 512
13.6 분석 = 514
13.7 연습 문제 = 516
13.8 참고 문헌 = 517
14장 SVR4 VM 아키텍처 = 519
14.1 동기 = 519
14.2 메모리-맵 파일 = 520
14.2.1 mmap과 관련 시스템 호출 = 522
14.3 VM의 설계 원칙 = 523
14.4 기본 추상 개념 = 524
14.4.1 물리 메모리 = 525
14.4.2 주소 공간 = 526
14.4.3 주소 매핑 = 527
14.4.4 익명 페이지(anonymous page) = 528
14.4.5 하드웨어 주소 변환(hardware address translation) = 529
14.5 세그먼트 드라이버(segment drivers) = 531
14.5.1 seg_vn = 532
14.5.2 seg_map = 533
14.5.3 seg_dev = 534
14.5.4 seg_kmem = 534
14.5.5 seg_kp = 534
14.6 스왑(swap) 층 = 534
14.7 VM 연산 = 537
14.7.1 새로운 매핑의 생성 = 537
14.7.2 익명 페이지의 처리 = 539
14.7.3 프로세스 생성 = 539
14.7.4 익명 페이지의 공유 = 540
14.7.5 페이지 폴트 처리 = 541
14.7.6 공유 메모리 = 543
14.7.7 기타 요소 = 544
14.8 Vnode 서브시스템과의 상호 작용 = 545
14.8.1 Vnode 인터페이스의 변경 = 545
14.8.2 파일 접근의 통합 = 546
14.8.3 기타 논의 사항 = 549
14.9 Solaris의 가상 스왑 공간 = 549
14.9.1 확장된 스왑 공간 = 550
14.9.2 가상 스왑 관리 = 550
14.9.3 토의 = 552
14.10 분석 = 552
4.11 성능 향상 = 555
14.11.1 높은 폴트 율을 일으키는 요인 = 555
14.11.2 SunOS VM 구현에 대한 SVR4의 개선 사항 = 556
14.11.3 결과와 토의 = 557
14.12 요약 = 558
14.13 연습 문제 = 558
14.14 참고 문헌 = 559
15장 추가의 메모리 관리 주제들 = 561
15.1 개요 = 561
15.2 Mach 메모리 관리의 설계 = 561
15.2.1 설계 목적 = 561
15.2.2 프로그래밍 인터페이스 = 563
15.2.3 기본 추상 개념 = 564
15.3 메모리 공유 설비들 = 566
15.4.1 쓰기시-복사 공유 = 566
15.4.2 읽기-쓰기(read-write) 공유(sharing) = 569
15.4 메모리 객체(memory objects)와 페이저(pagers) = 570
15.4.1 메모리 객체의 초기화(initialization) = 570
15.4.2 커널과 페이저 사이의 인터페이스 = 571
15.4.3 커널 페이저의 상호 작용 = 573
15.5 외부(external)와 내부(internal) 페이저 = 573
15.5.1 네트워크 공유 메모리 서버 = 574
15.6 페이지 대체(replacement) = 577
15.7 분석 = 579
15.8 4.4BSD의 메모리 관리 = 580
15.9 Translation Lookaside Buffer(TLB)의 일관성(consistency) = 583
15.9.1 단일 처리기에서 TLB의 일관성(consistency) = 584
15.9.2 다중 처리기(multiprocessor)의 논의 사항 = 585
15.10 마크의 TLB 격추(shootdown) = 586
15.10.1 동기화와 교착 상태(deadlock) 회피 = 587
15.10.2 토의 = 588
15.11 SVR4와 SVR4.2 UNIX에서 TLB의 일관성 = 589
15.11.1 SVR4/MP = 589
15.11.2 SVR4.2/MP = 590
15.11.3 게으른 격추(lazy shootdowns) = 592
15.11.4 즉각적인 격추(immediate shootdowns) = 592
15.11.5 토의 = 594
15.12 다른 TLB 일관성 알고리즘 = 595
15.13 가상 주소(virtually addressed) 캐시 = 596
15.13.1 매핑 변경 = 597
15.13.2 주소의 별명(address aliases) = 598
15.13.3 DMA 연산 = 599
15.13.4 캐시의 일관성 유지 = 599
15.13.5 분석 = 601
15.14 연습 문제 = 602
15.15 참고 문헌 = 603
16장 디바이스 드라이버와 입출력 = 607
16.1 개요 = 607
16.2 개관 = 607
16.2.1 하드웨어 구성 = 609
16.2.2 디바이스 인터럽트 = 611
16.3 디바이스 드라이버 프레임워크 = 612
16.3.1 디바이스와 드라이버들의 분류 = 613
16.3.2 드라이버 코드의 호출 = 614
16.3.3 디바이스 스위치(switches) = 615
16.3.4 드라이버 진입점(entry points) = 617
16.4 입출력 서브시스템 = 619
16.4.1 주(major) 및 부(minor) 디바이스 번호 = 619
16.4.2 디바이스 파일 = 621
16.4.3 specfs 파일 시스템 = 622
16.4.4 공통 snode = 624
16.4.5 디바이스 복제(cloning) = 625
16.4.6 문자 디바이스에 대한 입출력 = 626
16.5 poll 시스템 콜 = 627
16.5.1 poll의 구현 = 628
16.5.2 4.3BSD select 시스템 콜 = 630
16.6 블록 입출력 = 631
16.6.1 buf 구조 = 632
16.6.2 Vnode와의 상호작용 = 633
16.6.3 디바이스 액세스 방법(access methods) = 634
16.6.4 블록 디바이스에 대한 미가공(raw) 입출력 = 636
16.7 DDI/DKI 명세 = 637
16.7.1 일반적 추천 = 638
16.7.2 3절의 함수들 = 639
16.7.4 기타 절들 = 641
16.8 새로운 SVR4 릴리즈들 = 641
16.8.1 다중 처리기-안전(multiprocessor_safe) 드라이버 = 642
16.8.2 SVR4.1/ES 변경 = 643
16.8.3 동적 로딩과 언로딩 = 643
16.9 미래의 방향 = 646
16.10 요약 = 648
16.11 연습 문제 = 648
16.12 참고 문헌 = 649
17장 스트림즈(STREAMS) = 651
17.1 동기 = 651
17.2 개관 = 652
17.3 메시지와 큐 = 655
17.3.1 메시지 = 655
17.3.2 가상 복사 = 657
17.3.3 메시지 타입 = 658
17.3.4 큐와 모듈 = 659
17.4 스트림 I/O = 661
17.4.1 STREAMS 스케줄러 = 662
17.4.2 우선 순위 밴드 = 663
17.4.3 흐름 제어 = 663
17.4.4 드라이버 엔드(end) = 666
17.4.5 스트림 헤드(head) = 666
17.5 구성 및 설정(configuration and setup) = 667
17.5.1 모듈 또는 드라이버의 구성(configuring) = 668
17.5.2 스트림의 오픈 = 670
17.5.3 모듈을 푸시하기 = 671
17.5.4 복제 장치(clone devices) = 672
17.6 스트림즈 ioctls = 673
17.6.1 I_STR ioctls의 처리 = 674
17.6.2 투명한 ioctls = 675
17.7 메모리 할당 = 675
17.7.1 확장된 스트림즈 버퍼 = 677
17.8 멀티플렉싱 = 678
17.8.1 상위 멀티플렉서 = 678
17.8.2 하위 멀티플렉서 = 679
17.8.3 스트림 연결하기 = 680
17.8.4 데이터 흐름 = 682
17.8.5 일반적인 링크와 영구적인 링크 = 683
17.9 FIFO와 파이프(pipe) = 684
17.9.1 스트림즈 FIFO = 684
17.9.2 스트림즈 파이프 = 685
17.10 네트워킹 인터페이스 = 687
17.10.1 Transport Provider Interface(TPI) = 687
17.10.2 트랜스포트 층 인터페이스(Transport Layer Interface, TLI) = 688
17.10.3 소켓(socket) = 690
17.10.4 SVR4 소켓 구현 = 691
17.11 요약 = 692
17.12 연습 문제 = 693
17.13 참고 문헌 = 694
찾아보기 = 696