Top

GREAT CODE 제1권 하드웨어의 이해

  • 원서명Write Great Code: Volume 1: Understanding the Machine (ISBN 9781593270032)
  • 지은이랜달 하이드
  • 옮긴이김원호, 최재식, 강승훈, 전동환
  • ISBN : 8989975719
  • 25,000원
  • 2005년 07월 20일 펴냄
  • 페이퍼백 | 464쪽 | 190*250mm
  • 시리즈 : 프로그래밍 언어

판매처

재출간판

책 소개

최고의 코딩, 최고의 프로그래머가 되기 위한 원리학습 가이드!!

프로그래머로 일하는 당신, 몸값을 높이고 싶은가? 수준을 올리고 싶은가?


단순히 몇 개의 코딩 기법을 익힌다고 해서 실력이 높아지지는 않는다.
연작 GREAT CODE는 최고의 코딩, 최고의 프로그래머가 되기 위해 닦아야 할 개념 원리를 학습해서 프로그래머의 내공을 높여주는 원리학습 가이드다. 더 빠르고 훌륭한 최고의 코드를 짤 수 있도록 전 4권에 걸쳐 프로그래밍의 근본원리를 쉽게 가르쳐준다.


★ GREAT CODE 시리즈 소개 ★

제1권 ‘하드웨어의 이해’는 컴퓨터 과학이나 컴퓨터 공학 수업에서 자세히 다루지 않고 넘어가는 경우가 많은 컴퓨터의 로우레벨에 대한 내용을 다룬다. 제1권의 내용은 최고의 코드로 구성된 프로그램의 기초가 된다.
제2권 ‘로우레벨로 생각하고, 하이레벨로 코딩하자’에서는 제1권에서 습득한 내용을 응용해본다. 제2권에서는 고급언어를 분석해서 컴파일러가 만들어낼 코드의 품질을 예측하는 방법을 알아볼 것이다. 이 방법을 알게 되면, 손으로 작성한 어셈블리 언어만큼이나 효율적으로 고급 프로그램 언어를 사용할 수 있게 될 것이다.
제3권 ‘소프트웨어 엔지니어링’에서는 수많은 소프트웨어 엔지니어링 책에서 이야기하는 복잡한 과정을 통하지 않고서도 읽기 쉬우며 유지보수하기 쉬운 코드를 작성하는 방법과 생산성을 향상시키는 방법을 알아본다. 품질이 나쁜 코드를 봐야 하는 프로그래머는 화가 나서 코드 작성자를 비방하지만, 품질이 좋은 코드로 작업하는 프로그래머는 일하며 행복해 한다.
제4권 ‘테스트, 디버그, 품질 보증’에서는 대부분 엔지니어들이 따분해하는 테스트를 효과적으로 하는 방법에 관해 다룰 것이다.


GREAT CODE: 제1권 하드웨어의 이해

“전자회로”, “논리설계”, “컴퓨터 아키텍처”, “시스템 프로그래밍”…
대학교에서 이미 배운 과목이고 실무에서도 꼭 필요한 것은 알겠는데, 도무지 정리도 잘 안되고 가물가물 생각이 떠오르지 않는다. 최고의 프로그래머가 되기 위해 반드시 알고 넘어가야 할 하드웨어와 컴퓨터 아키텍처에 대한 모든 내용을 이 한 권에 녹여냈다. 기존 서적의 난해함에 질린 독자들이라면 반드시 이 책을 읽기 바란다.


★ 이 책의 내용 ★

