Great Code Vol 1 (위대한 코드의 시작 컴퓨팅 머신의 이해 | 2 판)

Great Code Vol 1 (위대한 코드의 시작 컴퓨팅 머신의 이해 | 2 판)

$41.82
Description
소프트웨어 개발에 필요한 컴퓨팅 머신의 작동 원리와 상호작용 방식을 정보 표현 방식, 주요 연산 장치 및 주변 장치의 작동 방식에 대한 전문적인 설명과 시각화 자료, 다양한 레벨의 실습용 코드로 이해하기 쉽게 설명한다. 정보 표현 방식으로서 비트 논리 연산, 부동소수점수, 문자 데이터를 소개하고, CPU 및 메모리, 입출력 장치, 주변 장치버스, 파일시스템 등 컴퓨팅 머신과의 상호작용 방식을 설명한다.
저자

랜달하이드

RandallHyde
『TheArtofAssemblyLanguage』,『WriteGreatCode』시리즈,『Using6502AssemblyLanguage』와『P-Source』의저자이고,『TheWaiteGroup’sMASM6.0Bible』의공저자다.지난40여년간원자력발전기,교통신호시스템,다양한소비자용전자제품을위한임베디드소프트웨어및하드웨어개발도구를만들어왔고,포모나에위치한캘리포니아주립폴리테크닉대학교(CaliforniaStatePolytechnicUniversity)와리버사이드에위치한캘리포니아대학교(UniversityofCalifornia)에서컴퓨터과학을가르쳐왔다.
프로그래밍과소프트웨어엔지니어링에대한다양한자료를제공하는웹사이트(www.randallhyde.com)를운영한다.

목차

1장.탁월한코드작성을위한준비
1.1『WriteGreatCode』시리즈의개요
1.2이책에서다루는내용
1.3이책의활용을위한준비
1.4탁월한코드의특징
1.5이책에실린예제의실행환경
1.6이책의추가적인활용팁
1.7참고자료

2장.컴퓨터의수표기법
2.1수란무엇인가
2.2수
2.2.110진위치표기법
2.2.2기수
2.2.32진수체계
2.2.416진수체계
2.2.58진수체계
2.3숫자와문자의상호변환
2.4내부숫자표현법
2.4.1비트
2.4.2비트문자열
2.5부호있는수와부호없는수
2.62진수의유용한속성
2.7데이터타입통일을위한부호확장,0확장,부호축소
2.8포화
2.92진화10진표기법
2.10고정소수점표기
2.11배율조정수포맷
2.12유리수표기법
2.13참고자료

3장.2진법계산및비트연산
3.12진수와16진수를이용한산술연산
3.1.12진수의덧셈
3.1.22진수의뺄셈
3.1.32진수의곱셈
3.1.42진수의나눗셈
3.2비트논리연산
3.32진수와비트문자열의논리연산
3.4비트연산의유용한속성
3.4.1AND를이용한비트문자열검증
3.4.2AND를이용한비트세트의0포함여부검증
3.4.32진문자열의비트세트비교
3.4.4AND를이용한모듈로n카운터구현
3.5이동연산과회전연산
3.6비트필드와데이터묶음
3.7데이터묶기와데이터묶음풀기
3.8참고자료

4장.부동소수점연산
4.1부동소수점연산의개요
4.2IEEE부동소수점형식
4.2.1단정밀도부동소수점형식
4.2.2복정밀도부동소수점형식
4.2.3확장정밀도부동소수점형식
4.2.4쿼드정밀도부동소수점형식
4.3부동소수점수의정규화와비정규화
4.4라운딩
4.5특수한부동소수점값
4.6부동소수점예외규칙
4.7부동소수점연산방식의이해
4.7.1이번절에서사용하는부동소수점형식
4.7.2부동소수점덧셈및뺄셈
4.7.3부동소수점곱셈및나눗셈
4.8참고자료

