장바구니 담기 close

장바구니에 상품을 담았습니다.

C++ 병렬 분산 프로그래밍

C++ 병렬 분산 프로그래밍

  • CAMERON HUGHES
  • |
  • 정보문화사
  • |
  • 2008-11-20 출간
  • |
  • 795페이지
  • |
  • 187 X 235 mm
  • |
  • ISBN 9788956744513
판매가

30,000원

즉시할인가

27,000

카드할인

0원(즉시할인 0%)

적립금

1,500원 적립(5%적립)

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

추가혜택

네이버페이 무조건 1%적립+ 추가 1%적립

수량
+ -
총주문금액
27,000

이 상품은 품절된 상품입니다

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

목차

제1장 동시적 프로그래밍의 즐거움
1.1 동시성이란 무엇인가?
1.1.1 동시성 달성을 위한 기본적인 접근방식 두 가지
1.2 병렬 프로그래밍의 이점
1.2.1 가장 단순한 병렬 모형: PRAM
1.2.2 가장 간단한 병렬 분류법
1.3 분산 프로그래밍의 이점
1.3.1 가장 단순한 분산 프로그래밍 모형
1.3.2 다중 에이전트(동위간) 분산 모형
1.4 필요한 최소의 노력
1.4.1 분해
1.4.2 통신
1.4.3 동기화
1.5 소프트웨어 동시성의 기본 계층들
1.5.1 명령 수준의 동시성
1.5.2 루틴 수준의 동시성
1.5.3 객체 수준의 동시성
1.5.4 응용프로그램의 동시성
1.6 C++은 병렬성을 위한 키워드를 제공하지 않는다
1.6.1 C++로 병렬성을 구현하는 데 사용할 수 있는 수단들
1.6.2 MPI 표준
1.6.3 PVM: 클러스터 프로그래밍의 한 표준
1.6.4 CORBA 표준
1.6.5 표준에 기초한 라이브러리 구현들
1.7 병렬 및 분산 프로그래밍을 위한 프로그래밍 환경들
요약 - 동시성을 향해

제2장 병렬 및 분산 프로그래밍의 어려움
2.1 패러다임의 대전환
2.2 중재 문제
2.3 하드웨어가 고장나거나 소프트웨어가 종료되기도 한다
2.4 과도한 병렬화나 분산이 부정적인 결과를 내기도 한다
2.5 적합한 아키텍처를 선택하려면 연구가 필요하다
2.6 다른 종류의 검사 및 디버깅 기법들이 필요하다
2.7 병렬 또는 분산 설계의 의사소통이 필요하다
요약

제3장 C++ 프로그램을 여러 개의 태스크들로 분할하기
3.1 프로세스의 정의
3.1.1 두 종류의 프로세스
3.1.2 프로세스 제어 블록
3.2 프로세스의 해부
3.3 프로세스 상태
3.4 프로세스 스케줄링
3.4.1 스케줄링 정책
3.4.2 ps 유틸리티 사용법
3.4.3 프로세스 우선순위 설정 및 조회
3.5 문맥 전환
3.6 프로세스 생성
3.6.1 프로세스들의 부모-자식 관계
3.6.1.1 pstree 유틸리티
3.6.2 시스템 함수 fork()
3.6.3 exec류 시스템 함수들
3.6.3.1 execl() 함수들
3.6.3.2 execv() 함수들
3.6.3.3 exec()류 함수들에 대한 제약 파악
3.6.3.4 환경 변수 읽고 쓰기
3.6.4 system() 함수로 프로세스 생성하기
3.6.5 POSIX 함수들로 프로세스 생성하기
3.6.6 프로세스 관리 함수들로 부모 및 자식 프로세스 식별하기
3.7 프로세스 종료하기
3.7.1 시스템 함수 exit(), kill(), abort()
3.8 프로세스 자원
3.8.1 자원의 종류
3.8.2 자원 한계를 설정하는 POSIX 함수들
3.9 비동기 프로세스와 동기 프로세스
3.9.1 fork(), exec(), system(), posix_spawn() 함수를 이용한 동기 및 비동기 프로세스 생성
3.9.2 wait() 함수 호출
3.10 프로그램을 여러 태스크들로 분할하기
3.10.1 함수 또는 객체에 의한 프로세스 생성
요약