GREAT CODE 제1권 "하드웨어 이해하기" 한 권이면 어셈블리 프로그래밍 언어를 익혀야하는 부담 없이도 컴퓨터 구조에 관한 내용을 공부할 수 있다. 이 책은 C++, VB, 파스칼, 자바 등 여러 고급언어 프로그래머를 위해 저술됐으며, 컴퓨터 교육과정에서 흔히 다루지 않는 컴퓨터 구조의 기계적인 수준까지 자세하게 다루고 있다.
• 숫자나 문자열, 고급 자료구조 등을 표기하는 방법을 익혀서, 컴퓨터가 각 데이터 타입을 사용하는 데 드는 비용을 파악한다.
• 컴퓨터가 데이터를 구성하는 방법을 익힘으로써, 데이터를 좀더 효율적으로 처리하는 방법을 알아낸다.
• CPU가 동작하는 방식을 익힘으로써 컴퓨터가 처리하는 방식대로 동작하는 프로그램 코드를 작성할 수 있다.
• 입출력 장치가 동작하는 방식을 이해함으로써, 그러한 장치에 접근하는 애플리케이션의 성능을 최대화할 수 있다.
• 메모리 계층 구조를 최적화해 사용하는 방법을 통해 최대한 빠른 프로그램을 작성할 수 있다.

최고의 코드는 곧 효율적인 코드다. 진정 효율적인 코드를 작성하기 위해서는 먼저, 컴퓨터 시스템이 어떻게 프로그램을 실행하고, 프로그래밍 언어 상의 추상화(abstraction)가 기계적인 수준의 컴퓨터 하드웨어와 어떻게 대응되는지를 이해해야 한다. 컴파일러는 최적화된 기계어 코드를 만들어 주지는 못하므로, 이는 결국 프로그래머의 일이다. ‘GREAT CODE’ 시리즈의 1권인 이 책은 모든 최고의 소프트웨어 밑바탕에 있는 내용들을 알려 줄 것이다.


★ 이 책의 대상 ★

이 책은 특별한 프로그램언어를 위한 책은 아니다. 이 책에서 설명하는 개념은 프로그래밍언어에 관계 없이 적용될 수 있는 것들이다. 이 책을 효과적으로 이용하기 위해서 적어도 한가지 이상의 절차적 프로그램언어를 다룰 줄 알아야만 한다. C, C++, 파스칼, 베이직, 어셈블리 언어처럼 많이 사용되는 언어뿐 아니라 에이다(Ada), 모듈러2(Modula-2), 포트란 등과 같은 언어여도 괜찮다. 또 작은 문제에 대한 명세를 받아서, 그 문제에 대한 소프트웨어를 설계하거나 구현할 능력이 있어야 한다. 보통 대학의 한 학기 정도의 수업만 수강하거나, 스스로가 몇 달만 노력해도 이 책을 공부하는 데 큰 불편함은 없을 것이다.
참고로 이 책은 다양한 예시에서 다음 언어와 컴파일러를 사용했다.

- C/C++: GCC, 마이크로소프트 비주얼 C++, 볼랜드 C++
- Pascal: 볼랜드 델파이(Delphi) / 카이릭스(Kylix)
- 어셈블리: 마이크로소프트 MASM, HLA (the High Level Assembler), Gas(파워PC용)
- BASIC: 마이크로소프트 비주얼베이직

저자/역자 소개

★ 저자 소개 ★

랜달 하이드(Randall Hyde)

최고의 어셈블리 언어 관련 서적인 “The Art of Assembly Language (No Starch Press)”의 저자이며, “The Waite Group’s MASM 6.0 Bible”의 공동 저자이다. 그는 닥터 돕스 저널(Dr.Bobb’s Journal)과 바이트(Byte)지를 비롯한 여러 전문 잡지에 기고하고 있다.


★ 역자 소개 ★

전동환
서울대학교 컴퓨터공학과를 졸업하고 한국MDS에서 순수 국산 RTOS인 Velos를 개발하고 있다. 임베디드 시스템 및 RTOS 관련 강좌를 다수 진행했으며, <월간 마이크로소프트>, <월간 임베디드 월드> 등에 RTOS 관련 기사를 기고하기도 했다. 현재 에이콘 출판사의 임베디드 시스템 프로그래밍 시리즈 에디터로도 활동 중이며 ‘RTOS를 이용한 실시간 임베디드 시스템 디자인’, ‘임베디드 시스템 대사전’ 등을 번역했다.

