Scientia Conditorium

[책리뷰] 혼자 공부하는 컴퓨터구조 + 운영체제 본문

서평/IT-책

[책리뷰] 혼자 공부하는 컴퓨터구조 + 운영체제

크썸 2022. 9. 11. 18:35

[책리뷰] 혼자 공부하는 컴퓨터구조 + 운영체제

 

컴퓨터 공학과 전공자 필수 과목 중 하나인 컴퓨터 구조와 운영체제.

이 과목들의 혼공 시리즈가 나와서 대단히 기쁘다.

결론은 역시나 혼공 시리즈답게 혼자서 충분히 공부할 수 있도록 기초 개념을 잘 잡아준다.

비전공자들은 구매해서 쭈욱 읽어보는 것을 적극 추천한다.

각 챕터에 대한 간략한 후기를 아래 나열해보는 것으로 이번 리뷰를 해보겠다.

  • Chapter 01 컴퓨터 구조 시작하기
    컴퓨터 구조의 큰 그림과 공부해야 하는 이유를 설명해준다.
    책에서도 설명되어있지만 컴퓨터 구조는 컴퓨터공학과의 전공 필수과목 중 하나이며 대부분의 채용 공고에서 컴퓨터구조를 중요시 여긴다. 서울대학교 컴퓨터공학과 교과목 정보를 살펴보면 2020입학 기준으로 컴퓨터 구조는 전공필수 과목이지만, 운영체제는 아니다.
    덧붙여 개발자가 컴퓨터 구조를 알아야 하는 이유는 본인이 만든 제품이 어느 하드웨서 돌아가는지는 파악해야 한다고 생각하기 때문이다. 하드웨어 이해도가 높다면 코드를 작성할 때 처음부터 효율적인 알고리듬을 설계할 수 있으며 이는 최적화 및 성능과 연결된다. 가령 본인이 만든 제품이 대박이 나고 온라인에서 동시 접속을 늘려야 하는 경우가 올 때, 자기 제품이 하드웨어에서 어떻게 동작하는지 알고 있다면 간단한 소프트웨어 조작만으로도 최적화할 수 있고 이는 장기적으로 개발 비용을 엄청 절약할 수 있다.
    또 대표적인 예시로 최근 하드웨어서 캐시 같은 부분 때문에 왠만한 경우에서는 해시맵 보다 배열을 쓰는게 훨씬 빠르다. 단순하게 공간복잡도만 따져서 해시맵을 쓴다면 이런 부분을 간과할 수 있다.
  • Chapter 02 데이터
    컴퓨터가 데이터를 이해하는 방법과 단위에 대해 알아본다. 결국 컴퓨터는 기계이기 때문에 모든 데이터는 0과 1로 이루어져있다는 사실을 항상 기억하고 있어야 한다.

  • Chapter 03 명령어
    컴퓨터는 명령어를 처리하는 기계이고, 프로그래머들이 작성한 모든 코드는 결국 명령어 형태로 변환된다. 즉, 챕터2에서 언급한 0과1로 바뀐다는 것인데 이것만 봐서는 뭔 말인지 알 수가 없다. 이를 번역한 언어가 어셈블리어다. 프로그래머가 어셈블리어를 볼 필요도 없고 배울 이유도 없다고 주장하시는 분도 있다. 물론 어셈블리 레벨까지 내려가서 코딩하는 일은 사실상 없을 것이다. 그러나 최종적으로 탑급 프로그래머가 되기 위해서는 컴퓨터가 어떻게 동작하는지를 알아야 된다고 봅니다. 물론 어셈블리어를 봐야하는 프로그래머는 전체 중 약 5%도 안될 것이다.
    그러나 다시 한번 말하지만 컴퓨터는 명령어를 처리하는 기계이고, 모든 데이터는 0과 1로 이루어져서 동작한다.

  • Chapter 04 CPU와 작동 원리


    어찌보면 컴퓨터구조에서 가장 중요한 챕터이다. CPU 내부에서 계산을 담당하는 ALU의 동작 방식과 제어 장치, 레지스터에 대해 설명한다. 책에서 간략한 그림으로 설명을 잘 해두었지만, 좀 더 직관적인 이해를 위해서는 영상이 좋다고 판단한다. 이에 대해 자세한 설명을 해준 영상을 소개하고 넘어가도록 한다.
    유튜브 bRd 3D : CPU는 어떻게 작동할까?
    https://youtu.be/Fg00LN30Ezg 
  • Chapter 05 CPU 성능 향상 기법
    챕터의 제목이 살짝 애매한 파트이다. 빠른 CPU를 위한 설계 기법과 명령어 병렬 처리 기법에 대해 알아본다.
    즉, 프로그램 성능 향상이 아닌 CPU 성능 향상이고 이를 위해 현대 CPU에서는 어떻게 동작하는지를 보여준다.
    CISC와 RISC에 대해 설명해주는데, 이는 현재 가장 좋은 CPU 양대산맥을 이루는 Intel과 ARM의 차이점을 말해줍니다. Intel CPU는 CISC 기기이며, ARM 기반 CPU는 RISC입니다. 이 2개의 작동 방식을 다르기 때문에 잘 알아두면
    나중에 CPU 선택할 때 좋다.

  • Chapter 06 메모리
    CPU와 더불어 중요한 챕터다. 결국 프로그램은 입력을 받아 메모리에 적재하고 CPU에서 계산하여 다시 메모리에 저장 후 출력하는 과정을 거친다. 메모리에 데이터가 어떻게 저장되고 CPU에서 이 데이터를 가져다 쓰기 위해서 어떤 과정이 이루어지는지 알 수 있다. CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느리기 때문에 캐시 메모리를 사용하는데, 이 챕터에서는 캐시메모리가 어떤 것인지 어떻게 동작하는지를 자세히 알 수 있다.

  • Chapter 07 보조기억장치, Chapter 08 입출려장치
    7,8 챕터는 컴퓨터가 기본적으로 동작 방식 이외에 주변 장치들에 대해 설명해준다. 알아두면 좋은 내용이지만 앞의 챕터들에 비해서는 중요도가 조금 떨어지긴 한다. 가볍게 읽고 넘어가면 좋은 챕터들이긴 하다.
    여기까지 읽으면 컴퓨터 구조에 대한 설명이 끝이난다.

    책에서는 아래와 같이 2가지를 제안한다.
    1. 직접 컴퓨터 부품들 찾아보기
    2. 특정 제품 분석하기
    개인적으로는 단순하게 그냥 컴퓨터 부품을 사서 조립해보기로 귀결되는 느낌이다. 내 컴퓨터를 더 좋은 컴퓨터로 업그레이드 하기 위해 제품을 사면 결국 그 제품에 대한 스펙을 알아보게 되고 분석하게 된다. 더 나아가서 컴퓨터 제품을 만드는 회사의 발표 영상을 보는 것도 도움이 된다. 대표적으로 ARM나 Apple에서 새로 발표하는 제품에 대한 성능에 대한 부분이다.

  • Chapter09 운영체제의 큰 그림
    이 책에서 가장 중요한 파트가 시작된다. 개인적으로는 컴퓨터 구조와 운영체제 중 하나를 선택해서 공부하라면 운영체제다. 프로그램은 운영체제 위에서 동작하기 때문에 운영체제에 대해 알아야 한다. 운영체제가 뭔지 모른다면 컴퓨터 사서 전원키면 윈도우가 당연히 실행되는 줄 안다. 물론 현재 운영체제 시장의 약 90%는 윈도우이기 때문에 일반 사용자들 입장에서는 상관없지만, macOS가 점점 10%까지 올라오고 있기 때문에 차이점을 알고 있어야 한다.
    챕터1과 마찬가지로 운영체제에 대한 큰 그림에 대해 설명하며, 책에서는 그냥 지나갔지만 부팅이 무엇인지 알아두면 좋다. 운영체제 과목 중간고사 혹은 대학원 컴퓨터 공학과 단골 질문 중 하나이기 때문이다.

  • Chapter 10 프로세스와 스레드
    대부분의 운영체제에서 프로세스와 스레드를 구분하지만, 리눅스에서는 명확하게 구분하지 않는다. 이 책에서는 그 이유를 리누스 토르발스의 메일을 인용하여 설명해준 점이 좋았다. 간단하게 실행 중인 프로그램을 프로세스, 프로세스를 구성하는 실행의 흐름 단위를 스레드라고 한다. 프로세스와 스레드의 차이점은 신입 개발자들 단골 질문들 중 하나이다.

  • Chapter 11 CPU 스케쥴링
    모든 프로세스는 CPU를 필요로 하고 먼저 사용하고 싶어한다. 그러나 CPU 자원을 할당하는 것은 한정되어 있기 때문에 어느 프로세스는 나중에 받을 수 밖에 없다. 즉, CPU 자원 할당을 뒤늦게 받는 프로세스는 동작이 느리다는 뜻이다. CPU 스케쥴링을 이해하면 프로세스 우선순위 높이는 방식을 알 수 있으며, 이는 본인이 만든 프로그램 성능 향상을 어떻게 할 수 있는지 깨닫는다. 문제는 우선순위를 높이는 방식이 항상 좋은 것만은 아니라는 점을 알아두어야 한다.

  • Chapter 12 프로세스 동기화
    현대 프로그래밍은 결국 병렬처리로 갈 수 밖에 없다. 대규모의 데이터를 빠르게 처리해야 하는데, CPU 자원은 한정적이기 때문이다. 이 챕터에서는 간략하게 설명해주었지만, 프로세스 동기화와 처리 방법에 대해서는 동시성 프로그래밍 책을 추천한다.(molonlabe.tistory.com/32)

  • Chapter 13 교착 상태
    흔히들 말하는 데드락. 식사하는 철학자 문제를 그림으로 잘 설명해주었다.

  • Chapter 14 가상 메모리
    운영체제의 가장 핵심적인 역할 중 하나다. 지금까지 컴퓨터구조와 운영체제를 알아야 하는 이유는 프로그램 최적화와 성능과 직결되기 때문이다. 그 중 핵심적인 역할을 하는 부분이 가상 메모리다. 
  • Chapter 15 파일 시스템
    USB 포맷을 해봤다면 NTFS와 ext 포맷 중 선택하라는 것을 본 적이 있을 것이다. 어떠한 차이가 있는지 설명해준다.

최근에 성능과 최적화 분야에 관심이 많아서 그런지 책을 굉장히 재밌게 읽었다.

물론 현재 맡고 있는 업무에 바로 직결되는 부분은 없기 하지만 일부 도움되는 부분은 있었다.

다른 개발자 동료들이 단순히 면접용 질문으로 공부하지 말고 근본을 파고들어 공유하는 문화가 발달했으면 좋겠다.

 

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