제4장 C++ 프로그램을 여러 개의 스레드들로 분할하기
4.1 스레드의 정의
4.1.1 스레드 문맥 요구사항
4.1.2 스레드와 프로세스의 비교
4.1.2.1 주소 공간 공유
4.1.2.2 다른 스레드의 제어
4.1.3 스레드의 장점
4.1.3.1 좀 더 가벼운 문맥 전환
4.1.3.2 더 나은 산출량
4.1.3.3 동시에 수행되는 부분들 사이의 좀 더 간단한 의사소통
4.1.3.4 프로그램 구조의 단순화
4.1.4 스레드의 단점
4.1.4.1 스레드는 프로세스의 자료를 망치기 쉽다
4.1.4.2 잘못된 스레드 하나가 프로그램 전체를 죽일 수 있다
4.1.4.3 스레드는 다른 프로그램에서 재사용할 수 없다
4.2 스레드의 해부
4.2.1 스레드 특성들
4.3 스레드 스케줄링
4.3.1 스레드 상태
4.3.2 스케줄링과 스레드 경쟁 범위
4.3.3 스케줄링 정책과 우선순위
4.3.3.1 스레드 우선순위의 변경
4.4 스레드 자원
4.5 스레드 모형
4.5.1 위임 모형
4.5.2 동급간 모형
4.5.3 파이프라인 모형
4.5.4 생산자-소비자 모형
4.5.5 스레드 모형의 SPMD와 MPMD
4.6 Pthreads 라이브러리 소개
4.7 간단한 다중 스레드 프로그램의 해부
4.7.1 다중 스레드 프로그램의 컴파일과 링크
4.8 Pthreads 라이브러리로 스레드 만들기
4.8.1 스레드 ID 얻기
4.8.2 스레드 결합
4.8.3 탈착된 스레드 생성
4.8.4 Pthreads 특성 객체
4.8.4.1 Pthreads 특성 객체를 이용해서 탈착된 스레드 만들기
4.9 스레드 관리
4.9.1 스레드의 종료
4.9.1.1 취소 지점
4.9.1.2 종료 이전의 마무리 작업
4.9.2 스레드 스택 관리
4.9.3 스레드 스케줄링 정책과 우선순위 설정
4.9.3.1 스레드의 경쟁 범위 설정
4.9.4 sysconf() 함수
4.9.5 임계 영역의 관리
4.10 스레드 안전성과 라이브러리
4.11 프로그램을 여러 스레드들로 분할하기
4.11.1 위임 모형
4.11.2 동급간 모형
4.11.3 파이프라인 모형
4.11.4 생산자-소비자 모형
4.11.5 다중 스레드 객체 만들기
요약

제5장 동시에 수행되는 태스크들의 동기화
5.1 수행 순서의 중재
5.1.1 동기화되는 태스크들 사이의 관계
5.1.2 시작-시작 관계
5.1.3 완료-시작 관계
5.1.4 시작-완료 관계
5.1.5 완료-완료 관계
5.2 자료 접근의 동기화
5.2.1 PRAM 모형
5.2.1.1 동시 및 독점 메모리 접근
5.3 세마포와 동기화 메커니즘들
5.3.1 세마포 연산
5.3.2 뮤텍스 세마포
5.3.2.1 뮤텍스 특성 객체
5.3.2.2 뮤텍스 세마포를 이용한 임계 영역 보호
5.3.3 읽기-쓰기 자물쇠
5.3.3.1 읽기-쓰기 자물쇠를 이용한 접근 정책 구현
5.3.4 조건 변수
5.3.4.1 조건 변수를 이용한 동기화 관계의 관리
5.4 동기화: 객체지향적 접근
요약