김원호
서울대학교 컴퓨터공학과에 재학 중이다. 트랙나인에서 개발팀장을 맡았고, 케이비테크놀러지(주)의 자바카드개발팀에서 자바 카드 KONA개발을 담당했다. 현재는 복학해서 학업에 매진하고 있다. 취미는 하드커버 원서 책 수집이다.

최재식
서울대학교 컴퓨터공학과를 졸업한 후, 소만사(주)에서 CRM 관련 제품 개발팀장을 맡았다. 2005년 가을에 일리노이 주립대학교(UIUC) 전산학 석사과정으로 진학 예정이다. 로봇 시스템과 관련한 A.I. 알고리즘들이 주요 연구 관심사다.

강승훈
서울대학교 컴퓨터공학과를 졸업했다. 현재 케이비테크놀러지(주)의 플랫폼개발팀 팀장이며, 다양한 칩 플랫폼 상에 자바카드를 개발해왔고, 지금은 UICC/USIM 개발에 매진하고 있다.


★ 역자 서문 ★

예상컨대 이 책을 선택한 독자 여러분들은 프로그래밍을 처음 배운 이후로 지금까지 "어떻게 하면 프로그래밍을 더 잘할 수 있을까?"라는 고민을 끊임없이 해왔을 것이다. 물론 필자도 마찬가지다. 필자의 경우, 계속해서 새로운 언어를 익혀야 한다는 중압감에 이 책 저 책 구입해서 열심히 공부했던 기억이 난다. 그 당시에는 그저 또 다른 프로그래밍 언어를 익히고 새로운 API에 익숙해져야 '진도가 나가는 것'으로 생각했었다. 하지만 여전히 무언가 2% 부족한 느낌을 지울 수가 없었다. 개발자로서 나의 내공이 늘고 있는지에 대한 확신이 서지 않았던 것이다.
어떻게 해야 좀더 좋은 프로그램을 설계하고 구현할 수 있을까? 무엇을 더 공부해야 '최고의 코드'를 작성하는 '최고의 개발자'가 될 수 있을까?
저자는 「GREAT CODE」시리즈에서, '최고의 코드'라는 다소 거창한 용어를 사용해서 이에 대한 해답을 제시하고 있다. 제1권인 「하드웨어의 이해」에 나온 저자의 생각을 굳이 한마디로 요약하자면, '최고의 코드란 컴퓨터의 동작원리를 이해하고, 이를 고려해 설계하고 구현한 프로그램'이다. 비록 고급언어를 사용하는 개발자라 하더라도, 컴퓨터가 어떤 과정을 거쳐서 주어진 프로그램을 실행하고 원하는 결과를 생성하는지, 그 전체 과정과 뒤에 숨겨진 배경 이론을 이해해야 한다는 것이 저자인 랜달 하이드의 지론이다.
이쯤 되면 'GREAT CODE'라는 다소 자극적인 제목을 보고 책을 골랐거나 쉽게 익혀 바로 이용할 수 있는 프로그래밍 스킬만을 원하는 독자들은 조금 실망하거나 생각이 앞서 책내용이 지루할 거라고 예상할지도 모르겠다. 왜냐하면 이 책은 특수한 프로그래밍 테크닉을 다루고 있지 않기 때문이다. 그보다는 철저히 '컴퓨터의 동작 원리'에 대한 이론적인 내용에 초점을 맞추고 있다. 현대 컴퓨터가 수행하는 이진 연산의 이론적 바탕이 되는 수학 원리에서부터 시작해, 수치 표기법, 문자 표기법, 디지털 회로, 메모리 구조, CPU 구조, 기계어 인코딩, 입출력에 이르기까지 정말 방대한 내용이 이 책 한 권에 모두 담겨 있다. 또 각 장마다 이런 이론적인 내용이 실제 프로그래밍 과정과 어떻게 연관되는지에 대해 자세히 설명하고 있다. 따라서 지겹게 느끼기는 커녕 진흙 속에서 찾아낸 보석처럼 여겨질 것이다.
최고의 개발자는 동시에 최고의 '문제 해결사'가 돼야 한다. 주어진 제약 조건 하에서 최대한의 효용을 창출해내는 프로그램을 작성하기 위해서는, 그 제약 조건에 대한 이해가 필수적이다. 이런 이해가 선행돼야 어떤 상황에서든 자신만의 알고리즘을 개발하고 최적화된 설계를 할 수 있다. 이 때 필요한 것이 컴퓨터의 동작원리에 대한 이해다. 단순히 '관련된 변수들은 함께 선언하는 것이 좋다'고 기억하는 사람에 비해서 '왜 관련된 변수들은 함께 선언하는 것이 효율적인가'를 이해하는 사람은, 자신에게 주어진 상황에 맞게 가장 최적화된 프로그램을 작성할 수 있다.
이 책, 'GREAT CODE 제1권 하드웨어의 이해'는 그 동안 개발자들이 신경 쓰지 않았던 분야에 대한 통찰력을 제공해줄 것이라 약속한다. 개발자에게 새로운 시야를 갖게 해줄 것이다. 이 책을 읽고 난 후에 여러분은 현재 작성하고 있는 프로그램이 어떻게 메모리에 적재되며 CPU에 의해 수행되고 외부와 통신하는지를 상세히 이해하게 될 것이다. 그리고 전체 시스템의 관점에서 최적화된 최고의 프로그램을 작성할 수 있을 것이다. 독자 여러분이 최고의 코드를 작성하는 데 이 책의 내용이 도움이 되기를 진심으로 바란다. 마지막으로 휴일에도 홀로 외로이 집에서 게임을 하면서 내게 번역할 시간을 할애해줬던 밍기에게 감사의 말을 전하고 싶다.

