<개발자 레벨업 프로젝트> OS의 구조를 들여다 보자!
스마트폰에서 클라우드까지, IT 산업 곳곳에서 리눅스가 보입니다. 이렇게 산업과 생활 전반에 걸쳐 사용하는 OS는 어떻게 움직일까요?
이 책은 컴퓨터 시스템을 구성하는 운영체제를, 그중 가장 많이 사용하는 리눅스를 예로 들어 설명했습니다. 단순히 읽고 넘어가지 않고 스스로 실습해보며 동작 원리를 익힐 수 있으며, 프로그래머, 시스템 설계자 등 대부분의 개발자에게 꼭 필요한 지식을 담았습니다.
이 책을 통해 소프트웨어와 하드웨어의 상호작용을 이해하세요. 그다음, 책에서 배운 운영체제 전체 구성, 프로세스, 메모리 등에 대한 이해를 바탕으로 프로그램을 개발한다면 소프트웨어 신뢰도를 확보하는 동시에 성능 최적화까지도 도전할 수 있습니다.
누구를 위한 책인가요?
현업에서 OS나 하드웨어 구조를 알고 프로그래밍 해야 하는 개발자와 리눅스 동작과 구조에 관심있는 학생, 벤더의 서버 엔지니어라면 이 책이 꼭 필요합니다.
[도서 특징]
따라하며 OS의 작동방식을 이해해봅시다.
이 책에서는 컴퓨터 시스템을 구성하는 OS(운영체제, Operating System)나 하드웨어를 직접 다루며 어떻게 작동하는지를 알려줍니다. 실습을 진행하는 환경은 우분투 리눅스 16.04/x86_64입니다.
애플리케이션 개발자, 시스템 설계자, 지금 서비스를 운영하거나 벤더의 서버 엔지니어라면 이 책을 한 번 읽어 보길 권합니다. 단, 리눅스의 기본 명령어 정도는 아셔야 합니다.
책을 통해 OS나 하드웨어에 대한 이해도를 높이고 나면 다음과 같은 일이 가능합니다.
[추천사]
저자의 교육법은 매우 독특하고 늘 풍부한 도표와 설명을 더한 테스트 데이터를 그림으로 보여줍니다. 이런 그림과 데이터는 구체적이고도 간결하게 상황을 잘 설명해 이해를 돕습니다. 예를 들어 성능을 내기 위해 프로그램을 작성할 때 필수인 캐시 메모리를 설명할 때에는 동작 원리를 그림으로 나타낼 뿐만 아니라, 메모리와 캐시 메모리의 구체적인 속도 차이를 나타내는 그래프를 이용하기도 합니다. 이런 독특한 교육 방법으로 저자에게 배운 덕에 신입사원들도 프로그램을 짜면서 프로그램의 품질까지도 고려하는 개발자로 성장했습니다.
CHAPTER 1 컴퓨터 시스템의 개요
CHAPTER 2 사용자 모드로 구현되는 기능
시스템 콜
시스템 콜의 wrapper 함수
표준 C 라이브러리
CHAPTER 3 프로세스 관리
프로세스 생성의 목적
fork() 함수
execve() 함수
종료 처리
CHAPTER 4 프로세스 스케줄러
테스트 프로그램의 사양
테스트 프로그램의 구현
첫 번째 실험
고찰
컨텍스트 스위치
프로세스의 상태
상태 변환
idle 상태
여러 가지 상태 변환
스루풋과 레이턴시
실제 시스템
논리 CPU가 여러 개일 때 스케줄링
실험 방법
두 번째 실험
스루풋과 레이턴시
고찰
경과 시간과 사용 시간
슬립을 사용하는 프로세스
실제 프로세스
우선순위 변경
CHAPTER 5 메모리 관리
메모리의 통계 정보
메모리 부족
단순한 메모리 할당
가상 메모리
페이지 테이블
실험
프로세스에 메모리를 할당할 때
실험
고수준 레벨에서의 메모리 할당
해결법
가상 메모리의 응용
파일 맵
디맨드 페이징
메모리 부족
스왑
계층형 페이지 테이블
Huge Page
CHAPTER 6 메모리 계층
캐시 메모리
Translation Lookaside Buffer
페이지 캐시
동기화된 쓰기
버퍼 캐시
파일의 읽기 테스트
파일의 쓰기 테스트
튜닝 파라미터
정리
하이퍼스레드
CHAPTER 7 파일시스템
리눅스의 파일시스템
데이터와 메타데이터
용량 제한
파일시스템이 깨진 경우
저널링
Copy on Write
그래도 깨지는 것을 막을 수 없는 경우
파일시스템의 깨짐에 대한 대책
파일의 종류
캐릭터 장치
블록 장치
여러 가지 파일시스템
메모리를 기반으로 한 파일시스템
네트워크 파일시스템
가상 파일시스템
Btrfs
CHAPTER 8 저장 장치
HDD의 데이터 읽기 쓰기의 동작 방식
HDD의 성능 특성
HDD의 테스트
테스트 프로그램
블록 장치 계층
I/O 스케줄러
미리 읽기
테스트
시퀀셜 접근
랜덤 접근
SSD의 동작 방식
정리
찾아보기
우재남