제6장 PVM을 이용한 C++ 병렬 프로그래밍
6.1 PVM이 지원하는 고전적인 병렬성 모형들
6.2 C++용 PVM 라이브러리
6.2.1 C++/PVM 프로그램의 컴파일과 링크
6.2.2 PVM 프로그램을 독립적으로 실행
6.2.2.1 PVM 콘솔로 PVM 프로그램을 실행
6.2.2.2 XPVM을 이용해서 PVM 프로그램을 실행
6.2.3 PVM의 운용에 필요한 설정 사항들
6.2.4 C++ 런타임 라이브러리와 PVM 라이브러리의 결합
6.2.5 PVM 태스크들의 구성
6.2.5.1 PVM과 C++을 이용한 SPMD(SIMD) 모형의 구현
6.2.5.2 PVM과 C++을 이용한 MPMD(MIMD) 모형의 구현
6.3 PVM의 기본적인 작동 방식
6.3.1 프로세스 관리 및 제어 함수들
6.3.2 메시지 포장과 전송
6.4 PVM 태스크에서 표준 입력(stdin)과 표준 출력(stdout) 사용하기
6.4.1 자식 태스크의 표준 출력 가로채기
요약

제7장 오류 처리, 예외, 소프트웨어 신뢰성
7.1 소프트웨어 신뢰성이란?
7.2 소프트웨어 계층들과 하드웨어 구성요소들의 실패
7.3 결함의 정의는 소프트웨어 명세에 따라 다르다
7.4 결함과 예외의 구분
7.5 소프트웨어 신뢰성을 위한 간단한 계획 하나
7.5.1 계획 A: 재개 모형, 계획 B: 종료 모형
7.6 오류 처리에서 map 객체 활용하기
7.7 C++의 예외 처리 메커니즘
7.7.1 C++ 표준 예외 클래스
7.7.1.1 runtime_error 클래스들
7.7.1.2 logic_error 클래스들
7.7.1.3 새 예외 클래스의 파생
7.7.1.4 예외 클래스가 예외를 던지지 않게 하는 방법
7.8 사건 다이어그램, 논리 표현식, 논리 다이어그램
요약

제8장 C++을 이용한 분산 객체지향 프로그래밍
8.1 작업의 분해 및 캡슐화
8.1.1 분산 객체들 사이의 통신
8.1.2 지역 객체와 원격 객체의 상호작용 동기화
8.1.3 분산 환경에서의 오류 및 예외 처리
8.2 다른 주소 공간에 있는 객체에 접근하기
8.2.1 원격 객체에 대한 IOR 접근
8.2.2 ORB
8.2.3 IDL과 CORBA 객체
8.3 기본적인 CORBA 소비자 프로그램의 해부
8.4 CORBA 생산자 프로그램의 해부
8.5 CORBA 응용프로그램의 기본 청사진
8.5.1 IDL 컴파일러
8.5.2 원격 객체의 IOR 얻기
8.6 명명 서비스
8.6.1 명명 서비스 활용 및 명명 문맥의 생성
8.6.2 명명 서비스 소비자/클라이언트
8.7 객체 적응자
8.8 구현 저장소와 인터페이스 저장소
8.9 CORBA를 이용한 간단한 분산 웹 서비스
8.10 교역 서비스
8.11 클라이언트/서버 패러다임
요약

제9장 템플릿과 MPI를 이용한 SPMD와 MPMD
9.1 MPI를 위한 작업 분할 구조
9.1.1 등급에 따른 태스크 차별화
9.1.2 통신자를 기준으로 한 태스크 그룹 분류
9.1.3 MPI 태스크의 해부
9.2 템플릿 함수를 이용한 MPI 태스크 구현
9.2.1 템플릿을 이용해서 서로 다른 형식의 자료를 다루는 SPMD 구현
9.2.2 다형성을 이용한 MPMD의 구현
9.2.3 함수 객체를 이용한 MPMD 구현
9.3 MPI 통신의 단순화
9.3.1 MPI 통신을 위한 <<, >> 연산자의 중복적재
요약

