목차
용어 대역표 ... 19
시작하면서 ... 23
PART 1 기초
   Chapter 1 프로그램에 끼친 기술의 영향
      1.1 용어의 변화 ... 30
      1.2 시간과 속도 ... 31
      1.3 멀티프로그래밍과 시분할 ... 33
      1.4 애플리케이션에서의 병행성 ... 35
      1.5 보안과 장애 허용성 ... 40
      1.6 침입을 위한 버퍼 오버플로우 ... 42
      1.7 UNIX 표준 ... 47
      1.8 읽어볼 만한 자료들 ... 49
   Chapter 2 프로그램, 프로세스, 쓰레드
      2.1 프로그램이 프로세스로 되는 방법 ... 52
      2.2 쓰레드와 실행 흐름 ... 53
      2.3 프로그램 이미지의 배치도 ... 54
      2.4 라이브러리 함수 호출 ... 57
      2.5 함수의 리턴 값과 에러 ... 61
      2.6 인자 배열 ... 63
      2.7 쓰레드 안전적 함수 ... 72
      2.8 정적변수의 사용 ... 75
      2.9 정적 객체의 구조 ... 76
      2.10 프로세스 환경 ... 84
      2.11 프로세스의 종료 ... 88
      2.12 연습문제 : env 유틸리티 ... 91
      2.13 연습문제 : 메시지 로깅 ... 92
      2.14 읽어볼 만한 자료들 ... 94
   Chapter 3 UNIX의 프로세스
      3.1 프로세스 구별 ... 96
      3.2 프로세스 상태 ... 98
      3.3 UNIX 프로세스의 생성과 fork ... 101
      3.4 wait 함수 ... 109
      3.5 exec 함수 ... 118
      3.6 백그라운드 프로세스와 데몬 ... 126
      3.7 크리티컬 섹션 ... 129
      3.8 연습문제 : 프로세스 체인 ... 130
      3.9 연습문제 : 프로세스 팬 ... 132
      3.10 읽어볼 만한 자료들 ... 133
   Chapter 4 UNIX I/O
      4.1 장치 용어 ... 136
      4.2 읽기와 쓰기 ... 136
      4.3 파일 열고 닫기 ... 148
      4.4 select 함수 ... 155
      4.5 poll 함수 ... 166
      4.6 파일의 표현 ... 169
      4.7 파일과 재지향 ... 182
      4.8 파일 제어 ... 185
      4.9 연습문제 : 원자성 로깅 ... 189
      4.10 연습문제 : 도구 cat ... 196
      4.11 읽어볼 만한 자료들 ... 198
   Chapter 5 파일과 디렉토리
      5.1 UNIX 파일 시스템 탐색 ... 200
      5.2 디렉토리 접근 ... 207
      5.3 UNIX 파일 시스템 구현 ... 215
      5.4 하드 링크와 심볼릭 링크 ... 220
      5.5 연습문제 : which 명령어 ... 232
      5.6 연습문제 : 비프하기(biffing) ... 233
      5.7 연습문제 : 뉴스 biff ... 237
      5.8 연습문제 : 디렉토리 탐색하기 ... 239
      5.9 읽어볼 만한 자료들 ... 241
   Chapter 6 UNIX 특수 파일
      6.1 파이프 ... 244
      6.2 파이프라인 ... 248
      6.3 FIFO ... 254
      6.4 파이프와 클라이언트-서버 모델 ... 259
      6.5 터미널 제어 ... 267
      6.6 오디오 장치 ... 281
      6.7 연습문제 : 오디오 ... 288
      6.8 연습문제 : 배리어 ... 290
      6.9 연습문제 : stty 명령어 ... 292
      6.10 연습문제 : 클라이언트-서버 재구현 ... 293
      6.11 읽어볼 만한 자료들 ... 293
   Chapter 7 프로젝트 : 토큰 링(Token Ring)
      7.1 링 구조 ... 296
      7.2 링 형태 ... 297
      7.3 링의 탐색 ... 305
      7.4 간단한 통신 ... 307
      7.5 토큰 기반의 상호배제 ... 309
      7.6 투표 기반의 상호배제 ... 310
      7.7 익명 링에서의 대표 선출 ... 311
      7.8 토큰 링과 통신 ... 314
      7.9 파이프라인 방식의 전처리기 ... 316
      7.10 병렬 링 알고리즘 ... 319
      7.11 유연한 링 ... 324
      7.12 읽어볼 만한 자료들 ... 325
