목차 일부
용어 대역표 ... 19
시작하면서 ... 23
PART 1 기초
Chapter 1 프로그램에 끼친 기술의 영향
1.1 용어의 변화 ... 30
1.2 시간과 속도 ... 31
1.3 멀티프로그래밍과 시분할 ... 33
1.4 애플리케이션에서의 병행성 ... 35
1.5 보안과 장애 허용성 ... ...
더보기
목차 전체
용어 대역표 ... 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
더보기 닫기