ITシステムを支えるOS、Linux
ITシステムやソフトウェアが稼働するうえで欠かすことができない基盤のしくみとして、オペレーティングシステム(OS)があります。OSは情報科学における基礎知識の1つとも言えますが、具体的に学ぶ機会はそれほど多くはないのが実情でもあります。OSについて学ぶことは、システム開発や運用に興味がある人や、システム開発や運用に携わっている人には多くの利点があります。ここでは、ITシステムやソフトウェアの基盤として幅広く用いられているLinux OSを題材に、OSのITシステムにおける位置づけと、OSを理解することで得られる利点を解説します。
Linuxは、ECサイトやホテル予約サイトなどのようなWebシステムでサービスを提供する側のシステムであるサーバー向けOSとして広く利用されているほか、Googleが開発したスマートフォンOSのAndroidの基盤部分、あるいはテレビやカーナビなどの内蔵OSなどの形で幅広く利用されています。現代のコンピュータシステムは階層化、細分化されており、LinuxのようなOSやハードウェアを直接意識することは少なくなっていますが、Webシステム、スマートフォン、あるいはスマートテレビなどを実現するソフトウェアはすべてLinuxなどのOSの上で動作しており、ソフトウェア開発の際に、OSの存在を無視することもできません。
コンピュータシステムの階層の「理想」と「現実」
コンピュータシステムはしばしば、しばしば図1 のような階層化された形で描かれます。その際、自分が扱う階層より1つ下の階層だけ知っていれば問題ないと説明されることがあります。
図1 コンピュータシステムの階層(きれいなモデル)
例えば、「 運用管理の技術者はアプリケーションの外部仕様だけ知っていればいい」 、「 アプリケーション開発者はライブラリだけ分かっていればいい」といった具合です。しかし実際には、図2 のようにあらゆる階層が他の階層と複雑に繋がっていて、一部を知っているだけではどうにもならないといった問題も少なくありません。
図2 コンピュータシステムの階層(現実)
Linuxやその中のカーネル、さらにハードウェアが上位レイヤと直接つながる部分を理解しておくと、次のようなことが、ある程度できるようになるでしょう。
カーネルやハードウェアなどの低レイヤに原因があるトラブルの解析
システムの負荷が高いときに性能が極端に劣化するといった場面で、プロセスのメモリ使用量を制限したりメモリを増強するなどの対策が考えられるようになります。
性能を意識したコーディング
性能向上が重要な場面で、データ構造を工夫してなるべく多くのデータをキャッシュメモリに載せて高速化を試みる、といったことが考えられるようになります。
システムの各種統計情報/チューニングパラメータの意味の理解
Webサービスの応答性が悪いときにシステムの統計情報から状況を理解したり、マシンスペックを上げるなど、対処ができるようになります。
「[試して理解]Linuxのしくみ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】 」を読むと、Linux OS における、プロセス管理、プロセススケジューラ、メモリ管理、記憶階層、ファイルシステム、記憶階層、そして仮想化機能、コンテナなど、OS とハードウェアに関するしくみがどのように動くのか、実験とその結果を示す豊富なグラフや図解を用いて解説されており、Linuxへの理解を大きく深めることができるようになっています。