저자

수잰J.매슈스,티아뉴홀,케빈C.웹

저자:수잰J.매슈스(SuzanneJ.Matthews)

웨스트포인트미국육군사관학교의컴퓨터과학과부교수로텍사스A&M대학교에서컴퓨터과학박사학위를받았다.병렬컴퓨팅과단일보드컴퓨터,컴퓨터과학교육을연구하고있다.



저자:티아뉴홀(TiaNewhall)

스와스모어대학교의컴퓨터과학과교수로위스콘신대학교에서컴퓨터과학박사학위를받았다.병렬및분산시스템을연구하고있다.



저자:케빈C.웹(KevinC.Webb)

스와스모어대학교의컴퓨터공학과부교수로UC샌디에이고에서컴퓨터공학박사학위를받았다.네트워크와분산시스템,컴퓨터과학교육을연구하고있다.



역자:김모세

대학졸업후소프트웨어엔지니어,소프트웨어품질엔지니어,애자일코치등다양한부문에서소프트웨어개발에참여했다.재미있는일,나와조직이성장하도록돕는일에보람을느껴2019년부터번역을시작했다.옮긴책으로는『인간vs.AI정규표현식문제풀이대결』(제이펍,2023),『실무에바로쓰는일잘러의마이크로카피작성법』(제이펍,2023),『애자일개발의기술2/e』(에이콘,2023),『타입스크립트,리액트,Next.js로배우는실전웹애플리케이션개발』(위키북스,2023),『플레이어를생각하는게임UI디자인노하우』(한빛미디어,2023)등이있다.이책은옮긴이소개를작성하는시점으로44번째번역서이다.



역자:권성환

TPM과애자일코치역할을주로하고있다.

코딩에소질이없는것같아웹디자인을취미로학부시절을보냈는데,별안간네트워크엔지니어로업을시작했다.그마저도회사사정으로소프트웨어엔지니어로역할이변경되어서모바일,프런트엔드,백엔드,아키텍트,PM,PO를거쳐TPM과애자일코치의역할에이르렀다.정착하지못해떠돌았던실패에가까운시간이좋은자양분이되어다양한역할자와편안하게소통할수있는넓고얕은지식을가진TPM겸애자일코치가될수있었다.

경험하고배우고나누는일을기꺼이즐기기에이번책의공동번역으로참여했다.

목차


Chapter0시작하며
_0.1컴퓨터시스템이란무엇인가?
_0.2현대의컴퓨터시스템은어떤모습일까?
_0.3이책에서배울내용
_0.4이책을시작하기에앞서
__0.4.1리눅스,C및GNU컴파일러
__0.4.2기타표기법과설명선

PARTIC프로그래밍언어

Chapter1C프로그래밍기초
_1.1C프로그래밍시작하기
__1.1.1C프로그램의컴파일과실행
__1.1.2변수와C의숫자타입
__1.1.3C의데이터타입
_1.2입력과출력
__1.2.1printf
__1.2.2scanf
_1.3조건문과반복문
__1.3.1C의부울값
__1.3.2C의반복문
_1.4함수
__1.4.1스택
_1.5배열과문자열
__1.5.1배열소개
__1.5.2배열접근방법
__1.5.3배열과함수
__1.5.4문자열과C문자열라이브러리소개
_1.6구조체
__1.6.1구조체타입의정의
__1.6.2구조체타입의변수선언
__1.6.3필드값접근
__1.6.4함수에구조체전달
_1.7정리

