| 000 | 01068camccc200301 k 4500 | |
| 001 | 000045506371 | |
| 005 | 20100807111940 | |
| 007 | ta | |
| 008 | 081202s2008 ulka b 001c kor | |
| 020 | ▼a 9788956744513: ▼c \30,000 | |
| 035 | ▼a (KERIS)BIB000011490453 | |
| 040 | ▼d 244007 ▼a 244007 ▼c 244007 ▼d 222001 ▼d 244002 | |
| 041 | 1 | ▼a kor ▼h eng |
| 082 | 0 4 | ▼a 005.133 ▼2 22 |
| 090 | ▼a 005.133 ▼b C110 2008z55 | |
| 100 | 1 | ▼a Hughes, Cameron , ▼d 1960- |
| 245 | 2 0 | ▼a (칠판 구조와 다중 에이전트 시스템 위주의 )C++ 병렬·분산 프로그래밍 / ▼d Cameron Hughes , ▼e Tracey Hughes 지음 ; ▼e 류광 옮김. |
| 246 | 1 9 | ▼a Parallel and distributed programming using C++ |
| 260 | ▼a 서울 : ▼b 정보문화사 , ▼c 2008. | |
| 300 | ▼a 795 p. : ▼b 삽도 ; ▼c 24 cm. | |
| 500 | ▼a 부록: A, UML 다이어그램. - B, 시스템 인터페이스 레퍼런스. | |
| 504 | ▼a 참고문헌(p. 773-775)및 색인 수록 | |
| 653 | ▼a 병렬프로그래밍 ▼a 데이타처리 ▼a C++ (프로그래밍 언어) | |
| 700 | 1 | ▼a Hughes, Tracey , ▼e 지음 |
| 700 | 1 | ▼a 류광 , ▼e 옮김. |
| 900 | 1 1 | ▼a 휴즈, 캐머론 |
| 900 | 1 1 | ▼a 휴즈, 트레이시 |
소장정보
| No. | 소장처 | 청구기호 | 등록번호 | 도서상태 | 반납예정일 | 예약 | 서비스 |
|---|---|---|---|---|---|---|---|
| No. 1 | 소장처 세종학술정보원/과학기술실(5층)/ | 청구기호 005.133 C110 2008z55 | 등록번호 151269399 (9회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
컨텐츠정보
책소개
이 책 "C++ 병렬.분산 프로그래밍"은 다중 프로세서 컴퓨터의 장점을 취할 수 있는 프로그램의 구축 방법을 자세히 소개한다. 병렬 가상 기계의 프로그래밍을 위한 간단한 접근 방식을 제시하며, 클러스터 응용프로그램 개발의 기초들도 설명한다. 다중 스레드 프로그래밍에 대한 이해하기 쉬운 개요를 통해서, 이 책은 네트워크 상에서 협동적으로 문제를 풀고 작업을 수행하는 소프트웨어 구성요소들을 작성하는 방법도 보여준다.
이 책에 포함된 내용 :
- 에이전트와 칠판 아키텍처를 이용해서 병렬 프로그래밍을 좀 더 쉽게 만드는 방법을 보여준다.
- 다중 태스킹 및 다중 스레딩에 대한 객체지향적 접근방식을 제시한다.
- 병렬 프로그래밍 또는 분산 프로그래밍이 요구되는 설계를 UML을 이용해 문서화하는 방법을 보여준다.
- Pthreads 라이브러리에 대한 새로운 POSIX/UNIX IEEE 표준을 수록했다.
정보제공 :
저자소개
Cameron Hughes(지은이)
<Linux Rapid Application Development>
Tracey Hughes(지은이)
<Linux Rapid Application Development>
류광(옮긴이)
도널드 커누스 교수의 《컴퓨터 프로그래밍의 예술》 시리즈를 비롯해 다양한 IT 전문서를 번역한 전문 번역가이다. 생성형 AI 관련 번역서로는 《마스터링 트랜스포머》 《실전! RAG 기반 생성형 AI 개발》 《LLM 인 프로덕션》 《AI 에이전트 인 액션》 등이 있다. 개인 웹사이트 류광의 번역 이야기(https://occamsrazr.net)와 IT 및 게임 개발 정보 공유 사이트 GpgStudy.com(https://gpgstudy.com)을 운영한다.
목차
목차 제1장 동시적 프로그래밍의 즐거움 = 21 1.1 동시성이란 무엇인가? = 23 1.1.1 동시성 달성을 위한 기본적인 접근방식 두 가지 = 25 1.2 병렬 프로그래밍의 이점 = 27 1.2.1 가장 단순한 병렬 모형: PRAM = 28 1.2.2 가장 간단한 병렬 분류법 = 29 1.3 분산 프로그래밍의 이점 = 30 1.3.1 가장 단순한 분산 프로그래밍 모형 = 31 1.3.2 다중 에이전트(동위간) 분산 모형 = 32 1.4 필요한 최소의 노력 = 33 1.4.1 분해 = 33 1.4.2 통신 = 34 1.4.3 동기화 = 35 1.5 소프트웨어 동시성의 기본 계층들 = 35 1.5.1 명령 수준의 동시성 = 35 1.5.2 루틴 수준의 동시성 = 36 1.5.3 객체 수준의 동시성 = 36 1.5.4 응용프로그램의 동시성 = 36 1.6 C++은 병렬성을 위한 키워드를 제공하지 않는다 = 37 1.6.1 C++로 병렬성을 구현하는 데 사용할 수 있는 수단들 = 38 1.6.2 MPI 표준 = 39 1.6.3 PVM: 클러스터 프로그래밍의 한 표준 = 39 1.6.4 CORBA 표준 = 40 1.6.5 표준에 기초한 라이브러리 구현들 = 41 1.7 병렬 및 분산 프로그래밍을 위한 프로그래밍 환경들 = 42 요약 - 동시성을 향해 = 42 제2장 병렬 및 분산 프로그래밍의 어려움 = 45 2.1 패러다임의 대전환 = 47 2.2 중재 문제 = 51 2.3 하드웨어가 고장나거나 소프트웨어가 종료되기도 한다 = 57 2.4 과도한 병렬화나 분산이 부정적인 결과를 내기도 한다 = 58 2.5 적합한 아키텍처를 선택하려면 연구가 필요하다 = 58 2.6 다른 종류의 검사 및 디버깅 기법들이 필요하다 = 60 2.7 병렬 또는 분산 설계의 의사소통이 필요하다 = 61 요약 = 62 제3장 C++ 프로그램을 여러 개의 태스크들로 분할하기 = 63 3.1 프로세스의 정의 = 65 3.1.1 두 종류의 프로세스 = 65 3.1.2 프로세스 제어 블록 = 66 3.2 프로세스의 해부 = 67 3.3 프로세스 상태 = 71 3.4 프로세스 스케줄링 = 74 3.4.1 스케줄링 정책 = 75 3.4.2 ps 유틸리티 사용법 = 77 3.4.3 프로세스 우선순위 설정 및 조회 = 80 3.5 문맥 전환 = 83 3.6 프로세스 생성 = 83 3.6.1 프로세스들의 부모-자식 관계 = 84 3.6.1.1 pstree 유틸리티 = 87 3.6.2 시스템 함수 fork() = 88 3.6.3 exec류 시스템 함수들 = 88 3.6.3.1 execl() 함수들 = 90 3.6.3.2 execv() 함수들 = 91 3.6.3.3 exec()류 함수들에 대한 제약 파악 = 92 3.6.3.4 환경 변수 읽고 쓰기 = 93 3.6.4 system() 함수로 프로세스 생성하기 = 94 3.6.5 POSIX 함수들로 프로세스 생성하기 = 95 3.6.6 프로세스 관리 함수들로 부모 및 자식 프로세스 식별하기 = 101 3.7 프로세스 종료하기 = 102 3.7.1 시스템 함수 exit(), kill(), abort() = 103 3.8 프로세스 자원 = 104 3.8.1 자원의 종류 = 107 3.8.2 자원 한계를 설정하는 POSIX 함수들 = 108 3.9 비동기 프로세스와 동기 프로세스 = 110 3.9.1 fork(), exec(), system(), posix_spawn() 함수를 이용한 동기 및 비동기 프로세스 생성 = 113 3.9.2 wait() 함수 호출 = 113 3.10 프로그램을 여러 태스크들로 분할하기 = 116 3.10.1 함수 또는 객체에 의한 프로세스 생성 = 124 요약 = 125 제4장 C++ 프로그램을 여러 개의 스레드들로 분할하기 = 127 4.1 스레드의 정의 = 129 4.1.1 스레드 문맥 요구사항 = 130 4.1.2 스레드와 프로세스의 비교 = 132 4.1.2.1 주소 공간 공유 = 132 4.1.2.2 다른 스레드의 제어 = 133 4.1.3 스레드의 장점 = 134 4.1.3.1 좀 더 가벼운 문맥 전환 = 134 4.1.3.2 더 나은 산출량 = 134 4.1.3.3 동시에 수행되는 부분들 사이의 좀 더 간단한 의사소통 = 135 4.1.3.4 프로그램 구조의 단순화 = 136 4.1.4 스레드의 단점 = 136 4.1.4.1 스레드는 프로세스의 자료를 망치기 쉽다 = 136 4.1.4.2 잘못된 스레드 하나가 프로그램 전체를 죽일 수 있다 = 137 4.1.4.3 스레드는 다른 프로그램에서 재사용할 수 없다 = 137 4.2 스레드의 해부 = 138 4.2.1 스레드 특성들 = 140 4.3 스레드 스케줄링 = 143 4.3.1 스레드 상태 = 144 4.3.2 스케줄링과 스레드 경쟁 범위 = 145 4.3.3 스케줄링 정책과 우선순위 = 146 4.3.3.1 스레드 우선순위의 변경 = 148 4.4 스레드 자원 = 149 4.5 스레드 모형 = 150 4.5.1 위임 모형 = 152 4.5.2 동급간 모형 = 153 4.5.3 파이프라인 모형 = 154 4.5.4 생산자-소비자 모형 = 155 4.5.5 스레드 모형의 SPMD와 MPMD = 156 4.6 Pthreads 라이브러리 소개 = 157 4.7 간단한 다중 스레드 프로그램의 해부 = 158 4.7.1 다중 스레드 프로그램의 컴파일과 링크 = 160 4.8 Pthreads 라이브러리로 스레드 만들기 = 161 4.8.1 스레드 ID 얻기 = 165 4.8.2 스레드 결합 = 165 4.8.3 탈착된 스레드 생성 = 166 4.8.4 Pthreads 특성 객체 = 167 4.8.4.1 Pthreads 특성 객체를 이용해서 탈착된 스레드 만들기 = 168 4.9 스레드 관리 = 170 4.9.1 스레드의 종료 = 171 4.9.1.1 취소 지점 = 174 4.9.1.2 종료 이전의 마무리 작업 = 180 4.9.2 스레드 스택 관리 = 182 4.9.3 스레드 스케줄링 정책과 우선순위 설정 = 186 4.9.3.1 스레드의 경쟁 범위 설정 = 191 4.9.4 sysconf() 함수 = 191 4.9.5 임계 영역의 관리 = 194 4.10 스레드 안전성과 라이브러리 = 201 4.11 프로그램을 여러 스레드들로 분할하기 = 204 4.11.1 위임 모형 = 204 4.11.2 동급간 모형 = 209 4.11.3 파이프라인 모형 = 210 4.11.4 생산자-소비자 모형 = 211 4.11.5 다중 스레드 객체 만들기 = 213 요약 = 215 제5장 동시에 수행되는 태스크들의 동기화 = 217 5.1 수행 순서의 중재 = 220 5.1.1 동기화되는 태스크들 사이의 관계 = 221 5.1.2 시작-시작 관계 = 222 5.1.3 완료-시작 관계 = 223 5.1.4 시작-완료 관계 = 223 5.1.5 완료-완료 관계 = 223 5.2 자료 접근의 동기화 = 224 5.2.1 PRAM 모형 = 226 5.2.1.1 동시 및 독점 메모리 접근 = 226 5.3 세마포와 동기화 메커니즘들 = 228 5.3.1 세마포 연산 = 229 5.3.2 뮤텍스 세마포 = 230 5.3.2.1 뮤텍스 특성 객체 = 232 5.3.2.2 뮤텍스 세마포를 이용한 임계 영역 보호 = 236 5.3.3 읽기-쓰기 자물쇠 = 238 5.3.3.1 읽기-쓰기 자물쇠를 이용한 접근 정책 구현 = 239 5.3.4 조건 변수 = 242 5.3.4.1 조건 변수를 이용한 동기화 관계의 관리 = 245 5.4 동기화: 객체지향적 접근 = 248 요약 = 248 제6장 PVM을 이용한 C++ 병렬 프로그래밍 = 251 6.1 PVM이 지원하는 고전적인 병렬성 모형들 = 253 6.2 C++용 PVM 라이브러리 = 255 6.2.1 C++/PVM 프로그램의 컴파일과 링크 = 260 6.2.2 PVM 프로그램을 독립적으로 실행 = 260 6.2.2.1 PVM 콘솔로 PVM 프로그램을 실행 = 261 6.2.2.2 XPVM을 이용해서 PVM 프로그램을 실행 = 261 6.2.3 PVM의 운용에 필요한 설정 사항들 = 262 6.2.4 C++ 런타임 라이브러리와 PVM 라이브러리의 결합 = 265 6.2.5 PVM 태스크들의 구성 = 266 6.2.5.1 PVM과 C++을 이용한 SPMD(SIMD) 모형의 구현 = 267 6.2.5.2 PVM과 C++을 이용한 MPMD(MIMD) 모형의 구현 = 275 6.3 PVM의 기본적인 작동 방식 = 278 6.3.1 프로세스 관리 및 제어 함수들 = 280 6.3.2 메시지 포장과 전송 = 282 6.4 PVM 태스크에서 표준 입력(stdin)과 표준 출력(stdout) 사용하기 = 290 6.4.1 자식 태스크의 표준 출력 가로채기 = 291 요약 = 291 제7장 오류 처리, 예외, 소프트웨어 신뢰성 = 293 7.1 소프트웨어 신뢰성이란? = 296 7.2 소프트웨어 계층들과 하드웨어 구성요소들의 실패 = 298 7.3 결함의 정의는 소프트웨어 명세에 따라 다르다 = 300 7.4 결함과 예외의 구분 = 300 7.5 소프트웨어 신뢰성을 위한 간단한 계획 하나 = 303 7.5.1 계획 A: 재개 모형, 계획 B: 종료 모형 = 304 7.6 오류 처리에서 map 객체 활용하기 = 305 7.7 C++의 예외 처리 메커니즘 = 309 7.7.1 C++ 표준 예외 클래스 = 310 7.7.1.1 runtime_error 클래스들 = 310 7.7.1.2 logic_error 클래스들 = 312 7.7.1.3 새 예외 클래스의 파생 = 312 7.7.1.4 예외 클래스가 예외를 던지지 않게 하는 방법 = 314 7.8 사건 다이어그램, 논리 표현식, 논리 다이어그램 = 315 요약 = 318 제8장 C++을 이용한 분산 객체지향 프로그래밍 = 321 8.1 작업의 분해 및 캡슐화 = 324 8.1.1 분산 객체들 사이의 통신 = 327 8.1.2 지역 객체와 원격 객체의 상호작용 동기화 = 328 8.1.3 분산 환경에서의 오류 및 예외 처리 = 328 8.2 다른 주소 공간에 있는 객체에 접근하기 = 329 8.2.1 원격 객체에 대한 IOR 접근 = 332 8.2.2 ORB = 332 8.2.3 IDL과 CORBA 객체 = 336 8.3 기본적인 CORBA 소비자 프로그램의 해부 = 341 8.4 CORBA 생산자 프로그램의 해부 = 343 8.5 CORBA 응용프로그램의 기본 청사진 = 345 8.5.1 IDL 컴파일러 = 348 8.5.2 원격 객체의 IOR 얻기 = 350 8.6 명명 서비스 = 351 8.6.1 명명 서비스 활용 및 명명 문맥의 생성 = 355 8.6.2 명명 서비스 소비자/클라이언트 = 358 8.7 객체 적응자 = 362 8.8 구현 저장소와 인터페이스 저장소 = 364 8.9 CORBA를 이용한 간단한 분산 웹 서비스 = 365 8.10 교역 서비스 = 367 8.11 클라이언트/서버 패러다임 = 369 요약 = 371 제9장 템플릿과 MPI를 이용한 SPMD와 MPMD = 373 9.1 MPI를 위한 작업 분할 구조 = 376 9.1.1 등급에 따른 태스크 차별화 = 377 9.1.2 통신자를 기준으로 한 태스크 그룹 분류 = 379 9.1.3 MPI 태스크의 해부 = 382 9.2 템플릿 함수를 이용한 MPI 태스크 구현 = 384 9.2.1 템플릿을 이용해서 서로 다른 형식의 자료를 다루는 SPMD 구현 = 384 9.2.2 다형성을 이용한 MPMD의 구현 = 386 9.2.3 함수 객체를 이용한 MPMD 구현 = 392 9.3 MPI 통신의 단순화 = 394 9.3.1 MPI 통신을 위한〈〈,〉〉연산자의 중복적재 = 398 요약 = 402 제10장 동시ㆍ분산 시스템 설계의 시각화 = 403 10.1 구조의 시각화 = 405 10.1.1 클래스와 객체 = 406 10.1.1.1 특성과 서비스 명세 = 409 10.1.1.2 특성과 서비스의 순서 = 413 10.1.1.3 템플릿 클래스 = 414 10.1.2 클래스와 객체의 관계 표현 = 417 10.1.2.1 인터페이스 클래스 = 421 10.1.3 상호작용적인 객체들의 조직화 = 422 10.2 동시적 행동의 시각화 = 424 10.2.1 협동 객체 = 425 10.2.1.1 프로세스와 스레드 = 427 10.2.1.2 다수의 제어 흐름들과 통신들의 표현 = 429 10.2.2 객체들 사이의 메시지 시퀀스 = 431 10.2.3 객체의 활동 = 434 10.2.4 상태기계 = 438 10.2.4.1 동시적인 하위상태들 = 442 10.2.5 배치 다이어그램 = 444 10.3 시스템 전체의 시각화 = 445 10.3.1 시스템 배치의 시각화 = 446 10.3.2 시스템 아키텍처의 시각화 = 447 요약 = 449 제11장 동시성을 지원하는 구성요소의 설계 = 451 11.1 인터페이스 클래스의 활용 = 455 11.2 객체지향적 뮤텍스와 인터페이스 클래스 = 461 11.2.1 동시성을 지원하는 덜 두터운 인터페이스 = 462 11.3 스트림 비유의 유지 = 471 11.3.1 PVM 스트림에 대한〈〈,〉〉연산자의 중복적재 = 474 11.4 PVM 스트림에 사용할 사용자 정의 클래스의 설계 = 478 11.5 저수준 구축 요소로서의 객체지향적 파이프와 FIFO = 481 11.5.1 파일 서술자를 이용해서 파이프를 iostream 객체에 붙이기 = 486 11.5.2 ostream_iterator를 이용한 익명 파이프 접근 = 491 11.5.3 FIFO(명명된 파이프), iostream, ostream_iterator 클래스들 = 500 11.5.3.1 FIFO 인터페이스 클래스 = 506 11.6 동시성을 지원하는 프레임워크 클래스 구성요소 = 507 요약 = 513 제12장 에이전트 지향적 아키텍처의 구현 = 515 12.1 에이전트란 무엇인가? = 517 12.1.1 에이전트의 첫 번째 정의 = 518 12.1.2 에이전트의 종류 = 519 12.1.3 객체와 에이전트의 차이 = 520 12.2 에이전트 지향적 프로그래밍이란 무엇인가? = 524 12.2.1 분산 프로그래밍에서 에이전트가 유용한 이유 = 524 12.2.2 에이전트와 병렬 프로그래밍 = 526 12.3 에이전트의 기본 구성요소 = 528 12.3.1 인지적 자료구조 = 529 12.3.1.1 추론 메서드 = 531 12.4 C++로 에이전트 구현하기 = 537 12.4.1 명제 자료형식과 믿음 자료구조 = 537 12.4.2 에이전트 클래스 = 543 12.4.2.1 에이전트 루프 = 546 12.4.2.2 에이전트의 추론 메서드 = 547 12.4.3 간단한 자율성 = 557 12.5 다중 에이전트 시스템 = 559 요약 = 560 제13장 PVM, 스레드, C++ 구성요소를 이용한 칠판 아키텍처 = 561 13.1 칠판 모형 = 563 13.2 여러 가지 칠판 구조화 방식 = 567 13.3 지식원의 해부 = 570 13.4 칠판 제어 전략 = 572 13.5 CORBA 객체를 이용한 칠판 구현 = 576 13.5.1 CORBA 칠판의 예 = 576 13.5.2 black_board 인터페이스 클래스의 구현 = 579 13.5.3 칠판 생성자에서 지식원들을 생성, 실행 = 582 13.5.3.1 PVM 태스크를 이용한 지식원 실행 = 583 13.5.3.2 칠판과 지식원들을 연결하기 = 588 13.5.3.3 posix_spawn 함수를 이용한 지식원 실행 = 590 13.6 전역 객체를 이용한 칠판 구현 = 595 13.7 Pthreads를 이용한 지식원 활성화 = 598 요약 = 601 부록 A UML 다이어그램 = 603 A.1 클래스 다이어그램과 객체 다이어그램 = 605 A.2 상호작용 다이어그램 = 607 A.2.1 협동 다이어그램 = 607 A.2.2 시퀀스 다이어그램 = 607 A.2.3 활동 다이어그램 = 609 A.3 상태 다이어그램 = 613 A.4 패키지 다이어그램 = 614 부록 B 시스템 인터페이스 레퍼런스 = 615 참고문헌 = 773 찾아보기 = 776
