# OS について
# はじめに
OS に関して学習します。Web 開発において、 どの OS 上で構築するか、動作するかによって環境構築の手順や、プログラムコードや考え方が異なる場合があります。 また、同一のプログラムコードを記述したものを、複数の OS で動作させることもよくありますが、 その際にトラブルが発生した場合の解決のために、OS について理解しておくことが重要です。
注
このページは一部の説明において、 菱田氏、寺西氏 他著 オペレーティングシステム (opens new window) の内容に基づき、説明を追記して解説しています。
# OS とは
OS はオペレーティング・システムの略称です。 最近のコンピューターシステムは、多くの要素から構成される複雑なシステムとなっています。 代表的な要素としては下記のようなものがあり、その他にも様々な入出力デバイスが存在します。
- CPU
- メインメモリ
- HDD や SSD 、 DVD ドライブなどのディスクドライブ(補助記憶装置)
- ディスプレイ
- キーボード
- マウス
- プリンタ
- ネットワークインターフェース
そのコンピュータの内部では、上記のデバイスを制御し、コンピュータを使用しているユーザの目的を実現するプログラムが動作します。
通常、プログラマーはこれらすべての構成要素の状態に注意をはらい、適切に動作するプログラムを作成する必要がありますが、それは簡単な作業ではありません。 プログラマの労力を軽減するためには、状態の把握や制御の手順等をできるだけ簡素に、画一的に行われるような仕組みを用意することが効果的です。 オペレーティング・システムはその仕組みを実現するためのソフトウェアです。
# コンピュータシステムの概要
コンピュータシステムは次の図のような階層で表すことができます。

# ハードウェア
最下位のハードウェア層は、ディスプレイ、キーボードなど前セクションに記述したような物理的な装置の集まりです。
# オペレーティングシステム
ハードウェアの上には、ソフトウェアの層が構成されます。 多くのコンピュータには、カーネルモード(スーパーバイザーモードとも呼ばれます)とユーザーモード と呼ばれる 2 つの動作モードを持っています。 カーネルモードはすべてのハードウェアにアクセス可能ですべての命令を実行できるモードです。 OS は、ハードウェアを制御する最も根本的なソフトウェアであり、通常カーネルモードで実行されます。 それ以外のソフトウェアはすべてユーザーモードで動作します。 ユーザーモードでは、他のプログラムに影響を及ぼすような制御命令や入出力命令が禁じられ、互いのプログラムが干渉しあわないように保護機能が働いています。
# ユーザインタフェース
OS の上位にはユーザインタフェースがあります。ユーザインタフェースは以下の 2 種類に分類されます。
- CLI (Command Line Interface): 一般的にシェルとよばれ、キーボードによる文字入力によって操作する方法。
- GUI (Graphical User Interface): アイコンや様々なグラッフィクデザインを基本に、マウスなどを使用して操作する方法。

