스마트폰에서 클라우드까지, IT 산업 곳곳에서 리눅스가 보입니다. 이렇게 산업과 생활 전반에 걸쳐 사용하는 OS는 어떻게 움직일까요?
이 책은 컴퓨터 시스템을 구성하는 운영체제를, 그중 가장 많이 사용하는 리눅스를 예로 들어 설명했습니다. 단순히 읽고 넘어가지 않고 스스로 실습해보며 동작 원리를 익힐 수 있으며, 프로그래머, 시스템 설계자 등 대부분의 개발자에게 꼭 필요한 지식을 담았습니다.
이 책을 통해 소프트웨어와 하드웨어의 상호작용을 이해하세요. 그다음, 책에서 배운 운영체제 전체 구성, 프로세스, 메모리 등에 대한 이해를 바탕으로 프로그램을 개발한다면 소프트웨어 신뢰도를 확보하는 동시에 성능 최적화까지도 도전할 수 있습니다.
누구를 위한 책인가요?
현업에서 OS나 하드웨어 구조를 알고 프로그래밍 해야 하는 개발자와 리눅스 동작과 구조에 관심있는 학생, 벤더의 서버 엔지니어라면 이 책이 꼭 필요합니다.
[도서 특징]
따라하며 OS의 작동방식을 이해해봅시다.
이 책에서는 컴퓨터 시스템을 구성하는 OS(운영체제, Operating System)나 하드웨어를 직접 다루며 어떻게 작동하는지를 알려줍니다. 실습을 진행하는 환경은 우분투 리눅스 16.04/x86_64입니다.
애플리케이션 개발자, 시스템 설계자, 지금 서비스를 운영하거나 벤더의 서버 엔지니어라면 이 책을 한 번 읽어 보길 권합니다. 단, 리눅스의 기본 명령어 정도는 아셔야 합니다.
책을 통해 OS나 하드웨어에 대한 이해도를 높이고 나면 다음과 같은 일이 가능합니다.
하드웨어 특성을 고려하여 소프트웨어를 개발할 수 있습니다.
시스템 설계 시 기준으로 삼을 지표가 무엇인지 알 수 있습니다.
OS나 하드웨어 관련 오류를 대처할 수 있습니다.
[추천사]
저자의 교육법은 매우 독특하고 늘 풍부한 도표와 설명을 더한 테스트 데이터를 그림으로 보여줍니다. 이런 그림과 데이터는 구체적이고도 간결하게 상황을 잘 설명해 이해를 돕습니다. 예를 들어 성능을 내기 위해 프로그램을 작성할 때 필수인 캐시 메모리를 설명할 때에는 동작 원리를 그림으로 나타낼 뿐만 아니라, 메모리와 캐시 메모리의 구체적인 속도 차이를 나타내는 그래프를 이용하기도 합니다. 이런 독특한 교육 방법으로 저자에게 배운 덕에 신입사원들도 프로그램을 짜면서 프로그램의 품질까지도 고려하는 개발자로 성장했습니다.
컴퓨터공학과를 졸업하고 드러나지 않는 분야에서 주로 일했다. 2008년부터 2013년까지는 리눅스 및 안드로이드용 GPU 드라이버 개발과 GPU 애플리케이션 이식 작업을 주로 했다. 그후 2017년까지는 그래픽 엔진 개발회사에서 그래픽 엔진 개발과 콘텐츠 제작을 했다. 현재에는 일본과 한국을 오가며 모바일 GPU용 그래픽 엔진을 개발하며 콘텐츠를 제작하고 있다.
저자가 서문에서도 밝혔듯 프로그램을 처음 배우는 공학계열 학생이나 devops를 꿈꾸는 신입 사원에게 OS의 기본적인 정보를 알려줌으로써 자신의 프로그램이 동작하는 방식이나 운영하게 되는 시스템의 기본에 충실하게 해 주고, 레벨업을 원하는 개발자들에게 본격적인 커널 학습 전에 개념을 잡는 데 도움이 될 만한 책이다.
다만, 몇몇 부분에서 오류가 있다. 번역의 문제인지 원작의 문제인지는 모르겠으나, 특히 3장의 경우 핵심 알고리듬 설명 오류가 보이는 점은 다음 쇄에서 개선이 필요해 보인다.
3장에서 copy on write를 설명하는 부분인데, 앞 장과 절에서 충분히 copy on write를 설명해 놓고 (심지어는 '미주'에서도 copy on write를 설명하고 있음) 제목은 "메모리 부족" 으로 뽑았다.
또한, Copy on Write의 설명에서 '테이블의 주소값 (600-700 -> 700-800) 이나, 빠진 주소 (800), 빠진 번호 (3 업데이트) 등은 '옥의 티' 다.
이 외에도 6장 등에서 코드의 indent가 맞지 않는 점 등은 다음 쇄에서 개선이 필요해 보인다.
부족한 부분의 수정, 보완은 필요해 보이고 무엇보다 OS에서 특히 중요한 주변 장치의 제어에 관련된 내용이나, 커널 프로그램을 위해 필요한 동기화, 타이머 등의 설명은 다른 책을 참고할 수 있도록 하는 부분도 추가되면 좋겠다. 어쨌든 전반적으로 쉽게 잘 읽히도록 만든 책이어서 오랜만에 기억을 되새기며 잘 읽었다.
본인은 PC통신을 하며 처음으로 C언어를 배웠다. PC가 돌아가는 원리가 궁금하여 당시 배우는 사람이 없었던 어셈블리어도 간단히 익혔다. 리눅스는 (아마도) 알짜리눅스 6.0 버전을 처음으로 설치했던 것 같다. 리눅스를 통해 처음 사회에 발을 내딛은 것은 2005년 Intel 개발자회의에서였다. 대학생 때는 작은 프로젝트를 수 차례 했다. 짧은 시간이었지만 국제기구에서 개발자로 일했다. 현재는 작은 공기업의 IT부서에서 전체 시스템을 (다른 분들과 함께) 맡아서 운영하고 있다. 재직중인 곳에서는 포탈, 통합검색, 내・외부메일 업그레이드 및 교체 등 여러 가지 프로젝트를 수행했다.
2. 책 소개
이번에 읽은 책은<실습과 그림으로 배우는 리눅스 구조> – 개발자가 알아야 하는 OS와 하드웨어의 기초이다. 일본의 후지츠(주)에서 일하는 다케우치 사토루씨가 쓴 책을 신준희님이 번역했다. 번역 수준은 훌륭한 편이다.
이 책은 OS와 하드웨어 원리를 소개한 다른 책들과 다르게훌륭한 그림, 쉬운 설명, 그리고 설명을 직접 확인할 수 있는 프로그램까지 함께 제공하기 때문에 그 어떤 책보다 쉽게 컴퓨터의 동작 원리를 이해할 수 있다.
3. 대상독자
당신이 개발자 혹은 서버 운영자라고 가정하자. 만약 아래 용어 중 하나라도 자신의 언어로 풀어서 설명할 수 없다면 이 책을 읽을 것을 추천한다.
시스템 콜(system call), 커널 모드(kernel mode), 사용자 모드(user mode), 프로세스 생성, 프로세스 스케줄러, sar 명령어, ldd, 물리 메모리, 가상 메모리, 페이지 테이블, 요구 페이지, 페이지 인, 페이지 아웃, 스와핑, COW(Copy On Write), HDD와 SSD의 특성
4. 특징
최근에 읽었던 운영체제와 컴퓨터 원리를 설명한 서적 중 가장 잘쓰여진 책이라고 생각한다. 여기서는 좋았던 점과 아쉬웠던 점을 소개한다.
4.1. 좋았던 점
이 책의 가장 큰 장점은 훌륭한 그림이다. 책 서문에 나오는 컴퓨터 시스템의 계층을 예쁜 모델과 현실로 구분해서 그렸는데 참 인상적이었다.
프로세스와 OS의 관계 또한 그림과 함께 설명을 하다보니 매우 직관적이고 이해하기 쉽다. 아래 그림에서 보듯이 프로세스 고유의 코드(개발자가 작성한 코드)는 사용하는 언어가 제공하는 함수를 사용(OS외의 라이브러리)한다. 그리고 이 언어가 제공하는 기본 라이브러리는 결국 OS 라이브러리. 즉, 시스템 콜을 호출한다. 시스템 콜을 호출하면 프로그램 실행 모드가 사용자 모드에서 커널 모드로 변경되어야 한다. 이러한 설명이 그림과 함께 설명된다. 이 보다 더 쉬울 수 있을까?
가끔씩 OS나 하드웨어가 작동하는 원리를 이전처럼 잘 알 필요가 없다는 사람들도 있다. 실제로 어설픈 사람의 최적화보다 컴파일러의 자동 최적화가 더 나은 경우도 있다. 하지만 만약 자동화에 의해 처리되는 어떤 작업에 의심스러운 부분이 발생하면 어떻게 할 것인가? 그 때는 사람이 직접 분석해야 한다. 이러한 분석을 할 때 필수적으로 요구되는 것이 바로 ‘원리’ 이다. 아래 그림은 OS의 문맥 전환(context switching)에 대해 소개한다.
모바일 컴퓨팅 환경에서는 전원관리가 중요하다. 물론 iOS나 Android가 알아서 잘 하겠지만, 이러한 것이 어떻게 구현되어 작동하는지 알면 더 좋지 않을까?
개발자가 가상 메모리와 물리 메모리가 각각 언제 확보되는지를 이해하고 있다면 프로그램을 작성할 때 이러한 부분을 고려하여 개발할 수 있지 않을까? 물론 어떤 분야에서 일을 하느냐에 따라 고려할 필요가 거의 없는 경우도 있겠지만, 이러한 내용을 이해하는 사람과 그렇지 못한 사람은 시간이 지날수록 내공에 차이가 생기지 않을까?
OS는 I/O 스케줄러를 통해 HDD 또는 SSD가 최적의 성능을 낼 수 있도록 일하고 있다. 알고 있었는가?
C언어의 malloc() 함수는 메모리를 확보한다. 이 함수는 내부적으로 리눅스의 mmap() 함수를 호출한다.
최근에는 대학에서 입문용 프로그래밍 언어로, 산업에서는 인고지능 등에서 많이 사용하는 언어인 파이썬은 어떨까? 파이썬도 결국 C언어처럼 메모리 할당을 위해서 mmap() 함수를 호출한다.
또한, 이 책은 이론을 실제로 확인할 수 있는 프로그램을 제공한다. 아래 그림은 mmap() 함수를 호출하기 전과 후의 프로세스 메모리 맵 상태이다. 붉은 박스를 보면 알 수 있는데, mmap() 함수 호출 후 요청한 크기만큼의 메모리 공간이 확보되었다.
또한 아래 예제는 요구 페이지(demand paging)을 확인하는 프로그램이다. 두 번째 그림에서 보면 실제 물리 메모리가 확보되기 전 page fault가 먼저 발생하는 것을 알 수 있다. 지금 여기서 본인이 얘기하는 내용이 머리에 정확히 그려지지 않는다면 이 책을 사서 읽으면 된다. 정말 쉽게 설명을 하고 있다.
마지막으로 좋았던 점은 이 책의 번역자님이 중간에 작성하신친절한 주석이다. 책을 읽는 중 궁금한 내용들이 자세히 적혀 있어서 좋았다.
4.2. 아쉬웠던 점
이 책의 내용 자체에 대해서는 아쉬운 점이 별로 없다. 그래도 한 가지 꼽자면 책의 내용을 실습하기 위한 소스코드를 제공하지 않는다는 것이다. 아래는 본인이 작성한 파일이다. 실습은 CentOS 7 (64비트) 에서 했으니 동일한 환경이면 문제 없이 실습이 가능할 것이다.
오늘날 우리는 수많은 IT 서비스들의 도움으로 과거와는 비교할 수 없을 정도로 편리한 삷을 영위하고 있다. 웹 브라우져를 통해 이메일과 일정을 관리하고 메신져 앱을 통해 사람들과 의사소통을 하며 집에서도 인터넷을 통해 음식 배달을 주문할 수 있다. 이러한 서비스들을 제공하기 위해서 수많은 프로그램들이 유기적으로 동작하고 있는데 이러한 프로그램들은 OS 라는 기반이 존재하지 않으면 실행될 수 없다. 이러한 이유로 OS에 대한 지식은 프로그램의 품질 향상 뿐만 아니라 서비스 장애 발생 시 원인 분석 및 해결에 많은 도움이 된다.
이 책에서는 오픈 소스 기반의 인기 OS인 리눅스를 가지고 OS의 핵심 기능에 대해 설명하고 있다. 다들 OS라고 하면 무척 난해하고 복잡한 기능들을 떠올릴 것이다. 필자도 학교에서 공부할 때 프로세스, 스레드, 메모리 관리, 파일 시스템 등을 공부하면서 무척 힘들었던 추억(?)이 있다.
이 책은 놀랍게도 이러한 난해하고 복잡한 OS의 핵심 기능들을 간단한 그림과 그래프, 간단 명료한 코드, OS 상태 지표를 확인하는 몇몇 프로그램들을 이용하여 신기할 정도로 알기 쉽게 설명하고 있다. 300 페이지 정도의 책이지만 많은 부분이 그림과 코드 영역이기 때문에 글자가 많지 않아서 쉽게 읽힌다. 원서는 일본 서적이지만 번역이 잘되어 있어서 문장을 읽고 이해하는데 아무런 어려움도 느낄 수 없었다. (번역가가 내용을 제대로 이해하지 못했거나 번역이 어색한 일부 번역서들은 오히려 원서보다도 더 이해가 안되는 경우가 몇 번 있었다.)
책에서 제공하는 코드들도 설명하려는 OS의 핵심 기능의 실습에 초점을 맞추고 있어서 코드 내용을 이해하는데 크게 많은 시간이 들거나 어렵지 않았다. 그리고 책에서 사용된 각종 OS 상태 확인 유틸리티들이 표시하는 지표들의 의미를 명확히 이해할 수 있어서 실제 프로그램 장애 분석 시 해당 유틸리티를 잘 사용한다면 장애 분석 및 해결에도 많은 도움이 될 것으로 생각된다.
이 책은 OS의 핵심 기능을 알기 쉽게 설명한 책이다. 초급 개발자들이 OS에 대해 처음 공부할 때 좋은 시작이 될 수 있다. 중, 고급 개발자들도 짧은 시간에 과거에 배웠던 OS의 기능들을 다시 상기해보기에도 훌륭한 도서라고 생각된다. 단, OS를 직접적으로 다루거나 좀 더 깊은 내용을 공부하고 싶은 사람들은 다른 책을 보아야 한다.
이 책은 네트워크는 다루지 않고 OS, 하드웨어에 초점이 맞춰져 있다.각 주제들에 대해 아주 deep하게 다루는 책은 아니지만 전체적으로 개념을 잡고, 꼭 필요한 명령어들을 습득하기에 좋은 책인 것 같다. 책 제목 답게 삽입 그림, 테스트 프로그램의 소스코드, 리눅스 명령어를 통한 실습 화면을 대부분의 페이지에서 찾을 수 있다. 번역도 깔끔하고 책 페이지 편집도 깔끔하여 술술 읽힌다.
우선 그저 컴퓨터 구조에 관심만 있고, 거의 컴퓨터 용어를 모르는 사람은 구매 전 조금 고려해봐야할 것 같다.
비전공자와 같은 초보자들을 위한 책이지만, '배경지식이 전혀 없으면' 조금 버거울 것 같다는 인상을 받았다. 그저 컴퓨터를 켜서 설정되어 있는 기본만을 사용하다보니 리눅스(Linux)가 무엇인지 접하기 흔치 않을 것이기 때문.
그러나 친절하게도 가급적 세부적인 것까지 설명하고 있고, 그래서 좀 더 매끄럽게 읽을 수 있는 것 같다.
우선 컴퓨터 프로그래밍 등과 구조를 공부하기로 마음 먹은 사람이라면, 처음에는 쭉 훑어보고 공부하는 과정에서 이 책을 하나하나 뜯어보면 참 좋겠다는 생각이 든다.
초보자 입장에서는 그림을 통해 전체적인 과정을 볼 수 있어서 좋고, 저자 분께서 풍부한 교육 경험과 실무 경력을 잘 녹여내어 이론과 실제를 오가며 배우기에는 딱 좋은 내용이다. 개발자로써는 OS의 구조에 대해 좀 더 알고 개발하고 싶거나 리눅스에 대해 의문을 가져본 적이 있는 분들이 읽으시면 더 발전할 수 있는 계기가 될 것 같다.
리눅스를 사용 한다고 해서 리눅스 시스템이 움직이는 원리에 대해서 꼭 알아야 하는 것은 아니다. 하지만 옛말에 아는 만큼 보인다고 했다. 뭐든지 그렇지만 아는 부분이 늘어나면 더욱 재미 있다.
1) 컴퓨터 시스템의 개요
전체적인 컴퓨터 시스템의 개요이다. 책의 모든 내용의 흐름은 개요의 흐름 순으로 진행 한다.
2) 사용자 모드로 구현되는 기능
사용자 모드, 커널 모드, 시스템콜
3) 프로세스 관리
fork() !!
4) 프로세스 스케줄러
시분할 시스템에 대해서 배웠었지만, 굉장히 막연한 느낌이었는데, 친절한 설명을 통해서 조금은 이해하게 된 것 같다.
5) 메모리 관리
고급언어를 사용하여 개발하면서 별로 생각해 보지 않았던 메모리 관리에 대한 부분을 오랜만에 재미있게 보았다. 메모리 할당, 해제, 가상메모리, 단편화, 스왑 까지 메모리에 대해서 알아야할 모든 내용을 다루고 있다.
6) 메모리 계층
페이지 캐시, 버퍼 캐시등에 대한 내용을 다룬다.
7) 파일시스템
파일시스템에 대한 전반적인 내용을 다룬다. ext4, XFS 등 파일시스템의 구체적인 내용은 아니고 리눅스의 파일종류, 캐릭터 장치, 디렉토리 등 기초적인 내용과 왜 파일시스템이 존재하는 지에 대한 설명이 잘 되어 있다.
8) 저장 장치
HDD와 SSD의 동작원리에 대해서 설명 한다. 그래프가 너무 많다.
- 실습
머리말에서 저자는 실제로 직접 실습용 프로그램을 빌드 하고 실행 하여 동작을 확인해보길 권한다고 했지만, 여러가지 사정상 실제로 실습을 진행해 보지는 않았다. 다만 코드는 읽어 봤는데, 아무래도 실습코드이다 보니 C 언어 문외한에 가까운 나에게도 그렇게 어려운 내용은 아니었다. OS나 C언어 입문 하는 사람이라면 필히 직접 코드를 입력 하여 테스트 해보기를 권한다.
-감상
학교 다닐 때 OS 수업시간에 의미도 모르면서 달달 외웠던 단어들이 많이 보여서 반가웠다. 혹시 라도 공룡이 그려진 책을 읽어야 할 필요가 있는 사람이라면, 그 책을 읽기 전에 준비운동 하는 기분으로 가볍에 읽어 볼 수 있는 책이다. 꼭 개발자가 아니더라도, 대학새내기로 컴퓨터공학이나 리눅스를 처음 공부하는 사람이 꼭 읽어 봤으면 한다.
설명이 필요한 것을 가급적 모두 설명하고 있으며, 그러한 설명으로 인해 다음으로 넘어가는것이 자연스러워지기 때문이다.
또한 화려하거나 꾸민것은 별로 없지만, 보기에 편안했다. 요즘 뜨고 있는 Medium 블로그 같다고 할까나.
그리고 부제로 있는 '개발자가 알아야 하는 OS와 하드웨어의 기초'가 아무래도 더 맞는 설명으로 보인다. 물론 리눅스 기준으로 설명했기 때문에 리눅스를 알아가는 것이 목적이지만, OS 전반에 대해 다루기 때문이다.
마치 대학시절 운영체제 수업을 좀 더 편안하게 바꿔놓은 느낌이다.
표지에도 필요한 내용이다. 모두.
개발자 레벨업 프로젝트 -> 맞다. 우리가 흔히 개발자는 코딩하는 사람들이다.
그런데 그 개발자들은 보통 업무를 하기 위해 코딩만 생각하는 경우가 많은데, 그러면 어느정도 레벨에서 멈춰설 수 밖에 없다.
결국은 OS의 구조를 알고 그에 맞는 개발을 해야 좀 더 프로그램이 정교하게 돌아가게 된다.
그것을 이해하는데 도움을 주기 때문에 한단계 레벨업이 가능하다.
컴퓨터 공학 기초 -> 컴퓨터 공학과에서 다룬 운영체제 수업의 확장판이다.
운영체제 수업에서는 너무 딱딱한 느낌이 없지않았다면, 이 책에서는 좀 더 실습 지향적이고 그 안에서 이론을 발견하게 도와준다.
그래서 대학 수업이 어려웠던 자들에게 매우 큰 도움이 될 것이다. 또한 전공을 다른것으로 마쳤지만 학원 등을 통해 실무에 투입된 자들에게는 이것을 통해 어느정도 컴퓨터공학의 기초를 마련하는데 도움이 될 것으로 보인다.
이 책은 따끈따끈한 책이다. 2019년 2월 20일 발행.
일본에서 지은 책이며, 번역서이다.
마지막 줄인 OS의 구조에 대해 조금 더 알고 개발하고자 하는 분들, 혹은 리눅스에 대해 조금이라도 깊이있는 의문을 가져본 적이 있는 분들이라면 이 책을 읽어보시기를 적극적으로 권하고 있다.
나 또한 이에 공감하여 이 부분을 소개한다.
우리가 공부했고, 알고 있는 OS는 매우 계층적임을 보여 준 뒤, 현실을 그려놓았다.
사실 이게 맞기는 하다.
우리는 당초 레이어로 치면 응용계층과 연결된 OS외의 라이브러리 정도만 알아도 되어야 하는데, 실제 개발하다보면 크래시가 빈번하게 일어난다. 원래로 치면 wrapping되어있기 때문에 알아서 막혀있어야 하는 구조이지만, 아래의 그림처럼 직접 하드웨어와 맞닿아 있기도하고, 그것이 아니면 구현하기 어려운 아이디어들이 많기 때문이다. 문제해결도 어려워진다.
그래서 우리가 일반 응용프로그램 개발자라 할지라도 OS의 구조는 결국에는 필수가 된다. 성장하기 원한다면 말이다.
백마디 말보다 이렇게 그린 그림이 너무나 와 닿았다.
목차는 다음과 같은 순서로 구성되어 있다.
CHAPTER 1. 컴퓨터 시스템의 개요
CHAPTER 2. 사용자 모드로 구현되는 기능
CHAPTER 3. 프로세스 관리
CHAPTER 4. 프로세스 스케줄러
CHAPTER 5. 메모리 관리
CHAPTER 6. 메모리 계층
CHAPTER 7. 파일시스템
CHAPTER 8. 저장 장치
챕터는 간단하게 시작이 된다.
시스템 콜에 대해 설명하는 내용이다. strace의 사용 방법과 이 것을 해석하는 방법을 이야기 하고 있다.
실제로 코드 작성시 C로 작성된 프로그램과 python으로 작성된 프로그램을 실행할 때 동일한 시스템콜을 사용한다는 것에 흥미가 생겼다.
단순히 지식적으로 알던 부분을 눈으로 확인시켜 주는 부분이 인상적이었다.
다른 부분들도 이러한 것이 많다.
아주 간단한 코드로 실습을 유도하고, 그것에 대한 설명을 정확하게 집어준다.
마치 무엇을 궁금해 할 것인지 알고 있던 듯이 말이다.
간단한 명령어를 통해 프로세스의 상태를 설명하는 도입부이다.
이것을 읽고있다보면 마치 강의를 듣고 있는 느낌이다.
책이기 때문에 일시정지할 필요도 없다.
프로세스의 시작과 종료까지의 상태변화 또한 대학수업 때 듣던 내용과 같은 부분이지만, 조금 더 편안하게 와 닿게 도와준다.
리눅스는 각종 여러 도처에서 사용중이다. 이 책의 마지막 뒷표지 내용처럼 스마트폰, 도커, 클라우드 등 많은 영역에서 사용중이다. 20년 전에는 리눅스가 OS 중 하나라는 구나 정도만 알아도 살아가는데 지장이 없을 정도로 끼치는 영향이 적었다면, 이제는 너무나 일상적이다. 물론 윈도우, 맥도 큰 영역을 차지하지만 결국은 리눅스를 알아야 그 기본이 바로서는데 도움이 된다.
그러한 측면에서 이 책은 너무도 큰 도움을 줄 것으로 본다.
제목과 겉 표지가 개인적으로는 좀 아쉬울 정도로 내용이 알차다.
이 책을 추천하는 사람은 다음과 같다.
- 일반 응용프로그램을 포함한 많은 개발자
- 대학 전공을 다른 것으로 하였으나, 현업에 종사하는 개발자
- 개발자는 아니지만 개발자와 협업하는 PM이나 다른 업무 담당자
장점으로는
- 깔끔한 구성
- 개발자들에게 필요한 OS의 개념 정리
- 여러 도표를 사용하여 이해가 쉽도록 정리한 설명
- 적절한 실습을 통하여 체득할 수 있도록 함
- 내용에 비해 저렴한 가격
아쉬운 점으로는
- 제목이 조금 더 감각적이었다면
- 리눅스 실습이 매우 도움이 되기 때문에 리눅스를 다룰 수 있는 방법 몇가지를 예시로 들었더라면
이 책은 #리눅스 구조를 그림과 도표로 알기쉽게 설명하고 실습을 통해 실제 동작하는 것을 확인할 수 있다.
책은 #리눅스 #시스템의 개요를 시작으로 #프로세스, #메모리, #파일 시스템 등 리눅스 구조 중 개발과 관련하여 주요한 부분을 설명하고 있다.
프로세스 파트에서는 프로그램의 처리 방식과 메모리에 할당하는 구조, 그리고 스케줄러 기능을 통해 각각 프로세스가 어떻게 진행되는지 살펴 본다.
메모리 파트에서는 메모리 할당과 #가상메모리를 이해하고 메모리 부족이나 #단편화 문제를 해결하는 방법에 대해 살펴보고, #캐시메모리와 #하이퍼스레드 기능 등을 설명하고 있다.
마지막으로 파일시스템 파트에서는 파일시스템의 종류와 각 저장장치의 성능 비교, 동작방식 등을 설명하고 있다.
이 책은 프로세스부터 파일 시스템까지 챕터마다 실습 예제를 제공하고 있다. 예제 코드는 C와 파이썬으로 작성되어 있으나 해당 언어를 몰라 어려워할 필요는 없다. 예제 코드는 시스템 구조 이해를 위해 작성된 코드라 코드량이 많지 않고 따라하기 쉽게 작성되어 있다. 그리고 실행 결과도 그림으로 제공하고 있어 직접 작성한 코드의 실행 결과와 비교해 볼 수 있고, 프로세스나 메모리, 파일 시스템에서 작성된 프로그램이 어떻게 동작되는지 이해할 수 있다.
이번에 살펴본 실습과 그림으로 배우는 리눅스 구조 책은 프로그래머나 시스템 개발자를 위한 책이다.
시중에서 쉽게 볼 수 있는 리눅스관련 책들은 리눅스의 운영과 환경 설정이나 구축을 중심으로 설명하고 있는데 반해 이 책은 개발자가 작성한 프로그램이 리눅스 커널에서 어떻게 구현되고 동작하는지를 설명하고 리소스를 관리하고 보다 비용을 최소화 하면서 성능을 높일 수 있는 지식의 기회를 제공한다.
개발자가 알아야 하는 OS 와 하드웨어의 기초, 리눅스 시스템의 부재를 달고 나온 책입니다.
최근 개발 플랫폼이 워낙 좋아서 개발자는 코딩과 프로세스 흐름에만 신경을 써도 되는 분위기인듯합니다.
하드웨어 자체 성능이 워낙 좋아서, 예전처럼 메모리 할당 해제를 하지 않아도 프로그램이 멈추는 일이 적어드는 일들이 있어서 기본에 조금 소홀해도되는... 즉, 개발자는 OS레벨에 구조에 많은 지식이 없어도 가능한 시대입니다.
대규모 시스템을 개발, 배포를 한 이후에 이유없이 메모리가 부족하다, 프로세스가 할당이 필요하다는오류 메시지를 만날때, 그때서야 OS 레벨의 구조를 확인하는 경우가 있습니다. 그때에도 리눅스 OS 환경에 대해서는 좋은 참고 서적이 되리라 봅니다.
[레벨업하고 싶은 개발자]
좀더 깊은 개발자로서의 레벨업을 위해서는 시스템(OS레벨)을 이해하고, 흐름을 알고 있어야 더 좋은 개발이 가능합니다.
OS 과목이 컴퓨터관련한 학과에 3~4학년 전공에 포함되어잇을 정도로 설명이 오래걸리고, 기초지식이 필요합니다.
이 책은 꽤나 쉬운 그림으로 설명을 하고자 노력한 흔적들이 보이고, 여러가지 실전 코딩을 통해서 OS동작원리를 실습할 수 있게 작성되어 있어서, 프로그램 성능을 개선하고 싶은분에게 좋은 도서가 될거같습니다.
[백문이불여일타 -> 실습을 통해서 학습가능함]
백번듣는것보다 한번 코딩해보는게 낫다. IT업계의 오래된 명언입니다.
이 책에 실습 코드를 따라서 진행하면, 분명 학습효과가 더 있을것입니다. 책 전체에 소스코드가 기록이 되어있으며, GitHub에도 공개가 되어있으니, 실습 환경 구성부터 따라하기 쉽습니다. 조금 아쉬운것은 실습환경이 CPU가 라이젠이라서 아직은 인텔CPU를 많이 사용하는 추세라 행여 결과가 조금 다를까 생각됩니다.
[그림을 통한 시뮬레이션]
파일처리시스템 단계를 설명하면서 그림을 통해서 디렉터리의 이동 처리의 흐름을 제공하고 있습니다.
[부제: 개발자가 알아야 하는 OS와 하드웨어 기초] 제목과 책 표지만 놓고 보면 초보들이나 읽는 그런 책으로 치부될 수 있겠다는 생각이 들었다. 이 책은 스마트폰에서 클라우드까지 우리 사회에 IT가 있는 곳이라면 상당히 많은 곳에 침투해있는 리눅스의 구조를 다루는 책이다. 그림과 C 언어 코드로 쉽게 설명하고 있지만 배경지식이 전혀 없는 이들에게는 다소 어려울 수도 있다.
리눅스를 접해본 사용자라면 다들 겪는 의문이자 미제 문제인데 free 영역은 사용자 관점에서 available 영역인지, OS 관점에서 available 에 대한 부분이 있겠다. 책에서는 이 문제에 대해 그림으로 가볍게 다뤄주고 있겠다. OS 레벨에서 free 는 buff / cached 를 포함하고 있지 않지만 필요하다면 언제든지 가져다 사용할 수 있도록 설계되어 있다. 그림 한장으로 꽤 명쾌하게 풀이되고 있다고 할 수 있겠다.
여기 또 한장의 대표되는 그림을 가져왔는데 리눅스에서 페이지와 가상메모리의 관계에 대한 설명이다. 프로세스가 취하는 메모리가 실제 메모리의 pysical address 가 아닌 virtual address 에 매핑되고 있으며 그 매핑되는 정보는 페이지 테이블에 기록되어 있다는 그림이다. 이런 부분은 사실 우리가 평소에 신경 쓸 필요가 전혀 없게 느껴지지만 정작 로우 레벨의 프로그래밍이나 롱런( 꺼지지 않고 계속 메모리에 상주해야 하는 데몬 )해야 하는 프로그램을 개발하다보면 결국 어느순간 들여다봐야 하는 부분이다. 아주 작은 메모리 누수가 언제 우리 발등을 찍을지 모르니까.
마무리
본인은 이 책을 대부분 복습과 정리하는 느낌으로 훌훌 읽어볼 수 있었지만 갓 리눅스에 입문하는 사람에게 권할 수 있겠느냐는 질문에는 글쎄. C 언어를 완전히 무시하고는 보기 힘든 책일수도 있다. 또한 한번이라도 리눅스를 다뤄봤어야 조금은 편하게 읽어볼 수 있겠다. 시스템콜을 설명하기 위해 어쩔 수 없이 작성되어 있는 C 코드를 모두 무시하고 그냥 감으로 책을 읽겠다는 사람에게는 추천 할 수도 있다. 하지만 코드를 한줄한줄 다 파악해야 직성이 풀리는 독자에게는 권하지 않는다. 반대로 리눅스도 살짝 다뤄봤고, C 언어 코드도 스윽 보면 느낌오는 독자에게 이 책은 배경지식을 한층 더 업그레이드 해 줄 것이 분명하며 리눅스를 더 깊이 있게 다룰 수 있게 될 것이라고 확신하며 추천한다.