목차

목차
  • 1장 최고의 코드를 작성하기 위해 알아야 할 것
    • 1.1 ‘최고의 코드’ 시리즈
    • 1.2 이 책의 내용
    • 1.3 이 책의 대상
    • 1.4 최고의 코드의 특징
    • 1.5 동작 환경
    • 1.6 더 많은 정보를 원하면
  • 2장 수치 표기법
    • 2.1 수란 무엇인가?
    • 2.2 수 체계
      • 2.2.1 10진 위치 표기법
      • 2.2.2 기수
      • 2.2.3 2진법 수체계
      • 2.2.4 16진법 수체계
      • 2.2.5 8진법 수체계
    • 2.3 수치/문자열 변환
    • 2.4 내부 수치 표현법
    • 2.4.1 비트
      • 2.4.2 비트 스트링
    • 2.5 부호 있는 수와 부호 없는 수
    • 2.6 2진수의 유용한 속성
    • 2.7 부호 확장, 0 확장과 축소
    • 2.8 포화
    • 2.9 2진화 10진 표기법
    • 2.10 고정소수점 표기
    • 2.11 스케일 수치 포맷
    • 2.12 유리수 표기법
    • 2.13 더 많은 정보를 원하면
  • 3장 2진법 연산과 비트 연산
    • 3.1 2진수, 16진수의 연산
      • 3.1.1 2진수 덧셈
      • 3.1.2 2진수 뺄셈
      • 3.1.3 2진수 곱셈
      • 3.1.4 2진수 나눗셈
    • 3.2 비트 논리 연산
    • 3.3 2진수와 비트 스트링에 대한 논리 연산
    • 3.4 유용한 비트 연산
      • 3.4.1 AND를 이용, 비트 스트링의 비트 테스트
      • 3.4.2 AND를 이용, 여러 비트가 모두 0인지 테스트
      • 3.4.3 비트 스트링 내부의 여러 비트 비교
      • 3.4.4 AND를 이용, 모듈로-n 카운터 만들기
    • 3.5 쉬프트와 로테이트
    • 3.6 비트 필드와 묶인 데이터
  • 4장 부동소수점 표기
    • 4.1 부동소수점 연산 소개
    • 4.2 IEEE 부동소수점 포맷
      • 4.2.1 단정밀도 부동소수점 포맷
      • 4.2.2 복정밀도 부동소수 포맷
      • 4.2.3 확정 정밀도 부동소수 포맷
    • 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.1 ASCII 문자셋
      • 5.1.2 EBCDIC 문자셋
      • 5.1.3 더블 바이트 문자셋
      • 5.1.4 유니코드 문자셋
    • 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 자신만의 문자셋을 설계하기
  • 6장 메모리 구조와 접근
    • 6.1 기본 시스템 구성요소
      • 6.1.1 시스템 버스
      • 6.1.2 주소 버스
      • 6.1.3 제어 버스
    • 6.2 메모리의 물리적 구조
      • 6.2.1 8비트 데이터 버스
      • 6.2.2 16비트 데이터 버스
      • 6.2.3 32비트 데이터 버스
      • 6.2.4 64비트 버스
      • 6.2.5 80x86 프로세서가 아닌 프로세서에서의 작은 단위 메모리 접근
    • 6.3 빅 엔디안 구조 VS 리틀 엔디안 구조
    • 6.4 시스템 클럭
      • 6.4.1 메모리 접근과 시스템 클럭
      • 6.4.2 대기 상태
      • 6.4.3 캐쉬 메모리
    • 6.5 CPU 메모리 접근
      • 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.2 배열
      • 7.2.1 배열의 선언
      • 7.2.2 메모리 상에서 배열의 모습
      • 7.2.3 배열 원소에 접근하기
      • 7.2.4 다차원 배열
    • 7.3 레코드/구조체
      • 7.3.1 파스칼/델파이 레코드
      • 7.3.2 C/C++ 레코드
      • 7.3.3 HLA 레코드
      • 7.3.4 레코드를 위한 메모리 공간
    • 7.4 식별 유니온
      • 7.4.1 C/C++ 유니온
      • 7.4.2 파스칼/델파이/카일릭스 유니온
      • 7.4.3 HLA 유니온
      • 7.4.4 유니온을 위한 메모리 공간
      • 7.4.5 유니온의 다른 용법
    • 7.5 더 많은 정보를 원하면
  • 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.1 기본적인 CPU 설계
    • 9.2 명령어의 해석과 수행: 랜덤 로직 vs. 마이크로코드
    • 9.3 단계별로 명령어 수행하기
      • 9.3.1 mov 명령어
      • 9.3.2 add 명령어
      • 9.3.3 jnz 명령어
      • 9.3.4 loop 명령어
    • 9.4 병렬성-더 높은 성능의 비결
      • 9.4.1 프리페치 큐
      • 9.4.2 프리페치 큐의 성능 향상을 방해하는 요소들
      • 9.4.3 파이프라이닝-여러 명령어 수행을 중첩하기
      • 9.4.4 명령어 캐쉬-다수의 메모리 경로 제공하기
      • 9.4.5 피이프라인 헤저드
      • 9.4.6 슈퍼스칼라 오퍼레이션-명령어를 병렬적으로 수행하기
      • 9.4.7 비순차적 수행
      • 9.4.8 레지스터 이름 바꾸기
      • 9.4.9 VLIW 아키텍처
      • 9.4.10 병렬 처리
      • 9.4.11 멀티프로세싱
    • 9.5 더 많은 정보를 원하면
  • 10장 명령어 집합 구조
    • 10.1 명령어 집합 설계의 중요성
    • 10.2 명령어 설계의 기본적인 목적
      • 10.2.1 op코드 길이 선택하기
      • 10.2.2 미래에 대한 대비
      • 10.2.3 명령어 선택하기
      • 10.2.4 명렁어에 op코드 할당하기
    • 10.3 가상 프로세서 Y86
      • 10.3.1 Y86 프로세서의 제한 사항
      • 10.3.2 Y86 명령어
      • 10.3.3 Y86의 지정 모드
      • 10.3.4 Y86 명령어 인코딩하기
      • 10.3.5 Y86 명령어 인코딩의 예
      • 10.3.6 Y86 명령어 집합 확장하기
    • 10.4 80x86 명령어 인코딩하기
      • 10.4.1 명령어 오퍼런드 인코딩하기
      • 10.4.2 add 명령어 인코딩하기 - 몇 가지 예제들
      • 10.4.3 상수 오퍼런드 인코딩하기
      • 10.4.4 8비트, 16비트, 32비트 오퍼런드 인코딩하기
      • 10.4.5 명령어의 대안 인코딩
    • 10.5 명령어 집합 설계가 프로그래머에게 의미하는 것들
    • 10.6 더 많은 정보를 원한다면
  • 11장 메모리 구조와 구성
    • 11.1 메모리 계층
    • 11.2 메모리 계층의 동작 방식
    • 11.3 메모리 하위시스템에 존재하는 성능 차이
    • 11.4 캐쉬의 구조
      • 11.4.1 직접-사상 캐쉬
      • 11.4.2 완전 연관 캐쉬
      • 11.4.3 n-Way 집합 연관 캐쉬
      • 11.4.4 데이터 접근 유형에 따라 캐쉬 방식 결정하기
      • 11.4.5 캐쉬 라인 교체 정책
      • 11.4.6 메모리에 데이터 쓰기
      • 11.4.7 캐쉬 사용과 소프트웨어
    • 11.5 가상 메모리, 보호 장치, 페이징
    • 11.6 스래슁
    • 11.7 NUMA와 주변 장치들
    • 11.8 메모리 계층을 고려해서 소프트웨어 작성하기
    • 11.9 실행 중 메모리의 구성 방식
      • 11.9.1 정적/동적인 오브젝트, 결합, 수명기간
      • 11.9.2 코드, 읽기전용, 상수 영역
      • 11.9.3 정적인 변수 영역
      • 11.9.4 초기화되지 않은 영역
      • 11.9.5 스택 영역
      • 11.9.6 힙 영역과 동적인 메모리 할당
    • 11.10 더 많은 정보를 원하면
  • 12장 입력과 출력
    • 12.1 CPU를 외부와 연결하기
    • 12.2 포트를 시스템에 연결하는 다른 방법들
    • 12.3 입출력 메커니즘
      • 12.3.1 메모리-맵 입출력
      • 12.3.2 입출력과 캐쉬
      • 12.3.3 I/O-맵 입출력
      • 12.3.4 직접 메모리 접근
    • 12.4 입출력 속도 계층
    • 12.5 시스템 버스와 각 데이터 전송률
      • 12.5.1 PCI 버스의 성능
      • 12.5.2 ISA 버스의 성능
      • 12.5.3 AGP 버스
    • 12.6 버퍼링
    • 12.7 핸드쉐이킹
    • 12.8 입출력 포트의 타임아웃
    • 12.9 인터럽트와 폴링
    • 12.10 보호 모드 연산과 장치 드라이버
      • 12.10.1 장치 드라이버
      • 12.10.2 장치 드라이버 및 "파일들"과 통신하기
    • 12.11 각 PC 주변 장치에 대해
    • 12.12 키보드
    • 12.13 표준 PC 병렬 포트
    • 12.14 직렬 포트
    • 12.15 디스크 드라이브
      • 12.15.1 플로피 드라이브
      • 12.15.2 하드 드라이브
      • 12.15.3 RAID 시스템
      • 12.15.4 Zip 드라이브 등의 광 드라이브
      • 12.15.5 광학 드라이브
      • 12.15.6 CD-ROM, CD-R, CD-R/W, DVD, DVD-R, DVD-RAM과 DVD-R/W 드라이브
    • 12.16 테이프 드라이브
    • 12.17 플래시 저장장치
    • 12.18 램 디스크와 반도체 디스크
    • 12.19 SCSI 장치와 제어기
    • 12.20 IDE/ATA 인터페이스
    • 12.21 대용량 저장 장치의 파일 시스템
      • 12.21.1 자유공간 비트맵을 사용한 파일 관리
      • 12.21.2 파일 할당 테이블
      • 12.21.3 블록 리스트 파일 구조
    • 12.22 대용량 장치의 데이터를 조작하는 소프트웨어를 작성하기
      • 12.22.1 파일 접근 속도
      • 12.22.2 동기 I/O와 비동기 I/O
      • 12.22.3 I/O 형식의 의미
      • 12.22.4 메모리 맵 파일
    • 12.23 범용 직렬 버스
      • 12.23.1 USB 설계
      • 12.23.2 USB 성능
      • 12.23.3 USB 전송의 형식
      • 12.23.4 USB 장치 드라이버
    • 12.24 마우스, 트랙패드 및 다른 포인팅 장치
    • 12.25 조이스틱과 게임 제어기
    • 12.26 사운드 카드
      • 12.26.1 오디오 주변장치가 소리를 만드는 방법
      • 12.26.2 오디오와 MIDI 파일 형식
      • 12.26.3 오디오 장치를 프로그래밍 하기

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

 1쇄 오류/오탈자 