Chapter2C프로그래밍심화
_2.1프로그램메모리와범위
_2.2C의포인터변수
__2.2.1포인터변수
_2.3포인터와함수
_2.4동적메모리할당
__2.4.1힙메모리
__2.4.2malloc과free
__2.4.3동적할당된배열과문자열
__2.4.4힙메모리와함수를위한포인터
_2.5C의배열
__2.5.11차원배열
__2.5.22차원배열
_2.6문자열과문자열라이브러리
__2.6.1정적으로할당된문자열(문자배열)
__2.6.2동적으로문자열할당
__2.6.3C문자열과문자를조작하기위한라이브러리
_2.7C구조체
__2.7.1Cstruct타입리뷰
__2.7.2포인터와구조체
__2.7.3구조체의포인터필드
__2.7.4구조체배열
__2.7.5자기참조구조체
_2.8C의입출력(표준및파일)
__2.8.1표준입출력
__2.8.2파일입출력
__2.8.3C에서텍스트파일사용
__2.8.4stdio.h의표준및파일I/O함수
_2.9일부고급C기능
__2.9.1switch구문
__2.9.2커맨드라인인수
__2.9.3void*타입과타입리캐스팅
__2.9.4포인터산술
__2.9.5C라이브러리:사용,컴파일,연결
__2.9.6나만의C라이브러리작성및사용
__2.9.7C를어셈블리로컴파일
_2.10정리

Chapter3C디버깅도구
_3.1GDB로디버깅
__3.1.1GDB시작하기
__3.1.2GDB예시
_3.2GDB명령어의세부사항
__3.2.1GDB의키보드단축키
__3.2.2자주쓰는GDB명령어
_3.3발그린드로메모리디버깅
__3.3.1힙메모리접근오류가있는예시프로그램
__3.3.2Memcheck를사용하는방법
_3.4고급GDB기능
__3.4.1GDB와make
__3.4.2실행중인프로세스에GDB연결
__3.4.3포크에서프로세스따라가기
__3.4.4시그널제어
__3.4.5DDD설정및버그수정
_3.5어셈블리코드디버깅
__3.5.1GDB를사용한바이너리코드검사
__3.5.2DDD를사용한어셈블리디버깅
__3.5.3GDB어셈블리디버깅명령어및예시
__3.5.4어셈블리디버깅에서자주사용하는명령어요약
_3.6GDB로멀티스레드프로그램디버깅
__3.6.1GDB와Pthreads
__3.6.2GDB스레드관련명령어
__3.6.3예시
_3.7정리

PARTII컴퓨터시스템기초

Chapter4바이너리와데이터표현
_4.1숫자의밑과부호가없는정수
__4.1.110진수
__4.1.2부호가없는2진수
__4.1.316진수
__4.1.4저장공간제한
_4.2진수변환
__4.2.12진수와16진수변환
__4.2.210진수로변환
__4.2.310진수를변환
_4.3부호가있는2진수정수
__4.3.1부호가있는수
__4.3.22의보수
_4.42진정수산술연산
__4.4.1덧셈
__4.4.2뺄셈
__4.4.3곱셈과나눗셈
_4.5정수오버플로
__4.5.1총주행거리계비유
__4.5.22진수정수오버플로
__4.5.3오버플로요약
__4.5.4오버플로에따른결과
_4.6비트와이즈연산자
__4.6.1비트와이즈AND
__4.6.2비트와이즈OR
__4.6.3비트와이즈XOR
__4.6.4비트와이즈NOT
__4.6.5비트시프트
_4.7정수바이트오더
_4.82진수에서의실수
__4.8.1고정소수점표현
__4.8.2부동소수점표현
__4.8.3올림의영향
_4.9정리

Chapter5컴퓨터아키텍처
_5.1현대컴퓨팅아키텍처의기원
__5.1.1튜링머신
__5.1.2초기의전기컴퓨터
__5.1.3그래서폰노이만은무엇을알았나?
_5.2폰노이만아키텍처
__5.2.1CPU
__5.2.2처리장치
__5.2.3제어장치
__5.2.4기억장치
__5.2.5입력및출력(I/O)장치
__5.2.6폰노이만머신
_5.3논리게이트
__5.3.1기본논리게이트
__5.3.2그외논리게이트
_5.4회로
__5.4.1산술및논리회로
__5.4.2제어회로
__5.4.3저장회로
_5.5프로세서만들기:종합하기
__5.5.1ALU
__5.5.2레지스터파일
__5.5.3CPU
_5.6프로세서의프로그램명령실행
__5.6.1클럭주도실행
__5.6.2정리:완전한컴퓨터에서의CPU
_5.7파이프라이닝:CPU를더빠르게
_5.8고급파이프라인명령고려사항
__5.8.1데이터해저드
__5.8.2제어해저드
_5.9미래를내다보기:오늘날의CPU
__5.9.1명령수준병렬화
__5.9.2멀티코어및하드웨어멀티스레딩
__5.9.3예시프로세서
_5.10정리

