컴퓨터 시스템 딥 다이브 - C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템
수잰 J. 매슈스.티아 뉴홀.케빈 C. 웹 지음, 김모세 외 옮김 / 한빛미디어 / 2023년 12월
평점 :
장바구니담기


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



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


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

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

p.27


책은 총 5부와 15장으로 구성되어 있습니다. 

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



1부에서는 C 프로그래밍 언어에 대해 소개합니다. C 프로그래밍의 기초와 심화, 디버깅하는 법을 살펴봅니다.

2부에서는 컴퓨터 시스템을 이해하는 기초인 바이너리와 데이터 표현법, 폰 노이만 아키텍처를 기반으로 한 컴퓨터 아키텍처를 소개합니다.

3부에서는 기계가 해석할 수 있는 기계와 가장 근접한 어셈블리 프로그래밍에 대해 살펴봅니다. 

4부에서는 성능에 영향을 미치는 요소는 무엇이고, 프로그램을 어떻게 최적화할 수 있는지에 대해 소개합니다. 이를 위해 저장소 메모리 계층 구조, 코드 최적화, 운영체제를 살펴봅니다.

5부에서는 공유 메모리와 스레드를 통한 최적화와 병렬 프로그래밍(이종 컴퓨팅, 분산 메모리 시스템, 고성능 컴퓨팅(HPC) 등)에 대해 소개합니다.



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



책에서 좋았던 점

✅ C 언어의 문법과 기능을 파이썬과 비교하며, 기본부터 심화적인 부분까지 포괄적으로 배울 수 있었습니다.

✅ 다른 책에서 잘 다루지 않는 어셈블리 언어를 소개하여 컴퓨터 구조와 운영체제의 내부 동작을 깊이 이해할 수 있었습니다.

✅ 책 한 권으로 컴퓨터 시스템을 학습할 수 있는 구성. 여러 주제를 한 권으로 배울 수 있어 가성비 측면에서 좋았고, 다루는 주제가 독립적이기 때문에 원하는 순서로 읽을 수 있어 매력적이었습니다.

✅ 부연 설명을 하는 글 상자, 중요한 정보를 강조하는 노트, 주의를 기울여야 하는 경고로 효과적인 학습이 가능했습니다.



책에서 아쉬웠던 점

❗ 전반적으로 어려운 책의 난이도. 컴퓨터 공학이 아닌 다른 전공자나 입문자가 읽기에는 어려운 책인 것 같습니다. 

❗ 컴퓨터 시스템의 전반적으로 다루지만 어느 부분(어셈블리)은 심화적인 내용으로 깊숙이 배우는 반면, 어느 부분(운영체제)은 기초적인 내용만 다뤄서 아쉬웠습니다.  

❗ 독자 스스로 풀어 볼 수 있는 문제가 부족했습니다. 


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


1. 가치 있는 프로그램의 세부사항을 감추는 고수준의 추상화

2. 리소스가 제한돼 컴파일러를 사용할 수 없는 시스템

3. 취약점 분석

4. 시스템 수준의 소프트웨어에서 중요한 코드 순서


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


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

   

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


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


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


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


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo