컴퓨터 시스템 딥 다이브: C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템
2024년 01월 08일 출간
국내도서 : 2023년 12월 30일 출간
- eBook 상품 정보
- 파일 정보 pdf (22.18MB)
- ISBN 9791169217637
- 지원기기 교보eBook App, PC e서재, 리더기, 웹뷰어
-
교보eBook App
듣기(TTS) 가능
TTS 란?텍스트를 음성으로 읽어주는 기술입니다.
- 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를 읽을 수 있습니다.
- 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.
PDF 필기가능 (Android, iOS)
판매가 39,600원
10% 할인 | 5%P 적립이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.
카드&결제 혜택
- 5만원 이상 구매 시 추가 2,000P
- 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
- 리뷰 작성 시, e교환권 추가 최대 200원
작품소개
이 상품이 속한 분야
이 책은 C 프로그래밍부터 아키텍처 기초, 어셈블리 언어, 멀티스레딩 등 컴퓨터 시스템과 관련한 다양한 주제를 다룹니다. 컴퓨터 시스템과 여러 시스템이 공통으로 가진 주제, 시스템에서 효율적으로 실행되도록 프로그램을 설계하는 방법을 소개해 컴퓨터가 프로그램을 실행하는 방식을 이해하도록 돕습니다. 컴퓨터 시스템을 탐구하는 여정에 첫발을 내디뎌봅시다.
_0.1 컴퓨터 시스템이란 무엇인가?
_0.2 현대의 컴퓨터 시스템은 어떤 모습일까?
_0.3 이 책에서 배울 내용
_0.4 이 책을 시작하기에 앞서
__0.4.1 리눅스, C 및 GNU 컴파일러
__0.4.2 기타 표기법과 설명선
PART I C 프로그래밍 언어
Chapter 1 C 프로그래밍 기초
_1.1 C 프로그래밍 시작하기
__1.1.1 C 프로그램의 컴파일과 실행
__1.1.2 변수와 C의 숫자 타입
__1.1.3 C의 데이터 타입
_1.2 입력과 출력
__1.2.1 printf
__1.2.2 scanf
_1.3 조건문과 반복문
__1.3.1 C의 부울값
__1.3.2 C의 반복문
_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 정리
Chapter 2 C 프로그래밍 심화
_2.1 프로그램 메모리와 범위
_2.2 C의 포인터 변수
__2.2.1 포인터 변수
_2.3 포인터와 함수
_2.4 동적 메모리 할당
__2.4.1 힙 메모리
__2.4.2 malloc과 free
__2.4.3 동적 할당된 배열과 문자열
__2.4.4 힙 메모리와 함수를 위한 포인터
_2.5 C의 배열
__2.5.1 1차원 배열
__2.5.2 2차원 배열
_2.6 문자열과 문자열 라이브러리
__2.6.1 정적으로 할당된 문자열(문자 배열)
__2.6.2 동적으로 문자열 할당
__2.6.3 C 문자열과 문자를 조작하기 위한 라이브러리
_2.7 C 구조체
__2.7.1 C struct 타입 리뷰
__2.7.2 포인터와 구조체
__2.7.3 구조체의 포인터 필드
__2.7.4 구조체 배열
__2.7.5 자기 참조 구조체
_2.8 C의 입출력(표준 및 파일)
__2.8.1 표준 입출력
__2.8.2 파일 입출력
__2.8.3 C에서 텍스트 파일 사용
__2.8.4 stdio.h의 표준 및 파일 I/O 함수
_2.9 일부 고급 C 기능
__2.9.1 switch 구문
__2.9.2 커맨드 라인 인수
__2.9.3 void * 타입과 타입 리캐스팅
__2.9.4 포인터 산술
__2.9.5 C 라이브러리: 사용, 컴파일, 연결
__2.9.6 나만의 C 라이브러리 작성 및 사용
__2.9.7 C를 어셈블리로 컴파일
_2.10 정리
Chapter 3 C 디버깅 도구
_3.1 GDB로 디버깅
__3.1.1 GDB 시작하기
__3.1.2 GDB 예시
_3.2 GDB 명령어의 세부 사항
__3.2.1 GDB의 키보드 단축키
__3.2.2 자주 쓰는 GDB 명령어
_3.3 발그린드로 메모리 디버깅
__3.3.1 힙 메모리 접근 오류가 있는 예시 프로그램
__3.3.2 Memcheck를 사용하는 방법
_3.4 고급 GDB 기능
__3.4.1 GDB와 make
__3.4.2 실행 중인 프로세스에 GDB 연결
__3.4.3 포크에서 프로세스 따라가기
__3.4.4 시그널 제어
__3.4.5 DDD 설정 및 버그 수정
_3.5 어셈블리 코드 디버깅
__3.5.1 GDB를 사용한 바이너리 코드 검사
__3.5.2 DDD를 사용한 어셈블리 디버깅
__3.5.3 GDB 어셈블리 디버깅 명령어 및 예시
__3.5.4 어셈블리 디버깅에서 자주 사용하는 명령어 요약
_3.6 GDB로 멀티스레드 프로그램 디버깅
__3.6.1 GDB와 Pthreads
__3.6.2 GDB 스레드 관련 명령어
__3.6.3 예시
_3.7 정리
PART II 컴퓨터 시스템 기초
Chapter 4 바이너리와 데이터 표현
_4.1 숫자의 밑과 부호가 없는 정수
__4.1.1 10진수
__4.1.2 부호가 없는 2진수
__4.1.3 16진수
__4.1.4 저장 공간 제한
_4.2 진수 변환
__4.2.1 2진수와 16진수 변환
__4.2.2 10진수로 변환
__4.2.3 10진수를 변환
_4.3 부호가 있는 2진수 정수
__4.3.1 부호가 있는 수
__4.3.2 2의 보수
_4.4 2진 정수 산술 연산
__4.4.1 덧셈
__4.4.2 뺄셈
__4.4.3 곱셈과 나눗셈
_4.5 정수 오버플로
__4.5.1 총 주행 거리계 비유
__4.5.2 2진수 정수 오버플로
__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.8 2진수에서의 실수
__4.8.1 고정 소수점 표현
__4.8.2 부동 소수점 표현
__4.8.3 올림의 영향
_4.9 정리
Chapter 5 컴퓨터 아키텍처
_5.1 현대 컴퓨팅 아키텍처의 기원
__5.1.1 튜링 머신
__5.1.2 초기의 전기 컴퓨터
__5.1.3 그래서 폰 노이만은 무엇을 알았나?
_5.2 폰 노이만 아키텍처
__5.2.1 CPU
__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.1 ALU
__5.5.2 레지스터 파일
__5.5.3 CPU
_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 정리
PART III 어셈블리 프로그래밍
Chapter 6 C 아래로: 어셈블리에 뛰어들기
_6.1 어셈블리 학습의 이점
__6.1.1 가치 있는 프로그램의 세부 사항을 감추는 고수준의 추상화
__6.1.2 리소스가 제한돼 컴파일러를 사용할 수 없는 컴퓨팅 시스템
__6.1.3 취약점 분석
__6.1.4 시스템 수준 소프트웨어에서 중요한 코드 순서
_6.2 후속 장들에서 학습할 내용
Chapter 7 64비트 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.3 main 추적
_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 버퍼 오버플로에서 보호하기
Chapter 8 32비트 X86 어셈블리(Ia32)
Chapter 9 ARM 어셈블리
Chapter 10 어셈블리 핵심 교훈
_10.1 공통 특징
_10.2 더 읽어보기
PART IV 성능 최적화 및 관리
Chapter 11 저장소와 메모리 계층
_11.1 메모리 계층
_11.2 저장소
__11.2.1 1차 저장소
__11.2.2 2차 저장소
_11.3 지역성
__11.3.1 코드에서의 지역성 예
__11.3.2 지역성부터 캐시까지
__11.3.3 시간적 지역성
__11.3.4 공간적 지역성
_11.4 CPU 캐시
__11.4.1 다이렉트 맵트 캐시
__11.4.2 캐시 실패 및 어소시에이티브 설계
__11.4.3 셋 어소시에이티브 캐시
_11.5 캐시 분석과 발그린드
__11.5.1 이론적 분석과 벤치마킹
__11.5.2 실세계에서의 캐시 분석: 캐시그린드
_11.6 예측하기: 멀티코어 프로세서에서의 캐싱
__11.6.1 캐시 일관성
__11.6.2 MSI 프로토콜
__11.6.3 캐시 일관성 프로토콜 구현
__11.6.4 멀티코어 캐싱과 관련된 더 많은 정보
_11.7 정리
Chapter 12 코드 최적화
_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.3 massif를 사용한 메모리 프로파일링
_12.4 핵심 교훈
__12.4.1 좋은 데이터 구조와 알고리즘 선택하기
__12.4.2 가능한 표준 라이브러리 함수 사용하기
__12.4.3 느낌이 아닌 데이터에 기반한 최적화
__12.4.4 복잡한 코드는 여러 함수로 분할하기
__12.4.5 코드 가독성을 우선시하기
__12.4.6 메모리 사용에 주의하기
__12.4.7 컴파일러는 계속해서 개선되고 있다
Chapter 13 운영 체제
_13.1 OS의 동작과 실행
__13.1.1 OS 부팅
__13.1.2 인터럽트와 트랩
_13.2 프로세스
__13.2.1 멀티프로그래밍과 컨텍스트 스위칭
__13.2.2 프로세스 상태
__13.2.3 프로세스 생성 및 파기
__13.2.4 fork
__13.2.5 exec
__13.2.6 exit와 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 기능
PART V 병렬 프로그래밍
Chapter 14 멀티코어 시대의 공유 메모리 활용
_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.7 OpenMP를 사용한 암시적 스레딩
__14.7.1 프라그마
__12.7.2 헬로 스레딩: OpenMP 버전
__14.7.3 더 복잡한 예시: OpenMP에서의 CountSort
__14.7.4 OpenMP에 대해 자세히 알아보기
_14.8 정리
__14.8.1 주요 요점
__14.8.2 더 읽어보기
Chapter 15 기타 병렬 시스템 및 병렬 프로그래밍 모델
_15.1 이종 컴퓨팅: 하드웨어 가속기, 범용 GPU 컴퓨팅, CUDA
__15.1.1 하드웨어 가속기
__15.1.2 GPU 아키텍처 개요
__15.1.3 GPGPU 컴퓨팅
__15.1.4 CUDA
__15.1.5 기타 GPGPU 프로그래밍 언어
_15.2 분산 메모리 시스템, 메시지 전달 및 MPI
__15.2.1 병렬 및 분산 처리 모델
__15.2.2 통신 프로토콜
__15.2.3 메시지 전달 인터페이스
__15.2.4 MPI 헬로 월드
__15.2.5 MPI 스칼라 곱셈
__15.2.6 분산 시스템의 과제
_15.3 엑사스케일 그 이상: 클라우드 컴퓨팅, 빅 데이터, 그리고 컴퓨팅의 미래
__15.3.1 클라우드 컴퓨팅
__15.3.2 맵리듀스
__15.3.3 미래를 바라보며: 기회와 도전
효율적인 프로그램을 추구하는 개발자를 위한 컴퓨터 과학 안내서
이 책은 컴퓨터가 프로그램을 실행하는 방식을 이해할 수 있도록 컴퓨터 시스템 입문 또는 컴퓨터 구조와 같은 컴퓨터 과학의 중급 주제를 주로 다룬다. C 언어로 프로그래밍하는 표면부터 회로가 돌아가는 깊은 바닥까지 한 꺼풀씩 벗겨보며 효율적인 프로그램을 설계하는 데 꼭 필요한 컴퓨터 과학 지식만을 정리해 소개한다. 컴퓨터를 여러 계층으로 나누어 살펴보며 컴퓨터가 회로에서 프로그램을 실행하는 방법과 프로그램의 성능 평가 방법, 병렬 프로그램 작성법 같은 의문을 해결하면 더 효율적인 프로그램을 만들 수 있게 될 것이다.
대상 독자
● 내가 짠 프로그램이 어떻게 실행되는지 궁금한 프로그래밍 입문자
● 시스템 프로그래밍, OS 등 전공 관련 배경 지식이 맛보고 싶은 대학생
● 더 효율적인 프로그램을 설계하고 싶은 주니어 개발자
배우는 내용
● 고수준 언어부터 바이너리 표현, 회로 단계까지 컴퓨터가 프로그램을 실행하는 방법
● C와 어셈블리 언어로 프로그래밍하는 방법
● 컴퓨터 시스템이 프로그램 성능에 미치는 영향
● pthread를 사용하여 공유 메모리 병렬 프로그램을 구현하는 방법
작가정보
대학 졸업 후 소프트웨어 엔지니어, 소프트웨어 품질 엔지니어, 애자일 코치 등 다양한 부문에서 소프트웨어 개발에 참여했다. 재미있는 일, 나와 조직이 성장하도록 돕는 일에 보람을 느껴 2019년부터 번역을 시작했다. 옮긴 책으로는 『인간 vs. AI 정규표현식 문제 풀이 대결』(제이펍, 2023), 『실무에 바로 쓰는 일잘러의 마이크로카피 작성법』(제이펍, 2023), 『애자일 개발의 기술 2/e』(에이콘, 2023), 『타입스크립트, 리액트, Next.js로 배우는 실전 웹 애플리케이션 개발』(위키북스, 2023), 『플레이어를 생각하는 게임 UI 디자인 노하우』(한빛미디어, 2023) 등이 있다. 이 책은 옮긴이 소개를 작성하는 시점으로 44번째 번역서이다.
TPM과 애자일 코치 역할을 주로 하고 있다.
코딩에 소질이 없는 것 같아 웹디자인을 취미로 학부 시절을 보냈는데, 별안간 네트워크 엔지니어로 업을 시작했다. 그마저도 회사 사정으로 소프트웨어 엔지니어로 역할이 변경되어서 모바일, 프런트엔드, 백엔드, 아키텍트, PM, PO를 거쳐 TPM과 애자일 코치의 역할에 이르렀다. 정착하지 못해 떠돌았던 실패에 가까운 시간이 좋은 자양분이 되어 다양한 역할자와 편안하게 소통할 수 있는 넓고 얕은 지식을 가진 TPM 겸 애자일 코치가 될 수 있었다.
경험하고 배우고 나누는 일을 기꺼이 즐기기에 이번 책의 공동 번역으로 참여했다.
이 상품의 총서
Klover리뷰 (0)
- - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
- - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다. (5,000원 이상 상품으로 변경 예정, 2024년 9월 30일부터 적용)
- - 리워드는 한 상품에 최초 1회만 제공됩니다.
- - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
- 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
- 도서와 무관한 내용의 리뷰
- 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
- 의성어나 의태어 등 내용의 의미가 없는 리뷰
구매 후 리뷰 작성 시, e교환권 100원 적립
문장수집
- 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
- e교환권은 적립일로부터 180일 동안 사용 가능합니다.
- 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다. (5,000원 이상 eBook으로 변경 예정, 2024년 9월 30일부터 적용)
- 리워드는 한 상품에 최초 1회만 제공됩니다.
- sam 이용권 구매 상품 / 선물받은 eBook / 오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.
구매 후 문장수집 작성 시, e교환권 100원 적립
신규가입 혜택 지급이 완료 되었습니다.
바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!
- 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
- 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
- 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
가장 와 닿는 하나의 키워드를 선택해주세요.
총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.
신고 사유를 선택해주세요.
신고 내용은 이용약관 및 정책에 의해 처리됩니다.
허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
있으니 유의하시어 신중하게 신고해주세요.
이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.
구매 후 90일 이내 작성 시, e교환권 100원 적립
eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.
차감하실 sam이용권을 선택하세요.
차감하실 sam이용권을 선택하세요.
선물하실 sam이용권을 선택하세요.
-
보유 권수 / 선물할 권수0권 / 1권
-
받는사람 이름받는사람 휴대전화
- 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
- 열람권은 1인당 1권씩 선물 가능합니다.
- 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
- 선물한 열람권의 등록유효기간은 14일 입니다.
(상대방이 기한내에 등록하지 않을 경우 소멸됩니다.) - 무제한 이용권일 경우 열람권 선물이 불가합니다.
첫 구매 시 교보e캐시 지급해 드립니다.
- 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
- 한 ID당 최초 1회 지급 / sam 이용권 제외
- 구글바이액션을 통해 교보eBook 구매 이력이 없는 회원 대상
- 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)