1) p28 표 2-6 ‘32비트’열의 마지막 행, $FFFF_8086 =>$0000_8086

2) p54 코드 8행의 주석, 논리 우측 쉬프트 => 산술 우측 쉬프트

3) p56 두 번째 코드 16행,
    mov( ax, packdeDate ); // 에러인 경우
    => mov( ax, packedDate );
        // 에러인 경우

4) p72 5행, (223)의 값만을 => (223)의 값만을

5) p104 주1의 두 번째 문장, 패키지를~봐야 한다. => 삭제

6) p136 9행, 그러나 264바이트가 => 그러나 264바이트가

7) p139 1행, 그림 6-4을 보면 주소 193에서 시작하는 워드가 있고, 주소 194에서
    => 그림 6-4를 보면 주소 188에서 시작하는 워드가 있고, 주소 186에서

8) p139 6행, (구현 8088 CPU와 같은) => (구형 8088 CPU와 같은)

9) p163 네 번째 문단 1행, 이 중 간접참조로 => 이중 간접 참조로

10) p167 두 번째 코드 13행,
     while( *aPtr이 가리키고 있는 다음 문자로 이동한다. ) => while( *ePtr !=’\0’ && *eptr !=’e’ )

11) p193 2행, 연산의 항원 0이다 => 연산의 항원은 0이다