ご存知の通り、最近の OS では、GUI を主体にしたものが多くなってきています。 ユーザーインターフェースは、ユーザモードで動作する最下層のプログラムであり、ユーザの意図をコンピュータに反映させること、 例えば、ユーザーが望むプログラムの実行や、ハードウェアへの要求に対して OS の機能を呼び出して実現などを役割として担います。
したがって、ユーザーは通常、ユーザーインタフェースが表現するイメージをハードウェアとして認識していることになります。 ユーザの意図はアプリケーションプログラムを通じてユーザーインターフェースから OS へ伝えられ、最終的に OS がハードウェアに対して適切に 処置を行います。
このように考えると、OS はカーネルモード上で動作する基礎プログラム郡と考えることができそうですが、 実際には、OS の定義はもう少し曖昧です。ユーザーモード、カーネルモードという区別が存在しなかったり、OS に強く依存するサブシステムがユーザーモードで動作しているものが存在したりしています。 どこまでを OS の一部と見るかは議論の余地がありますが、時代の変化に伴い柔軟に変化する存在であることを理解しておくことが重要です。
# アプリケーション
最上位の層はアプリケーションプログラムです。 アプリケーションは、みなさんが普段利用しているあのアプリケーションです。 ユーザーが望む目的のための機能を持ったソフトウェアであり、ユーザーインタフェースを通して呼び出され、ユーザモードで動作します。 Web ブラウザや Word (opens new window)、Cubase (opens new window)、 Premiere Pro (opens new window)、VALORANT (opens new window) など、様々なプログラムが存在し、 また、任意の目的にためにプログラムを自作することも可能です。
# OS の種類
これまでのセクションで OS の概要について説明しました。 本セクションでは、OS の種類と実際にどのようなものがあるか有名な OS の一例を紹介しています。
# メインフレーム用 OS
データセンターなどで利用する OS です。
- Red Hat Container Linux
# サーバ用 OS
Web サーバーやファイルサーバーなどで利用する OS です。
- Ubuntu Server (opens new window)
- Red Hat Enterprise Linux (opens new window)
- CentOS (opens new window)
- Windows Server (opens new window)
- Alpine Linux (opens new window)
# パーソナルコンピュータ OS
一般的なパソコンです。
# 携帯情報端末用 OS
- Android (opens new window)
- iOS (opens new window)
- BlackBerry OS
- Windows Phone
- Symbian OS
# 組み込み用 OS
産業ロボットや POS レジ、IoT デバイスなどで利用する OS です。
- Windows IoT (opens new window)
- Windows Embedded
- Raspberry Pi OS (opens new window)
- TRON / μITRON
# OS の役割
OS の役割には、大きく分けて 2 つあります。
- 仮想マシンを実現すること
- 資源管理を行うこと
# 仮想マシンとしての OS
コンピュータのハードウェアとして構成される装置はいずれも何らかの形で演算装置との連絡を行うための入出力機構を持っています。 各装置はそれぞれ特定の命令を受け取り、その指示通りの動作を行います。 通常、装置が理解する命令は非常に原始的なものばかりであり、プログラマが期待する動作を行うには、装置に対していくつかの、場合によっては多数の一連の命令を送る必要があリます。
例えば、HDD の場合、データを読み出すためには、求めるデータが記録されているデータブロックの番号を 1 つひとつ指定して読み出し命令を発行する必要があります。 場合によってはディスクの回転のオン・オフやヘッドの位置操作も行う必要があります。 演算装置に計算させたい場合も、[1] 計算したい値をレジスタにセットすることと、[2] 計算を実施することと、[3] 計算結果をメモリに記録すること、は別々の命令で行う必要があります。 加えて、メーカーが違えば実行手順や命令の内容も異なります。
これをアプリケーションの開発者が、毎回行うことは不可能です。 これらを一貫性のある抽象化された仮想的なハードウェアを提供することが OS の役割です。
「ファイル」という概念は、OS が抽象化する代表例です。ファイルは、通常、意味のあるデータの一連の集まりとして 1 つを表現します(「報告書 1.txt」など)。 しかし、実際にはこれらのデータは、HDD に保存する際には複数の磁気円盤に分散して保存されていたり、USB メモリの場合は例えば USB BOT プロトコルに従い、HCD を経由して USB ストレージ機器にアクセスし書き込まれたりしています(このプロトコルを今深堀りする必要はありません)。データを読み出す際も同様のことが言えますが、このような一連の操作を、「ファイルを開く」「ファイルを保存する」という概念でできるようにしてくれています。
OS が実際のハードウェアを仮想マシンとしてプログラマに提供することで、プログラマはハードウェアの詳細な状況を意識することなく、例えば以下のように簡単なプログラムコードで目的を達成することができるようになります。
// Node.js の場合
var fs = require('fs')
var data = fs.readFileSync('報告書 1.txt') // ← ファイルを開く
// → data の中には ファイルの内容が入っている。
2
3
4
5
# 資源管理としての OS
現在のコンピュータシステムは、多くのデバイスが集約されており、1 つのプログラムを実行するだけでは利用されない資源(リソース)が必ず生じます。OS は複数のプログラムを同時に実行させることができます。それは、コンピュータの資源を有効に利用するように、資源管理が行われているためです。限られた資源が、アプリケーション間で競合を起こさないように調整する機能もあります。
例えば、アプリケーションを同時に 2 つ起動したときに、一つのアプリケーションウィンドウがアクティブな状態で、キーボードを入力すると、文字が入力できますが、非アクティブなアプリケーションウィンドウには、キーボードの入力操作は届きません。一見当たり前のことに思えますが、これらの切り替えるという概念や、それに応じた資源(キーボード等)の割当を OS が行っています。
# まとめ
- OS は、ハードウェアの状態の把握や制御の手順等をできるだけ簡素に、画一的に行われるような仕組みを実現するためのソフトウェアである。
- コンピュータはハードウェア、オペレーティングシステム、ユーザインタフェース、アプリケーションで構成される。
- ユーザインタフェースとして、CLI、GUI がある。
- OS には多数の種類がある。
# 補足
このサイトで紹介した、オペレーティングシステム (opens new window) の内容は 全 185 ページのうち 3 ページ分程です。 OS について理解を深めるには、専門書で学習してください。