5장.문자데이터의활용
5.1문자데이터
5.1.1ASCII문자셋
5.1.2IBM의EBCDIC문자셋
5.1.3더블바이트문자셋
5.1.4유니코드문자셋
5.1.5유니코드코드포인트
5.1.6유니코드코드플레인
5.1.7서로게이트코드포인트
5.1.8글리프,문자,그래핌클러스터
5.1.9유니코드노멀과캐노니컬동등
5.1.10유니코드인코딩
5.1.11유니코드연결문자
5.2문자열
5.2.1문자열형식
5.2.2문자열유형:정적,유사동적,동적문자열
5.2.3문자열참조카운터
5.2.4델파이문자열
5.2.5커스텀문자열
5.3문자셋데이터타입
5.3.1문자셋의멱집합표기법
5.3.2문자셋의리스트표기법
5.4자체문자셋설계하기
5.4.1효율적인문자셋의설계
5.4.2숫자표현을위한문자코드그룹화
5.4.3알파벳문자그룹화
5.4.4알파벳문자의비교연산
5.4.5기타문자의그룹화
5.5참고자료

6장.메모리구조와접근방식
6.1컴퓨터의기본적인시스템구성요소
6.1.1시스템버스
6.2메모리의물리적구조
6.2.18비트데이터버스
6.2.216비트데이터버스
6.2.332비트데이터버스
6.2.464비트데이터버스.
6.2.580x86이외프로세서의바이트,워드,더블워드접근방식
6.3빅엔디안과리틀엔디안의구조비교
6.4시스템클럭
6.4.1메모리액세스와시스템클럭
6.4.2대기상태
6.4.3캐시메모리
6.5CPU의메모리액세스방법
6.5.1직접메모리주소지정모드
6.5.2간접메모리주소지정모드
6.5.3인덱스메모리주소지정모드
6.5.4스케일인덱스주소지정모드
6.6참고자료

7장.복합데이터타입과메모리객체
7.1포인터타입
7.1.1포인터구현
7.1.2포인터와동적메모리할당
7.1.3포인터작업및포인터산술연산
7.1.3.1포인터에정수더하기
7.2배열
7.2.1배열선언
7.2.2메모리에서의배열표현
7.2.3배열요소에접근하기
7.2.4다차원배열
7.3레코드와구조체
7.3.1파스칼/델파이의레코드
7.3.2C/C++의레코드
7.3.3HLA의레코드
7.3.4스위프트의레코드(튜플)
7.3.5레코드의메모리저장방식
7.4이산유니온데이터타입
7.4.1C/C++의유니온
7.4.2파스칼/델파이의유니온
7.4.3스위프트의유니온
7.4.4HLA의유니온
7.4.5유니온타입의메모리저장
7.4.6유니온타입의기타활용방식
7.5클래스
7.5.1클래스개념1:상속
7.5.2클래스구조체
7.5.3클래스개념2:다형성
7.5.4추상메소드와추상베이스클래스
7.6C++의클래스
7.6.1C++의추상멤버함수및클래스
7.6.2C++의다중상속
7.7자바의클래스
7.8스위프트의클래스
7.9프로토콜과인터페이스
7.10제네릭과템플릿
7.11참고자료

8장.불리언로직과디지털설계
8.1불리언대수
8.1.1불리언연산자
8.1.2불리언공리
8.1.3불리언연산자의우선순위
8.2불리언함수와진리표
8.3함수번호
8.4불리언수식의대수처리
8.5정규형
8.5.1최소항의합정규형과진리표
8.5.2대수적으로생성된최소항의합정규형
8.5.3최대항의곱정규형
8.6불리언함수의단순화
8.7불리언로직의적용방식
8.7.1전자회로와불리언함수의대응관계
8.7.2조합회로
8.7.3시퀀셜로직과클럭로직
8.8참고자료

