0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux学習 3日目

Posted at

オペレーティングシステムの基本概念(続き)

マルチユーザシステムにおけるユーザ管理とアクセス制御

マルチユーザシステムでは、各ユーザに個人用のディスク領域が割り当てられ、ファイルの保存やメールの受信に利用されます。この領域は、所有者だけがアクセスできるように保護されており、不正なシステムアプリケーションの悪用によって侵害されないようにする必要があります。

すべてのユーザは、ユーザID(UID) と呼ばれる一意の番号によって識別されます。通常、コンピュータシステムは利用できるユーザを制限しており、ユーザがログインする際には、システムがログイン名とパスワードを要求します。

また、データを他のユーザと共有できるように、各ユーザは 1つ以上のユーザグループ に所属します。グループは、グループID(GID) と呼ばれる一意の番号で識別され、各ファイルも必ず1つ以上のグループに属します。この仕組みにより、ファイルのアクセス権限を次のように設定できます。

  • ファイル所有者:読み書き可能
  • 同じグループのメンバー:読み取り専用
  • その他のユーザ:アクセス不可

これにより、適切な権限管理が可能になります。

ルートユーザとその権限

すべてのUNIX系オペレーティングシステムには、ルート(スーパーユーザ、スーパーバイザとも呼ばれる) という特別な権限を持つユーザが存在します。システム管理者は、ユーザアカウントの管理、システムのバックアップ、プログラムの更新などの管理作業を行うために、ルートユーザとしてログインする必要があります。

ルートユーザは、システム上でほぼすべての操作を実行できます。これは、通常のアクセス制御がルートユーザには適用されないためです。例えば、ルートユーザは以下のような権限を持ちます。

  • システム上のすべてのファイルにアクセスできる
  • 動作中のすべてのユーザプログラムを制御できる

この強力な権限のため、ルートユーザの操作は慎重に行う必要があります。

プロセスとは

オペレーティングシステムには、「プロセス」という基本的な概念があります。プロセスとは、「実行中のプログラムのインスタンス」 または 「動作中のプログラムの実行コンテキスト」 と定義できます。

従来のオペレーティングシステムでは、プロセスは1つのアドレス空間の中で1つの命令シーケンス(命令の並び)を実行します。ここでいうアドレス空間とは、そのプロセスが参照可能なメモリアドレスの集合を指します。

一方、近代的なオペレーティングシステムでは、1つのプロセスが複数の処理の流れ(スレッド)を持つことが可能になっています。つまり、同じアドレス空間内で複数の命令シーケンスを並行して実行できるようになっています。

マルチプログラミングとマルチプロセッシング

マルチユーザシステムでは、複数のプロセスが同時に動作し、CPUやメモリなどのシステム資源を共有します。これを実現するオペレーティングシステムの仕組みを、以下のように分類できます。

マルチプログラミング(Multiprogramming) 複数のプロセスを同時に動作状態にし、CPUの利用効率を高める仕組み
マルチプロセッシング(Multiprocessing) 複数のCPU(マルチコア含む) を用いて、複数のプロセスを並行実行する仕組み

プロセスの実行形態として、以下の2つのケースが考えられます。

  1. 複数のプロセスが並行して同じプログラムを実行する(例:複数のユーザが同じアプリケーションを実行)
  2. 同じプロセスが複数のプログラムを順次実行する(例:シェルが異なるコマンドを実行)

単一プロセッサシステム(シングルコアCPU)では、ある瞬間に実際にCPUを使用できるのは1つのプロセスのみです。ただし、オペレーティングシステムがプロセスを短時間で切り替えることで、ユーザには複数のプロセスが同時に実行されているように見えます。

スケジューラとプリエンプション

CPUをどのプロセスに割り当てるかを決定するのは、スケジューラと呼ばれるオペレーティングシステムの機能です。スケジューラには、次の2つの方式があります。

プリエンプト不可(Non-Preemptive)

プロセスが自発的にCPUを手放したときのみ、スケジューラが次のプロセスを選択する

例:古いバッチ処理システム

プリエンプト可能(Preemptive)

一定時間ごとにスケジューラがCPUの割り当てを変更し、すべてのプロセスに公平な実行機会を提供する

例:マルチユーザシステム(UNIX など)

マルチユーザシステムでは、プリエンプト可能なスケジューリングが必須です。オペレーティングシステムは各プロセスがCPUを使用した時間を管理し、定期的にスケジューラを作動させることで、公平なリソース分配を実現します。

UNIXはプリエンプト可能なプロセスを備えたマルチプロセッシングOSです。たとえユーザがログインしておらず、アプリケーションが動作していない場合でも、システムプロセスが周辺デバイスを監視しています。

プロセスのライフサイクルとUNIXの仕組み

UNIX系オペレーティングシステムでは、ユーザのログインやアプリケーションの起動に応じて、プロセスの生成と管理が行われます。

ユーザのログインとプロセスの流れ

  1. システムの特定のプロセスが、ユーザのログインを待機
  2. ユーザがログイン名を入力すると、パスワード認証プログラムを起動
  3. 認証が成功すると、新しいプロセスを作成し、シェル(コマンド入力環境)を実行
  4. ユーザがコマンドを入力すると、シェルプロセスが新たなプロセスを起動し、コマンドを実行

グラフィカル環境では、次のようにプロセスが管理されます。

  1. ウィンドウマネージャのプロセスが起動
  2. 各ウィンドウがそれぞれ独立したプロセスとして動作
  3. シェルプロセスが別のプロセスを起動し、ユーザの操作に対応

プロセスとカーネルの関係

UNIX系オペレーティングシステムは、プロセス/カーネルモデルを採用しています。このモデルでは、各プロセスは「自分がシステム上で唯一のプロセスである」と錯覚します。

システムコールとカーネルモード

プロセスがシステムリソースを使用する際には、システムコールを発行します。

  1. プロセスがシステムコールを実行
  2. ハードウェアがユーザモードからカーネルモードに切り替え
  3. カーネル内の手続きが実行される(アクセス制限あり)
  4. 要求が完了すると、ハードウェアがユーザモードに戻る
  5. プロセスはシステムコールの続きから実行を再開

この仕組みにより、プロセスは安全にオペレーティングシステムのサービスを利用できるようになっています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?