목차
저자 머리말 = ⅲ
역자 머리말 = ⅴ
제1부 : 전통적 운영체제 = 1
1 서 론 = 3
1.1 운영체제란 무엇인가? = 5
1.1.1 확장된 기계로서의 운영체제 = 5
1.1.2 자원 관리자로서의 운영체제 = 6
1.2 운영체제의 역사 = 7
1.2.1 제1세대(1945-1955) : 진공관 = 7
1.2.2 제2세대(1955-1965) : 트랜지스터와 일괄처리 시스템 = 7
1.2.3 제3세대(1965-1980) : 집적회로와 다중프로그래밍 = 9
1.2.3 제4세대(1980-1990) : 퍼스널 컴퓨터 = 12
1.3 운영체제의 개념 = 14
1.3.1 프로세스 = 14
1.3.2 파일 = 16
1.3.3 시스템 호출 = 18
1.3.4 쉘(shell) = 19
1.4 운영체제 구조 = 20
1.4.1 단일체(monolithic) 시스템 = 20
1.4.2 계층 시스템(layered systems) = 22
1.4.3 가상기계 = 23
1.4.4 클라이언트/서버 모델 = 24
1.5 이 책의 구성 = 25
1.6 요약 = 26
2 프로세스 = 29
2.1 프로세스 입문 = 29
2.1.1 프로세스 모델 = 30
2.1.2 프로세스의 구현 = 34
2.2 프로세스간 통신 = 36
2.2.1 경쟁 조건(race conditions) = 36
2.2.2 임계구역 = 37
2.2.3 바쁜 대기(busy waiting)상태의 상호배제 = 38
2.2.4 잠자기와 깨우기(sleep and wakeup) = 43
2.2.5 세마포어(semaphore) = 45
2.2.6 사건 계수기(event counter) = 48
2.2.7 모니터 = 49
2.2.8 메시지 전달 = 52
2.2.9 프리미티브 등가(equivalence of primitives) = 56
2.3 전형적인 IPC 문제 = 60
2.3.1 식사하는 철학자 문제 = 60
2.3.2 판독자와 기록자의 문제 = 62
2.3.3 잠자는 이발사 문제 = 64
2.4 프로세스 스케줄링 = 67
2.4.1 라운드 로빈 스케줄링 = 68
2.4.2 우선순위 스케줄링 = 70
2.4.3 다중 큐 = 71
2.4.4 SJF(Shortest Job First) = 72
2.4.5 Guaranteed 스케줄링 = 74
2.4.6 정책 대 메커니즘 = 74
2.4.7 2단계 스케줄링 = 75
2.5 요약 = 76
3 메모리 관리 = 81
3.1 스와핑 또는 페이징이 없는 메모리 관리 = 81
3.1.1 스와핑이나 페이징 없는 단일 프로그래밍 = 82
3.1.2 다중프로그래밍과 메모리 사용 = 83
3.1.3 고정분할 다중처리 프로그래밍 = 86
3.2 스와핑 = 88
3.2.1 가변분할 다중프로그래밍 = 88
3.2.2 비트맵을 이용한 메모리 관리 = 91
3.2.3 연결 리스트를 이용한 메모리 관리 = 92
3.2.4 버디 시스템(buddy system)을 이용한 메모리 관리 = 94
3.2.5 스왑영역의 할당 = 96
3.2.6 스와핑 시스템 분석 = 96
3.3 가상 기억장치(virtual memory) = 97
3.3.1 페이징(paging) = 98
3.3.2 페이지 테이블 = 101
3.3.3 페이징 하드웨어의 예 = 106
3.3.4 연관메모리 = 110
3.3.5 역변화 페이지 테이블(inverted page tables) = 115
3.4 페이지 교체 알고리즘 = 117
3.4.1 최적화 페이지 교체기법 = 117
3.4.2 NRU(Not-Recently-Used)페이지 교체 알고리즘 = 118
3.4.3 FIFO(First-In, First-Out)페이지 교체 알고리즘 = 119
3.4.4 재기회(second chance) 페이지 교체 알고리즘 = 119
3.4.5 클럭 페이지 교체 알고리즘 = 120
3.4.6 LRU(Least Recently Used) 페이지 교체 알고리즘 = 121
3.4.7 소프트웨어의 LRU 시뮬레이션 = 122
3.5 페이징 알고리즘 모델링 = 124
3.5.1 Belady의 모순(anomaly) = 124
3.5.2 스택 알고리즘 = 124
3.5.3 간격 문자열(distance string) = 127
3.5.4 페이지 폴트율의 예측 = 128
3.6 페이징 시스템의 설계 쟁점 = 129
3.6.1 작업세트(working set) = 129
3.6.2 지역 및 전역 할당정책(local versus global allocation policies) = 130
3.6.3 페이지 크기(page size) = 132
3.6.4 구현 쟁점 = 134
3.7 세그먼테이션(segmentation) = 139
3.7.1 순수 세그먼테이션의 구현 = 142
3.7.2 페이징을 이용한 세그먼테이션 : MULTICS = 142
3.7.3 페이징을 이용한 세그먼테이션 : Intel 386 = 146
3.8 요 약 = 150
4 파일 시스템 = 155
4.1 파일 = 156
4.1.1 파일명 = 156
4.1.2 파일 구조 = 157
4.1.3 파일 유형 = 158
4.1.4 파일 접근 = 160
4.1.5 파일 속성 = 161
4.1.6 파일 오퍼레이션 = 161
4.1.7 메모리 맵 파일(memory-mapped files) = 165
4.2 디렉토리 = 166
4.2.1 계층 디렉토리 시스템 = 166
4.2.2 경로명(path name) = 168
4.2.3 디렉토리 오퍼레이션 = 170
4.3 파일 시스템 구현 = 171
4.3.1 파일 구현 = 171
4.3.2 디렉토리 구현 = 174
4.3.3 공유파일(shared files) = 177
4.3.4 디스크 공간 관리 = 180
4.3.5 파일 시스템 신뢰성 = 184
4.3.6 파일 시스템 성능 = 189
4.4 보안(security) = 192
4.4.1 보안 환경 = 192
4.4.2 잘 알려져 있는 보안 결함들 = 193
4.4.3 인터넷 웜(worm) = 196
4.4.4 일반적인 보안 침해 = 198
4.4.5 보안을 위한 설계 원칙 = 200
4.4.6 사용자 인증 = 201
4.5 보호 메커니즘(protection mechanisms) = 205
4.5.1 보호 도메인 = 205
4.5.2 접근제어 리스트(access control lists) = 208
4.5.3 자격(capabilities) = 210
4.5.4 보호 모델 = 211
4.5.5 커버트 채널 = 213
4.6 요약 = 215
5 입출력 = 219
5.1 입출력 하드웨어의 원리 = 219
5.1.1 입출력 장치 = 220
5.1.2 장치 제어기 = 221
5.1.3 직접 메모리 접근(DMA) = 223
5.2 입출력 소프트웨어 원리 = 225
5.2.1 입출력 소프트웨어의 목표 = 225
5.2.2 인터럽트 처리기 = 226
5.2.3 장치 드라이버 = 227
5.2.4 장치 독립 입출력 소프트웨어 = 228
5.2.5 사용자 영역 입출력 소프트웨어 = 230
5.3 디스크 = 232
5.3.1 디스크 하드웨어 = 232
5.3.2 디스크 암 스케줄링 알고리즘 = 232
5.3.3 오류처리 = 235
5.3.4 Track-at-a-Time 캐슁 = 237
5.3.5 RAM 디스크 = 237
5.4 클럭 = 238
5.4.1 클럭 하드웨어 = 238
5.4.2 클럭 소프트웨어 = 239
5.5 터미널 = 243
5.5.1 터미널 하드웨어 = 243
5.5.2 메모리 맵 터미널 = 245
5.5.3 입력 소프트웨어 = 247
5.5.4 출력 소프트웨어 = 252
5.6 요약 = 254
6 교착상태 = 259
6.1 자원 = 260
6.2 교착상태 = 261
6.2.1 교착상태의 조건 = 262
6.2.2 교착상태 모델링 = 262
6.3 Ostrich 알고리즘 = 265
6.4 교착상태 발견과 회복 = 266
6.4.1 각 유형이 단일 자원만을 보유할 때의 교착상태 발견 = 266
6.4.2 각 유형이 여러 자원을 보유할 때의 교착상태 발견 = 269
6.4.3 교착상태 회복 = 271
6.5 교착상태 회피(avoidance) = 273
6.5.1 자원궤도(resource trajectories) = 273
6.5.2 안전과 불안전(safe & unsafe) 상태 = 275
6.5.3 단일자원에 대한 은행원(banker) 알고리즘 = 276
6.5.4 다중자원에 대한 은행원 알고리즘 = 277
6.6 교착상태 예방(prevention) = 279
6.6.1 상호배제 조건의 부정 = 279
6.6.2 점유 및 대기(hold & wait)조건의 부정 = 280
6.6.3 비선점(no preemption) 조건의 부정 = 280
6.6.4 환형대기(circular wait)조건의 부정 = 281
6.7 그 밖의 문제들 = 282
6.7.1 2단계 잠금(two-phase locking) = 282
6.7.2 비자원(non-resource) 교착상태 = 282
6.7.3 기아(starvation) = 283
6.8 요약 = 283
7 사례연구 1 : UNIX = 287
7.1 UNIX의 역사 = 287
7.1.1 UNICS = 288
7.1.2 PDP-11 UNIX = 288
7.1.3 포터블 UNIX = 289
7.1.4 버클리 UNIX = 290
7.1.5 표준 UNIX = 290
7.2 UNIX의 개관 = 292
7.2.1 UNIX의 목표 = 293
7.2.2 인터페이스 = 293
7.2.3 로그인 = 294
7.2.4 UNIX 쉘 = 295
7.2.5 파일과 디렉토리 = 298
7.2.6 UNIX 유틸리티 프로그램 = 299
7.3 UNIX 기본 개념 = 300
7.3.1 프로세스 = 302
7.3.2 메모리 모델 = 306
7.3.3 파일 시스템 = 309
7.3.4 UNIX 입출력 = 313
7.4 UNIX 시스템호출 = 316
7.4.1 프로세스 관리 시스템호출 = 318
7.4.2 메모리 관리 시스템호출 = 321
7.4.3 파일과 디렉토리 시스템호출 = 321
7.4.4 입출력 시스템호출 = 323
7.5 UNIX 구현 = 324
7.5.1 UNIX의 프로세스 구현 = 324
7.5.2 UNIX의 메모리 관리 구현 = 328
7.5.3 UNIX의 파일시스템 구현 = 333
7.5.4 UNIX의 입출력 구현 = 337
7.6 요약 = 339
8 사례연구 2 : MS-DOS = 343
8.1 MS-DOS의 역사 = 343
8.1.1 IBM PC = 344
8.1.2 MS-DOS 버전 1.0 = 345
8.1.3 MS-DOS 버전 2.0 = 346
8.1.4 MS-DOS 버전 3.0 = 347
8.1.5 MS-DOS 버전 4.0 = 348
8.1.6 MS-DOS 버전 5.0 = 348
8.1.7 MS-DOS 버전 6.0 = 349
8.2 MS-DOS의 개관 = 350
8.2.1 MS-DOS의 사용 = 350
8.2.2 MS-DOS 쉘 = 352
8.2.3 MS-DOS의 구성 = 355
8.3 MS-DOS의 기본 개념 = 356
8.3.1 MS-DOS의 프로세스 = 356
8.3.2 MS-DOS 메모리 모델 = 361
8.3.3 MS-DOS 파일 시스템 = 370
8.3.4 MS-DOS에서의 입출력 = 372
8.4 MS-DOS 시스템호출 = 373
8.4.1 MS-DOS의 프로세스 관리 시스템호출 = 373
8.4.2 MS-DOS의 메모리 관리 시스템호출 = 375
8.4.3 MS-DOS의 파일·디렉토리 시스템호출 = 375
8.4.4 MS-DOS의 입출력 시스템호출 = 376
8.5 MS-DOS의 구현 = 376
8.5.1 MS-DOS의 프로세스 구현 = 378
8.5.2 MS-DOS 메모리 관리의 구현 = 379
8.5.3 MS-DOS 파일 시스템의 구현 = 381
8.5.4 MS-DOS 입출력의 구현 = 385
8.6 요약 = 387
제2부 : 분산운영체제 = 391
9 분산시스템 입문 = 393
9.1 분산시스템의 목적 = 394
9.1.1 분산시스템의 장점 = 394
9.1.2 독립적 PC에 대한 분산시스템의 장점 = 395
9.1.3 분산시스템의 단점 = 396
9.2 하드웨어 개념 = 397
9.2.1 버스형 다중처리기 = 400
9.2.2 스위치형 다중처리기 = 401
9.2.3 버스형 다중컴퓨터 = 403
9.2.4 스위치형 다중컴퓨터 =403
9.3 소프트웨어 개념 = 404
9.3.1 망 운영체제와 NFS = 405
9.3.2 순수(true) 분산시스템 = 415
9.3.3 다중처리기 시분할 시스템 = 416
9.4 설계 쟁점 = 419
9.4.1 투명성 = 419
9.4.2 융통성 = 421
9.4.3 신뢰성 = 423
9.4.4 성능 = 424
9.4.5 확장성 = 426
9.5 요약 = 428
10 분산시스템의 통신 = 431
10.1 계층 프로토콜 = 431
10.1.1 물리계층 = 434
10.1.2 데이터 링크계층 = 434
10.1.3 망 계층 = 435
10.1.4 트랜스포트 계층 = 436
10.1.5 세션계층 = 437
10.1.6 표현계층 = 437
10.1.7 응용계층 = 438
10.2 클라이언트/서버 모델 = 438
10.2.1 클라이언트와 서버 = 438
10.2.2 클라이언트와 서버 예 = 440
10.2.3 어드레싱(addressing) = 443
10.2.4 블록킹과 비블록킹 프리미티브 = 445
10.2.5 버퍼 및 비버퍼 프리미티브(bufferd and unbufferd primitives) = 448
10.2.6 신뢰적 및 비신뢰적 프리미티브(reliable and unreliable primitives) = 450
10.2.7 클라이언트/서버 모델의 구현 = 451
10.3 원격 프로시쥬어 호출(RPC) = 454
10.3.1 기본 RPC 오퍼레이션 = 454
10.3.2 매개변수 전달(parameter passing) = 457
10.3.3 동적 바인딩(dynamic binding) = 462
10.3.4 장애 발생시의 RPC 시맨틱스 = 465
10.3.5 구현 쟁점 = 469
10.3.6 문제 영역 = 476
10.4 그룹통신(group communication) = 479
10.4.1 그룹통신 소개 = 479
10.4.2 설계 쟁점 = 481
10.4.3 ISIS의 그룹통신 = 489
10.5 요약 = 494
11 분산시스템 동기화 = 499
11.1 클럭 동기화(clock synchronization) = 500
11.1.1 논리적 클럭(logical clock) = 501
11.1.2 물리적 클럭(physical clock) = 505
11.1.3 클럭 동기화 알고리즘 = 507
11.2 상호배제(mutual exclusion) = 513
11.2.1 중앙집중식 알고리즘(centralized algorithm) = 513
11.2.2 분산 알고리즘(distributed algorithm) = 514
11.2.3 토큰 링 알고리즘(token ring algorithm) = 518
11.2.4 세 알고리즘의 비교 = 519
11.3 선택 알고리즘(election algorithm) = 520
11.3.1 Bully 알고리즘 = 521
11.3.2 링 알고리즘 = 522
11.4 단위 트랜잭션(atomic transaction) = 523
11.4.1 단위 트랜잭션의 소개 = 524
11.4.2 트랜잭션 모델 = 525
11.4.3 구현 = 529
11.4.4 병행성 제어(concurrency control) = 533
11.5 분산시스템의 교착상태 = 537
11.5.1 분산 교착상태 발견(distributed deadlock detection) = 539
11.5.2 분산 교착상태 예방(distributed deadlock prevention) = 542
11.6 요약 = 545
12 분산시스템의 프로세스와 처리기 = 549
12.1 스레드(threads) = 549
12.1.1 스레드 소개 = 550
12.1.2 스레드 사용(thread usage) = 551
12.1.3 스레드 패키지 설계 쟁점 = 554
12.1.4 스레드 패키지 구현 = 558
12.1.5 스레드와 RPC = 562
12.1.6 스레드 패키지의 예 = 563
12.2 시스템 모델 = 567
12.2.1 워크스테이션 모델 = 567
12.2.2 휴면상태 워크스테이션의 이용 = 570
12.2.3 처리기 풀 모델 = 574
12.2.4 하이브리드 모델 = 578
12.3 처리기 할당 = 578
12.3.1 할당 모델 = 578
12.3.2 처리기 할당 알고리즘의 설계 쟁점 = 580
12.3.3 처리기 할당 알고리즘의 구현 쟁점 = 582
12.3.4 처리기 할당 알고리즘의 예 = 584
12.4 분산시스템의 스케줄링 = 590
12.5 요약 = 592
13 분산 파일 시스템 = 595
13.1 분산 파일 시스템 설계 = 596
13.1.1 파일 서비스 인터페이스 = 596
13.1.2 디렉토리 서버 인터페이스 = 598
13.1.3 파일공유 시맨틱스(semantics of file sharing) = 603
13.2 분산 파일 시스템의 구현 = 606
13.2.1 파일 사용 = 606
13.2.2 시스템 구조 = 608
13.2.3 캐슁 = 612
13.2.4 복제(replication) = 618
13.2.5 예 : AFS = 622
13.2.6 교훈 = 629
13.3 분산 파일 시스템의 경향 = 630
13.3.1 새로운 하드웨어 = 630
13.3.2 확장성 = 632
13.3.3 광역 네트워킹 = 633
13.3.4 이동 사용자(mobile user) = 634
13.3.5 결함허용 = 635
13.4 요약 = 635
14 사례 연구 4 : 아메바 = 639
14.1 아메바 소개 = 639
14.1.1 아메바의 역사 = 639
14.1.2 연구 목표 = 640
14.1.3 아메바 시스템 구조 = 641
14.1.4 아메바 마이크로 커널 = 643
14.1.5 아메바 서버 = 645
14.2 아메바의 객체와 자격 = 647
14.2.1 자 격 = 647
14.2.2 객체 보호 = 648
14.2.3 표준 오퍼레이션 = 650
14.3 아메바의 프로세스 관리 = 651
14.3.1 프로세스 = 651
14.3.2 스레드 = 654
14.4 아메바의 메모리 관리 = 655
14.4.1 세그먼트 = 655
14.4.2 사상된 세그먼트(mapped segments) = 656
14.5 아메바의 통신 = 657
14.5.1 RPC = 657
14.5.2 아메바의 그룹통신 = 661
14.5.3 FLIP = 670
14.6 아메바 서버 = 677
14.6.1 불릿서버(bullet server) = 677
14.6.2 디렉토리 서버 = 682
14.6.3 복제서버 = 687
14.6.4 실행서버 = 687
14.6.5 부트서버 = 689
14.6.6 TCP/IP 서버 = 689
14.6.7 기타 서버 = 690
14.7 요약 = 690
15 사례 연구 4 : 마하 = 693
15.1 마하 개요 = 693
15.1.1 마하 역사 = 693
15.1.2 마하 목표 = 695
15.1.3 마하 마이크로 커널 = 695
15.1.4 마하 BSD UNIX 서버 = 697
15.2 마하의 프로세스 관리 = 698
15.2.1 프로세스 = 698
15.2.2 스레드 = 701
15.2.3 스케줄링 = 704
15.3 마하 메모리 관리 = 707
15.3.1 가상 기억장치 = 708
15.3.2 메모리 공유 = 711
15.3.3 외부 메모리 관리자 = 715
15.3.4 마하의 분산 공유 메모리 = 718
15.4 마하 통신 = 720
15.4.1 포트 = 720
15.4.2 메시지 송수신 = 726
15.4.3 망 메시지 관리자 = 732
15.5 마하의 BSD UNIX 에뮬레이션 = 733
15.6 아메바와 마하의 비교 = 735
15.6.1 철학 = 736
15.6.2 객체(objects) = 737
15.6.3 프로세스 = 738
15.6.4 메모리 모델 = 738
15.6.5 통신 = 739
15.6.6 서버 = 741
15.7 요약 = 741
부록 : 추천 도서와 관계 문서 목록 = 745
찾아보기 = 771