9장.CPU아키텍처
9.1CPU의기본적인설계방식
9.2명령어디코딩및실행:랜덤로직과마이크로코드의비교
9.3단계별명령어실행
9.3.1mov명령어
9.3.2add명령어
9.3.3jnz명령어
9.3.4loop명령어
9.4RISCvs.CISC:명령어의신속실행을통한성능향상
9.5병렬성:더높은성능의비결
9.5.1기능성유닛
9.5.2프리페치큐
9.5.3프리페치큐의성능을저하시키는조건
9.5.4파이프라이닝:다중명령어중첩
9.5.5명령어캐시:다수의메모리경로제공
9.5.6파이프라인해저드
9.5.7슈퍼스칼라연산:병렬적명령어실행
9.5.8명령어의비순차적실행
9.5.9레지스터이름변경
9.5.10VLIW아키텍처
9.5.11병렬처리
9.5.12멀티프로세싱
9.6참고자료

10장.명령어집합설계
10.1명령어집합설계의중요성
10.2명령어설계의기본적인목표
10.2.1opcode길이선택
10.2.2미래에대한대비
10.2.3명령어선택
10.2.4명령어에opcode할당하기
10.3가상의Y86프로세서
10.3.1Y86프로세서의제한된기능소개
10.3.2Y86명령어의종류
10.3.3Y86의피연산자유형과어드레스모드
10.3.4Y86명령어인코딩
10.3.5Y86명령어인코딩사례
10.3.6Y86명령어집합의확장
10.480x86명령어인코딩
10.4.1명령어피연산자인코딩
10.4.2add명령어인코딩
10.4.3x86상수피연산자인코딩
10.4.48비트,16비트,32비트피연산자인코딩
10.4.564비트피연산자인코딩
10.4.6명령어의대안으로서인코딩
10.5명령어집합설계의중요성
10.6참고자료

11장.메모리아키텍처및구성
11.1메모리계층구조
11.2메모리계층의작동방식
11.3메모리서브시스템의성능비교
11.4캐시아키텍처
11.4.1직접매핑캐시
11.4.2완전연관캐시
11.4.3n-way집합연관캐시
11.4.4캐시라인교체방식
11.4.5캐시에서의데이터쓰기방식
11.4.6캐시활용및소프트웨어
11.5NUMA와주변장치
11.6가상메모리,메모리보호,페이징
11.7메모리계층을고려한소프트웨어개발
11.8런타임시메모리구성
11.8.1정적객체,동적객체,바인딩,생애주기
11.8.2코드영역,읽기전용영역,상수영역
11.8.3정적변수영역
11.8.4스토리지변수영역
11.8.5스택영역
11.8.6힙영역과동적메모리할당
11.9참고자료

12장.입력및출력장치
12.1컴퓨터외부로CPU연결하기
12.2시스템에포트를연결하는다른방법
12.3I/O메커니즘
12.3.1메모리맵입출력방식
12.3.2I/O맵입출력방식
12.3.3DMA,직접메모리접근방식
12.4I/O속도의계층구조
12.5시스템버스와데이터전송속도
12.5.1PCI버스의성능
12.5.2ISA버스의성능
12.5.3AGP버스
12.6버퍼링
12.7핸드셰이킹
12.8I/O포트의타임아웃
12.9폴링기반I/O및인터럽트
12.10작업보호모드와장치드라이버
12.10.1장치드라이버모델
12.10.2장치드라이버와의통신
12.11참고자료

13장.컴퓨터주변장치버스
13.1소형컴퓨터시스템인터페이스
13.1.1SCSI의한계점
13.1.2SCSI의성능및기능개선
13.1.3SCSI프로토콜
13.1.4SCSI의장점
13.2IDE/ATA인터페이스
13.2.1SATA인터페이스
13.2.2파이버채널
13.3USB,유니버설시리얼버스
13.3.1USB의설계
13.3.2USB의성능
13.3.3USB의데이터전송유형
13.3.4USB-C
13.3.5USB장치드라이버
13.4참고자료