12) p203 표 8-8 아래 두 번째 행, G=AB’ => G=A’B’

13) p223 6행, 공용 클럭 라인 => 공용 클럭 라인(CIK)

14) p227 그림 9-3, DD –or- SS => DD 또는 SS

15) p242 7행, op코드를 읽어온다 => op코드를 읽어서 해석한다

16) p301 9행, L1 캐쉬 이하 레벨 => L1 캐쉬 아래 레벨

17) p330 그림 12-1 아래 첫 번째 행, DB-24F => DB-25F

18) p360 아래에서 열 번째 행, 디스크 마스터(CD-ROM을 만드는 기계) => 마스터 CD

19) p363 두 번째 문단 1행,
    플래쉬는 읽기 전용 메모리(EEPROM) 기술을 사용했음에도 읽기와 쓰기가 모두 가능한 반도체 장치이다.
    => 플래쉬는 EEPROM 기술을 한 단계 발전시켜 읽기와 쓰기가 모두 가능하게 만든 반도체 장치이다.

20) p365 아래에서 세 번째 행, 한 바이트보다 작다는 => 한 바이트 작다는

21) p391 3행, 주변장치만으로는 => 주변 장치 조합만으로는

22) p391 세 번째 문단 5행, 파이어월 => 파이어와이어

23) p393 [12.23.3 USB 전송 형식] 2행, 동시(isochronous) => 등시(isochronous)


 2쇄, 3쇄 오류/오탈자 

1) p72 그림 4-2 아래 3행
초과-127 포맷에서는 20을 나타낼 때, => 초과-127 포맷에서는 20을 나타낼 때,

2) p72 그림 4-2 아래 5행
가수는 1.0이고 지수는 20, => 가수는 1.0이고 지수는 20,