이미 소장하고 있다면 판매해 보세요.
|
지은이·감수자·옮긴이 소개 xiv
옮긴이 머리말 xvi 베타리더 후기 xviii 시작하며 xx 감사의 말 xxxviii PART I 기본 개념 CHAPTER 1 역사적 아키텍처들 3 1.1 컴퓨터란 무엇인가? 4 1.2 산업혁명 이전 7 1.2.1 석기 시대 7 / 1.2.2 청동기 시대 9 / 1.2.3 철기 시대 11 1.2.4 이슬람 황금기 13 / 1.2.5 르네상스와 계몽주의 시대 15 1.3 증기 시대 17 1.3.1 자카르 방직기 17 / 1.3.2 빅토리아 시대의 배럴 오르간과 오르골 18 1.3.3 배비지의 차분기관 18 / 1.3.4 배비지의 해석기관 20 1.3.5 기계식 미분 해석기 24 1.4 디젤 시대 25 1.4.1 홀러리스 표 계산기와 IBM 26 / 1.4.2 전기기계식 미분 해석기 28 1.4.3 제2차 세계 대전의 전기기계식 기계 28 / 1.4.4 추제 Z3 31 1.5 전기 시대 31 1.5.1 2차대전의 순수 전자적 암호학 32 / 1.5.2 에니악 33 1.5.3 VM 에니악 35 / 1.5.4 맨체스터 베이비 35 1.5.5 1950년대와 상업용 컴퓨팅 37 1.6 트랜지스터 시대 38 1.6.1 1960년대와 대형 트랜지스터 38 / 1.6.2 1970년대와 집적회로 40 1.6.3 1980년대 황금기 41 / 1.6.4 따분한 1990년대 42 1.6.5 2000년대와 커뮤니티 재구성 44 1.6.6 2010년대와 무어의 법칙의 종말 45 1.6.7 클라우드와 사물 인터넷(IoT)의 2020년대 48 1.7 그래서 최초의 컴퓨터는 무엇인가? 50 이번 장 요약 51 실습과제 51 더 읽을거리 52 CHAPTER 2 데이터 표현 53 2.1 데이터 표현의 간략한 역사 54 2.1.1 탤리 스틱과 거래용 토큰 54 / 2.1.2 로마 숫자 56 2.1.3 쪼갠 탤리 56 / 2.1.4 아라비아 숫자와 기타 숫자 57 2.2 현대적 수체계 59 2.2.1 기수와 지수 59 / 2.2.2 기수 10: 십진수 60 2.2.3 기수 2: 이진수 61 / 2.2.4 기수 10,000 62 2.2.5 기수 60: 60진수 63 / 2.2.6 기수 16: 16진수 63 2.2.7 기수 256: 바이트 66 / 2.2.8 진수 변환 방법 66 2.3 데이터 표현 67 2.3.1 자연수 67 / 2.3.2 정수 70 / 2.3.3 유리수 71 2.3.4 고정소수점 72 / 2.3.5 부동소수점 72 / 2.3.6 배열 73 2.3.7 텍스트 75 / 2.3.8 멀티미디어 데이터 표현 80 / 2.3.9 자료구조 83 2.4 데이터 측정 84 이번 장 요약 86 실습과제 86 더 읽을거리 87 CHAPTER 3 기초적인 CPU 기반 아키텍처 88 3.1 음악 처리 장치 88 3.1.1 음악에서 수치 연산으로 91 / 3.1.2 수치 연산에서 계산으로 92 3.2 배비지의 CPU 93 3.2.1 고수준 아키텍처 94 / 3.2.2 프로그래머 인터페이스 95 3.2.3 내부 하위부품들 100 / 3.2.4 내부 작동 103 이번 장 요약 106 실습과제 107 더 읽을거리 107 PART II 전자회로의 계층구조 109 CHAPTER 4 스위치 111 4.1 유향 시스템 112 4.1.1 체크 밸브 113 / 4.1.2 열 다이오드 114 / 4.1.3 PN 접합 다이오드 115 4.2 스위치 121 4.2.1 수압 스위치 121 / 4.2.2 전기 진공관 스위치 122 4.2.3 PNP 트랜지스터 123 / 4.2.4 수압 효과 스위치 125 4.2.5 전계효과 트랜지스터 126 / 4.2.6 클록 127 4.3 트랜지스터 제조 128 4.4 무어의 법칙 130 이번 장 요약 131 실습과제 132 더 읽을거리 132 CHAPTER 5 디지털 논리 133 5.1 클로드 섀넌과 논리 게이트 134 5.2 논리 게이트 135 5.2.1 범용 게이트 식별 138 / 5.2.2 트랜지스터로 논리 게이트 만들기 138 5.2.3 논리 게이트를 칩에 얹기 140 5.3 부울 논리 143 5.3.1 산술로서의 논리 144 / 5.3.2 모델 검사 대 증명 145 5.4 부울 논리를 이용한 논리 회로 간소화 148 5.5 디지털 논리의 구현 150 5.5.1 7400 시리즈 칩 활용 150 / 5.5.2 포토 공정 151 5.5.3 PLA 151 / 5.5.4 FPGA 152 이번 장 요약 154 실습과제 154 더 읽을거리 155 CHAPTER 6 단순 기계 156 6.1 조합 논리 157 6.1.1 비트별 논리 연산 157 / 6.1.2 다중 입력 논리 연산 158 6.1.3 자리이동 장치 158 / 6.1.4 디코더와 인코더 159 6.1.5 멀티플렉서와 디멀티플렉서 160 / 6.1.6 가산기 161 6.1.7 부정 소자와 감산기 165 6.2 조합 논리에서 순차 논리로 166 6.3 클록 논리 169 6.3.1 클록 플립플롭 170 / 6.3.2 카운터 171 6.3.3 시퀀서 172 / 6.3.4 RAM(임의 접근 메모리) 173 이번 장 요약 176 실습과제 176 더 읽을거리 178 CHAPTER 7 디지털 CPU 설계 179 7.1 베이비의 프로그래머 인터페이스 180 7.1.1 정지 181 / 7.1.2 상수 181 / 7.1.3 적재와 저장 182 7.1.4 산술 183 / 7.1.5 점프 183 / 7.1.6 분기 184 7.2 어셈블러 184 7.3 맨체스터 베이비의 내부 구조 189 7.3.1 레지스터 190 / 7.3.2 산술 논리 장치(ALU) 192 / 7.3.3 제어 장치(CU) 193 7.4 전체 조립 196 7.4.1 인출 197 / 7.4.2 해독 198 / 7.4.3 실행 199 / 7.4.4 완전한 베이비 구현 204 이번 장 요약 206 실습과제 207 더 읽을거리 209 CHAPTER 8 고급 CPU 설계 210 8.1 사용자 레지스터 개수 210 8.2 명령어 개수 212 8.3 명령어 지속 시간 213 8.4 여러 가지 주소 지정 모드 214 8.5 서브루틴 217 8.5.1 스택 없는 아키텍처 218 / 8.5.2 택 아키텍처 218 8.6 부동소수점 처리장치(FPU) 220 8.7 파이프라이닝 221 8.7.1 해저드(위험 요소) 223 / 8.7.2 해저드 해결 225 8.8 비순차 실행 229 8.9 하이퍼스레딩 231 이번 장 요약 232 실습과제 232 더 읽을거리 233 CHAPTER 9 입출력(I/O) 234 9.1 기본 I/O 개념 234 9.2 버스 236 9.2.1 버스선들 237 / 9.2.2 CPU-버스 인터페이스 238 9.3 I/O 모듈 240 9.3.1 제어와 타이밍 241 / 9.3.2 오류 검출 243 9.4 I/O 모듈 기법 243 9.4.1 폴링 244 / 9.4.2 인터럽트 244 / 9.4.3 직접 메모리 접근(DMA) 246 9.5 모듈 없는 I/O 247 9.5.1 CPU의 I/O 전용 핀 247 / 9.5.2 메모리 매핑 247 / 9.5.3 버스 계층구조 247 이번 장 요약 248 실습과제 249 더 읽을거리 249 CHAPTER 10 메모리 250 10.1 메모리 계층구조 250 10.2 주 메모리 252 10.2.1 바이트와 엔디언 253 / 10.2.2 메모리 모듈 255 10.2.3 RAM(임의 접근 메모리) 256 / 10.2.4 ROM(읽기 전용 메모리) 261 10.3 캐시 263 10.3.1 캐시의 주요 개념 265 / 10.3.2 여러 가지 캐시 읽기 정책 267 10.3.3 여러 가지 캐시 쓰기 정책 269 / 10.3.4 고급 캐시 아키텍처 270 10.4 보조 메모리와 오프라인 메모리 272 10.4.1 테이프 273 / 10.4.2 디스크 276 / 10.4.3 SSD(고체상 드라이브) 280 10.5 3차 메모리 281 10.6 데이터 센터 281 이번 장 요약 282 실습과제 282 더 읽을거리 283 PART III 예제 아키텍처 285 CHAPTER 11 레트로 아키텍처 287 11.1 1980년대 황금기의 프로그래밍 288 11.1.1 8비트 시대 290 / 11.1.2 16비트 시대 291 11.2 8비트 CPU MOS 6502 다루기 292 11.2.1 내부 구성요소 292 / 11.2.2 프로그래머 인터페이스 298 11.3 코모도어 64로 살펴보는 8비트 컴퓨터 설계 303 11.3.1 아키텍처의 이해 303 / 11.3.2 C64 프로그래밍 306 11.4 모토롤라 68000으로 살펴보는 16비트 컴퓨터 설계 309 11.4.1 내부 구성요소 309 / 11.4.2 프로그래머 인터페이스 310 11.5 코모도어 아미가로 살펴보는 16비트 컴퓨터 설계 313 11.5.1 아키텍처의 이해 314 / 11.5.2 아미가 프로그래밍 316 11.6 레트로 주변기기 320 11.6.1 CRT(음극선관) 디스플레이 320 / 11.6.2 사용자 입력 321 11.6.3 직렬 포트 322 / 11.6.4 MIDI 인터페이스 322 이번 장 요약 324 실습과제 324 더 읽을거리 326 CHAPTER 12 임베디드 아키텍처 328 12.1 설계 원칙 329 12.1.1 단일 용도 329 / 2.1.2 신뢰성 329 / 12.1.3 이동성과 전력 공급 329 12.1.4 캡슐화 330 / 12.1.5 신중한 디버깅 330 12.2 마이크로컨트롤러 330 12.2.1 CPU 331 / 12.2.2 메모리 331 / 12.2.3 타이머와 카운터 331 12.3 임베디드 I/O 332 12.3.1 아날로그-디지털 변환 332 / 12.3.2 임베디드 직렬 포트 333 12.3.3 IC 간 버스 334 / 12.3.4 CAN 버스 335 12.4 아두이노 336 12.4.1 ATmega328 마이크로컨트롤러 337 / 12.4.2 아두이노 보드의 나머지 부분 339 12.4.3 아두이노 프로그래밍 340 12.5 그 밖의 CPU 기반 임베디드 시스템 342 12.5.1 아두이노 없는 Atmel AVR 342 / 12.5.2 PIC 마이크로컨트롤러 342 12.5.3 디지털 신호 처리 장치(DSP) 343 12.6 CPU 없는 임베디드 시스템 344 12.6.1 PLC(프로그래머블 로직 컨트롤러) 345 / 12.6.2 임베디드 FPGA 347 이번 장 요약 348 실습과제 349 더 읽을거리 349 CHAPTER 13 데스크톱 아키텍처 351 13.1 CISC 설계 철학 352 13.2 마이크로프로그래밍 353 13.3 x86의 역사 355 13.3.1 선사시대 355 / 13.3.2 16비트 고전 시대 356 13.3.3 32비트 클론 전쟁 시대 357 / 13.3.4 64비트 브랜드 시대 358 13.4 x86 프로그래밍 360 13.4.1 레지스터 360 / 13.4.2 NASM 문법 363 13.4.3 세그멘테이션 372 / 13.4.4 하위 호환 모드 372 13.5 PC 컴퓨터 설계 373 13.5.1 버스 계층구조 374 / 13.5.2 공통 버스 377 / 13.5.3 표준 장치 380 이번 장 요약 388 실습과제 388 더 읽을거리 394 CHAPTER 14 스마트 아키텍처 396 14.1 스마트 기기 397 14.2 RISC 철학 398 14.3 RISC-V 400 14.3.1 아키텍처의 이해 401 / 14.3.2 핵심 RISC-V 프로그래밍 403 14.3.3 RISC-V 확장 405 14.4 다양한 RISC-V 구현 407 14.5 RISC-V 도구 사슬과 커뮤니티 408 14.6 스마트 컴퓨터 설계 409 14.6.1 저전력 DRAM(LP-DRAM) 410 / 14.6.2 카메라 410 / 14.6.3 터치스크린 411 이번 장 요약 412 실습과제 413 더 읽을거리 415 CHAPTER 15 병렬 아키텍처 416 15.1 직렬적 사고방식 대 병렬적 사고방식 417 15.2 CPU의 SIMD 420 15.2.1 SIMD 소개 420 / 15.2.2 x86의 SIMD 421 15.3 GPU에서의 SIMD 428 15.3.1 GPU 아키텍처 429 / 15.3.2 Nvidia GPU 어셈블리 프로그래밍 430 15.3.3 SASS 방언들 438 / 15.3.4 고수준 GPU 프로그래밍 442 15.4 MIMD(다중 명령 다중 데이터) 445 15.4.1 단일 프로세서 MIMD 445 / 15.4.2 공유 메모리 MIMD 445 15.4.3 MIMD 분산 컴퓨팅 451 15.5 명령 없는 병렬성 456 15.5.1 데이터 흐름 아키텍처 456 / 15.5.2 데이터 흐름 컴파일러 458 15.5.3 하드웨어 신경망 459 이번 장 요약 460 실습과제 462 더 읽을거리 465 CHAPTER 16 미래의 아키텍처 467 16.1 새로운 황금기 467 16.1.1 오픈소스 아키텍처 468 / 16.1.2 원자 규모의 트랜지스터 470 16.1.3 3D 실리콘 아키텍처 471 / 16.1.4 1만 년 메모리 472 16.2 광학 아키텍처 473 16.2.1 광 트랜지스터 473 / 16.2.2 광학 상관기 474 / 16.2.3 광신경망 476 16.3 DNA 아키텍처 477 16.3.1 합성 생물학 478 / 16.3.2 DNA 컴퓨팅 479 16.4 신경 아키텍처 480 16.4.1 트랜지스터 대 이온 통로 481 / 16.4.2 논리 게이트 대 뉴런 481 16.4.3 구리선 대 화학 신호 483 / 16.4.4 단순 기계 대 피질 기둥 484 16.4.5 칩 대 대뇌 피질 485 / 16.4.6 병렬 계산 대 직렬 계산 486 16.5 양자 아키텍처 487 16.5.1 양자역학의 만화 버전 488 / 16.5.2 양자역학의 수학 버전 489 16.5.3 큐비트로 이루어진 양자 레지스터 490 / 16.5.4 여러 세계에 걸친 계산 493 16.5.5 실용적인 양자 컴퓨터 아키텍처 494 16.6 미래의 물리 아키텍처 494 이번 장 요약 497 실습과제 498 더 읽을거리 499 APPENDIX 부록 501 APPENDIX A 운영체제 지원 503 동시성 504 커널 모드와 사용자 모드 505 가상 메모리 505 장치 드라이버 506 로더 507 링커 508 추가적인 부팅 단계 510 하이퍼바이저 모드, 가상화, 그리고 컨테이너 512 실시간 운영체제 512 추측 실행 취약점 513 실습과제 517 더 읽을거리 518 그림 출처 519 찾아보기 527 |
류광의 다른 상품
|
흔히 컴퓨터 아키텍처는 학위를 위한 필수 과목이거나 직업상의 필수 요건이다. 그리고 아키텍처를 좋아하지 않지만 배워야 하는 사람들도 많다. 나도 그런 사람이라서 이 점을 잘 알고 있다. 나와 비슷한 독자가 이 책을 삼키기 쉽도록 나는 책에 설탕 한 숟갈을 첨가했다. 독자가 좋아할 만한 주제들을 아키텍처 공부와 연결한 것이다. 하드웨어는 별로 안 좋아하지만 음악이나 로봇, AI, 역사를 좋아한다면, 이 책에 흥미를 느낄 것이다. 고급 레고 제작을 즐기는 독자도 마찬가지다. 그런 연결고리 덕분에 아키텍처를 조금은 좋아하게 될 수도 있다. 학교에서 컴퓨터 아키텍처 과목의 시험을 봐야 한다면, 이 책으로 시험공부를 조금이나마 재미있게 할 수 있을 것이다.
--- p.xxiv 예전부터 사람들은 컴퓨터 아키텍처와 컴퓨터 구조(computer organization)를 구분했다. 전자는 프로그래머가 인식할 수 있는 하드웨어/소프트웨어 인터페이스들의 설계를 가리키고, 후자는 그런 인터페이스들의 내부적인 (프로그래머에게는 보이지 않는) 구현을 가리킨다. 이런 맥락에서 프로그래머는 어셈블리 언어(프로그래머와 하드웨어 사이의 인터페이스에 해당한다)의 수준에서 코드를 짜는 것으로 간주되었다. 하지만 요즘 세상에서 프로그래머는 거의 항상 적어도 컴파일 방식의 언어로 작업하고, 어셈블리 언어 수준에서 작업하는 프로그래머는 아주 드물다. 현세대 프로그래머들은 컴파일러와 운영체제들 때문에 예전 어셈블리 인터페이스보다 훨씬 높은 추상화 수준에서 일한다. 덧붙여, 라이브러리나 게임 엔진 같은 좀 더 상위 수준의 구성요소들 역시 추상화 수준을 높이는 요소다. 그런 만큼, 지금 시점에서 기존의 컴퓨터 아키텍처 대 컴퓨터 구조라는 구분은 그리 중요하지 않다. --- p.xxxv 컴퓨터의 역사를 되짚으려면 먼저 컴퓨터가 무엇인지, 단순한 계산기(calculator)나 수치 연산 기계와는 무엇이 다른지부터 정의해야 한다. 이것은 여전히 논쟁 중인, 의외로 어려운 질문이다. 주어진 대상이 컴퓨터인지 아닌지를 판단하는 나만의 경험법칙(rule of thumb)이 있다. 바로, “스페이스 인베이더(Space Invaders)를 프로그래밍할 수 있는가?”이다. 단순한 계산기로는 그럴 수 없다. 따라서 단순한 계산기는 컴퓨터가 아니다. 반면에 프로그래밍 기능이 있는 계산기는 스페이스 인베이더를 프로그래밍하는 것이 가능하므로 컴퓨터가 맞다. --- p.4 양자역학에서 상호작용하는 여러 현실이 평행으로 존재하는 것처럼 보이는 것을 병렬 계산의 한 형태로 활용할 수는 없을까? 단일 현실에서 계산 작업을 여러 CPU에 분산하듯이, 계산 작업을 여러 평행 현실에 분산해서 각각 계산을 수행한 후 그 결과들을 우리가 살고 있는 단일 현실로 취합할 수 있다면, 수많은 평행 현실에 존재하는 방대한 계산 자원을 활용할 수 있다. 단일 현실에서 CPU를 수없이 만들어 내는 대신, CPU가 하나인 여러 평행 현실에서 동시에 계산을 진행하면 되는 것이다. 이런 아이디어를 1988년에 리처드 파인먼이 처음 제안했다. 이것이 양자 컴퓨팅의 시초다. --- p.490 |
|
■ 다양한 인코딩 방식으로 데이터를 표현하는 방법과 디지털 논리 게이트를 구축하는 방법
■ 기계어와 어셈블리 프로그래밍의 기초 ■ 파이프라이닝, 비순차 실행, 병렬처리의 작동 원리와 실제 사례 ■ 신경망, DNA, 광학, 양자 컴퓨팅의 파급력과 전망 |