14장.대용량저장장치와파일시스템
14.1디스크드라이브
14.1.1플로피디스크드라이브
14.1.2하드드라이브
14.1.3RAID시스템
14.1.4광학드라이브
14.1.5CD,DVD,블루레이드

출판사 서평

◈이책에서다루는내용◈
◆효과적으로머신을활용하기위한숫자,문자와그외하이레벨데이터구조의표현방식을알아보고,각데이터타입의리소스비용설명
◆머신이좀더효율적으로데이터에접근할수있도록조직화,체계화하는방법
◆머신의본질적인작동방식을파악하기위한CPU의작동방식
◆애플리케이션의성능을최대로끌어올리기위한각종I/O주변장치의작동방식
◆프로그램이최고의성능을낼수있게해주는메모리계층구조


◈이책의대상독자◈
특정프로그램언어에맞춰쓴책이아니기때문에설명하는개념은프로그래밍언어의종류와관계없이적용할수있다.특정언어를사용하거나알지못해도이책을읽는데는지장이없도록작성했으며,이책의프로그램예문은이해의폭을넓히기위해몇가지언어를교대로사용한다.예시를설명할때는코드에대한정확한설명을덧붙일것이므로,해당언어에익숙하지않더라도프로그램의동작방식을문제없이이해할수있을것이다.


◈이책의구성◈
2장,4장,5장에서는컴퓨터의기본적인데이터표기법을알아본다.예를들어컴퓨터가어떠한방법으로부호있는정수와부호없는정수,문자,문자열,문자집합,실수,분수와같은값들을표현하는지알아본다.컴퓨터가다양한자료를어떻게표현하는지충분히이해하지못한다면,특정작업에서왜그렇게많은시간이소요되는지알수없을것이다.
3장에서는현대적인컴퓨터시스템에서널리사용하는2진법의계산과비트연산을알아본다.대부분의프로그래밍언어가2진법과비트연산을지원하므로,이책에서는일반적인프로그래밍개론과정에서잘다루지않는2진법과논리연산을통해코드의성능을향상시키는방법을소개한다.탁월한코드를작성하는프로그래머가되기위해서는2진법및비트연산을능숙하게활용할수있어야할것이다.
6장에서는(컴퓨터가메모리에접근하는방법과메모리의성능에관련된특징등과같은)메모리에대해알아보며,CPU가메모리에있는다양한자료구조에접근할때사용하는메모리지정모드도살펴본다.현대적인애플리케이션의성능저하문제중상당수는프로그램이메모리에접근하는방식을잘못지정해발생하는메모리병목현상과관련이있으며,6장에서는이러한문제를해결할수있는기반지식을제공한다.
7장에서는다시데이터표현으로돌아가서복합데이터타입과메모리객체를다루며,앞부분의여러장에서다뤘던내용과달리포인터,배열레코드,구조체,공용체등과같은하이레벨데이터타입에관해설명한다.적지않은프로그래머가메모리나성능상의문제를고려하지않고대용량의복합데이터구조를사용하는경향이있는데,7장에서는이런하이레벨복합데이터타입을로우레벨의관점으로설명함으로써프로그램에서이기법을사용할때지불해야할비용이얼마인지알려준다.이를통해이기법을좀더신중하고현명하게사용할수있게될것이다.
8장에서는불리언논리연산과디지털설계를다룬다.8장에서는CPU와컴퓨터시스템요소를이해하기위해필요한수학적토대와논리연산을위한기초지식을제공한다.8장에서는주로불리언표현식을다루며,그중에는if,while등범용하이레벨언어에서사용되는불리언식을최적화하는방법도포함된다.
9장역시8장에이어하드웨어와관련된내용으로CPU의구조를알아본다.탁월한코드를작성하기위해프로그래머는기본적인CPU설계와연산방식을이해하고있어야한다.여러분이CPU가코드를실행하는방식에맞춰코드를작성할수있다면,더적은시스템자원을사용해더좋은성능을얻을수있을것이다.
10장에서는CPU명령어집합구조를알아본다.모든CPU에서명령어는CPU동작에가장기본이되는부분이고,프로그램수행시간은수행되는명령어의종류와수에직접적인영향을받는다.컴퓨터구조에서명령어를설계하는방법을이해하면어떤연산이다른연산보다더많은시간이걸리는이유를알수있다.여러분이명령어의한계와CPU가명령어를해석하는방식을이해하면,형편없는코드시퀀스를탁월한코드로탈바꿈시킬수도있다.
11장에서는다시메모리주제로돌아와서메모리아키텍처와메모리구조를알아본다.이장은코드의실행속도를높이는데큰도움이될것이다.메모리의계층구조와캐시의성능을극대화하는방법,다른고속메모리구성요소등을알아본다.현대애플리케이션의일반적인문제중하나인스래싱(thrashing)을알아보고,저성능메모리접근문제를해결하는방법도살펴본다.
12장에서15장까지는컴퓨터시스템과외부환경의소통방식을알아본다.컴퓨터시스템과연결된다수의입출력주변장치(peripheraldevice)는CPU나메모리에비해훨씬느린속도로작동한다.여러분이작성한개별명령시퀀스의성능이탁월하더라도,이들입출력주변장치의한계상황을알지못하면애플리케이션의전체성능은낮은수준을벗어날수없다.따라서책후반의네개장은범용I/O포트,시스템버스,버퍼링,핸드셰이킹,폴링,인터럽트등을다룬다.이를통해여러분은키보드,병렬포트,직렬포트,디스크드라이브,테이프드라이브,플래시저장장치,SCSI,IDE/ATA,USB,사운드카드등다양한PC주변장치와의효율적인소통방식을이해할수있을것이다.