제10장 동시·분산 시스템 설계의 시각화
10.1 구조의 시각화
10.1.1 클래스와 객체
10.1.1.1 특성과 서비스 명세
10.1.1.2 특성과 서비스의 순서
10.1.1.3 템플릿 클래스
10.1.2 클래스와 객체의 관계 표현
10.1.2.1 인터페이스 클래스
10.1.3 상호작용적인 객체들의 조직화
10.2 동시적 행동의 시각화
10.2.1 협동 객체
10.2.1.1 프로세스와 스레드
10.2.1.2 다수의 제어 흐름들과 통신들의 표현
10.2.2 객체들 사이의 메시지 시퀀스
10.2.3 객체의 활동
10.2.4 상태기계
10.2.4.1 동시적인 하위상태들
10.2.5 배치 다이어그램
10.3 시스템 전체의 시각화
10.3.1 시스템 배치의 시각화
10.3.2 시스템 아키텍처의 시각화
요약

제11장 동시성을 지원하는 구성요소의 설계
11.1 인터페이스 클래스의 활용
11.2 객체지향적 뮤텍스와 인터페이스 클래스
11.2.1 동시성을 지원하는 덜 두터운 인터페이스
11.3 스트림 비유의 유지
11.3.1 PVM 스트림에 대한 <<, >> 연산자의 중복적재
11.4 PVM 스트림에 사용할 사용자 정의 클래스의 설계
11.5 저수준 구축 요소로서의 객체지향적 파이프와 FIFO
11.5.1 파일 서술자를 이용해서 파이프를 iostream 객체에 붙이기
11.5.2 ostream_iterator를 이용한 익명 파이프 접근
11.5.3 FIFO(명명된 파이프), iostream, ostream_iterator 클래스들
11.5.3.1 FIFO 인터페이스 클래스
11.6 동시성을 지원하는 프레임워크 클래스 구성요소
요약

제12장 에이전트 지향적 아키텍처의 구현
12.1 에이전트란 무엇인가?
12.1.1 에이전트의 첫 번째 정의
12.1.2 에이전트의 종류
12.1.3 객체와 에이전트의 차이
12.2 에이전트 지향적 프로그래밍이란 무엇인가?
12.2.1 분산 프로그래밍에서 에이전트가 유용한 이유
12.2.2 에이전트와 병렬 프로그래밍
12.3 에이전트의 기본 구성요소
12.3.1 인지적 자료구조
12.3.1.1 추론 메서드
12.4 C++로 에이전트 구현하기
12.4.1 명제 자료형식과 믿음 자료구조
12.4.2 에이전트 클래스
12.4.2.1 에이전트 루프
12.4.2.2 에이전트의 추론 메서드
12.4.3 간단한 자율성
12.5 다중 에이전트 시스템
요약

제13장 PVM, 스레드, C++ 구성요소를 이용한 칠판 아키텍처
13.1 칠판 모형
13.2 여러 가지 칠판 구조화 방식
13.3 지식원의 해부
13.4 칠판 제어 전략
13.5 CORBA 객체를 이용한 칠판 구현
13.5.1 CORBA 칠판의 예
13.5.2 black_board 인터페이스 클래스의 구현
13.5.3 칠판 생성자에서 지식원들을 생성, 실행
13.5.3.1 PVM 태스크를 이용한 지식원 실행
13.5.3.2 칠판과 지식원들을 연결하기
13.5.3.3 posix_spawn 함수를 이용한 지식원 실행
13.6 전역 객체를 이용한 칠판 구현
13.7 Pthreads를 이용한 지식원 활성화
요약

부록 A UML 다이어그램
A.1 클래스 다이어그램과 객체 다이어그램
A.2 상호작용 다이어그램
A.2.1 협동 다이어그램
A.2.2 시퀀스 다이어그램
A.2.3 활동 다이어그램
A.3 상태 다이어그램
A.4 패키지 다이어그램

부록 B 시스템 인터페이스 레퍼런스
참고문헌
찾아보기

도서소개

병렬 프로그래밍에 대한 하나의 아키텍처적 접근방식을 제시하는 ?C++ 병렬?분산 프로그래밍?은 컴퓨터 프로그래머, 소프트웨어 개발자, 설계자, 연구자, 소프트웨어 아키텍트는 물론 전산학 학생들에게도 많은 도움을 제시할 것이다.

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.