이책은리눅스커널의핵심을간결하면서도심도있게다루고있다.일반적인운영체제에대한이해를넘어,여타유닉스시스템과다른리눅스만의특징적인부분에대한설계,구현,인터페이스등을이론과실제사이에서균형감있게소개한다.구체적으로운영체제의기본적인기능인프로세스관리,시스템호출,인터럽트처리,동기화,메모리관리,파일시스템,이식성에대한내용뿐아니라,최신2.6커널의흥미로운부분인CFS스케줄러,커널선점,블럭입출력계층,입출력스케줄러등의내용을상세히다룬다.
이책은커널코드를개발하고작성하는사람뿐아니라,운영체제에대한이해를높여좀더효율적이고생산적인코드를작성하고자하는개발자에게도움이되도록,리눅스커널설계와구현에대해자세히다룬다.
이책에서는리눅스커널의설계,구현,인터페이스를비롯한커널의주요하부시스템및기능에대해자세히다룬다.리눅스커널에대한실용적인관점과이론적인관점을모두제공하는이책은다양한관심과필요성을가진독자들의흥미를끌것이다.
핵심커널개발자이기도한저자는2.6커널에대한소중한지식과경험을나누고자한다.구체적으로프로세스관리,스케줄링,시간관리및타이머,시스템호출인터페이스,메모리접근,메모리관리,페이지캐시,VFS,커널동기화,이식성문제,디버깅기법등을다룬다.이책에서는2.6커널의가장흥미로운기능인CFS스케줄러,선점커널,블럭입출력계층,입출력스케줄러등의내용도다룬다.
★개정3판에서달라진내용★
■커널자료구조를별도장으로새로추가
■인터럽트핸들러와후반부처리에대한자세한내용
■커널동기화및잠금에대한깊이있는설명
■가상메모리와메모리할당에대한설명보강
■리눅스커널디버깅시도움이되는기법
■커널패치를제출할때유용한노하우와리눅스커널공동체와함께일하는방법
★이책의대상독자★
이책은리눅스커널을이해하고자하는소프트웨어개발자를대상으로쓰여졌다.이책은커널소스를줄단위로설명하는해설서가아니다.또한드라이버개발을위한가이드도,커널API참고도서도아니다.이책의목적은리눅스커널의설계와구현에대한충분한정보를제공하여,프로그래머가커널코드개발을시작할수있게해주는것이다.커널개발은재미있고보람찬일이므로,나는독자를가능한한순조롭게이세상으로이끌고자한다.이책은학구적인독자와실용적인독자모두를만족시키기위해이론과응용모두를다룬다.나는항상응용을이해하려면이론부터이해해야한다고생각하지만,이책에서는둘사이의균형을맞추려고노력했다.여러분이리눅스커널을공부하려는동기가무엇이든,이책의커널설계와구현에대한설명이여러분의필요를충분히만족시킬수있기를바란다.
이책은핵심커널시스템의동작방법과그설계및구현을모두다룬다.중요한부분이므로잠시설명하고넘어가자.좋은예가바로후반부처리(bottomhalf)를이용하는장치드라이버구성요소를다루는8장’후반부처리와지연된작업’이다.이장에서는(핵심커널개발자나학구적인독자가관심을가질만한)커널후반부처리의설계와구현에대해서다루고,(장치드라이버개발자나통상적인해커가흥미를느낄만한)커널이제공하는인터페이스를이용해실제후반부처리를구현하는방법에대해서도다룬다.양측모두두가지측면의논의가필수적이라는사실을알수있을것이다.커널의내부작동방식을확실히알고있어야하는핵심커널개발자는인터페이스가실제사용되는방식에대해서도잘알고있어야한다.그와동시에,장치드라이버개발자역시인터페이스너머의내부구현에대해이해함으로써드라이버개발작업에도움을받을수있다.
이는라이브러리의API를배우는것과라이브러리의실제구현을공부하는것의관계와비슷하다.언뜻보기에애플리케이션개발자는API만알면될것같다.사실인터페이스를블랙박스처럼다루어야한다고배우는경우가많다.마찬가지로라이브러리개발자는라이브러리설계와구현에대해서만신경쓴다.하지만나는양자모두가서로반대편사정을이해하기위해노력해야한다고생각한다.하부운영체제를잘이해하는애플리케이션개발자는운영체제를훨씬더잘활용할수있다.마찬가지로라이브러리개발자는라이브러리를이용하는애플리케이션이처한현실과실제상황을외면해서는안된다.따라서이책이양쪽사람들에게유용하기를바랄뿐아니라,책내용전체가양측에도움이되기를바라는마음으로커널서브시스템의설계와구현모두를설명할것이다.
나는독자들이C프로그래밍에대해알고있으며,리눅스에익숙하다고가정했다.운영체제설계나다른전산분야의개념에대한경험이있으면도움이되겠지만,이런개념들에대해최대한많이설명하려고노력했다.부족하다면,운영체제설계에대한훌륭한책이포함된참고문헌항목을살펴보라.
이책은학부수준의운영체제설계과목에서이론을다루는입문서와함께응용분야의보조교과서로활용하기에적합하다.또한이책은별도의교재없이고급학부과목이나대학원수준의과목에서도사용할수있다.
★추천의글★
리눅스커널과커널애플리케이션사용이늘어남에따라리눅스개발과유지보수에참여하려는시스템소프트웨어개발자도점점늘어는추세다.이들중에는순전히개인적인관심으로리눅스개발에참여하는사람도있고,리눅스기업또는하드웨어제조사에서일하기때문에혹은기업내에서개발프로젝트를하기때문에참여하는사람도있다.
하지만이들은모두공통된문제에부딪힌다.커널을배우는데걸리는시간이더길어지고,어려워지고있다는점이다.시스템은매우크고,더욱더복잡해지고있다.시간이지날수록지금커널을개발하는개발자들은커널에대해더욱깊고넓은지식을쌓을수있겠지만,새로참여하는사람과의격차는더벌어질수밖에없다.
나는이렇게커널소스에대한접근이점점어려워지는현실이커널의품질(quality)에이미문제를일으키고있으며,이문제는시간이지남에따라더심해질것이라고생각한다.리눅스의앞날을걱정하는사람이라면커널개발에참여할수있는개발자들의수를늘리는일에도반드시관심을기울여야한다.
이문제를해결하는방법중하나는깔끔한코드를유지하는것이다.이해하기쉬운인터페이스,일관성있는레이아웃,‘한번에한가지만,제대로한다’등과같은원칙을지키는일이다.이것이리누스토발즈가선택한방법이다.
내가추천하는또한가지방법은코드에많은주석을다는것이다.주석은코드를읽는사람이개발자가개발당시무엇을얻고자했는지이해할수있을만큼충분해야한다.의도와구현의차이를파악하는과정이바로디버깅이다.의도를알수없다면디버깅은어려운일이된다.
하지만주석만으로는주요서브시스템이어떤일을해야하는지전체를살펴볼수있는시각과개발자들이그목적을달성하려고어떤방법을사용했는지에대한정보를얻을수없다.따라서커널을이해하기위한출발점으로는가장필요한것은잘작성된문서다.
로버트러브(RobertLove)가쓴이책은숙련된개발자만이알수있는커널서브시스템에대한본질적인이해와,이를구현하려고개발자들이어떤일들을했는지에대해알려준다.따라서이책은호기심에커널을공부하려는사람들뿐아니라,애플리케이션개발자,커널설계를분석하려는사람등많은사람에게충분한지식을제공해줄수있다.
또한,이책은커널개발자가뚜렷한목적을가지고커널을수정할수있는다음단계로나아가는데도도움을준다.나는이런개발자들에게많은시도를해볼것을권한다.커널의특정부분을이해하는가장좋은방법은그부분을변경해보는것이다.커널을직접수정해보면코드를읽기만할때는볼수없었던많은것들을이해할수있다.더적극적인커널개발자라면개발자메일링리스트에가입해다른개발자들과의견을나눠보는것도좋다.이방식이바로그동안커널개발에기여한사람들이커널을배웠던,그리고계속배우고있는방법이기도하다.로버트의책은커널개발의중요한부분인이런체계와문화에대해서도다룬다.
로버트의책을즐기고,또많은것을배울수있기를바란다.또여러분중많은사람이한발더나아가커널개발공동체의일원이되기를진심으로바란다.우리는사람을공헌도에따라평가한다.여러분이무언가리눅스에기여하게되었을때여러분의작업으로얻어진지식도수억아니,수십억의인류에게작지만즉각적인도움을주었다고평가받을수있을것이다.이것은우리에게주어진아주유익한특권이면서책임이기도하다.
-앤드류모튼(AndrewMorton)
★저자서문★
리눅스커널에대한나의경험을책으로펴내리라고처음결정했을때솔직히어떻게해야할지를몰랐다.무엇이내책을이분야의가장좋은책으로만들어줄것인가?나는어떻게하면이책이특별한책이될수있을까에대해고심했다.
결국커널에대해아주특별한접근방법을생각해낼수있었다.내일은커널을해킹하는것이다.내취미도커널을해킹하는것이다.내가사랑하는것도커널을해킹하는것이다.수년간이렇게지내오면서,나는재미있는일화와중요한기법들을모아두었다.내경험을통해나는어떻게커널을해킹하는지(그리고그에못지않게중요한)어떻게해야커널을망가뜨리지않을지에대한책을펴낼수있었다.이책의주요주제는물론리눅스커널의설계와구현이다.하지만다른책들과달리이책은실제일에도움이되는,그리고일을올바르게할수있는방법을배우는데중점을두고있다.나는실용엔지니어이고이책또한실용서적이다.이책은재미있고읽기쉬우며유용할것이다.
나는독자가이책을통해(기록된또한기록되지않은)리눅스커널의규칙을잘이해하게되기를바란다.그리고여러분이이책과커널소스를읽은다음유용하고,제대로동작하며,깔끔하게구현된커널소스를작성할수있기를기대한다.물론재미삼아읽는것도좋다.
여기까지는1판에대한이야기였다.시간이흘렀고,다시한번도전의시간이돌아왔다.이번개정3판은1판과2판에비해많은것이바뀌었다.많은부분이개선되고수정되었으며,새로운내용도많이추가되었다.이번판은2판이후커널변화를반영했다.중요한사실은리눅스커널공동체가2.7커널개발을빠른시일내에진행하지않을것임을선언한것이다.대신커널개발자들은2.6커널개발및안정화작업을계속하기로했다.이결정은많은것을시사하는데,그중이책과관련해중요한부분은바로최근에나와있는2.6커널에대한책이한동안계속그유용함을유지할수있다는것이다.리눅스커널이성숙단계에접어듦에따라,
앞으로도존속할커널의내용에대해공부하는것은더욱의미있는일이되었다.이책은리눅스커널의역사를이해함과동시에미래를준비하는관점에서커널에대해서술함으로써리눅스커널에대한교과서적인책이되기를기대한다.
★옮긴이의말★
잡지부록으로딸려온알짜리눅스배포본을가지고사용하던PC에리눅스를처음설치해본때가아련히떠오릅니다.그후제법많은시간이흘렀습니다.그사이리눅스는수많은개발자들의자발적인노력을통해진화를거듭해그영역을넓혀왔습니다.대부분의인터넷서비스가리눅스서버로운영되고있으며,슈퍼컴퓨터에서손안의스마트폰까지컴퓨터가관련된곳에서리눅스가쓰이지않는분야를찾기가더어렵습니다.제가그동안해온일들도리눅스를떼어놓고는생각할수없습니다.
2011년7월,리눅스의창시자인리누스토발즈는리눅스출시20주년을기념해리눅스의버전3.0을선언합니다.특별히주목할만한큰변경사항이없었음에도주버전을바꾼이유에대해리누스는버전숫자가너무커져서(2.6버전은2.6.39까지있습니다.)불편해서라고밝히기도했습니다.그도틀린말은아니었겠지만,한편으로는2.6버전의안정적인집권이장기간이어짐에따라,이제는리눅스커널완성도에대한자신감의표현으로보는것도타당할것입니다.아직현장에서는2.6버전을사용한리눅스배포판이많이쓰이고,지원도지속되고있습니다.그렇기때문에,커널버전2.6.34를주대상으로삼은이책의내용은3.0버전으로바