책소개
선배가 옆에서 하나하나 알려주듯 친절히 설명해주는실습과 그림으로 배우는 리눅스 지식의 모든 것 * Go 언어와 Python, Bash 스크립트 실습 코드 제공* 이 도서는 『실습과 그림으로 배우는 리눅스 구조』의 개정판입니다.리눅스 커널 책의 두께와 깊이에 질려 중간에 포기했던 경험이 있는 엔지니어라면, 『그림으로 배우는 리눅스 구조』로 다시 한번 도전해 보길 추천합니다. 이 책은 컴퓨터 시스템을 구성하는 OS나 하드웨어를 직접 동작해 보며 리눅스 개념을 종합적으로 이해할 수 있도록 다양한 실습을 제공합니다. 또한 리눅스가 무엇인지, 리눅스에 포함된 다양한 프로그램에는 어떠한 것이 있는지, 리눅스 프로그램의 필요성 등을 그림으로 친절하게 설명합니다.Go, Python으로 작성된 실습 코드와 그 실행 결과를 그래프로 나타내어 리눅스의 흐름을 쉽게 파악할 수 있도록 도와줍니다. 프로세스 관리, 메모리 관리뿐만 아니라 디바이스 드라이버를 포함한 장치 접근 방법, 현대 소프트웨어 시스템을 다루는 데 빠질 수 없는 가상화, 컨테이너, cgroup 등의 내용까지 다룹니다. 이 한 권으로 리눅스 지식의 전반적인 내용과 기본 개념부터 파고들어야 비로소 배울 수 있는 심화 내용까지 배울 수 있습니다. 다양한 그림과 실습으로 리눅스 OS의 핵심 개념과 기술을 깊이 있게 배워봅니다. 책을 통해 OS와 하드웨어에 대한 이해도를 높이고 나면 다음과 같은 일이 가능합니다.- 시스템 운용에 활용- 보다 나은 프로그래밍에 활용 - 본격적인 커널 개발 시작
목차
CHAPTER 0 시작하면서CHAPTER 1 리눅스 개요1.1 프로그램 및 프로세스1.2 커널1.3 시스템 콜_시스템 콜 호출 확인해 보기_시스템 콜을 처리하는 시간 비율Column 모니터링, 경고 알림 및 대시 보드_시스템 콜 소요 시간 1.4 라이브러리_표준 C 라이브러리_시스템 콜 래퍼 함수_정적 라이브러리와 공유 라이브러리Column 정적 링크가 돌아왔다CHAPTER 2 프로세스 관리(기초편)2.1 프로세스 생성_같은 프로세스를 두 개로 분열시키는 fork() 함수_다른 프로그램을 기동하는 execve() 함수_ASLR로 보안 강화2.2 프로세스의 부모 자식 관계Column fork() 함수와 execve() 함수 이외의 프로세스 생성 방법2.3 프로세스 상태2.4 프로세스 종료2.5 좀비 프로세스와 고아 프로세스2.6 시그널Column 반드시 죽이는 SIGKILL 시그널과 절대로 죽지 않는 프로세스 2.7 셸 작업 관리 구현_세션_프로세스 그룹2.8 데몬CHAPTER 3 프로세스 스케줄러3.1 기본 지식: 경과 시간과 사용 시간3.2 논리 CPU 하나만 사용하는 경우3.3 논리 CPU 여러 개를 사용하는 경우3.4 real보다 user+sys가 커지는 경우3.5 타임 슬라이스Column 타임 슬라이스 구조 3.6 컨텍스트 스위치3.7 처리 성능3.8 프로그램 병렬 실행의 중요성CHAPTER 4 메모리 관리 시스템4.1 메모리 관련 정보 수집하기_used_buff/cache_sar 명령어를 사용해서 메모리 관련 정보를 수집하기4.2 메모리 재활용 처리_프로세스 삭제와 메모리 강제 해제4.3 가상 메모리_가상 메모리가 없을 때 생기는 문제점_가상 메모리 기능_가상 메모리로 문제 해결하기 4.4 프로세스에 새로운 메모리 할당_메모리 영역 할당: mmap () 시스템 콜Column Meltdown 취약점의 공포_메모리 할당: Demand pagingColumn 프로그래밍 언어 번역기와 메모리 관리4.5 페이지 테이블 계층화_Huge Page_Transparent Huge Page(THP)CHAPTER 5 프로세스 관리(응용편)5.1 빠른 프로세스 작성 처리_fork() 함수 고속화: 카피 온 라이트_execve() 함수의 고속화: Demand paging5.2 프로세스 통신_공유 메모리_시그널_파이프_소켓5.3 배타적 제어5.4 돌고 도는 배타적 제어 5.5 멀티 프로세스 및 멀티 스레드Column 커널 스레드와 사용자 스레드CHAPTER 6 장치 접근6.1 디바이스 파일_캐릭터 장치_블록 장치Column 루프 장치6.2 디바이스 드라이버 _메모리 맵 입출력(MMIO)_폴링_인터럽트Column 일부러 폴링을 사용하는 경우6.3 디바이스 파일명은 바뀌기 마련CHAPTER 7 파일 시스템 7.1 파일 접근 방법7.2 메모리 맵 파일7.3 일반적인 파일 시스템7.4 쿼터(용량 제한) 7.5 파일 시스템 정합성 유지_저널링을 사용한 오류 방지_카피 온 라이트로 오류 방지_뭐니 뭐니 해도 백업7.6 Btrfs에서 제공하는 파일 시스템의 고급 기능_스냅샷_멀티 볼륨Column 어떤 파일 시스템을 사용하면 좋은가?7.7 데이터 손상 감지와 복구7.8 기타 파일 시스템_메모리 기반의 파일 시스템_네트워크 파일 시스템_procfs_sysfsCHAPTER 8 메모리 계층8.1 캐시 메모리_참조의 지역성_계층형 캐시 메모리_캐시 메모리 접근 속도 측정Simultaneous Multi Threading (SMT)Column 변환 색인 버퍼(Translation Lookaside Buffer)8.2 페이지 캐시_페이지 캐시 효과8.3 버퍼 캐시8.4 쓰기 타이밍8.5 직접 입출력8.6 스왑8.7 통계 정보CHAPTER 9 블록 계층9.1 하드 디스크의 특징9.2 블록 계층의 기본 기능9.3 블록 장치의 성능 지표 및 측정 방법_하나의 프로세스만 입출력을 호출하는 경우_여러 프로세스가 병렬로 입출력을 호출하는 경우 Column 추측하지 말고, 측정해라_성능 측정 도구: fio9.4 블록 계층이 하드 디스크 성능에 주는 영향_패턴 A 측정 결과_패턴 B 측정 결과Column 무엇을 위한 성능 측정인가_기술 혁신과 관련된 블록 계층의 변화9.5 블록 계층이 NVMe SSD의 성능에 미치는 영향_패턴 A 측정 결과_패턴 B 측정 결과Column 실제 성능 측정CHAPTER 10 가상화 기능10.1 가상화 기능이란 무엇인가10.2 가상화 소프트웨어10.3 이 장에서 사용하는 가상화 소프트웨어Column 중첩 가상화10.4 가상화를 지원하는 CPU 기능_QEMU+KVM 조합Column CPU 가상화 기능이 없는 경우의 가상화 10.5 가상 머신은 호스트 OS에서 어떻게 보이는가?_호스트 OS에서 본 게스트 OS_여러 머신을 실행하는 경우Column IaaS의 오토스케일 메커니즘10.6 가상화 환경의 프로세스 스케줄링_물리 기기에서 프로세스가 동작하는 경우_통계 정보10.7 가상 머신 및 메모리 관리_가상 머신이 사용하는 메모리10.8 가상 머신과 저장 장치_가상 머신과 저장소 입출력_저장 장치 쓰기와 페이지 캐시_반가상화 장치와 virtio_blkColumn 호스트 OS와 게스트 OS의 저장소 입출력 성능 역전 현상10.9 virtio_blk 구조Column PCI 패스스루CHAPTER 11 컨테이너 11.1 가상 머신과 차이점11.2 컨테이너 종류11.3 네임스페이스_프로세스ID 네임스페이스_컨테이너 정체11.4 보안 위험성CHAPTER 12 cgroup12.1 cgroup으로 제어 가능한 자원12.2 사용 예: CPU 사용 시간 제어Column cgroup 기능이 리눅스 커널에 포함된 과정12.3 응용 예Column cgroup v2CHAPTER 13 이 책에서 배우는 내용과 활용법