책 후기

[책 후기] 컴퓨터 밑바닥의 비밀

changha. 2025. 7. 7. 11:53

 

이 책을 읽게 된 이유

취준 단톡방을 통해 처음 접하게 되었다. 

요즘 취준하면서 부족한 CS를 채우려고 노력하는데 이 책의 목차를 보고 꽤 중요한 개념들이 있어서 바로 빌렸다.

특히 CPU, 메모리 관리, 스레드, 프로세스, 동기/비동기, 블로킹/논블로킹 이러한 개념들은 알아도 계속 학습을 안하면 휘발되어서 다시 한번 숙지하자는 목표도 있었다.

 

어떠한 내용들이 있었나

운영체제에서 하드웨어까지 전반적으로 필요한 개념들은 모두 주제로 등장한 것 같다. 

이 책의 목표는 책 제목처럼 컴퓨터 밑바닥의 비밀을 아는 것, 즉 컴퓨터 내부의 동작원리를 파헤치는 것이다. 

그런 관점에서 의문형으로 깊숙이 들어가는 구성이 도움이 되었다.

[목차 일부] 대부분의 주제, 소제목이 의문형으로 되어있다.

나에게 도움이 된 부분

추상화

이 책에서 몇 번이나 등장한 단어가 '추상화' 였다. 

작가는 컴퓨터의 위대함과 아름다움을 자주 얘기해줬는데, 그 이유 중 하나가 바로 추상화라는 점이었다.

추상화는 자바, 스프링을 공부하면서도 자주 들었던 키워드다. 이것이 컴퓨터 내부에서도 적용이 된다는 것이었다.

결국 하드웨어는 0,1의 두가지밖에 인식을 못한다. 이 0,1로 이루어진 배열이 어떻게 지금 내가 작성하는 블로깅까지 될 수 있는 걸까?

답은 추상화다. 

컴퓨터는 복잡한 현실을 단순화하여 다룰 수 있게 만드는, 계층적인 추상화 구조 위에 세워져 있다. 전기가 흐르냐 안 흐르냐(0과 1)라는 가장 기초적인 신호에서부터 시작해서, 이진수를 조합한 논리 연산, 논리 연산을 기반으로 만든 회로, 회로로 구성된 ALU, 레지스터, 메모리 같은 하드웨어 블록들… 이 모든 게 층층이 쌓여 마치 '블록 쌓기'처럼 점점 더 높은 수준의 기능을 구현하게 된다.

 

스레드

단순히 스레드는 프로세스와 달리 서로 데이터를 공유할 수 있는 것으로 알고 있었다. (프로세스 내에서 작업 흐름을 나눈 것이 스레드이니까) 스택에 어떤것들을 담는지 정확히 몰랐는데 이 책을 통해 알 수 있었다.

스레드 전용 리소스가 있는데 함수 실행마다 독립적으로 스택에 생긴다.

함수의 반환값, 다른 함수를 호출할 때 전달되는 매개변수, 함수 내에서 사용되는 지역 변수와 레지스터 정보가 저장된다. 

이 함수를 묶어서 스택 프레임이라 한다. 

함수마다 각자 스택 프레임에 반환 주소를 저장해서 돌아올때 사용한다.

어느 순간 함수가 쌓일수록 스택의 최대 크기를 넘어설 수 있다. 이게 그 유명한 스택 오버 플로우이다. 

 

디스크에서 CPU로 바로 읽기는 왜 안될까?

디스크는 비휘발성 저장 장치로서 사용하는 건 알고있다. 

그리고 물리적인 거리가 멀기 때문에 속도도 느리다는 것도 알고있다. 

하지만 이 이유뿐일지 궁금해졌다. 

- 메모리와 디스크의 읽기/쓰기 차이점이 있다. 

메모리는 주소 지정 단위가 바이트이고 디스크는 조각 단위이다. 

어떤 차이점이 있느냐 

조각 단위 == 섹터 == 512Byte

즉 정수 하나만 수정하려고 해도 섹터 단위로 읽고 고쳐야 된다는 말이다.

굉장히 비효율적으로 실행이 될 것이다. 

- 가상메모리의 제한 

 

32비트 주소체계에서는 최대 주소 지정범위는 4GB이므로 1TB SSD를 사용해도 

4GB밖에 활용을 못한다. 

근데 이거는 8GB램도 똑같이 4GB밖에 이용못한다는 소리잖아? 

해서 찾아보니까 현재 대부분의 컴퓨터는 64bit기반으로 동작한다.

그래서 8GB, 16GB 메모리를 탑재해도 최대로 활용할 수 있다. 

(내가 사용하는 맥북 M1 프로도 64bit)

 

재밌게 읽은 부분 

복잡 명령어 CISC, 축소 명령어 RISC 간의 역사과정이다. (현재 진행형)

복잡 명령어는 컴퓨터 역사 초기에 나오게 되었다. 

프로그램 코드를 짤 때 당시 자원 절약을 위해 간단한 명령어가 필요했었다.

문제는 명령어를 추가할 때 직접 연결 방식을 사용했는데 이는 CPU 설계와 디버깅이 어려워졌다.

그래서 마이크로코드가 등장했다. 

이는 복잡명령어를 소프트웨어적으로 풀어서 간단한 명령어로 만들면 하드웨어적으로는 더 심플해졌다.

하지만 이는 또다른 복잡성을 유발했는데 버그를 수정하기가 더 어려워졌고 트랜지스터 사용량이 너무 많이 늘었다. 

이와 같은 상황에 축소 명령어가 등장하였다.

이는 간단한 명령어 여러개로 대체하자는 철학을 가지고 있었다. 

예를 들어 음식을 먹는다를 표현할 때 

1. 숟가락을 든다.

2. 음식을 뜬다. 

3. 입을 벌린다.

4. 입에 넣는다.

와 같이 단순한 명령으로 푼 것이다. 

복잡 명령어는 여기에 맞대응하기 위해 마이크로명령어를 설계하였다. 

바로 인터페이스 개념인데 

프로그래머는 복잡 명령어를 사용하지만 CPU 내부에서는 축소 명령어와 비슷한 간단한 명령어들로 풀어서 사용하는 것이다.

양쪽의 장점을 취하여 일석이조다.

이렇게 서로 싸우면서 점점 비슷해져가는 과정을 거치는데 현대는 둘 간의 차이가 상업적으로 보이는것만큼 크지 않다고 한다. 

복잡 명령어 기반이 윈도우 x86에서 사용하고 있고 축소 명령어 기반은 애플 M칩에서 사용하고 있다.

역사 과정을 재밌게 풀면서 양대산맥인 윈도우와 맥이 서로 다른 아키텍처를 채택하여 발전하는 과정이 재밌게 느껴졌다. 

 

후기

컴퓨터 분야에서 일하기 위해서는 CS 지식은 필수적이다. 

조금은 가볍지만 개념들을 정리하고 채울 수 있는 책인 것 같다. 

내 머릿속 디스크 조각 모음을 도와준 책이라고 할 수 있을 것 같다. 

'책 후기' 카테고리의 다른 글

[책 후기] 디자인패턴의 아름다움  (0) 2025.07.04