PART 2 비동기 이벤트
   Chapter 8 시그널
      8.1 시그널의 기본 정의 ... 330
      8.2 시그널의 생성 ... 331
      8.3 시그널 마스크와 시그널 세트 다루기 ... 337
      8.4 시그널 수용(catching)과 무시(Ignoring) - sigaction ... 345
      8.5 시그널 대기하기 - pause, sigsuspend 그리고 sigwait ... 353
      8.6 시그널 다루기 : 에러와 비동기-시그널 안전성 ... 366
      8.7 siglongjmp와 sigsetjmp를 이용한 프로그램 제어 ... 370
      8.8 비동기 I/O 프로그래밍 ... 372
      8.9 연습문제 : 통계 출력하기 ... 387
      8.10 연습문제 : 느린 장치 스풀링(spooling) ... 387
      8.11 읽어볼 만한 자료들 ... 388
   Chapter 9 시간과 타이머
      9.1 POSIX 시간 ... 390
      9.2 sleep 함수 ... 406
      9.3 POSIX:XSI 구간 타이머 ... 409
      9.4 실시간 시그널 ... 414
      9.5 POSIX:TMR 구간 타이머 ... 420
      9.6 타이머 편차(Drift), 오버런(Overruns) 그리고 절대 시간 ... 426
      9.7 읽어볼 만한 자료들 ... 439
   Chapter 10 프로젝트 : 가상 타이머
      10.1 프로젝트 개요 ... 442
      10.2 간단한 타이머 ... 444
      10.3 다섯 개의 타이머 중에서 한 개의 타이머 설정하기 ... 447
      10.4 다중 타이머 사용하기 ... 460
      10.5 더 정확하고 강력한 다중 타이머의 구현 ... 469
      10.6 POSIX:TMR 타이머의 구현 ... 472
      10.7 mycrom, 소규모 cron 장치 ... 473
      10.8 읽어볼 만한 자료들 ... 473
   Chapter 11 프로젝트 : 쉘 만들기
      11.1 간단한 쉘 만들기 ... 476
      11.2 재지향 ... 482
      11.3 파이프라인 ... 484
      11.4 포그라운드 상태의 시그널 처리 ... 490
      11.5 프로세스 그룹, 세션 그리고 제어 터미널 ... 497
      11.6 ush의 백그라운드 프로세스 ... 504
      11.7 작업 제어 ... 513
      11.8 ush의 작업 제어 ... 518
      11.9 읽어볼 만한 자료들 ... 522
PART 3 병행성
   Chapter 12 POSIX 쓰레드
      12.1 동기 부여하기 : 파일 디스크립터 모니터링하기 ... 526
      12.2 여러 파일 디스크립터를 모니터링하기 위해 쓰레드 사용하기 ... 528
      12.3 쓰레드 관리 ... 532
      12.4 쓰레드-안전성 ... 554
      12.5 유저 쓰레드와 커널 쓰레드 ... 556
      12.6 쓰레드 속성 ... 559
      12.7 연습문제 : 병렬 파일 복사 ... 569
      12.8 읽어볼 만한 자료들 ... 571
   Chapter 13 쓰레드 동기화
      13.1 POSIX 동기화 함수 ... 574
      13.2 뮤텍스 잠금 ... 575
      13.3 최대 한 번 그리고 적어도 한 번 수행하기 ... 591
      13.4 조건변수 ... 596
      13.5 시그널 핸들링과 쓰레드 ... 606
      13.6 독자와 필자 ... 613
      13.7 strerror_r 함수의 구현 ... 619
      13.8 데드락과 그 외의 성가신 문제들 ... 621
      13.9 연습문제 : 다중 배리어 ... 623
      13.10 읽어볼 만한 자료들 ... 623
   Chapter 14 크리티컬 섹션과 세마포어
      14.1 크리티컬 섹션 다루기 ... 626
      14.2 세마포어 ... 630
      14.3 POSIX:SEM 언네임드 세마포어 ... 633
      14.4 POSIX:SEM 세마포어 명령 ... 636
      14.5 POSIX:SEM 네임드 세마포어 ... 645
      14.6 연습문제 : 라이센스 관리자 ... 652
      14.7 읽어볼 만한 자료들 ... 655
   Chapter 15 POSIX IPC
      15.1 POSIX:XSI IPC ... 658
      15.2 POSIX:XSI 세마포어 집합 ... 661
      15.3 POSIX:XSI 공유 메모리 ... 675
      15.4 POSIX:XSI 메시지 큐 ... 687
      15.5 연습문제 : POSIX 언네임드 세마포어 ... 697
      15.6 연습문제 : POSIX 네임드 세마포어 ... 698
      15.7 연습문제 : 공유 메모리를 사용하여 파이프를 구현하기 ... 699
      15.8 연습문제 : 메시지 큐를 이용하여 파이프 구현하기 ... 703
      15.9 읽어볼 만한 자료들 ... 703
   Chapter 16 프로젝트 : 생산자 소비자 동기화
      16.1 생산자 - 소비자 문제 ... 706
      16.2 뮤텍스 잠금을 통해 보호되는 유한 버퍼 ... 708
      16.3 세마포어를 사용한 버퍼 구현 ... 712
      16.4 간단한 생산자 - 소비자 문제에 대한 소개 ... 719
      16.5 조건변수를 사용한 유한 버퍼 구현 ... 723
      16.6 완료 조건을 갖는 버퍼 ... 725
      16.7 병렬 파일 복사 ... 735
      16.8 쓰레드 기반 프린트 서버 ... 739
      16.9 읽어볼 만한 자료들 ... 744
   Chapter 17 프로젝트 : NTPVM(Not Too Parallel Virtual Machine)
      17.1 PVM의 역사, 용어, 아키텍처 ... 746
      17.2 Not Too Parallel Virtual Machine ... 748
      17.3 NTPVM 프로젝트 개요 ... 751
      17.4 디스패처의 I/O 및 테스트 ... 757
      17.5 입력이 없는 단일 태스크 ... 767
      17.6 단일 태스크 ... 769
      17.7 다중 태스크 ... 772
      17.8 패킷 통신, 브로드캐스트, 배리어 ... 773
      17.9 종료와 시그널 ... 774
      17.10 순차적인 메시지 전달 ... 775
      17.11 읽어볼 만한 자료들 ... 775
