「詳細 LINUXカーネル」を読む前に読む用語集【Linuxカーネルを読む準備】

カーネル

すべてのPCにはオペレーティングシステムが存在します。その中でも中心となるプログラムがカーネルであり、 これはすべてのアプリケーションの基礎となるプログラムであり、システム起動時にRAMに読み込まれます。

反対に、カーネルではないシステムとは、コンピューターが動作するということに関しては必須ではないシステムということです。

  • カーネル...:コンピューターが動くために必須なプログラム群
  • カーネルではない...:必須ではないプログラム

カーネルは次の二つの目的を果たします。

  • ハードウェアプラットフォームの構成要素である低水準のプログラマブルなハードウェアを制御する
  • ユーザーが使用するアプリの実行環境を提供する

ユーザーアプリは直接ハードウェアを触れない

実は、OSの中にはハードウェアを直接操作することがすべてのカーネル以外のプログラムに許可しているものもあります。

ex) MS-DOS

反対に、UNIX系のオペレーティングシステムでは、ユーザーが実行するアプリケーションが直接ハードウェアを触ることを禁止しているのです。

その代わり、ユーザープログラムがハードウェアにアクセスしたいときは、オペレーティングシステムに要求を発行することで使用を許可されているのです。 この要求はカーネルが監視しており、カーネルが許可を発行した場合、カーネルはそのユーザープログラムに代わって対象のハードウェアを操作します。

近年のハードウェアには機能が備わっています。カーネルはこのハードウェアに備わった機能を利用することでユーザープログラムによる操作を許可しているのです。 逆に、カーネルはハードウェアの機能に依存しているといえるでしょう。

したがって、

ユーザープログラム→カーネル→ハードウェア機能→ハードウェア

というアクセスが成り立ちます。

なぜここまで冗長に行う必要があるかといえば、ハードウェアはユーザーのプログラムが下手にアクセスするとそれだけで壊れるぐらいもろいのです。 最悪ハードウェアが二度と扱えなくなる可能性すらあります。

ユーザーモードカーネルモード:ハードウェアは二つの状態を用意してくれる

ハードウェアはCPUに少なくとも二つの実行モードを用意しています。 具体的にはユーザーモードカーネルモードの二つです。

マルチユーザーシステム

二人以上のユーザーが様々なアプリケーションを並列して独立した実行が可能なコンピューターのことです。 一般に以下のような機構が必要になります。

  • ユーザーIDを確認する機構
  • 同じシステムで動作する別プログラムを保護する機構
  • ほかのユーザーの処理を見えないようにする機能
  • 各ユーザーの資源の使用量を制限するアカウンティング機構

しかし、マルチユーザーシステムを使用するということは、一つのアプリケーションから別のアプリケーションへの切り替えは当然、それぞれの処理を遅くし、ユーザー側から見た応答時間に影響を与えます。 また、すべてのOSがこの機能を実装しているわけではなく、MicrosftのWindows98はシングルユーザーのOSです。

from https://windows-core.com/windows_history/history-5.php

Windows95/98 系でもユーザーを作ることはできましたが、フォルダごとにアクセスを制限することは出来ず、親の使っているパソコンのブラウザの閲覧履歴やダウンロードしたフォルダの中身が子供にぜんぶ見られるといった悲喜劇もあったとか。結局、業務用の WindowsNT 系のパソコンを導入することはあまりなく、親も子も一人一台のパソコンを購入し、各自で勝手に管理して使う、という形に落ち着いたようで、XP で両系の統合が実現しても、それは変わらなかったようです。同様に、一般的な事業所でも、現在のように一人一台のコンピュータを使うならば、むしろシングルユーザーで使ってもらうほうが扱いやすいということなのでは。

ユーザーとグループ

  • マルチユーザーシステムでは、マシン上に各ユーザーの領域があります。

  • 個人用のユーザー領域は、その所有者だけが参照できることを保証する必要があります。

  • ユーザはすべて、ユーザーIDでかんりします。(UIDとも言う)
  • 各ユーザーは一つ以上のユーザグループのメンバとなっており、グループはGIDと呼ばれる番号で管理されます。

ファイルのアクセス権限

ファイルのアクセス制限は三つのグループで分けられます。

つまり

  • ファイルの作成者は読み書きの権限を持つ
  • ファイルが所属するグループは読み取りのみの権限を持つ
  • そのほかのユーザーはアクセスできない

という制限が可能なのです。

特殊なユーザ

すべてのUNIX系OSにはrootユーザーや、superuserあるいは、supervisorなどと呼ばれる特殊なユーザーが存在します。 rootユーザーはそのシステムではなんでもできます。

アドレス空間

メモリの中の住所のこと

情報処理において、アドレス空間 (アドレスくうかん、英: address space) とは、メモリアドレスが意味を成すコンテキストを定義したもの。あるいは、一連のメモリアドレスによってアクセス可能なメモリ空間を意味する。

メモリアドレスはコンピュータのメモリ内の物理的位置を識別するものであり、住所とある意味で類似している。アドレスはデータが格納されている位置を指すが、それはちょうど人間の住所がその人の居住地を指すのと同じである。人間の住所とのアナロジーで言えば、「アドレス空間」とは、町や市や国といったある範囲の地域に対応すると考えることができる。2つのアドレスが数値的に同じでも、それぞれ異なるアドレス空間内のアドレスであれば、異なる位置を指していると言える。これは2つの市に「××町○丁目△-□」という住所が存在したとき、それらが別の場所を指すのと同じことである。

from https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E7%A9%BA%E9%96%93

スケジューラ

CPUの数は常に限られています。 その中で、どのプロセスを実行していくかの選択を、オペレーティングシステムのスケジューラという機能が行っています。

プリエンプト可能

プリエンプション(英:preemption)とは、複数のタスクを同時に実行するマルチタスク(マルチプログラミング)に対応したOSの制御機能のひとつで、実行状態のタスクを一旦停止して、実行可能状態に戻すこと(他のタスクを実行状態にする)ことをいいます。

from https://medium-company.com/%E3%83%97%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3/

プロセス

UNIXはプリエンプト可能なプロセスを持つマルチプロセッシングOSです。 ユーザーがログインしていない、アプリも動作していないときでも、様々なシステムプロセスが周辺デバイスを監視しています。

いくつかのプロセスはユーザーのログインを待ってシステム端末を見張ってます。 こうしたプロセスはユーザーがログインすると、新しいプロセスを起動し、 コマンドの入力を受け付けるシェルを実行します。 グラフィカルな画面が動作する場合は、通常あるプロセスがウィンドウマネージャーを実行し、それとはまた別のプロセスによって、ウィンドウが起動します。

プロセス実行コンテキスト

プロセスを実行するために必要となるひとまとまりの情報。

POSIXとは

POSIXとは、主にUNIX系OSに共通する機能などについて、プログラムからの呼び出し方法などの標準を定めた規格。 IEEEが定めている。

要は、Linuxってこうあるべきだよねというのを定められた企画のこと。