kei615ykhm’s programming learning blog

プログラミングを0から学んでいる学生の備忘録

【学びの記録】Linuxディストリビューションの階層構造 - システムの全体像を把握する

今回はLinuxディストリビューションについて学んだことを階層構造を図を用いて視覚的に解説していく。

 

参考にした教材はこちら

www.udemy.com

 

曖昧さ回避:当記事で”ユーザー”は開発者(システムを実行する側)を指す言葉

 

Linuxディストリビューション

オープンソースで開発されているUnixの設計思想を継承していて、Linuxカーネルとその上で動作するすべてのソフトウェアを含む完全なオペレーションシステム(OS)

安定性と柔軟性が高く、複数のユーザーが同時に使用でき、複数のタスクを同時に実行できるため、サーバーとしても優れている。

 

また、ユーザーごとに異なる権限を設定でき、多数のセキュリティ機能とツールを使用できる上に権限管理に厳格さがある。

 

Linuxディストリビューションの構成図

この図は、Linuxディストリビューションがどのように構成されているかを示したもので、各層の役割とそれぞれに含まれる要素は以下のようになる。

Linuxディストリビューションの構成図(FHS準拠)

Linuxディストリビューションは、大きく分けてカーネルスペースとユーザースペースに分かれていて、以下では図に示された各層について説明する。

 

カーネルスペース

Linuxカーネル

役割:システムの中核部分で、ハードウェアとソフトウェアの橋渡しを担い、プロセス管理、メモリ管理、ファイルシステム管理、デバイスドライバの制御などを行う。

 

具体例:CPUリソースの割り当て、メモリの管理、ディスクの読み書き、ネットワークインターフェースの制御など。

 

ユーザースペース

シェルとユーティリティ層:

役割:ユーザーが直接操作するためのインターフェースやツールを提供する。

 

具体例:Bash(シェル)、Git(バージョン管理ツール)、npm(パッケージ管理ツール)、Docker(コンテナ管理ツール)など。

 

システムライブラリ層:

役割:アプリケーションが利用する基本的な機能を提供する。

これには、データの保存やネットワーク通信、グラフィック描画などが含まれる。

 

具体例:Apache,Nginx(サーバー)、MySQL,PostgreSQL(データベース)、Redis,Memcached(キャッシュシステム)など。

 

アプリケーション層:

役割:ユーザーが直接利用するソフトウェアを提供する。

 

具体例:Vscodeテキストエディタ)、GoogleChrome,Safari(ブラウザ)など。

 

全体の流れ

1.カーネルスペース:

Linuxカーネルは、システムの基盤としてハードウェアを制御し、プロセスやメモリ、ファイルシステムの管理を行う。

これにより、上位のソフトウェアが動作するための環境を提供する。

 

2.シェルとユーティリティ層:

ユーザーがシェル(例えばBash)を通じてカーネルと対話し、システムを操作する。ユーティリティ(例えばGitやDocker)を使用して開発やシステム管理を効率化する。

 

3.システムライブラリ層:

アプリケーションはシステムライブラリを使用して、基本的な機能(データベースアクセス、ネットワーク通信など)を実行する。これによりアプリケーション開発が容易になる。

 

4.アプリケーション層:

ユーザーが直接使用するアプリケーションは、システムライブラリとカーネルの機能を活用して動作する。例えば、テキストエディタファイルシステムにアクセスしてファイルを読み書きする。

 

 

まとめ

Linuxディストリビューションは、以下のようにカーネルスペースとユーザースペースに分かれた階層構造で成り立っている。

 

1.カーネルスペース:

Linuxカーネルがハードウェアを制御し、プロセス管理、メモリ管理、ファイルシステム管理、デバイスドライバ制御を行う。

 

2.ユーザースペース:

シェルとユーティリティ層では、開発者やシステム管理者がシェルやユーティリティツールを通じてシステムと対話する。

システムライブラリ層は、アプリケーションに必要な基本機能を提供し、データの管理や通信をサポートする。これにはWebサーバー、データベース、キャッシュシステムなどが含まれる。

アプリケーション層では、開発者が開発したソフトウェアや日常的に使用するアプリケーション(テキストエディタWebブラウザなど)が動作する。

 

これらの各層が連携することで、Linuxディストリビューション全体がスムーズに機能する。

カーネルがハードウェアを制御し、シェルやユーティリティが開発者やシステム管理者とのインターフェースを提供し、システムライブラリがアプリケーションをサポートするという流れになる。