とある京大生の作業ログと日々の雑記

コンピュータサイエンスについて学んだことを可視化したり日々の雑記をまとめてます。

Linuxカーネル本の書評

こんにちは、コミさん(@komi_edtr_1230)です。




ここ最近いつも図書館で23時まで粘って勉強してるんですけど、本当に寮と図書館の往復という生活を送ってて留学生活に何も面白みを見出してない今日この頃です。




最近あった出来事として、来年のインターン先がある程度絞られてきました。




9月の時点でオーストラリアの会社でデータサイエンティストとしてインターンするのが決まってたんですけど、急遽向こうからドタキャンされて仕方なく探し直してたんですよね。




で、なんとかスイスのチューリッヒの会社とインドのバンガロールの会社からインターン来ていいよ〜ってお誘いのメールをいただきました。




実はシンガポールのCyber Security Association of Singaporeというセキュリティ系の組織がここ最近出したインターン先としては本命でまだ連絡待ちなんですけど、とりあえずは海外インターンを確定させることができてある程度ホッとしてます....




まあそんなこんなで色々あったんですけど、バタバタしつつもちゃんと勉強は進めてまして、それで今回も書評です。




今回はLinux Kernel DevelopmentというLinuxカーネルの本です。



読むに至ったきっかけ






スイスに来てから割と低レイヤに潜りがちというか、もともとコンピュータサイエンスを勉強したいという思いでスイスに来たんですよね。




それでPRMLとかカステラ本で機械学習を、SICPで言語処理とアルゴリズムを、タネンバーム先生のコンピュータネットワークでネットワークの勉強を、って感じで色々やってきました。




で、今回はOSの勉強をしようってことでLinuxカーネル本を選んだわけです。



読み方






このLinux Kernel Developmentという本の構成としては、主に「Linuxカーネルがどういう役割を担っているのか」「マシンとはどうつながっていて、ユーザーの入力に対してどうマシンに働きかけるか」ということをLinuxカーネルの各プログラムを参照しながら解説していきます。




なので常にLinuxカーネルソースコードを参照しつつ、どの解説がどのコードの役割を扱っているのか、と見ながら読み進めていく形となります。



感想






全体の感想としては




最高に面白いLinuxの解説の教科書




というイメージでした。




もともとSICPコンパイラインタプリタなどを書いたりオライリージャパン出版の『コンピュータシステムの理論と実装』という本を読んでいたのである程度は低レイヤへの理解があったと思っていたのですが、今回通読したことでちょうど自分が勉強したかった「ハードとソフトの繋がり」が見えたような気がします。




ぼくが特にOS関連で勉強したかったのがメモリ管理とかアドレス周りなんですけど、ちゃんとそれら一つ一つにスポットを当てた章があり、とても理解が進みました。




システムコールの章では具体的にシステムコールを自作できる例を紹介しており、Linuxカーネルが意外と卑近な存在なんだなぁと感動もしましたw




このようにカーネルの構造をしっかり解説してるのですが、この本では二分木やキューなどのデータ構造についても解説した章があり、カーネル本としてはかなりの充実度なんじゃないかと思います。




ただ、扱っているLinuxカーネルのバージョンがver2.6で、今の最新のバージョンはver4.19なので少し時代が....というような感じもするのでそこらへんには注意かもしれません。




ただ、今回の本を通読したおかげで「Linuxカーネルとはなんなのか」とか「各ファイルがどんな役割をしてるのか」という基礎的なことは十二分にわかるので、今回この本を読み込めば最新のLinuxカーネルソースコードを読んで理解することができるようになると思います。



まとめ






今回はLinuxカーネルの本を紹介しました。




この本を読んでまた低レイヤへの理解が深まったような気がします。




来年からはインターンが始まるのでコンピュータサイエンスをしっかり勉強できるのはスイスにいる間だけなんかなぁって思ってたりしてて、だから今回また低レイヤの分野を一つちゃんと勉強できたのは良かったですね。




あと、今回OSの勉強をしてOS自作もやってみたいなぁ....なんて思いもちょっと芽生えました。




まあここらへんに関してはまた余裕ができたときにやりたいと思います。



今後の予定






最近ずっと低レイヤの勉強をしてたんですけど、この前ツイッター見てたらSECCON2018の予選があったんですね。




ちょっともう予選は終わったんですけど、今こうやって低レイヤを勉強してるしってことでセキュリティの勉強もやってみたいなって思い始めたんです(また好奇心から勉強することが増えてしまった....)




で、色々ググってるうちにリバースエンジニアリングのPDFとマルウェア解析のPDFをゲットしちゃいましたw




ということでこれからはそこらへんかなぁ、と。




ただ、その前にツイッターで話題の低レベルプログラミングの原著のPDFをEPFL学生権限を使ってSpringerからゲットたんで、まずは低レベルプログラミングから処理しようかなと思ってます。(意外と量が多くないので)




てことでこれからも勉強することがたくさんです。




スイスから離脱するのが12月中旬で、それまでに全部処理しきれるかかなり不安....




ただまぁ毎日図書館で10時間以上勉強してるんで、あとは気合い次第かなぁって(?)




ま、気ままにがんばります。




ではお疲れ様でした!