◈옮긴이의말◈
이책은40년경력의소프트웨어엔지니어인랜달하이드(RandallHyde)가집필한『WriteGreatCode』시리즈의첫번째책이며,1980년대이전부터현재에이르기까지소프트웨어산업에존재해온개발방법론,프로젝트운영전략,실무이론그리고개발조직운영전략의집대성이라할수있다.저자는현재3권까지출간된시리즈를통해혁신적으로발전해온컴퓨팅머신의작동원리,로우레벨로생각하고하이레벨로코딩하는방법그리고개발자의소프트웨어개발프로젝트수행방법과유용한도구에대해설명한다.
저자는소프트웨어개발업무를작가주의의산물이아닌엔지니어링측면에서접근한다.이로인해공감에기대어설명할수밖에없었던부분을정량적으로,체계적으로설명할수있게됐으며,소프트웨어개발모델부터테스트,문서화까지일관된예시와흐름으로설명한다.
저자가소프트웨어엔지니어로입문했을당시에각광받던개발주제(예:원자로제어)는현재클라우드,인공지능,양자컴퓨팅,블록체인등의주제로바뀌었다.개발접근전략또는방법론역시좀더세분화되거나맥락이아예바뀐부분이있다.그러나좀더좋은소프트웨어,위대한소프트웨어에대한갈망은개발자인우리모두의공통된특징이아닐까생각한다.
시리즈1권인이책은위대한코드를작성하려는개발자라면가장먼저봐야할부분이라고할수있는연산머신으로서컴퓨터의작동원리를설명한다.하지만컴퓨터아키텍처보다는좋은소프트웨어를작성하려고할때필수적으로알아야할컴퓨터의작동원리와상호작용방법에초점을맞추며,CPU및메모리아키텍처와상호작용방식,비트논리연산,부동소수점수,문자데이터,입출력,주변장치버스,파일시스템등에대해소개한다.또한거의모든이론설명에는세심하게정리한참조표와이미지를제공하고,어셈블리또는C등로우레벨언어기반의핸즈온을통해독자의이해를돕는다.
이책은소프트웨어개발경력자에게는근원이되는소스코드의가치를평가할수있는기회가될것이고,개발입문자에게는소프트웨어에대한토대를단단히다질수있는계기가될수있으리라생각한다.