컴퓨터 밑바닥의 비밀 : 컴퓨터 시스템의 본질을 알면 코드의 실마리가 보인다

컴퓨터 밑바닥의 비밀 : 컴퓨터 시스템의 본질을 알면 코드의 실마리가 보인다

$33.00
저자

루샤오펑

저자:루샤오펑

베이징항공우주대학에서컴퓨터과학부를졸업하고석사학위를받았다.VM웨어와징동(https://jd.com/)에서근무하며소프트웨어시스템연구및개발분야에서다년간의경험을쌓았고,컴퓨터기술을알기쉬운언어로설명하는데능숙하다.위챗에서‘프로그래머의무인도서바이벌’이라는이름의공개계정을운영하고있다.



역자:김진호

25년차소프트웨어개발자로서싸이월드,티맵등의모바일솔루션을개발했다.또한사우디아라비아등중동의여러국가,인도네시아,멕시코등의은행결제시스템을개발했다.이후K-POP,블록체인,정보관리등다양한스타트업과중견기업에서CTO,개발이사등을역임한바있다.저서로는『실전안드로이드프로그래밍』(케이엔피IT,2011),『갤럭시S&안드로이드폰완전정복』(이비락,2010),『갤럭시S안드로이드폰어플활용백서』(글로벌,2010),『입문자를위한WindowsCEProgramming』(가남사,2002)등이있으며,번역서로는『디자인패턴의아름다움』(제이펍,2023)이있다.

목차

1장프로그래밍언어부터프로그램실행까지,이렇게진행된다
1.1여러분이프로그래밍언어를발명한다면?
__1.1.1창세기:CPU는똑똑한바보
__1.1.2어셈블리어등장
__1.1.3저수준계층의세부사항대고수준계층의추상화
__1.1.4가득한규칙:고급프로그래밍언어의시작
__1.1.5<인셉션>과재귀:코드본질
__1.1.6컴퓨터가재귀를이해하도록만들기
__1.1.7우수한번역가:컴파일러
__1.1.8해석형언어의탄생
1.2컴파일러는어떻게작동하는것일까?
__1.2.1컴파일러는그저일반적인프로그램일뿐,대단하지않다
__1.2.2각각의토큰추출하기
__1.2.3토큰이표현하고자하는의미
__1.2.4생성된구문트리에이상은없을까?
__1.2.5구문트리를기반으로중간코드생성하기
__1.2.6코드생성
1.3링커의말할수없는비밀
__1.3.1링커는이렇게일한다
__1.3.2심벌해석:수요와공급
__1.3.3정적라이브러리,동적라이브러리,실행파일
__1.3.4동적라이브러리의장단점
__1.3.5재배치:심벌의실행시주소결정하기
__1.3.6가상메모리와프로그램메모리구조
1.4컴퓨터과학에서추상화가중요한이유
__1.4.1프로그래밍과추상화
__1.4.2시스템설계와추상화
1.5요약

2장프로그램이실행되었지만,뭐가뭔지하나도모르겠다
2.1운영체제,프로세스,스레드의근본이해하기
__2.1.1모든것은CPU에서시작된다
__2.1.2CPU에서운영체제까지
__2.1.3프로세스는매우훌륭하지만,아직불편하다
__2.1.4프로세스에서스레드로진화
__2.1.5다중스레드와메모리구조
__2.1.6스레드활용예
__2.1.7스레드풀의동작방식
__2.1.8스레드풀의스레드수
2.2스레드간공유되는프로세스리소스
__2.2.1스레드전용리소스
__2.2.2코드영역:모든함수를스레드에배치하여실행할수있다
__2.2.3데이터영역:모든스레드가데이터영역의변수에접근할수있다
__2.2.4힙영역:포인터가핵심이다
__2.2.5스택영역:공유공간내전용데이터
__2.2.6동적링크라이브러리와파일
__2.2.7스레드전용저장소
2.3스레드안전코드는도대체어떻게작성해야할까?
__2.3.1자유와제약
__2.3.2스레드안전이란무엇일까?
__2.3.3스레드전용리소스와공유리소스
__2.3.4스레드전용리소스만사용하기
__2.3.5스레드전용리소스와함수매개변수
__2.3.6전역변수사용
__2.3.7스레드전용저장소
__2.3.8함수반환값
__2.3.9스레드안전이아닌코드호출하기
__2.3.10스레드안전코드는어떻게구현할까?
2.4프로그래머는코루틴을어떻게이해해야할까?
__2.4.1일반함수
__2.4.2일반함수에서코루틴으로
__2.4.3직관적인코루틴설명
__2.4.4함수는그저코루틴의특별한예에불과하다
__2.4.5코루틴의역사
__2.4.6코루틴은어떻게구현될까?
2.5콜백함수를철저하게이해한다
__2.5.1모든것은다음요구에서시작된다
__2.5.2콜백이필요한이유
__2.5.3비동기콜백
__2.5.4비동기콜백은새로운프로그래밍사고방식으로이어진다
__2.5.5콜백함수의정의
__2.5.6두가지콜백유형
__2.5.7비동기콜백의문제:콜백지옥
2.6동기와비동기를철저하게이해한다
__2.6.1고된프로그래머
__2.6.2전화통화와이메일보내기
__2.6.3동기호출
__2.6.4비동기호출
__2.6.5웹서버에서동기와비동기작업
2.7아맞다!블로킹과논블로킹도있다
__2.7.1블로킹과논블로킹
__2.7.2블로킹의핵심문제:입출력
__2.7.3논블로킹과비동기입출력
__2.7.4피자주문에비유하기
__2.7.5동기와블로킹
__2.7.6비동기와논블로킹
2.8높은동시성과고성능을갖춘서버구현
__2.8.1다중프로세스
__2.8.2다중스레드
__2.8.3이벤트순환과이벤트구동
__2.8.4첫번째문제:이벤트소스와입출력다중화
__2.8.5두번째문제:이벤트순환과다중스레드
__2.8.6카페는어떻게운영되는가:반응자패턴
__2.8.7이벤트순환과입출력
__2.8.8비동기와콜백함수
__2.8.9코루틴:동기방식의비동기프로그래밍
__2.8.10CPU,스레드,코루틴
2.9컴퓨터시스템여행:데이터,코드,콜백,클로저에서컨테이너,가상머신까지
__2.9.1코드,데이터,변수,포인터
__2.9.2콜백함수와클로저
__2.9.3컨테이너와가상머신기술
2.10요약

3장저수준계층?메모리라는사물함에서부터시작해보자
3.1메모리의본질,포인터와참조
__3.1.1메모리의본질은무엇일까?사물함,비트,바이트,객체
__3.1.2메모리에서변수로:변수의의미
__3.1.3변수에서포인터로:포인터이해하기
__3.1.4포인터의힘과파괴력:능력과책임
__3.1.5포인터에서참조로:메모리주소감추기
3.2프로세스는메모리안에서어떤모습을하고있을까?
__3.2.1가상메모리:눈에보이는것이항상실제와같지는않다
__3.2.2페이지와페이지테이블:가상에서현실로
3.3스택영역:함수호출은어떻게구현될까?
__3.3.1프로그래머를위한도우미:함수
__3.3.2함수호출활동추적하기:스택
__3.3.3스택프레임및스택영역:거시적관점
__3.3.4함수점프와반환은어떻게구현될까?
__3.3.5매개변수전달과반환값은어떻게구현될까?
__3.3.6지역변수는어디에있을까?
__3.3.7레지스터의저장과복원
__3.3.8큰그림을그려보자,우리는지금어디에있을까?
3.4힙영역:메모리의동적할당은어떻게구현될까?
__3.4.1힙영역이필요한이유
__3.4.2malloc메모리할당자직접구현하기
__3.4.3주차장에서메모리관리까지
__3.4.4여유메모리조각관리하기
__3.4.5메모리할당상태추적하기
__3.4.6어떻게여유메모리조각을선택할것인가:할당전략
__3.4.7메모리할당하기
__3.4.8메모리해제하기
__3.4.9여유메모리조각을효율적으로병합하기
3.5메모리를할당할때저수준계층에서일어나는일
__3.5.1천지인과CPU실행상태
__3.5.2커널상태와사용자상태
__3.5.3포털:시스템호출
__3.5.4표준라이브러리:시스템의차이를감춘다
__3.5.5힙영역의메모리가부족할때
__3.5.6운영체제에메모리요청하기:brk
__3.5.7빙산의아래:가상메모리가최종보스다
__3.5.8메모리할당의전체이야기
3.6고성능서버의메모리풀은어떻게구현될까?
__3.6.1메모리풀대범용메모리할당자
__3.6.2메모리풀기술의원리
__3.6.3초간단메모리풀구현하기
__3.6.4약간더복잡한메모리풀구현하기
__3.6.5메모리풀의스레드안전문제
3.7대표적인메모리관련버그
__3.7.1지역변수의포인터반환하기
__3.7.2포인터연산의잘못된이해
__3.7.3문제있는포인터역참조하기
__3.7.4초기화되지않은메모리읽기
__3.7.5이미해제된메모리참조하기
__3.7.6배열첨자는0부터시작한다
__3.7.7스택넘침
__3.7.8메모리누수
3.8왜SSD는메모리로사용할수없을까?
__3.8.1메모리읽기/쓰기와디스크읽기/쓰기의차이
__3.8.2가상메모리의제한
__3.8.3SSD사용수명문제
3.9요약

4장트랜지스터에서CPU로,이보다더중요한것은없다
4.1이작은장난감을CPU라고부른다
__4.1.1위대한발명
__4.1.2논리곱,논리합,논리부정
__4.1.3도는하나를낳고,하나는둘을낳고,둘은셋을낳으며,셋은만물을낳는다
__4.1.4연산능력은어디에서나올까?
__4.1.5신기한기억능력
__4.1.6레지스터와메모리의탄생
__4.1.7하드웨어아니면소프트웨어?범용장치
__4.1.8하드웨어의기본기술:기계명령
__4.1.9소프트웨어와하드웨어간인터페이스:명령어집합
__4.1.10회로에는지휘자가필요하다
__4.1.11큰일을해냈다,CPU가탄생했다!
4.2CPU는유휴상태일때무엇을할까?
__4.2.1컴퓨터의CPU사용률은얼마인가?
__4.2.2프로세스관리와스케줄링
__4.2.3대기열상태확인:더나은설계
__4.2.4모든것은CPU로돌아온다
__4.2.5유휴프로세스와CPU의저전력상태
__4.2.6무한순환탈출:인터럽트
4.3CPU는숫자를어떻게인식할까?
__4.3.1숫자0과양의정수
__4.3.2부호있는정수
__4.3.3양수에음수기호를붙이면바로대응하는음수:부호-크기표현
__4.3.4부호-크기표현의반전:1의보수
__4.3.5간단하지않은두수더하기
__4.3.6컴퓨터친화적표현방식:2의보수
__4.3.7CPU는정말숫자를알고있을까?
4.4CPU가if문을만났을때
__4.4.1파이프라인기술의탄생
__4.4.2CPU:메가팩토리와파이프라인
__4.4.3if가파이프라인을만나면
__4.4.4분기예측:가능한한CPU가올바르게추측하도록
4.5CPU코어수와스레드수사이의관계는무엇일까?
__4.5.1레시피와코드,볶음요리와스레드
__4.5.2작업분할과블로킹입출력
__4.5.3다중코어와다중스레드
4.6CPU진화론(상):복잡명령어집합의탄생
__4.6.1프로그래머의눈에보이는CPU
__4.6.2CPU의능력범위:명령어집합
__4.6.3추상화:적을수록좋다
__4.6.4코드도저장공간을차지한다
__4.6.5필연적인복잡명령어집합의탄생
__4.6.6마이크로코드설계의문제점
4.7CPU진화론(중):축소명령어집합의탄생
__4.7.1복잡함을단순함으로
__4.7.2축소명령어집합의철학
__4.7.3복잡명령어집합과축소명령어집합의차이
__4.7.4명령어파이프라인
__4.7.5천하에명성을떨치다
4.8CPU진화론(하):절체절명의위기에서반격
__4.8.1이길수없다면함께하라:RISC와동일한CISC
__4.8.2하이퍼스레딩이라는필살기
__4.8.3장점은취하고약점은보완하다:CISC와RISC의통합
__4.8.4기술이전부는아니다:CISC와RISC간상업적전쟁
4.9CPU,스택과함수호출,시스템호출,스레드전환,인터럽트처리통달하기
__4.9.1레지스터
__4.9.2스택포인터
__4.9.3명령어주소레지스터
__4.9.4상태레지스터
__4.9.5상황정보
__4.9.6중첩과스택
__4.9.7함수호출과실행시간스택
__4.9.8시스템호출과커널상태스택
__4.9.9인터럽트와인터럽트함수스택
__4.9.10스레드전환과커널상태스택
4.10요약

5장작은것으로큰성과이루기,캐시
5.1캐시,어디에나존재하는것
__5.1.1CPU와메모리의속도차이
__5.1.2도서관,책상,캐시
__5.1.3공짜점심은없다:캐시갱신
__5.1.4세상에공짜저녁은없다:다중코어캐시의일관성
__5.1.5메모리를디스크의캐시로활용하기
__5.1.6가상메모리와디스크
__5.1.7CPU는어떻게메모리를읽을까?
__5.1.8분산저장지원
5.2어떻게캐시친화적인프로그램을작성할까?
__5.2.1프로그램지역성의원칙
__5.2.2메모리풀사용
__5.2.3struct구조체재배치
__5.2.4핫데이터와콜드데이터의분리
__5.2.5캐시친화적인데이터구조
__5.2.6다차원배열순회
5.3다중스레드성능방해자
__5.3.1캐시와메모리상호작용의기본단위:캐시라인
__5.3.2첫번째성능방해자:캐시튕김문제
__5.3.3두번째성능방해자:거짓공유문제
5.4봉화희제후와메모리장벽
__5.4.1명령어의비순차적실행:컴파일러와OoOE
__5.4.2캐시도고려해야한다
__5.4.3네가지메모리장벽유형
__5.4.4획득-해제의미론
__5.4.5C++에서제공하는인터페이스
__5.4.6다른CPU,다른천성
__5.4.7누가명령어재정렬에관심을가져야하는가:잠금없는프로그래밍
__5.4.8잠금프로그래밍과잠금없는프로그래밍
__5.4.9명령어재정렬에대한논쟁
5.5요약

6장입출력이없는컴퓨터가있을까?
6.1CPU는어떻게입출력작업을처리할까?
__6.1.1전문적으로처리하기:입출력기계명령어
__6.1.2메모리사상입출력
__6.1.3CPU가키보드를읽고쓰는것의본질
__6.1.4폴링:계속검사하기
__6.1.5배달음식주문과중단처리
__6.1.6인터럽트구동식입출력
__6.1.7CPU는어떻게인터럽트신호를감지할까?
__6.1.8인터럽트처리와함수호출의차이
__6.1.9중단된프로그램의실행상태저장과복원
6.2디스크가입출력을처리할때CPU가하는일은무엇일까?
__6.2.1장치제어기
__6.2.2CPU가직접데이터를복사해야할까?
__6.2.3직접메모리접근
__6.2.4전과정정리
__6.2.5프로그래머에게시사하는것
6.3파일을읽을때프로그램에는어떤일이발생할까?
__6.3.1메모리관점에서입출력
__6.3.2read함수는어떻게파일을읽는것일까?
6.4높은동시성의비결:입출력다중화
__6.4.1파일서술자
__6.4.2다중입출력을어떻게효율적으로처리하는것일까?
__6.4.3상대방이아닌내가전화하게만들기
__6.4.4입출력다중화
__6.4.5삼총사:select,poll,epoll
6.5mmap:메모리읽기와쓰기방식으로파일처리하기
__6.5.1파일과가상메모리
__6.5.2마술사운영체제
__6.5.3mmap대전통적인read/write함수
__6.5.4큰파일처리
__6.5.5동적링크라이브러리와공유메모리
__6.5.6mmap직접조작하기
6.6컴퓨터시스템의각부분에서얼마큼지연이일어날까?
__6.6.1시간지표로환산
__6.6.2거리지표로환산
6.7요약

출판사 서평

비유와그림으로쉽게배우는
컴퓨터시스템의본질

컴퓨터내부를이해하면코드가바뀐다
컴퓨터시스템의원리와메커니즘에대해심층적으로이해하고있다면작성하는코드의가독성및유지관리가능성을개선할수있다.이뿐만아니라프로그램성능을효과적으로최적화할수있으며,코드실행오류나비정상적인시스템동작을신속히찾아내해결할수도있다.

컴퓨터시스템의원리에대해심층적으로이해한다
계층별로추상화되어있는컴퓨터시스템의구조를하나씩뜯어보고,프로그래밍언어와컴파일러로시작하여운영체제와프로세스,스레드와코루틴,동기화,메모리에대해알아본다.더불어CPU와캐시,입출력을구현하는원리와파일시스템,네트워크와통신,보안과암호화,병렬컴퓨팅에대해서도함께배운다.