한빛출판네트워크

IT/모바일

컴퓨터 시스템 딥 다이브

C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템

한빛미디어

번역서

판매중

컴퓨터 시스템 딥 다이브
좋아요: 4
  • 저자 : 수잰 J. 매슈스 , 티아 뉴홀 , 케빈 C. 웹
  • 역자 : 김모세 , 권성환
  • 출간일 : 2023-12-30
  • 페이지 : 788쪽
  • ISBN : 9791169211765
  • 물류코드 :11176

합계 : 49,500

  • 코드 아래 숨겨진 아름답고 놀라운 컴퓨터 아키텍처 대탐험

     

    컴퓨터 시스템은 바다와 비슷합니다. 현대 생명의 기원이 원시 바다 깊은 곳에서 시작됐다고 여겨지듯, 현대의 프로그래밍도 초기 컴퓨터 아키텍처에서 처음 시작됐습니다. 최초의 프로그래머들은 최초의 컴퓨터의 하드웨어 다이어그램을 연구하여 최초의 프로그램을 만들었습니다. 위에서 보면 어둡고 위험해 보이지만, 수면 아래에서 아름답고 놀라운 세계가 펼쳐지는 바다처럼 코드 아래 숨겨진 아름답고 놀라운 컴퓨터 아키텍처를 만나봅시다.

     

    이 책은 C 프로그래밍부터 아키텍처 기초, 어셈블리 언어, 멀티스레딩 등 컴퓨터 시스템과 관련한 다양한 주제를 다룹니다. 컴퓨터 시스템과 여러 시스템이 공통으로 가진 주제, 시스템에서 효율적으로 실행되도록 프로그램을 설계하는 방법을 소개해 컴퓨터가 프로그램을 실행하는 방식을 이해하도록 돕습니다. 컴퓨터 시스템을 탐구하는 여정에 첫발을 내디뎌봅시다.

     

    700_상세이미지_컴퓨터 시스템 딥 다이브.jpg

  • [저자] 수잰 J. 매슈스

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

    [저자] 티아 뉴홀

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

    [저자] 케빈 C. 웹

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

    [역자] 김모세

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

    [역자] 권성환

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

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

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

     

  • Chapter 0 시작하며

    _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를 사용하여 공유 메모리 병렬 프로그램을 구현하는 방법
    • 컴퓨터 시스템 딥 다이브 책을 읽어보았다. 고수준 언어부터 바이너리 표현, 회로에 이르기 까지 컴퓨터가 프로그램을 실행하는 방법을 소개하는 책이었다.

      2진수에서 실수를 표현하는 방법을 이해하는 것을 쉽진 않은데 고정 소수점 표현과 부동 소수점 표현이 있고 부동 소수점 표현이 더 다루기 어려운 방식으로 알고있다.

      메모리 체크 및 메모리 검사를 하는 것은 중요한데 특히 메모리 안정성이 보장되지 않은 언어에선 더욱 그러하다. C/C++로 만든 많은 프로그램들이 실 생활에서 상당 부분 잘 동작하고 있는 것은 대단한 일이라 생각이 든다.

      RISC/CISC는 CPU 명령어 아키텍처와 관련이 있는데 우리가 사용하는 인텔 CPU는 CISC고 ARM CPU는 RISC라고 알고있다.

      CPU 회로는 AND OR XOR MUX등의 논리 회로로 작동하는데 이것들에 대한 설명도 함께 실려있었다. 이런것들을 통해 카운터 회로, 연산 회로등의 기본 연산 회로에 대한 설명도 실려있었다.

      CPU 파이프라인은 기본적으로 CPU 연산을 더 효율적으로 하기 위해서 탄생한 것으로 알고있는데 CPU 처리 라인을 잘게 쪼개서 더 효율적으로 수행할 수 있게 하기 위해 고안된 것으로 알고있다.

      CPU와 운영체제가 프로그램을 실행하는 규약이 있는데 이것을 호출 규약이라고 알고 있다. 호출 규약 외에도 이 부분은 복잡한 규칙들로 이루어져 동작하는 것으로 알고 있고 정확한 것은 찾아봐야 하는데 이 책에서 다시 한번 읽을 수 있었다.

      병렬 처리에서 캐시 일관성은 매우 복잡한 것으로 알고있는데 프로그램이 캐시 메모리가 코어 마다 존재하고 또 계층별로 존재하는데 CPU 메모리 모델에 따른 일관성이 보장되야 하기 때문으로 알고 있다.

      이것으로 컴퓨터 시스템 딥 다이브 책의 리뷰를 마치고자 한다. 이 글은 한빛미디어로 부터 책을 증정받아 작성되었습니다.

    •  기술의 고도화가 되면서 컴퓨터란 존재는 점점 깊은 바다에 잠기게 되어 개발자들은 수면 위에서 추상화된 수면의 컴퓨터를 마주하게 됐다.

      늘 심해가 궁금한 개발자들에게 딱 좋은 책이 신권으로 나왔다.

      이 책은 전공서까지의 깊이는 부담스럽지만, 시중에 나온 책보다 깊이 있는 내용을 원하는 기술자들에게 권하고 싶다.

      책 저자는 독자의 수준을 컴퓨터과학 전공 1학년 수준이라고 가정하여 컴퓨터과학 전공들을 하나 씩 소개해준다.

      심지어 원서를 무료로 제공하니 1+1 기분이 좋다^ㅁ^

      그러나 어디까지 전공들을 소개해주는거지 전공서가 아니다보니 심화 공부는 특정 주제만 담고 있는 책들을 추천한다.

    • 

      이 책은 대학 전공 서적같은 느낌이기도 하고, '컴퓨터 시스템'의 심화 전공같은 느낌이기도 합니다.

      사전 수강 과목으로는 C언어, 컴퓨터 구조, 운영체제, 프로그래밍 언어 등이 있겠습니다.

      컴퓨터 개발, 엔지니어로 공부하는 이들이라면 한번쯤 수강해볼만한 서적이라고 할 수 있겠습니다.

      대학 강의에서도 서적을 모두 읽지않고 부분부분을 읽듯이, 처음부터 끝까지 한번 정독을 한다면 그만큼 넓고 깊은 지식이 생길 수 있겠지만, 결코 쉽지는 않을 것입니다.

       

      그러므로 IT 개발자와 IT 관련 엔지니어에게 이 책을 추천합니다.

      

    • 비전공자로서 컴퓨터의 본질에 대해 다가가기: "컴퓨터 시스템 딥 다이브" 

       

      비전공 프론트엔드 개발자로서 컴퓨터시스템에 대한 지식이 많이 부족하다보니, 여러책을 찾아보던 중 "컴퓨터 시스템 딥 다이브" 를 발견했다. 컴퓨터의 본질에 대한 깊은 이해를 쌓을 수 있는 이 책은, C뿐만 아니라 python의 예제도 제공하고 있어 c언어를 모르는 독자여도 따라하면서 이해할 수 있다고 생각했다.

       

       

       

       

      https://www.yes24.com/Product/Goods/124301248

      컴퓨터 시스템 딥 다이브 - 예스24

      코드 아래 숨겨진 아름답고 놀라운 컴퓨터 아키텍처 대탐험컴퓨터 시스템은 바다와 비슷합니다. 현대 생명의 기원이 원시 바다 깊은 곳에서 시작됐다고 여겨지듯, 현대의 프로그래밍도 초기 컴

      www.yes24.com

       

       

      그래서 픽하게 된 딥다이브 시리즈 중 하나인 " 컴퓨터 시스템 딥 다이브",

       

       

      이 책은 시작은 컴퓨터 시스템에 대한 기본적인 이해를 제공하며, 현대의 컴퓨터가 어떻게 동작하는지를 알려준다. 이는 컴퓨터 과학에 대한 경험이 없는 독자들에게도 친숙한 내용으로 시작하여 부담없이 공부할 수 있게 도와준다.

       

       

      1장에서는 C 프로그래밍 언어로의 여정이 펼쳐진다. 변수, 데이터 타입, 함수, 배열, 구조체 등 C 언어의 기초를 탄탄하게 다지면서, 독자들은 프로그래밍의 기본 원리를 체득한다. 이는 현대 프로그래밍 언어들의 기초가 되는 C 언어를 통해 컴퓨터의 핵심 원리를 깊이 있게 이해할 수 있게 해준다.

       

       

       

       

       

       

      C언어의 산을 넘으면 어셈블리 언어의 세계로 발을 내디딘다. 여기서는 프로그램 메모리와 범위, 포인터, 동적 메모리 할당 등 어셈블리 언어의 특징적인 개념들을 다루면서, 어셈블리 언어를 통해 하드웨어와 소프트웨어 간의 상호작용을 체험할 수 있다. 이 파트가 가장 중요하다고 생각한다.

       

       

       

      책의 또 다른 강점은 디버깅 도구, 최적화, 그리고 컴퓨터의 성능 향상에 대한 내용을 폭넓게 다룬다는 점이다. GDB를 이용한 디버깅, 코드 최적화, 메모리 구조 최적화 등 다양한 주제를 통해 실전에서 활용 가능한 기술들을 제시한다.

       

       

      이어지는 파트에서는 컴퓨터 시스템의 기초, 바이너리와 데이터 표현, 컴퓨터 아키텍처에 대한 심층적인 내용이 펼쳐진다. 논리 게이트, 회로, 프로세서, 파이프라이닝 등 하드웨어와 소프트웨어의 상호작용 원리를 통해 컴퓨터에 대해 자세히 이해할 수 있도록 되어있다.

      특히, 바이너리와 데이터표현은 늘 언제나 힘든 파트였는데 조각 조각 나누어 잘 정리되어 있고, NOTE를 이용해 독자가 충분히 이해 할 수 있게 돕는다.

       

       

       

       

       

      64비트 X86 어셈블리부터 32비트 X86 어셈블리, 그리고 ARM 어셈블리까지, 다양한 어셈블리 언어를 통해 다양한 환경도 제공한다.

      더불어 병렬 프로그래밍 파트에서는 멀티스레드 프로그래밍의 기초부터 시작하여 동기화, 락, 프로세스 간 통신, 캐시 일관성 등 다양한 병렬 프로그래밍 관련 주제를 다룬다. 이를 통해 독자들은 실제 상황에서의 다중 스레드 처리에 대한 통찰력을 얻고, 효과적으로 병렬화된 프로그램을 작성하는 방법을 배울 수 있다.

       

      책의 마무리는 운영 체제와 보안에 대한 파트로 마무리된다. 프로세스와 스레드의 관리, 메모리 보호, 파일 시스템, 보안 및 암호화에 대한 내용을 자세하게 설명하며, 운영 체제와 보안에 대한 심화된 내용은 컴퓨터 과학에 대한 폭넓은 지식을 확장하고자 하는 독자들에게 적격이다.

      이 책은 이론을 넘어서 실전 경험을 제공하는 데 있어서 독보적이다. 각 파트마다 풍부한 예제와 실습을 통해 이론을 실제로 체험하고 응용하는 기회를 제공한다.

       

      이를 통해 개발자들은 문제 해결 능력을 향상시키고, 더 나은 소프트웨어를 개발할 수 있게 만드는 밑거름이 될 것이다. 

      "컴퓨터 시스템 딥 다이브"는 컴퓨터 과학의 깊이 있는 접근과, 독자들은 이 책을 통해 컴퓨터의 본질을 파악하고, 이를 통해 창의적이고 혁신적인 소프트웨어를 개발하는 데 필요한 역량을 키울 수 있을 것이다. 

       

      이 책을 읽고 난 뒤 다음 독자들이 미리 알고 접근했으면 좋을 것을 생각해보았다.

      C언어나 파이썬언어의 기본을 미리 알고 이 책을 읽게 된다면 독자가 얻어가는 지식은 무한정일것이고, 컴퓨터에 대한 지식이 전무한 독자라면 가볍게 여러번 읽고 이해하는 쪽을 추천한다.

       

       

       

       

        "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

       

    • 『컴퓨터 시스템 딥 다이브』는 프로그램이 실행되는 방식을 이해하기 위한 컴퓨터 시스템(컴퓨터 아키텍처, 컴퓨터 구조, 병렬 컴퓨팅 등)을 소개하는 책입니다.

       

       

      컴퓨터 시스템은 사용자가 컴퓨터에서 프로그램을 운용할 수 있도록 컴퓨터 하드웨어와 특정한 시스템 소프트웨어를 결합한 것을 말합니다. 책은 C언어부터 차례대로 아키텍처, 어셈블리, 운영체제, 병렬 프로그래밍까지 소개하며, 낮은 계층인 하드웨어부터 높은 계층인 시스템 프로그래밍까지 전반적인 컴퓨터 시스템을 다룹니다.

       

       

      컴퓨터 시스템이 무엇이고 프로그램이 어떤 원리로 실행하는지 이해하면,

      효율적으로 실행되는 코드를 설계하고 시스템의 기능을 최대한 활용할 수 있다.

      p. 27

       

       

      책은 총 5부와 15장으로 구성되어 있습니다. 
      주제별로 독립적인 내용을 다루고 있기 때문에, 순서대로 진행하지 않고 본인이 학습하고자 하는 부분만 읽으면서 학습해도 됩니다.

       


      1부에서는 C 프로그래밍 언어에 대해 소개합니다. C 프로그래밍의 기초와 심화, 디버깅하는 법을 살펴봅니다.
      2부에서는 컴퓨터 시스템을 이해하는 기초인 바이너리와 데이터 표현법, 폰 노이만 아키텍처를 기반으로 한 컴퓨터 아키텍처를 소개합니다.
      3부에서는 기계가 해석할 수 있는 기계와 가장 근접한 어셈블리 프로그래밍에 대해 살펴봅니다. 
      4부에서는 성능에 영향을 미치는 요소는 무엇이고, 프로그램을 어떻게 최적화할 수 있는지에 대해 소개합니다. 이를 위해 저장소 메모리 계층 구조, 코드 최적화, 운영체제를 살펴봅니다.
      5부에서는 공유 메모리와 스레드를 통한 최적화와 병렬 프로그래밍(이종 컴퓨팅, 분산 메모리 시스템, 고성능 컴퓨팅(HPC) 등)에 대해 소개합니다.

       

       

      책에서 다루는 핵심 주제는 바로 ‘실행’입니다. ‘어떻게 하면 컴퓨터 시스템에서 실행을 효율적으로 할 수 있을까?’를 중점적으로 다룬 책이라고 할 수 있습니다. C언어로 작성된 프로그램이 어떻게 실행되고, 어떻게 구조를 변경하여 성능을 최적화할 수 있는지 알 수 있게 하는 책이었습니다.

       

       

      책에서 좋았던 점
      ✅ C 언어의 문법과 기능을 파이썬과 비교하며, 기본부터 심화적인 부분까지 포괄적으로 배울 수 있었습니다.
      ✅ 다른 책에서 잘 다루지 않는 어셈블리 언어를 소개하여 컴퓨터 구조와 운영체제의 내부 동작을 깊이 이해할 수 있었습니다.
      ✅ 책 한 권으로 컴퓨터 시스템을 학습할 수 있는 구성. 여러 주제를 한 권으로 배울 수 있어 가성비 측면에서 좋았고, 다루는 주제가 독립적이기 때문에 원하는 순서로 읽을 수 있어 매력적이었습니다.
      ✅ 부연 설명을 하는 글 상자, 중요한 정보를 강조하는 노트, 주의를 기울여야 하는 경고로 효과적인 학습이 가능했습니다.

       

       

      책에서 아쉬웠던 점
      ❗ 전반적으로 어려운 책의 난이도. 컴퓨터 공학이 아닌 다른 전공자나 입문자가 읽기에는 어려운 책인 것 같습니다. 
      ❗ 컴퓨터 시스템의 전반적으로 다루지만 어느 부분(어셈블리)은 심화적인 내용으로 깊숙이 배우는 반면, 어느 부분(운영체제)은 기초적인 내용만 다뤄서 아쉬웠습니다.  
      ❗ 독자 스스로 풀어 볼 수 있는 문제가 부족했습니다.

       

      책을 읽기 전 '굳이 어셈블리를 배워야 할까?' 궁금했었습니다. 우리가 작성한 코드를 변환하고, 오류를 발견하고 타입까지 추론해 주는 컴파일러의 발달로 인해 어셈블리를 배워야 할 이유가 점점 사라지고 있지만 저자는 4가지 이유로 설명하고 있습니다.

       

      1. 가치 있는 프로그램의 세부사항을 감추는 고수준의 추상화
      2. 리소스가 제한돼 컴파일러를 사용할 수 없는 시스템
      3. 취약점 분석
      4. 시스템 수준의 소프트웨어에서 중요한 코드 순서

       

      이외에도 책에서는 유용한 팁들이 가득합니다. 악의적인 코드를 삽입해 의도적으로 다른 프로그램이 실행되게 만드는 버퍼 오버플로 악용을 구현 후 보호하는 방법(실행 영역 제한, 길이가 지정된 C언어 함수의 사용 등), 디버깅이 필요한 이유(버그를 발견하고 파악)와 디버깅 도구(GDB, 발그린드)의 사용법 소개, 코드 성능을 개선하고자 하기 위한 효과적인 방법(좋은 데이터 구조와 알고리즘 선택하기, 메모리 사용에 주의하기, 복잡한 코드는 여러 함수로 개선하기) 등 주니어 개발자부터 숙련자까지 도움이 뼈와 살이 될 조언이 많이 있었습니다.

       

      책을 통해 무엇을 얻을 수 있을지 궁금한 독자들을 위해 책의 표지가 많은 힌트를 줍니다. 잠수복을 입고 깊은 바닷속으로 들어가 조개를 발견하는 표지는, 컴퓨터 세계 속으로 들어가 하나하나 발견하는 호기심과 탐구력입니다? 책을 다 읽게 되면 아득하게만 보였던 컴퓨터의 세계가 흥미롭고 아름다운 세계였다는 것을 알게 되었습니다.   


      책을 읽고 느낀 점을 한 마디로 표현하면 ‘전주비빔밥’입니다. 각 주제별로 독립적이면서, 유기적으로 구성되어 따로 읽어도 될 만큼 충분한 학습이 가능했습니다. 미국 대학교에서 교재(미 육군사관학교, 캘리포니아 공과대학, 듀크대학교 등)로 사용되는지 알 수 있을 만큼 탄탄한 구성이 돋보였던 책이었습니다.

       

       

      클라우드 컴퓨팅과 HPC 생태계가 통합을 도모하고

      데이터 급증 사태에 대비할 때 컴퓨터 시스템의 미래는 흥미진진한 가능성으로 가득해진다.

      5부 병렬 프로그래밍, p. 774

       

       

      특히 저에게 많은 도움이 되었던 부분은 병렬 프로그래밍이었습니다. HPC(High Performance Computing)와 HDA(High-End Data Analysis)라는 두 축을 토대로 HPC에서는 AI 시대에 주목을 받는 하드웨어 가속기(GPGPU), 엔비디아의 CUDA, HDA에서는 클라우드 컴퓨팅, 분산 메모리 시스템과 빅데이터 처리의 핵심인 맵리듀스에 대한 소개까지 최신 병렬 프로그래밍 시스템에 대해 알 수 있었습니다.

       

      추천 독자로는 C언어, 컴퓨터 구조와 운영체제 기초에 대해 학습하고 더 심화적인 내용을 공부하고 싶은 사람, 내가 만든 코드가 어떻게 작동하는지 궁금한 대학생, CS 지식의 밑바닥부터 공부하고 싶은 개발자에게 추천합니다.  

       

       

      "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

    • 컴퓨터 과학 분야에 첫발을 들이는 순간부터 개발자들은 자신이 작성한 코드가 컴퓨터 내부에서 어떻게 실행되는지에 대한 궁금증을 가진다. ”컴퓨터 시스템 딥 다이브“는 이런 질문들에 답할 수 있는 필독서로 자리 잡을 것이라 확신한다.

       

      ✅ 학습 목표 

      이 책에서 배울 내용은 다음과 같다.

      • 컴퓨터가 프로그램을 실행하는 방법: 고급 프로그래밍 언어로 표현된 프로그램이 하드웨어 저수준 회로에 의해 어떻게 실행되는지 자세히 알 수 있음
      • 프로그램 성능과 관련된 시스템 비용을 평가하는 방법: 메모리 계층 구조가 프로그램 성능에 미치는 영향, 프로그램 성능에 관한 운영체제 비용, 코드 최적화 팁 등을 알 수 있음
      • 병렬 프로그래밍으로 병렬 컴퓨터의 성능을 활용하는 방법: 멀티코어 하드웨어, 운영체제 스레드, POSIX 스레드 라이브러리(Pthread)

       

      1️⃣ C프로그래밍 언어 초반부는 컴퓨터 시스템의 기본적인 개념 소개로 시작한다. C언어의 기초를 다루며 입출력, 조건문, 반복문, 함수, 배열, 문자열, 그리고 구조체에 대한 철저한 설명을 통해 기본적인 구조를 이해하도록 한다.

       

      다음 장에서는 포인터, 동적 메모리 할당, 배열, 문자열 라이브러리, 구조체, 입출력 등 고급 C 기능들을 중점적으로 다루며 이들 주제의 핵심을 명확히 이해할 수 있도록 돕는다. 특히 동적 메모리 할당 섹션에서는 C언어가 컴퓨터 메모리를 어떻게 할당하는지에 대해 그림을 통해 설명하여 개념을 시각적으로 쉽게 파악할 수 있도록 한다. 또한 힙 메모리와 관련하여 malloc과 free 함수의 작동 방식이 상세히 기술되어 있어 이해하기에 용이하다.

       

      2️⃣ 컴퓨터 시스템 기초 이 장에서는 바이너리와 데이터 표현, 컴퓨터 아키텍처, 그리고 어셈블리 프로그래밍을 다루며 프로그램이 실제로 컴퓨터의 회로에서 어떠한 과정을 거쳐 실행되는지 상세히 설명한다. 주된 내용은 비트와 관련된 다양한 개념을 다루며, 진수 변환, 보수 개념, 2진 산술 연산, 오버플로, 비트와이즈 연산, 시프트 연산 및 실수 데이터의 표현(고정 소수점 및 부동 소수점)을 설명한다.

       

      클럭 속도의 증가가 물리적 한계와 전력 소모 문제에 부딪히면서 CPU 성능 향상을 위한 대안으로 멀티코어 프로세서 기술이 발전하게 되었다는 이야기를 해주고 있다. 파이프라이닝은 명령어 처리 과정을 여러 단계로 나누어 동시에 처리함으로써 처리 속도를 향상시키지만, 데이터 해저드와 제어 해저드와 같은 여러 문제에 주의해야 한다는 점 역시 서술되어 있다.

       

      3️⃣ 어셈블리 프로그래밍 

      이 장 이후의 내용은 C언어를 바탕으로 한 어셈블리어 프로그래밍에 초점을 맞춘다. 어셈블리어의 기본적인 개념을 시작으로 함수, 배열, 구조체 등의 다양한 프로그래밍 구조가 어셈블리어에서 어떻게 구현되는지 예제 코드를 통해 상세히 설명한다. 특히 main 함수가 어셈블리어에서 어떤 과정을 거쳐 실행되는지에 대한 설명은 도식화된 그림을 통해 더 명확하게 이해할 수 있었다. 또한 버퍼 오버플로를 이용한 보안 취약점 악용에 관한 실제 사례를 간략히 다루면서 어떻게 취약점을 발견했는지 설명한다. 코드 예시를 통해 오버플로를 발생시키는 방법과 이로 인해 생기는 보안상의 위협을 이해할 수 있다. 추가적으로 대응하는 방법이 기술되어 검토를 할 수 있는 시간을 가질 수 있었다.

       

      4️⃣ 성능 최적화 및 관리 

      이 장 이후의 부분은 저장소와 메모리 계층, 코드 최적화, 그리고 운영 체제를 통한 프로그램 성능 최적화 방법을 다룬다. 코드 최적화에 앞서 성능 못지 않게 주목해야 할 요소는 메모리 계층이다. 메모리 계층 구조에 대한 깊은 이해는 성능 개선을 위한 적절한 전략을 세울 수 있도록 한다. 추가적으로 다이렉트 맵트 캐시의 개념을 소개하고 캐시에서 데이터를 식별하고 접근하는 과정을 도식화하여 설명한다.

       

      ✅ 결론 

      이 책은 프로그래밍을 막 시작한 입문자이게도 추천되는 도서이지만 책이 후반부로 갈 수록 난이도가 점차 상승하어 현직 주니어 개발자에게도 유익한 내용을 많이 담고 있음을 확신한다. 이번 서평을 작성하면서 컴퓨터 시스템에 대한 이해가 부족하다는 것을 느끼게 되었다. 좋은 경험을 할 수 있게 기회를 준 한빛미디어에게 다시 한 번 감사의 말씀을 드린다.

       

      ’이 서평은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.‘

    • 우리는 문자, 기호, 숫자 등으로 이루어진 코딩 문서가 전원이 인가된 컴퓨터 시스템 안에서 어떻게 작동하고 그것이 최종 결과로 나타나는 절차와 원리에 대해 궁금하지 않을 수 없다.

      위 사진은 이 책의 앞 표지 모습이다.

      잠수부가 깊은 바다 속을 탐험하는 모습이 보이고 큰 조개를 열어 그 안에 CPU를 살펴보는 그림이다.

      이것으로 이 책이 무엇을 말해줄 지 단박에 느껴진다.

       

      C언어부터 어셈블러, 아키텍쳐, OS까지 한 꺼풀 씩 벗겨가면서 이 책의 제목처럼, 이 책의 안내를 따라 컴퓨터 시스템의 심연으로 Deep 하게 Dive 하는 경험을 맛볼 수 있다.

       

      저의 상세한 리뷰는 아래 링크에 있으니 클릭해서 보시면 훨씬 자세한 저의 독서 경험을 보실 수 있을 것입니다.

      https://blog.naver.com/kreview88/223362700956

       

      일독을 마쳤지만, 앞으로 가까이 두고 몇번 더 읽어보려고 합니다.

      이 책을 근간으로 해서 자신이 더 알고 싶은 방향으로 가치치기를 해나가는 독서법도 좋을 것 같습니다.

      코딩을 하고 있지만 컴퓨터 시스템 작동 원리에 대해 잘 모르시는 분이나 개발자가 아니어도 코딩과 컴퓨터 구조에 대해 알고 싶은 것이 많으신 독자라면 이 책을 추천합니다.

       

      이번 리뷰는 “한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”

       

      읽어주셔서 감사합니다 ^^

       

    • "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

      C 언어에 대해 설명을 할 때, 메모리 구조를 그림으로 설명하기 때문에 이해가 쉽다
      차근 차근 알려주려는 작가의 의도때문인지 책의 챕터간 난이도 폭이 크게 느껴진다
      처음엔 C에 대한 기초부터 알려주고, 2진수에 대해 알려준다
      5장 컴퓨터 아키텍처에서는 현대 컴퓨팅 아키텍처가 어떤 흐름으로 만들어지게 되었는지 역사적 사실을 통해 흥미롭게 전개하기 시작하여 논리 회로 등 전공 시간에 학습했던 내용들을 기억나게 하는 내용들이 담겨있다. 물론 그림도 친절하게 담겨있고, 설명도 알기 쉽게(물론 처음 배운다는 가정을 한다면 쉽지 않을 수 있다..) 되어있다.
      7장에서는 어셈블리에 대해서도 학습이 가능한데, 마냥 어렵기만 한 것이 아니라 그림을 정말 많이 넣었다. 개인적으로 책을 읽을 때 머리속에 이미지를 많이 생각해보는 편인데, 이 책은 그림이 많아서 이해하기 더욱 편했다.(물론 그렇다고 이 책을 읽는다고 어셈블리 고수가 되거나 그렇진 않을 것 같다..)
      운영체제나 병렬프로그램에 대해 다룬 장들의 내용도 기본적인 개념을 이해하고 키워드를 알아가기에 좋은 편이다.

      사실 책의 이름이 조금 애매하다고 느낀다. 영어권에서도 그렇게 표현하는 지는 모르겠으나 대게의 한국인이 특정 기술에 대해 딥 다이브 했다라고 표현하면 굉장히 깊게 팠다는 의미이다.
      이 책의 이름은 컴퓨터 시스템 딥 다이브인데, 폭 넓은 주제에 대해 다루다보니 생각만큼 깊이 있게 들어가진 않은 것 같다.
      하지만, 지은이의 말에도 컴퓨터 과학과 1학년 정도의 지식 수준을 대상으로 집필했다고 적혀있고, 이 책의 의도는 꽤나 넓은 폭의 주제를 다루며 어느정도 깊이 있게 주제들을 학습하게 해주고, 좀 더 깊숙한 학습을 위한 참고서로 사용하길 바랬던 것 같다.

      총평을 하자면 이 책을 가지고 학습을 하면서 더 깊이 있게 공부하고 싶은 부분들은 해당 주제를 깊게 다루는 책들을 같이 보면 더 좋을 것 같다. (사실 운영체제 하나만 해도 다들 아는 공룡책의 두께가 나온다)



    •  

       

      수잰 J.매슈스, 티아 뉴홀, 케빈 C. 웹(지음)/ 한빛미디어(펴냄)


       


       


       

       

       

       

      4차 산업혁명의 시대, 2015년 교육과정이 개편되면서 갑작스레 코딩 열풍이 불었었다. 당시 코딩을 못하면 무슨 큰일이라도 날 것처럼(여기서 큰일이란? 좋은 대학을 못 가는 것을 의미) 언론에서 앞다투어 방송했었다. 각급 학교에서 교육과정 안에 코딩 의무교육을 실시하고 수업시수를 대폭 늘렸다. 자유학기제와 함께 맞물려서 학생들은 질 좋은 코딩 교육장으로 나가서 수업을 받기도 했다. 당시 현장에서 본 모습은 현실이 제도를 따라가지 못하는 느낌? 질 낮은 교육장과 검증되지 않은 강사들도 일부 있었다. 우리 교육은 인문계와 실업계 그 모습만 다를 뿐, 대학 진학이라는 하나의 목표로 달리기 때문에 경쟁이 치열할 수밖에 없다. 그때 가장 우려했던 점은 좋은 의도로 시작된 코딩 교육이, 그마저도 입시의 도구화되고 일부 사교육의 돈벌이 수단으로 전락하는 것은 아닌가 싶었고 일부 현실화되었다.


       


       

       

       

       

      이 책은 컴퓨터의 구조적인 개념과 컴퓨터 언어들에 대한 이해를 우선으로 하며, 그 위에 프로그램 구조와 성능을 개선할 수 있는 여러 방법을 설명한다. 시중에 컴퓨터 구조 운영체제 서적은 많지만, 초심자, 입문자 및 지망생과 개발자 모두를 충족하는 책은 처음인 것 같다. 이전에 Mano 저자의 책으로 공부를 한 적이 있는데, 기본적인 출제 내용과 디지털 회로 구성 요소 등 기본적인 코드와 디자인까지 다 언급하는 책이었다. 이 책의 저자가 컴퓨터 시스템을 바다로 비유하는 점 흥미롭다. 컴퓨터 개론, 종류, 초기 컴퓨터의 아키텍처를 언급하지 않을 수 없다. 책은 처음부터 읽어도 좋고, 각 장은 따로 떼서 봐도 무방하며 서로 독립적으로 구성되어 있다.


       


       

       

       

       

      현역 개발자의 영역은 비전공자들도 다소 많은데, 그들이 놓치기 쉬운 근간에 대한 부분, 가장 기본적인 프로그래밍 기초부터 시작된다. 시스템이란 무엇인가? ( 하드웨어랑 소프트 웨어로 이루어져 있는 모든 기계들, 시스템) 그렇다면 현대의 컴퓨터 시스템은 어떤 모습인가? 1장은 정말 쉽고 구체적으로 서술된다. 나아가 C 프로그래밍의 언어의 몇 가지 새로운 기능, 디버깅 도구 소개, C 포인터와 동적 메모리 할당 지원을 소개한다. 나는 2장의 컴퓨터 시스템 기초를 가장 먼저 펼쳐보았다. 데이터 표현법과 기초적인 컴퓨터 아키텍처 개념을 문장과 소스를 통해 두루 설명한다. 중앙처리장치는 어떤 역할을 하는지, 지금 컴퓨터의 옛날 오래전 조상이 되어버린 아키텍처의 근간을 소개한다. 여기서 컴퓨터 역사가 살짝 언급되는데 튜링 머신이라든가 폰 노이만 언급을 빼놓을 수 없다. 초기 여성 엔지니어들은 하찮은 계산만 시켰으며 중요한 방법론적인 접근은 남자들의 영역이었다.


       

       

       

       


       

       

       

       

       

      책은 컴퓨터가 프로그램을 실행하는 방법에 대해, 프로그램 성능과 관련된 시스템 비용을 평가하는 방법, 병렬 프로그래밍으로 병렬 컴퓨터의 성능을 활용하는 방법도 상세히 설명된다. 책의 좋았던 점은 비교적 입문자들을 위한 설명을 친절히 하려 노력한 전문가 저자의 노력이 보였다. 분야는 각광받지만 실제로 구인난을 겪고 있다고 한다. 단순히 프로그램만 만드는 개발자를 원하는 시대를 끝났다고 본다.


       


       

       

       

       

       

      현업 개발자에 비해 상대적으로 기술의 영역을 잘 알지 못하는 마케팅 분야와의 협업이 많은 요즘이다. 앞으로 이런 협업은 더욱 늘어날 텐데, 고객의 니즈를 전달하는 과정에서 마찰과 갈등은 '모름'에서 시작되는 것이 아닐까 싶다. 서로의 요구 사항을 전달하기 위해 어느 정도의 컴퓨터 지식이 필요한 것은 당연한 일 아닐까! 또한 현업에서 이론이 부족한 실무자에게도 추천하고 싶은 책이다.


       


       

       

      한빛미디어 〈나는 리뷰어다〉 활동을 위해 책을 제공받아 작성한 리뷰입니다


       


       


       

       

       

      #컴퓨터시스템딥다이브, #수잰J매슈스,

      #티아뉴홀, #케빈C웹, #어셈블리전용축약에디션,

      #x86_64, #C언어, #아키텍처,

      #IT, #나는리뷰어다, #한빛미디어, #컴퓨터,

      #코딩, #손코딩, #코딩강사교육,

      #컴퓨터공학과, #교양과학, #프로그래밍언어

       

       

       

       

       


       

    • “컴퓨터 시스템 딥다이브” 책은 C 언어 프로그래밍, 아키텍처, 멀티스레딩 등 컴퓨터 시스템과 관련된 다양한 주제로 구성되어 있습니다.

      책을 순차적으로 읽지 않아도 이해하는 데 어려움이 없도록 구성이 되어 있습니다. 전체적으로 컴퓨터 시스템 언어와 컴퓨터 시스템 구조로 두 가지 파트로 분류해 볼 수 있습니다.

       

      1장부터 C언어 프로그래밍부터 시작합니다. C 언어 프로그래밍 기본 문법부터 심화까지 책에서 필요한 내용을 다루고 있습니다. 그리고 코드 디버거 툴을 통해서 메모리 확인까지 방법을 알려줍니다.

       

      4장부터는 프로그래밍 시스템 기초인 바이너리 데이터 표현법을 설명합니다. 이때 2진법과 10진법의 기초부터 설명합니다. 전기적 신호에서 데이터로 어떻게 표현이 되고 더 나아가 데이터 연산까지 군더더기 없이 설명합니다.

       

      6장부터는 어셈블리 언어를 설명합니다. 이는 시중에 나와 있는 기초 책에서는 어셈블리 언어를 다루는 책을 찾기 어렵지만 이 책에서는 이 주제를 상세하게 다루고 있어서 참신하다고 생각됩니다.

       

      11장부터는 성능 최적화와 관리에 필요한 저장소 메모리, 캐시, 운영체제 이론을 설명해 줍니다. 이 또한 자세히 설명되어 있어 메모리와 캐시에 더 자세한 내용을 알고 싶으시다면 이 장을 꼭 읽으면 좋겠습니다.

       

      마지막으로 병렬 프로그래밍으로 책 내용을 마칩니다. 스레드와 멀티스레드는 CPU 프로세스에서 기초적인 개념으로 책에서도 자세히 다루고 있습니다. 현재 클라우드 컴퓨팅의 발전으로 분산 시스템이 중요하게 다루고 있습니다. 이 책에서 이 내용을 빠짐없이 다루고 있습니다.

       

      책을 처음 받았을 때, 전공이 아닌 내가 이해할 수 있을까? 라는 막연함이 생겼습니다. 하지만 읽으면서 저자가 처음 보는 사람을 위해 책 구성과 내용을 쉽게 구성하려는 노력을 엿볼 수 있었습니다.

       

      전반적으로 이 책은 기본적인 개념부터 고급 주제를 명확하게 설명되어 전공자뿐만 아니라 컴퓨터 과학에 관심이 있는 사람들에게 권장할 만한 책입니다.

       


       

      “한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다.”

    • 오랜만에 기분 좋은 CS 책을 접했다. 컴퓨터 과학이라는 학문의 범위를 넘어 요즘의 컴퓨팅 체계에 대해 호기심을 자극할 수 있는 좋은 내용이 가득 담긴 도서다. '딥 다이브' 라는 이름 답게 프로그래밍에서 CPU 까지 매우 깊은 내용을 다루고 있다. 그러면서도 C언어, CPU 구조, CPU 인스트럭션, 어셈블리, 동시성 프로그래밍을 한번에 관통하도록 구성되어 있다. 보통 이정도 두께의 컴퓨터 서적은 책장에 잘 모셔다 놓고 사전처럼 필요한 부분만 찾아서 읽을때가 많다. 하지만 이 책의 경우엔 컴퓨터 시스템에 관심이 있다면 800여 페이지라는 방대한 양임에도 불구하고 오히려 한번 읽으면 놓을 수 없는 강한 매력이 있다.

       

      이 책은 시작부터 C 프로그래밍 언어, 즉 고수준의 프로그래밍 언어로 컴퓨터 메모리를 어떻게 다루는지 보여준다. 그리고 작성된 코드를 디버거 툴을 통해 실제로 어떻게 작동하는지 메모리 추적의 방법을 알려준다. 단순 디버깅 뿐만 아니라 메모리 누수나 잘못된 메모리 접근을 추적하는 방법도 같이 알려준다. GDB, DDD, valgrind에 관심이 있다면 도움이 될 것이다.

       

      쉴 틈은 없다. CPU 아키텍처를 설명하기 위해 이진수 체계에 대한 설명이 이어진다. 그리고 마이크로프로세서에 대한 내용이 나오는데 보통 이런 컴퓨팅의 역사에 대해 설명하면 '인텔이 x86을 만들었다'로 끝나는게 일반적인데 무어법칙 이후에 CPU는 왜 단일 코어에서 멀티 코어 노선을 택했고, 그로 인해 현대의 CPU는 어떤 구조를 갖고있는지 보여준다. 물론 그뿐만 아니라 오버플로, 논리회로, 누산기, 가산기, 그리고 이를 종합한 CPU는 어떤 모습을 갖고 있는지도 설명이 매우 자세하다.

       

      개인적으로 이 책의 꽃이라고 생각하는 어셈블리 파트가 나온다. 나도 코딩은 C로 처음 시작했는데 코드를 컴파일 하면 막연히 CPU 아키텍처에 맞는 바이너리로 변경되고 이것이 어셈블리 인스트럭션이라는 것만 알고 있었는데 이 책에서는 간단한 C 예제 여러가지를 가지고 어떻게 어셈블리로 바뀌고 실제로 메모리 영역을 어떻게 다루는지, 연산과 제어문은 어떻게 실행되는지에 대해 상세하게 알려준다. 이는 코드의 단순 나열이 아니라 실제 과정을 스탭마다 차트로 매우 상세하게 설명해준다.

       

      다음은 성능에 대한 파트인데 이 역시 프로그램의 관점에서 운영체제, 프로세서, 컴파일러가 각각 어떻게 성능을 최적화하는지 설명하고 있다. 또한 성능에서 단골 주제로 나오는 캐시에 대해서도 하드웨어 관점에서 지역성에 따라 캐시 관리를 어떻게 최적화 하는지 상세하게 설명하고 있다. 이때 정보처리기사 같은 자격증 시험에서나 볼법한 스케줄링 기법이 어떻게 작동하고 왜 그런 명칭이 붙었는지 이 책 특유의 친절함으로 자세하게 설명한다.

       

      마지막으로 병렬 프로그래밍 부분으로 앞서 멀티 코어가 대세가 된 마이크로프로세서의 발전 양상으로 스레드 프로그래밍에 대한 주의할 점과 일반적으로 동시성 프로그래밍을 할 때 늘 주의해야 하는 부분에 대해 역시 코드로 잘 설명해준다.

       

      800페이지의 적지 않은 분량임에도 여러 주제를 한번에 꿰는 흡입력이 대단한 책이다. 하나같이 쉽지 않은 주제들을 이토록 이해하기 쉽게 모아놓은 CS.. 아니 컴퓨터 책은 좀처럼 오랜만이다. 놀랍게도 저자는 컴퓨터 전공 1학년생을 대상으로 집필을 했다고 하는데 그럼에도 불구하고 주니어 개발자 까지도 꽤 흥미롭게 볼만한 수준의 내용이라고 생각한다. 

       

      한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

    • 프로그래밍 환경이 고도화 됨에 따라 프로그램을 만들기가 옛날에 비해 비교할 수 없을 정도로 쉬운 일이 되었다더욱이요즘은 따로 코딩을 하지 않고도 간단한 UI/UX를 갖춘 웹 서비스 정도는 간편하게 만들 수 있으니 말이다하지만단순히 프로그램을 만든다는 행위에 사람들이 집중을 하고 있을 뿐정작 중요한 프로그램이 어떻게 해석되어 어떻게 디바이스의 출력 장치를 통해 우리 눈에 비치는지는 간과하고 있는 것이 지금의 현실이다.

       

      옛날 필자가 전산학을 공부할 시절에는 기본적인 컴퓨터의 구조와 이에 관련된 학문에 관한 학습이 굉장히 중요했던 시대였다. (학교를 떠난 지 이제는 10년이 훨씬 넘었기에 요즘은 어떤 것들을 가르치는지 잘 모르는 상태이긴 하다.) 하지만 요즘은 전산학 기초 지식보다는 당장의 프로그램을 만들고 웹 서버나 안드로이드 혹은 iPhone 등의 단말에서 동작하는 서비스를 개발하는 것에 학문이 집중되는 경향이 있어 보인다.

       

      왜 전산학 기초 지식이 중요하고왜 컴퓨터가 프로그램을 어떤 식으로 해석해서 사용자에게 이를 노출시켜주는지 그 일련의 과정을 심도 있게 학습해야만 하는 이유는 위에서 요즘 집중하고 있는 프로그램을 좀 더 프로그램답게 만들기 위함이다.

       

      프로그램만을 단순히 만드는 것은 빠른 시간 내에 터득이 가능하다왜냐하면 유튜브를 비롯한 수많은 채널에서 이와 관련된 강의나 캠프 등을 대중에게 전달하고 있기 때문이다.

       

      그럼에도 많은 수의 IT 기업들이 개발자 구인난에 시달리고 있다. (물론 코로나 시국 이전에그 이유는 그들이 찾는 IT 인재들은 단순 프로그램을 만들 줄 아는 사람을 찾는 것이 아니기 때문이다. 그들이 원하는 인재는 프로그램 전반에 걸친 지식을 심도 있게 알고 이에 맞춰 프로그램을 만들 줄 아는 능력을 갖춘 개발자를 찾고 있기 때문이다.

       

      이 책, '컴퓨터 시스템 딥 다이브'는 이러한 전산학 기초에 해당하는 컴퓨터와 그 컴퓨터의 근간을 이루는 시스템의 총총을 다룬 책이라 할 수 있다.

       

      【책의 구성】 "컴퓨터 시스템 딥 다이브"의 구성은?

       

      이 책은 상당히 두꺼운 책이다그렇기에 한 번에 학습하기엔 어려운 부분이 있다.

       

      책이 두껍다는 것은 내용이 많다는 것을 의미한다그렇다이 책은 챕터가 무려 15개나 되는 바이블 책인 것이다.

       

      각 챕터의 구성은 챕터에 해당하는 내용을 소개하고 이를 정리한 후자세한 예와 기술적 개괄을 소개한 후 이에 대한 심도 있는 설명으로 구성되어 있다.

       

      그 후각 챕터 마지막에는 해당 챕터에서 다루었던 총총에 대해서 정리하고 있다.

       

      챕터 5 : 컴퓨터 아키텍처

      이 챕터를 통해 필자는 이 책이 정말 좋은 책임을 한 번에 직감할 수 있었다. 이제껏 수많은 그리고 다양한 컴퓨터 구조 관련 전공서를 리뷰 및 탐독하였던 필자였으나단 한 번도 여성 개발자여성 공학도에 대해 이 책만큼 자세히 술 한 책을 본 적은 없었기 때문이다. (어쩌면 필자가공부를 게을리했기에 이 부분을 간과했을 수도 있다.)

       

      이 챕터에는 다양한 여성 공학도들이 등장한다코볼 언어와 컴파일러를 만들었던 공학자그리고 세계대전 당시 탄도의 궤도를 계산하기 위해 분투하였던 여성 공학자들.. 항상 남성 중심의 프로그래머전산학도전기-전자 학자의 이름을 외워왔던 필자에게 이만큼 새로운 지적 호기심을 자극하는 내용은 참으로 오랜만이었다.

       

      그렇기에 이 책을 구매하신 모든 공학도혹은 전산학도 분들이라면 꼭 꼼꼼히 읽어보시길 권한다

       

      챕터 7 : 64비트 X86 어셈블리

       

      이제는 대부분의 개발자들이 어셈블리 수준의 저수준 언어는 모른 체 개발에 임하고 있다어찌 보면 시대가 그만큼 많이 진보한 것이라 할 수 있고개발이라는 학문이 그만큼 진취한 것이라 할 수 있다.

       

      다만그럼에도 어셈블리 언어를 알아야 하는 이유는 우리가 만든 고수준의 언어가 관련 CPU에서 제공하는 instruction 기반의 어셈블리어로 컴파일되어 바이너로 뽑히기 때문이다.

       

      그렇기에 어셈블리 어를 잘 알고 그 원리와 흐름을 이해한 개발자라면 본인이 만든 프로그램의 최적화 포인트와 동작 방식에 대해서 추상적으로나마 유추하고 추후 최적화 진행시 그 지식을 활용할 수 있다.

       

      하여 이제는 대부분의 학과 과정 혹은 개발자 양성과정에서 위의 학문이 빠져 있지만심도 있게 학습하길 권장한다.

       

      이 챕터에서는 어셈블리어를 이용한 개발 방법과 명칭용어 등등 기본적인 내용과 그 심화 내용이 정리되어 있다.

       

      【 컴퓨터 시스템 딥 다이브를 읽고 나서 】

       

      옛날 필자의 꿈은 컴퓨터의 근본을 이해하는 것이었다내가 입력한 키워드가내가 만든 코드가 어떻게 컴퓨터에서 해석되어 화면으로 출력되는지 그 과정이 너무나 궁금했다.

       

      하지만 30년 전에는 지금처럼 한국에 전산학이라는 분야가 많이 활성화되어있진 않았다하여 집에 막 들어온 Dos 기반의 컴퓨터에서 정말 많은 것들을 조작해 보고 이것저것 실험해 보고 그러다 컴퓨터가 먹통이 되는 난감한 상황을 많이 만들었던 기억이 새록새록 하다.

       

      만약 그때 지금처럼 전산학에 대한 지식을 얻을 장소가 좀 더 용이했다면자료가 많았다면 좀 더 빨리 지금 수준의 지식을 획득할 수 있었을 텐데하며 간혹 아쉬워할 때가 있다.

       

      지금은 당시에 비하면 비교도 할 수 없을 만큼 다양한 미디어 매체와 채널을 통해 관련 지식을 습득할 수 있는 시대가 되었다그렇기에 컴퓨터 학문에 막 입문하려는 초보 개발자들, 필자처럼 컴퓨터의 근본과 동작 원리를 이해하길 꿈꾸는 개발자들이 공부하기에 정말 최고의 시대라 할 수 있다.

       

      하루에 너무 많은 것을 이루려다 보면 그르치기 쉽다이번에 리뷰한 책이 그렇다그렇기에 차근차근 곱씹으며 컴퓨터 시스템 학문이 주는 그 아름다움과 깊이를 음미하시길 권한다

       

      #본 도서는 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

    • 이번 달에 읽은 책은 "컴퓨터 시스템 딥 다이브 C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템" 라는 책입니다. 
      제목 그대로 컴퓨터의 아키텍쳐를 심층분석하는 책인데, 책의 내용이 어렵다고 해서 설명이 어려운 책은 아닙니다. 
      이 책의 원서 홈페이지는 " https://diveintosystems.org/ " 이 링크이고, 책에는 수록되지 않은 정보들도 많이 업데이트가 되고 있습니다. 
      또한 이 책이 우수한 이유는 미국 국립과학재단(NSF)의 후원을 받아 여러 시각적 자료도 업데이트 되고 있다는 점입니다. 주변에 컴퓨터 공학을 공부하는 학부생이 있다면 반드시 추천하고 싶은 책입니다.

      책의 첫 장은 C 언어에 대한 사전 지식이 없는 독자들도 파이썬 예제를 비교하며 쉽게 따라갈 수 있도록 구성되어 있어, 접근성이 높습니다.  단순히 지식을 전달하는 것을 넘어, 독자들이 현재 배우고 있는 내용에 대해 심층적으로 이해하고 싶을 때, 특정 부분만을 선택적으로 학습해도 충분히 이해할 수 있도록 구성된 점 역시 좋았습니다.개인적으로는 GDB를 이용한 디버깅 방법의 설명이 매우 만족스러웠으며, 15장에서는 pthread 개념을 넘어서 OpenMP와 OpenMPI에 대한 설명까지 포함되어 있어, 병렬 프로그래밍에 대한 깊이 있는 지식을 얻을 수 있었습니다. 
      그리고 이 책을 추천하는 또 하나의 이유는, 모두가 열광하는 chatGPT가 나올 수 있었던 인공지능, 그 것을 계산 할 수 있도록 하는 GPGPU 컴퓨팅에 대한 내용이 실려 있기 때문입니다. 물론 처음 바둑 인공지능인 딥마인드에서는 TPU라는 다른 프로세서를 썼지만, 현재 나오는 인공지능 치고 GPU를 통하지 않고 계산하는 프로그램은 거의 없다고 봐도 무방할 것입니다.
      이 책의 내용은 컴퓨터 시스템의 구조, 컴퓨터 아키텍처, 운영 체제, 네트워킹, 시스템 프로그래밍과 같은 주제를 포괄합니다. 이론적인 설명과 함께 실습과 예제를 통해 학습자가 이론을 실제 시스템에 적용해 볼 수 있도록 구성되어 있습니다.

      특히 초보자나 비전공자도 접근할 수 있도록 쉽게 설명하려는 노력이 엿보이며, 독자가 컴퓨터 시스템의 기본적인 작동 원리를 이해하고, 나아가서는 보다 복잡한 시스템 설계나 분석에 참여할 수 있는 기반 지식을 제공하고, 컴퓨터 시스템에 대한 깊이 있는 이해를 원하는 모든 이들에게 추천되는 책입니다.
      #컴퓨터아키텍처 #한빛미디어 #어셈블리 #C언어 #디버거 
      "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

    • 1월에 신청 드리겠습니다~~ 이런건 전자북으로 못 봐요 ㅠㅠ


       


      이거 목차 보고 있는데... 시간 내서 봐야 것는데...


       


      근데.. 목차만 볼때.. 이해 되려나? 

  • 내용이 없습니다.
닫기

해당 상품을 장바구니에 담았습니다.
장바구니로 이동하시겠습니까?