PARTIII어셈블리프로그래밍

Chapter6C아래로:어셈블리에뛰어들기
_6.1어셈블리학습의이점
__6.1.1가치있는프로그램의세부사항을감추는고수준의추상화
__6.1.2리소스가제한돼컴파일러를사용할수없는컴퓨팅시스템
__6.1.3취약점분석
__6.1.4시스템수준소프트웨어에서중요한코드순서
_6.2후속장들에서학습할내용

Chapter764비트X86어셈블리(X86-64)
_7.1어셈블리살펴보기:기본
__7.1.1레지스터
__7.1.2고급레지스터표기
__7.1.3명령구조
__7.1.4피연산자가포함된예시
__7.1.5명령접미사
_7.2흔히사용하는명령
__7.2.1한층구체적인예시
_7.3산술명령
__7.3.1비트시프트명령
__7.3.2비트와이즈명령
__7.3.3부하효과주소명령
_7.4조건부제어와반복문
__7.4.1사전준비
__7.4.2어셈블리에서의if구문
__7.4.3어셈블리에서의for반복문
_7.5어셈블리에서의함수
__7.5.1함수매개변수
__7.5.2예시추적
__7.5.3main추적
_7.6재귀
__7.6.1애니메이션:콜스택변화
_7.7배열
_7.8행렬
__7.8.1연속적인2차원배열
__7.8.2비연속적행렬
_7.9어셈블리에서의구조체
__7.9.1데이터정렬과구조체
_7.10실제사례:버퍼오버플로
__7.10.1유명한버퍼오버플로악용사례
__7.10.2살펴보기:추측게임
__7.10.3자세히살펴보기
__7.10.4버퍼오버플로:첫번째시도
__7.10.5현명한버퍼오버플로:두번째시도
__7.10.6버퍼오버플로에서보호하기

Chapter832비트X86어셈블리(Ia32)

Chapter9ARM어셈블리

Chapter10어셈블리핵심교훈
_10.1공통특징
_10.2더읽어보기

PARTIV성능최적화및관리

Chapter11저장소와메모리계층
_11.1메모리계층
_11.2저장소
__11.2.11차저장소
__11.2.22차저장소
_11.3지역성
__11.3.1코드에서의지역성예
__11.3.2지역성부터캐시까지
__11.3.3시간적지역성
__11.3.4공간적지역성
_11.4CPU캐시
__11.4.1다이렉트맵트캐시
__11.4.2캐시실패및어소시에이티브설계
__11.4.3셋어소시에이티브캐시
_11.5캐시분석과발그린드
__11.5.1이론적분석과벤치마킹
__11.5.2실세계에서의캐시분석:캐시그린드
_11.6예측하기:멀티코어프로세서에서의캐싱
__11.6.1캐시일관성
__11.6.2MSI프로토콜
__11.6.3캐시일관성프로토콜구현
__11.6.4멀티코어캐싱과관련된더많은정보
_11.7정리

Chapter12코드최적화
_12.1코드최적화첫단계:코드프로파일링
__12.1.1콜그린드를사용한프로파일링
__12.1.2루프불변코드이동
_12.2그외컴파일러최적화
__12.2.1함수인라이닝
__12.2.2루프언롤링
_12.3메모리고려사항
__12.3.1루프상호교환
__12.3.2지역성을개선하는컴파일러최적화:분열과융합
__12.3.3massif를사용한메모리프로파일링
_12.4핵심교훈
__12.4.1좋은데이터구조와알고리즘선택하기
__12.4.2가능한표준라이브러리함수사용하기
__12.4.3느낌이아닌데이터에기반한최적화
__12.4.4복잡한코드는여러함수로분할하기
__12.4.5코드가독성을우선시하기
__12.4.6메모리사용에주의하기
__12.4.7컴파일러는계속해서개선되고있다

