cjh4***
2024-02-24

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

컴퓨터 과학 분야에 첫발을 들이는 순간부터 개발자들은 자신이 작성한 코드가 컴퓨터 내부에서 어떻게 실행되는지에 대한 궁금증을 가진다. ”컴퓨터 시스템 딥 다이브“는 이런 질문들에 답할 수 있는 필독서로 자리 잡을 것이라 확신한다.
✅ 학습 목표
이 책에서 배울 내용은 다음과 같다.
1️⃣ C프로그래밍 언어 초반부는 컴퓨터 시스템의 기본적인 개념 소개로 시작한다. C언어의 기초를 다루며 입출력, 조건문, 반복문, 함수, 배열, 문자열, 그리고 구조체에 대한 철저한 설명을 통해 기본적인 구조를 이해하도록 한다.
다음 장에서는 포인터, 동적 메모리 할당, 배열, 문자열 라이브러리, 구조체, 입출력 등 고급 C 기능들을 중점적으로 다루며 이들 주제의 핵심을 명확히 이해할 수 있도록 돕는다. 특히 동적 메모리 할당 섹션에서는 C언어가 컴퓨터 메모리를 어떻게 할당하는지에 대해 그림을 통해 설명하여 개념을 시각적으로 쉽게 파악할 수 있도록 한다. 또한 힙 메모리와 관련하여 malloc과 free 함수의 작동 방식이 상세히 기술되어 있어 이해하기에 용이하다.
2️⃣ 컴퓨터 시스템 기초 이 장에서는 바이너리와 데이터 표현, 컴퓨터 아키텍처, 그리고 어셈블리 프로그래밍을 다루며 프로그램이 실제로 컴퓨터의 회로에서 어떠한 과정을 거쳐 실행되는지 상세히 설명한다. 주된 내용은 비트와 관련된 다양한 개념을 다루며, 진수 변환, 보수 개념, 2진 산술 연산, 오버플로, 비트와이즈 연산, 시프트 연산 및 실수 데이터의 표현(고정 소수점 및 부동 소수점)을 설명한다.
클럭 속도의 증가가 물리적 한계와 전력 소모 문제에 부딪히면서 CPU 성능 향상을 위한 대안으로 멀티코어 프로세서 기술이 발전하게 되었다는 이야기를 해주고 있다. 파이프라이닝은 명령어 처리 과정을 여러 단계로 나누어 동시에 처리함으로써 처리 속도를 향상시키지만, 데이터 해저드와 제어 해저드와 같은 여러 문제에 주의해야 한다는 점 역시 서술되어 있다.
3️⃣ 어셈블리 프로그래밍
이 장 이후의 내용은 C언어를 바탕으로 한 어셈블리어 프로그래밍에 초점을 맞춘다. 어셈블리어의 기본적인 개념을 시작으로 함수, 배열, 구조체 등의 다양한 프로그래밍 구조가 어셈블리어에서 어떻게 구현되는지 예제 코드를 통해 상세히 설명한다. 특히 main 함수가 어셈블리어에서 어떤 과정을 거쳐 실행되는지에 대한 설명은 도식화된 그림을 통해 더 명확하게 이해할 수 있었다. 또한 버퍼 오버플로를 이용한 보안 취약점 악용에 관한 실제 사례를 간략히 다루면서 어떻게 취약점을 발견했는지 설명한다. 코드 예시를 통해 오버플로를 발생시키는 방법과 이로 인해 생기는 보안상의 위협을 이해할 수 있다. 추가적으로 대응하는 방법이 기술되어 검토를 할 수 있는 시간을 가질 수 있었다.
4️⃣ 성능 최적화 및 관리
이 장 이후의 부분은 저장소와 메모리 계층, 코드 최적화, 그리고 운영 체제를 통한 프로그램 성능 최적화 방법을 다룬다. 코드 최적화에 앞서 성능 못지 않게 주목해야 할 요소는 메모리 계층이다. 메모리 계층 구조에 대한 깊은 이해는 성능 개선을 위한 적절한 전략을 세울 수 있도록 한다. 추가적으로 다이렉트 맵트 캐시의 개념을 소개하고 캐시에서 데이터를 식별하고 접근하는 과정을 도식화하여 설명한다.
✅ 결론
이 책은 프로그래밍을 막 시작한 입문자이게도 추천되는 도서이지만 책이 후반부로 갈 수록 난이도가 점차 상승하어 현직 주니어 개발자에게도 유익한 내용을 많이 담고 있음을 확신한다. 이번 서평을 작성하면서 컴퓨터 시스템에 대한 이해가 부족하다는 것을 느끼게 되었다. 좋은 경험을 할 수 있게 기회를 준 한빛미디어에게 다시 한 번 감사의 말씀을 드린다.
’이 서평은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.‘