PART 4 통신
   Chapter 18 연결 지향 통신
      18.1 클라이언트-서버 모델 ... 780
      18.2 통신 채널 ... 781
      18.3 연결형 서버 전략들 ... 785
      18.4 범용 인터넷 통신 인터페이스 ... 789
      18.5 다양한 서버 전략을 위한 UICI의 설계 ... 793
      18.6 UICI 클라이언트 ... 797
      18.7 UICI의 소켓 구현 버전 ... 805
      18.8 호스트 이름과 IP 주소 ... 819
      18.9 쓰레드-안전성을 보장하는 UICI ... 830
      18.10 연습문제 : Ping 서버 ... 833
      18.11 연습문제 : 오디오 전송 ... 835
      18.12 읽어볼 만한 자료들 ... 837
   Chapter 19 프로젝트 : WWW 재지향
      19.1 월드 와이드 웹 ... 840
      19.2 URL(Uniform Resource Locators) ... 841
      19.3 HTTP 입문 ... 843
      19.4 웹 통신 유형 ... 849
      19.5 단일 연결 상황의 통과 지점 모니터링 ... 857
      19.6 터널 서버의 구현 ... 860
      19.7 테스트를 위한 서버 드라이버 ... 861
      19.8 HTTP 헤더 해석하기 ... 863
      19.9 간단한 프록시 서버 ... 866
      19.10 프록시 모니터 ... 867
      19.11 프록시 캐시 ... 872
      19.12 관문(portal)을 위한 게이트웨이 ... 873
      19.13 부하 분산을 위한 게이트웨이 ... 873
      19.14 검시(Postmortem) ... 874
      19.15 읽어볼 만한 자료들 ... 880
   Chapter 20 비연결형 통신과 멀티캐스트
      20.1 비연결형 통신의 소개 ... 882
      20.2 비연결형 통신을 위한 간단한 인터페이스 ... 884
      20.3 간단한-요청 프로토콜 ... 888
      20.4 요청-응답 프로토콜 ... 894
      20.5 타임아웃과 재전송 기능을 가진 요청-응답 프로토콜 ... 902
      20.6 요청-응답-확인 프로토콜 ... 908
      20.7 UICI UDP 구현 ... 910
      20.8 UDP와 TCP의 비교 ... 920
      20.9 멀티캐스트 ... 922
      20.10 연습문제 : UDP 포트 서버 ... 927
      20.11 연습문제 : 무경계 파일 서버 ... 928
      20.12 읽어볼 만한 자료들 ... 931
   Chapter 21 프로젝트 : 인터넷 라디오
      21.1 프로젝트 개요 ... 934
      21.2 오디오 장치 시뮬레이션 ... 936
      21.3 하나의 오디오 방송과 UDP를 이용한 단일 수신기 구현 ... 937
      21.4 여러 개의 오디오 방송 프로그램과 여러 개의 수신기를 지원하는 UDP 구현 ... 950
      21.5 라디오 방송을 위한 UDP 구현 ... 951
      21.6 멀티캐스트를 이용한 라디오 방송의 구현 ... 954
      21.7 TCP 구현의 차이점 ... 955
      21.8 브라우저를 통하여 스트리밍 오디오 수신하기 ... 961
      21.9 읽어볼 만한 자료들 ... 966
   Chapter 22 프로젝트 : 서버의 성능
      22.1 서버 성능의 비용 ... 970
      22.2 서버 구조 ... 971
      22.3 프로젝트 개요 ... 976
      22.4 단일-클라이언트 드라이버 ... 976
      22.5 다중-클라이언트 드라이버 ... 981
      22.6 Thread-per-request와 Process-per-request의 구현 ... 984
      22.7 쓰레드 작업자 풀 전략 ... 985
      22.8 유한 버퍼를 사용하는 쓰레드 작업자 풀 ... 986
      22.9 프로세스 작업자 풀 전략 ... 986
      22.10 디스크 I/O의 영향 ... 987
      22.11 성능 연구 ... 992
      22.12 보고서 작성하기 ... 1004
      22.13 읽어볼 만한 자료들 ... 1008
PART 5 부록
   Appendix A UNIX 기초 ... 1011
   Appendix B 재시작 라이브러리 ... 1035
   Appendix C UICI의 구현 ... 1049
   Appendix D 로깅 함수 ... 1069
   Appendix E POSIX Extensions ... 1091
참고문헌 ... 1095
찾아보기 ... 1106
닫기