Chapter13운영체제
_13.1OS의동작과실행
__13.1.1OS부팅
__13.1.2인터럽트와트랩
_13.2프로세스
__13.2.1멀티프로그래밍과컨텍스트스위칭
__13.2.2프로세스상태
__13.2.3프로세스생성및파기
__13.2.4fork
__13.2.5exec
__13.2.6exit와wait
_13.3가상메모리
__13.3.1메모리주소
__13.3.2가상주소를물리주소로변환
__13.3.3페이징
__13.3.4메모리효율성
_13.4프로세스간통신
__13.4.1시그널
__13.4.2메시지전달
__13.4.3공유메모리
_13.5정리및기타OS기능

PARTV병렬프로그래밍

Chapter14멀티코어시대의공유메모리활용
_14.1멀티코어시스템프로그래밍
__14.1.1멀티코어시스템이프로세스실행에미치는영향
__14.1.2스레드를사용한프로세스실행가속화
_14.2첫번째멀티스레드프로그램작성
__14.2.1스레드생성과조인
__14.2.2스레드함수
__14.2.3코드실행
__14.2.4스칼라곱셈다시살펴보기
__14.2.5스칼라곱셈계산:다중인수
_14.3스레드동기화
__14.3.1상호배제
__14.3.2세마포어
__14.3.3기타동기화구조체
_14.4병렬프로그램의성능측정
__14.4.1병렬프로그램의성능
__14.4.2더살펴볼주제
_14.5캐시일관성과거짓공유
__14.5.1멀티코어시스템에서의캐시
__14.5.2거짓공유
__14.5.3거짓공유수정
_14.6스레드안전성
__14.6.1스레드안전성문제해결
_14.7OpenMP를사용한암시적스레딩
__14.7.1프라그마
__12.7.2헬로스레딩:OpenMP버전
__14.7.3더복잡한예시:OpenMP에서의CountSort
__14.7.4OpenMP에대해자세히알아보기
_14.8정리
__14.8.1주요요점
__14.8.2더읽어보기

Chapter15기타병렬시스템및병렬프로그래밍모델
_15.1이종컴퓨팅:하드웨어가속기,범용GPU컴퓨팅,CUDA
__15.1.1하드웨어가속기
__15.1.2GPU아키텍처개요
__15.1.3GPGPU컴퓨팅
__15.1.4CUDA
__15.1.5기타GPGPU프로그래밍언어
_15.2분산메모리시스템,메시지전달및MPI
__15.2.1병렬및분산처리모델
__15.2.2통신프로토콜
__15.2.3메시지전달인터페이스
__15.2.4MPI헬로월드
__15.2.5MPI스칼라곱셈
__15.2.6분산시스템의과제
_15.3엑사스케일그이상:클라우드컴퓨팅,빅데이터,그리고컴퓨팅의미래
__15.3.1클라우드컴퓨팅
__15.3.2맵리듀스
__15.3.3미래를바라보며:기회와도전

출판사 서평

효율적인프로그램을추구하는개발자를위한컴퓨터과학안내서

이책은컴퓨터가프로그램을실행하는방식을이해할수있도록컴퓨터시스템입문또는컴퓨터구조와같은컴퓨터과학의중급주제를주로다룬다.C언어로프로그래밍하는표면부터회로가돌아가는깊은바닥까지한꺼풀씩벗겨보며효율적인프로그램을설계하는데꼭필요한컴퓨터과학지식만을정리해소개한다.컴퓨터를여러계층으로나누어살펴보며컴퓨터가회로에서프로그램을실행하는방법과프로그램의성능평가방법,병렬프로그램작성법같은의문을해결하면더효율적인프로그램을만들수있게될것이다.

대상독자

-내가짠프로그램이어떻게실행되는지궁금한프로그래밍입문자
-시스템프로그래밍,OS등전공관련배경지식이맛보고싶은대학생
-더효율적인프로그램을설계하고싶은주니어개발자

배우는내용

-고수준언어부터바이너리표현,회로단계까지컴퓨터가프로그램을실행하는방법
-C와어셈블리언어로프로그래밍하는방법
-컴퓨터시스템이프로그램성능에미치는영향
-pthread를사용하여공유메모리병렬프로그램을구현하는방법