0. Linuxシステムについて
0-1. OS(オペレーティングシステム)とは
- 以下の役割を持つソフトウェア。
- ハードウェアを管理する。
- プロセス (実行中のプログラム) からハードウェアにアクセスする方法を提供する。
OSの例
An Excess of Operating Systems - Jean-Louis Gassée
OSのインターフェイス(GUI/CUI)の例
様々なPCのシステム情報をターミナルに表示してくれるコマンドラインツール「neofetch」がmacOS 10.15 Catalinaに対応。
0-2. Linuxシステムの全体像
- OSを含むLinuxシステムの全体像を理解するために、コンピュータを三つの主要なレベルで考える。
-
ハードウェア
- 1個以上のCPUを含む物理機器。
- OSが動作する基盤を提供しており、OSはハードウェア上で動作する。
-
カーネル
- OSのコア、中心部。メモリ上にあるソフトウェア。
- ハードウェアと実行中のプログラムの連携を管理する。
- ハードウェア(特にメインメモリ)を管理する。
- 実行中のプログラムがハードウェアを操作するためのインタフェース(システムコール)を提供する。
-
ユーザープロセス(ユーザー空間)
- 実行中のプログラムのこと。
- カーネルによって管理される、OSのうちカーネル以外の要素。
- アプリケーション、シェル、GUIなどが含まれる。
Linuxシステムの全体像
組み込みLinuxシステムとは Linuxシステムアーキテクチャ - Armadillo
1. ハードウェア
- Linux OSはハードウェア上で動作し、ハードウェアと密接に関連しているため、Linuxシステムを理解する前提知識として、ハードウェアについて知っておく必要がある。
1-1. メインメモリ(DRAM)
- 主記憶装置。ビット(0と1の集まり)を格納する大きな記憶領域。
- メインメモリというとき、RAM(Random Access Memory)、とくにDRAM(Dynamic RAM)を指すことが多い。
- RAMとは、システムの物理メモリのこと。
- DRAM
- 揮発性(記憶されている情報を維持するために電源を常に供給する必要がある)のメモリであり、システムが利用する汎用メモリ。一定時間ごとに同じ内容を記録し直すリフレッシュ動作が必要なため、電力消費が大きい。
- 1個のコンデンサと1個のトランジスタで構成される。
- SRAM
- DRAMと同じ揮発性メモリだが、フリップフロップ回路を利用することでリフレッシュ動作が不要。
- VRAM
- 映像出力用のビデオメモリ。
- DRAM
RAMのイメージ
知らないと恥ずかしい? メモリの「RAM」と「ROM」の違い - ITmedia NEWS
1-1-1. キャッシュメモリ
- メインメモリとCPUの間に構成された、高速アクセスが可能なメモリ。
- CPUがアクセスしたいデータを、メインメモリからコピーし保持(キャッシュ)する。
- DRAMよりも小容量で高速なSRAMによって構成される。
- 最近のCPU(プロセッサ)は処理速度が高速化しているにもかかわらず、メインメモリとなるDRAMのアクセス速度の向上が追いつかない問題(ノイマンズ・ボトルネック)があったため、キャッシュメモリによってその解消が図られた。
- 例: AWS の ElastiCache
キャッシュメモリのイメージ
1-2. CPU(Central Processing Unit、プロセッサ)
-
中央演算処理装置。プロセッサ。 ※ CPU ≠ コンピュータ
- システム/プロセッサボードのソケットに装着される物理チップ。
- プログラムの命令に従って動く、コンピュータの中核的な部分。
-
データパスと制御から構成される。
- データパスは演算処理を行う。
- 制御はプログラムの命令に従って何を行うべきかを、データパスとメモリと入出力に指示する。
-
記憶装置(メモリ)に対して演算を行う。
- システム全般の計算処理(数値演算、数値の条件判定、入出力装置の駆動など)を行う。
- CPUと言うとき、レジスタ、ALU(Arithmetic Logic Unit/算出論理演算装置)など、命令を実行する一連の機能ユニットを指すが、現在では、プロセッサか仮想CPUを指すことが多い。
CPUのイメージ
Intel CPU Core i7-7700 3.6GHz 8Mキャッシュ 4コア/8スレッド - Amazon.co.jp
1-2-1. マルチプロセッサ
- 2つ以上のプロセッサで構成されているコンピュータのこと。
- 1つのプロセッサだけで構成されているコンピュータをユニプロセッサと言うが、今日ではユニプロセッサはほとんど見られない。
1-2-2. GPU
- もともとは3Dレンダリング(動画・画像出力処理)の高速化用途のプロセッサだった。
- 現在では、人工知能、機械学習、アナリティクス、暗号通貨のマイニングなどの用途でも用いられる。
1-2-3. コア
- プロセッサは、コア、ハードウェアスレッドといった、1つ以上の独立したCPUインスタンスを含んでいる。
- コアは、それぞれ独立したプロセッサのように振る舞い、単一のプロセッサのスケーラビリティを改善する。
- ハードウェアスレッドは、1つのコアの上で複数のスレッドの並列実行をサポートする。ハードウェアベースのマルチスレッド。
1-2-4. マルチコア(マルチコアプロセッサ)
- 複数のコアを搭載しているプロセッサのこと。
- 1つのコアを搭載しているプロセッサをシングルコアと言うが、シングルコアプロセッサでは、1つのプロセスしか処理を行うことができない。
- マルチタスクOS では、複数のタスク(マルチプロセス)を細かく切り替えることで実行(並行処理)できた。
- マルチコアプロセッサでは、複数のマルチプロセスを同時に実行(並列処理)できる。
- 1つのコアを搭載しているプロセッサをシングルコアと言うが、シングルコアプロセッサでは、1つのプロセスしか処理を行うことができない。
コアのイメージ
マルチコアマイコンとシングルコアマイコンの違い - EDN Japan
1-2-5. クロック周波数(clock rate/clock speed)
- クロックは、プロセッサのロジックを動かすデジタル信号のこと。
- クロックに基づいたデジタル信号の時間間隔を、クロックサイクル(CPUサイクル) と言う。
- 個々のCPU命令は、実行するために、ひとつ以上のクロックサイクル(CPUサイクル)を必要とする。
- 例: 毎秒40億クロックサイクルは、1クロックサイクルあたり250ps(250ピコセカンド)。
-
クロック周波数 は、クロックサイクル時間の逆数である。
- 例: 4GHz(ギガヘルツ)のCPUは、毎秒40億クロックサイクルで動作する。
- クロックスピードを上げればパフォーマンスが上がるわけではなく、クロックサイクル(CPUサイクル)が実際に何をしているかがパフォーマンスを左右することに注意。
CPUの性能指標【クロック周波数/CPI/MIPS】 - Qiita
1-3. レジスタ
- CPU内部の小さな記憶領域。
- CPU命令が、RAMやROM(Read Only Memory)などのメインメモリにアクセスする際のアドレスを保持する。
- メインメモリよりも容量は小さいが、高速に動作する。
- プログラムでの変数は、コンパイラによってレジスタに割り付けられる。
1-4. ディスク(ストレージ)
-
補助記憶装置。コンピュータのメインのストレージデバイス。
- 物理的にマシンに搭載されていることもあれば、ネットワークを経由して仮想的に接続されていることもある。
- CPUやメインメモリが、全てのファイルの読み書きを行う場所。
- OS、アプリケーションコード、アプリケーションログ、アセット、データベースに対しての書き込みなどが保存される。
- メインメモリ(主記憶装置)と比較するとレイテンシやスループットは遅いが、大容量。
- 例: AWSの EBS(Elastic Block Store)
- Amazon EC2インスタンスやRDSで使用できる永続的なブロックストレージ。EBSのおかげで、EC2インスタンスの停止や終了後もデータを保持できるようになる。
-
HDD(ハードディスクドライブ / 回転磁気ディスク)
- 1枚以上のディスクから構成される。
-
SSD(ソリッドステートドライブ)
- 一部のSSDは不揮発性のDRAMを使っているが、 大半はNANDフラッシュメモリを使用している。
- 今日では、すべてのデジタル・カメラ、スマートフォン、PCが、ディスクの代わりにフラッシュメモリベースのSSDを使用している。
ストレージのイメージ
SSDとHDDの違いは何?ストレージごとの特長と注意点を簡単に解説 - Logitec
1-5. ネットワークインタフェース
- ネットワーク接続に対するOS側のエンドポイント。システム管理者が構成し、管理する抽象。
- ネットワークインタフェースは、物理ネットワークポートにマッピングされ、ポートはネットワークに接続し、一般に別々の送信チャネルと受信チャネルを持つ。
- インターフェイスやリンクという用語は、OSが構成し、OSから見えるネットワークインタフェイスポートの論理インスタンスを指し、仮想インターフェイスを表す場合もある。
- 例: AWSの ENI(Elastic Network Interface)
1-5-1. NIC(ネットワークインターフェイスカード)
- システムに1つ以上のネットワークポートを提供し、ポートとシステムのI/Oトランスポートの間でパケットを転送するマイクロプロセッサ(ネットワークコントローラ)を搭載している。
- NICの製造元ごとに特定の数字(MACアドレス)が割り当てられている。
- 1つ以上のIPアドレスを割り当てることで、IPパケットを受信できるようになる。
- ARP(Address Resolution Protocol) によって、IPアドレスは対応するMACアドレスに変換される。
ネットワーク(TCP/IP)入門 NIC(Network Interface Card) - Qiita
1-5-2. インターフェイスポート
- 物理ネットワークコネクタのこと。
インターフェイスポートのイメージ
ネットワークのおべんきょしませんか? - Ciscoのインタフェース名について詳しく解説
2. カーネル
- ハードウェア、メモリ、CPUスケジューリングなどのシステムを管理する、カーネルモードというCPUモードで動作するプログラム。
Linuxシステムの全体像
組み込みLinuxシステムとは Linuxシステムアーキテクチャ - Armadillo
2-1. カーネルモードとユーザーモード
-
カーネルモード
- ハードウェア(プロセッサやメインメモリ)へ直接制限なくアクセスする、特権的なCPUモード。
- 高速だが、バグがあった場合OSが停止するリスクがある。
-
ユーザーモード
- メモリの一部へのアクセスと安全なCPU操作に制限されているCPUモード。
- デバイスI/Oの実行時などは、システムコールやトラップを介してカーネルモードにアクセスできる。
-
モードスイッチ
- ユーザーモードとカーネルモードの切り替えのこと。
2-2. システムコール
-
ユーザープロセス(ユーザーモードのプログラム)がカーネルに処理を依頼するためのプロトコル。
- ユーザープロセスが、ハードウェアを操作したいとき、カーネル(デバイスドライバ)を通じてのみハードウェアを操作できるため、システムコール発行する。
- 一般に、OSは多くのシステムコールに対する使いやすいインタフェースとして、C標準ライブラリ(たとえばlibc、glibcライブラリ) を提供している。
2-2-1. システムコールの例
-
プロセス管理
- fork(2) 新しいプロセスを作る
- clone(2) 新しいプロセスまたはスレッドを作る
- exec() 新しいプログラムを実行する
-
ファイルシステム操作
- open(2) ファイルを開く
- read(2) バイトを読み出す
- write(2) バイトを書き出す
- close(2) ファイルを閉じる
- stat() ファイルの統計量を取得する
-
メモリ管理
- mmap() メモリアドレス空間にファイルをマッピングする
- brk() ヒープポインタが指せる範囲を拡張する
-
ネットワーク通信
- connect() ネットワークホストに接続する
- accept() ネットワーク接続を受け入れる
- その他
- ioctl() I/Oプロパティのほか、雑多な機能属性を設定する
- futex(2) 高速なユーザーモードミューテックス
2-3. プロセス管理
- プロセスの開始、一時停止、再開、スケジューリング、終了を管理する。
- プロセスはユーザーモードで実行される。
- システムコールやトラップを介してカーネルモードにアクセスできる。
- プロセスは、カーネルによってマルチタスク実行され、一般にひとつのシステムで数千ものプロセスを実行できる。
- 個々のプロセスは、プロセスIDという一意な数値によって識別される。
- カーネルは、どのプロセスがCPUを使うことが許されるのかを決定する役割を担う。
2-3-1. プロセスの作成
- プロセスを開始する仕組みを理解するには、2つのシステムコールが重要。
-
fork()
- プロセスが
fork()
を呼び出した場合、カーネルはそのプロセスとほぼ同じ複製を作成する。
- プロセスが
-
exec()
- プロセスが
exec(program)
を呼び出した場合、カーネルはprogramをロードしてからそれを開始することで、現在のプロセスを置き換える。
- プロセスが
-
-
init()
を除いて、Linuxシステム上のすべての新たなユーザープロセスは、fork()
の結果であり、ほとんどの場合、既存のプロセスの複製を実行する代わりに新たなプログラムを開始するためにexec()
を実行する。- 例: ターミナルウィンドウで
ls
を入力すると、ターミナルウィンドウ内で実行しているシェルは、fork()
を呼び出して、そのシェルの複製を生成する。そして、その新たなシェルの複製がexec(ls)
を呼び出してls
を実行する。
- 例: ターミナルウィンドウで
2-3-2. スケジューラ(プロセススケジューラ)
-
プロセスに個別のCPUを割り当てる(スケジューリングする)カーネルのコンポーネント。
- スケジューラがスレッド(Linuxではタスク)に働きかけて、CPUにマッピングする。
-
ランキュー
- 実行可能状態のすべてのスレッドを管理する優先度別のキュー。
- スケジューラは、ランキューによって、CPU時間をアクティブプロセスとスレッドの間で分割し、重要な仕事をそうでない仕事よりも早く実行できるように優先度を維持する必要がある。
- 利用できるCPUよりも実行したいスレッドの方が多い場合は、優先度の低いスレッドは自分の順番が来るまで待機する。
- ほとんどのカーネルスレッドは、ユーザーレベルプロセスよりも高い優先度で実行される。
2-3-3. コンテキストスイッチ
- あるスレッドまたはプロセスから別のスレッド、プロセスへの実行の切り替えのこと。
- スケジューラの機能。
- 実行中のCPUレジスタ群の内容(スレッドコンテキスト)を新しい内容に切り替えることが含まれる。
- ディスクI/OやネットワークI/Oなどのブロックを起こすシステムコールには、呼び出し元がブロックされている間にほかのスレッドを実行するためにコンテキストスイッチを行う。
2-3-4. シグナル
- シグナルは、プロセスにイベントを通知する(プロセスに割り込む)機能。
- 例: 無限ループの停止
kill ${proccess_id}
or Ctrl + C- killコマンドはデフォルトで
SIGTERM
シグナルを送信する。 -
kill -9 ${proccess_id}
とするとSIGKILL
シグナルを送信する。
- killコマンドはデフォルトで
- SIGTERM vs SIGKILL
- SIGTERMはプロセスを正常に終了するが、SIGKILLはプロセスを即座に強制終了する。
- SIGTERMは処理、無視、およびブロックできるが、SIGKILLは無視しかできない。
- SIGTERMは子プロセスを強制終了しない。SIGKILLは子プロセスも強制終了する。
- 強制終了されたプロセスは親プロセスに強制終了シグナルを受信したことを伝えることができないため、ゾンビプロセスが作成される可能性がある。
SIGTERM vs SIGKILL: What's the Difference?
シグナルの種類
2-4. ファイルシステム
- ファイルシステムは以下を備えている。
- ファイルとディレクトリによってデータを構成し、アクセスするためのインターフェイス。
- アクセス制御のためのファイルパーミッション。
- OSの最も重要な役割のひとつ。
-
ほとんどのファイルシステムタイプは、コンテンツを格納するためにストレージデバイス(ディスク)を使っているが、
/proc
や/dev
のように、カーネルが動的に作成するファイルシステムタイプもある。 - 一般に、カーネルは、プロセスに与えるファイル名の名前空間を全体の一部だけに制限する
chroot(8)
などの方法を提供している。- また、Linuxでは名前空間をマウントする(ディレクトリに自分のツリーを付け加え、ツリーを結合する)ことができ、一般にコンテナで使われている。
2-4-1. ファイルシステムのトップレベルディレクトリの例
- etc システム構成ファイルを格納する
- usr システム供給のユーザーレベルプログラム、ライブラリを格納する
- dev デバイスファイル(デバイスノード)を格納する
- var システムログなどの変化していくファイルを格納する
- tmp 一時ファイルを格納する
- home ユーザーのホームディレクトリを格納する
2-4-2. inode(インデックスノード)
- 特定のファイルに関するデータの集まり。
- iノード番号、UID(ユーザーID)、GID(グループID)、パーミッション、ファイルサイズ、ファイル作成時間、更新日時、実際のデータの位置(ディスク上の物理的な場所)、そのファイル自身への参照数をデータとして管理するデータ構造。
iノード(inode)とは - kazmax Linuxで自宅サーバー
2-4-3. シンボリックリンクとハードリンク
-
シンボリックリンク
-
リンク元の実体の「場所(名前)」を情報として持つ。
- リンク元の実体を移動すると参照できなくなる。
- 実質的にエイリアスとして、奥深い場所にあるディレクトリパスへ素早くアクセスできるようにする。
- シンボリックリンクを削除してもリンク元のファイルの実体が削除されることはない。
- ディレクトリに対してもシンボリックリンクを作成できる。
- ファイルシステムをまたいで作成することが可能。
-
リンク元の実体の「場所(名前)」を情報として持つ。
$ ln -s リンク元のファイル名 シンボリックリンク名
-
ハードリンク
- 既存のinodeに対して、別のファイル名で同じファイルの実体を共有する。
- ハードリンクを削除しても他のハードリンクが残っている場合は、ファイルの実体は削除されることはない。
- (スーパーユーザー以外は)ディレクトリに対して作成することはできない。
- 別のファイルシステム上のファイルに対して作成することはできない。
- 現在ではめったに使われない。
$ ln リンク元のファイル名 ハードリンク名
LinuCレベル1 101試験の例題と解説 1.02.3 ハードリンクとシンボリックリンク
2-4-4. I/O(ディスクI/O)
-
ディスクの読み書きのこと。
- CPUやメインメモリと、ディスク間のデータの読み込みや書き込みのこと。
- アプリケーションログやデータベースに対しての書き込みなど、全てのファイルの読み書きのこと。
- 少なくとも、方向(読み出しか書き出しか)、ディスクアドレス(位置)、サイズ(バイト)の指定を必要とする。
2-4-4-1. ブロッキングI/O と ノンブロッキングI/O
-
ブロッキングI/O
- プロセスが、個々のI/Oの処理の完了を待つことを、ブロックする、と言う。
- プログラムがファイルの内容を読み込む場合、データの到着を待ち、ファイルに書き込む場合、書き込みが完了するのを待つ。
- I/Oが完了すると、プロセスは処理を再開する。
- ブロッキングI/Oの問題点
- 他数の並列実行されるI/Oをサポートするためには、アプリケーションは多数のスレッドを作らなければならないが、そうするとスレッドの作成、破棄とスレッドの維持のために必要なスタックスペースのためにコストがかかる。
- 短時間で終了するI/Oを頻繁に行うと、頻繁にコンテキストスイッチを行うことによるオーバーヘッドのためにCPUリソースがかなり消費され、アプリケーションのレイテンシが高くなってしまう。
- プロセスが、個々のI/Oの処理の完了を待つことを、ブロックする、と言う。
-
ノンブロッキングI/O (非同期I/O)
-
現在のスレッドをブロックせずにI/Oを非同期に発行する モデル。
- そのスレッドは、I/Oの実行中ほかの仕事を実行することができる。
- ブロッキングI/Oのパフォーマンス上の問題を解消する、
- サーバーサイドJavaScriptアプリケーション環境であるNode.jsの重要な特徴。
-
現在のスレッドをブロックせずにI/Oを非同期に発行する モデル。
2-4-4-2. シーケンシャルI/OとランダムI/O
- どちらも、HDDやSSDなどのディスク(ストレージ)へのI/Oのこと。
-
シーケンシャルI/O
- 保存領域の最初から逐次的に読み書きを行う。
- HDDでは磁気ディスクを実際に回転させて読み書きを行っているため、シーケンシャルI/Oは比較的高速。
- HDDのようなストレージデバイスのパフォーマンス上の特性から、ファイルシステムは、伝統的にディスク上にファイルを連続的にシーケンシャルに配置して、ランダムI/Oを減らそうとしてきた。
-
ランダムI/O
- 比較的遅い。
- SSDはHDDよりも、消費電力が少なく、軽量で、ランダムI/Oが高速に行える。
2-4-4-3. スループット
-
単位時間あたりのデータ転送量。
- bps(秒あたりのバイト数) で計測される。
- 一定時間において処理を行えたファイルサイズを指す。
2-4-4-4. レイテンシ
- 一度の読み書きなどの処理を行う際に発生する遅延を指す。
- I/Oの開始から終了までにかかった時間。
2-4-4-5. IOPS(Input/Output Per Second)
-
1秒間に処理できるI/Oの数。
- この数字が大きければ大きいほど多くの読み書きができる。
- 例: 100IOPSが担保されているストレージの場合、1秒間に100個のファイルを開いて読むことができることを指す。
- この数字が大きければ大きいほど多くの読み書きができる。
2-5. メモリ管理
- メモリには以下のようにさまざまな種類がある。
- 特定のプロセスに割り当てられているメモリ、プロセス間で共有されているメモリ、空きメモリ。
- カーネルは、すべてのメモリを管理する必要がある。
- 現代のCPUは、仮想メモリと呼ばれるメモリアクセス方式を可能にしている メモリ管理ユニット(MMU) を持っている。
-
mmap()
メモリアドレスマップ- 仮想メモリが使われた場合、プロセスは、ハードウェア上のメモリの物理アドレスへ直接アクセスする代わりに、メモリ管理ユニットがそのアクセスを途中で補足し、メモリアドレスマップを使って、プロセスから見たそのメモリアドレスを、コンピュータ上の物理メモリアドレスに変換する。
- カーネルは、メモリアドレスマップの初期化、切り替え等の管理を行なっている。
2-5-1. メモリ領域
- 4つのセグメントに分割される。
-
テキスト領域
- 機械語に翻訳されたプログラムが格納される。
- この機械語の命令が1行づつ実行されることでプログラムが動く。
- 機械語に翻訳されたプログラムが格納される。
-
静的領域
- グローバル変数などの静的変数が置かれる。
-
ヒープ領域
- メモリの動的管理 (C 言語の
malloc
関数や C++ のnew
演算子でメモリを確保すること) で用いられる。
- メモリの動的管理 (C 言語の
-
スタック領域
- C関数の引数やローカル変数が積まれる。
- LIFO(Last In First Out)のデータ構造。
- スタックフレーム
- スタック領域に積み重ねられる単位であるデータ構造のこと。
- スタックフレーム1つが、1回の関数呼び出しに対応する。
第5章 ガ-ベージコレクション - Rubyソースコード完全解
メモリの4領域 - 工学院大学
2-5-2. 仮想メモリ
- プロセスがメモリにアクセスする際に、システムに搭載されているメモリに直接アクセスさせるのではなく、仮想アドレスというアドレスを用いて間接的にアクセスさせるという機能。
- システムに搭載されているメモリの実際のアドレスを物理アドレスと呼ぶ。
- プロセスから物理アドレスに直接アクセスする方法は存在しない。
- 実際のメモリではなく、マルチタスク実行とオーバーサブスクリプションをサポートするように、メインメモリを抽象化したもの。
- 実質的にメインメモリが無限になる。
- ほとんどのOSでは、仮想メモリを実メモリにマッピングするのはオンデマンドで、つまりメモリに初めて書き込みをするときだけ。
2-5-3. 仮想アドレス空間
- 仮想アドレスによってアクセス可能な範囲。各プロセスとカーネルが持つ、メモリのコンテキスト。
2-5-4. カーネル空間とユーザー空間
-
カーネル空間
- カーネルだけがアクセスできる仮想メモリアドレス空間のこと。
-
ユーザー空間
- プロセスだけがアクセスできる仮想メモリアドレス空間のこと。
- プロセスとは、OSの抽象で、プログラムを実行するための環境。
- すべてのウェブサーバーはユーザープロセスとして動作する。
- ユーザープロセスからのアクセス用にカーネルが割り当てるメインメモリ。
- ※ ユーザープロセスとは、プロセスを具体的に表した用語。
- ユーザーモードで実行される。
- Linuxシステムでは、実際の処理のほとんどがユーザー空間で行われている。
- カーネルの視点からはすべてのプロセスは基本的に同じだが、各プロセスは異なる処理を行う。
- プロセスだけがアクセスできる仮想メモリアドレス空間のこと。
2-6. デバイスドライバ
- 物理デバイスの管理とI/Oを行うためのカーネルソフトウェア。
- カーネルは、(ディスクのような)ハードウェアとプロセス間のインターフェイスの役割を果たし、ハードウェアを操作する。
- デバイスドライバは、ハードウェアデバイスを開発しているベンダーから提供されることが多い。
- デバイスドライバはカーネルの一部で、ユーザプロセスに対して統一されたインタフェースを提供する。
- カーネルは、物理デバイスにはカーネルモードでアクセスする。
- 不適切なアクセス(ユーザープロセスが電源を切るように要求するなど)は、コンピュータをクラッシュできてしまうため。
3. ユーザープロセス(ユーザー空間)
3-1. ユーザーランド
- OSのうち、カーネル以外の要素のこと。
- ユーザーレベルプログラム、ライブラリ(/usr/bin、/usr/libなど)。
3-2. ユーザー
- ユーザーは、プロセスを実行しファイルを所有できる存在。
- 多くの場合、関連づけられたユーザー名(username)を持っており、カーネルはユーザーをユーザーIDという数値の識別子によって識別する。
- 主にパーミッションと境界をサポートするために存在している。
- すべてのユーザー空間のプロセスには、所有者(owner)ユーザーが存在し、プロセスはその所有者として実行されている。
- ユーザーは自分のプロセスを終了させたり、動作を変更させたりできるが、他のユーザーのプロセスには干渉できない。
- ユーザーはファイルを所有し、他のユーザーとファイルを共有するかどうかを選べる。
3-2-1. rootユーザー
- 最も重要なユーザー。
- rootユーザーは、他のユーザーのプロセスを修了したりへ脳したりでき、ローカルシステム上のあらゆるファイルへアクセスできるので、スーパーユーザー(superuser)として知られている。
- rootでの操作は危険を伴い、強力だが、カーネルモードではなく、ユーザーモードで動作する。
3-2-2. グループ(group)
- ユーザーの集まりのこと。
- グループの主な目的は、ユーザーがグループの他のメンバーにファイルアクセスを共有できるようにすること。
引用:
- 詳解 システム・パフォーマンス 第2版
- スーパーユーザーなら知っておくべきLINUXシステムの仕組み 第1章 Linuxシステムの全体像
- [試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】
- コンピュータの構成と設計 MIPS Edition 第6版 上
- コンピュータの構成と設計 MIPS Edition 第6版 下
- 【CPUの基本】図解でよくわかる「マルチコア / スレッド」の意味 - ちもろぐ
- コンピュータの基本構成と動作原理〜知識編 - Qiita
- CPUからOSまで自作してみた話(ハードウェア編) - Qiita
- 【CPUとは】クロック、コア、スレッド、キャッシュメモリを分かりやすく解説【PC初心者】 - YouTube
- とってもやさしいGo言語入門 - Zenn