ソフトウェアとは, コンピュータのハードウェア(CPUなどの制御装置やディスプレイ
などの入出力装置)に対してこういう操作をしてほしいという命令(プログラム)を
記述したファイルのことです. そしてこのソフトウェアも目的によって分類されます.
ソフトウェアのうち, おそらく最も多く存在するのがこのアプリケーションと呼ばれる
ソフトウェアでしょう. 今このサイトを閲覧するために利用しているブラウザもそうです.
ブラウザだけでなく, Word, Excel, メールソフト, IllustratorやPhotoshopなど特殊用途の
ソフト, ゲームなどもすべてこのアプリケーションソフトウェアに分類されます.
アプリケーションソフト以外のソフトウェアのほとんどはこのシステムソフトウェアに分類
されるかと思います.「システム」という名の通り, アプリケーションに比べてユーザが直接
利用している実感が少なく感じるかもしれません. しかしこのシステムソフトウェアが存在
するおかげで, アプリケーションを快適に利用することができるのです.
システムソフトウェアは大きく2つの種類に分類されます. その1つが, このサイトのキーワードであるオペレーティングシステム
(OS : Operating System)です. Windows, UNIX(Solaris, FreeBSD, Mac OS Xなど), Linux(CentOS, ubuntu...etc),
iOS, Androidなどはすべてこの基本ソフトウェア(OS)に分類されます.
システムソフトウェアのうちもう1つの種類がミドルウェアです. 基本ソフトウェアに比べるとなじみが薄いかもしれませんね.
ミドルウェアの代表的なものにデータベースマネジメントシステム(DBMS : DataBase Manegement System)があげられます.
Oracle, MySQL, SQL Serverといったものは, このミドルウェアに分類されるソフトウェアです.
OSの機能は幅広く, プロセスの制御や, メモリや入出力のデバイス管理, 広くは言語
プロセッサ(コンパイラやインタプリタ)やテキスト編集プログラムもOSが提供する
ことです. しかしながら, OSが果たす役割で最も重要なのは, プロセスの制御や
コンピュータ資源の管理に関するプログラムです. 具体的には, ジョブやプロセス
を管理して, CPUの使用権を効率良く割り当ててマルチタスクキングを可能にしたり,
メモリを管理して必要なプログラムをディスクからロードしたり, ファイルを管理
したり, I / O(入出力デバイス)管理したり...といったことです. これらのプログラム
がOSの最も重要な機能であることからOSのカーネルと呼ばれます.
OSのカーネルの機能を理解するために, もしそれがなかったら...を考えてみます.
もし, OSのカーネルがなければZマルチタスクができないでしょう.
例えば, インターネットを閲覧しながら(ブラウザを利用しながら)Wordを利用して
文書を作成して...といったことをすることができなくなります.
厳密にはOSのカーネルがあっても, 1つのCPUでマルチタスクをすることはできません.
しかし, OSのカーネルがあることで, 効率良く実行すべきプログラムを瞬時に切り替え,
マルチタスクをしているように見せかけることができます.
また, マルチタスクの粒度をもっと細かくした用語にマルチプロセスやマルチスレッドが
あります. ただし, 本質的には同じようなことなのでこのサイトでは同一として扱います.
もし, OSのカーネルがなければ, アプリケーションプログラムを作成する際に個々の
ハードウェアの物理的特性まで理解してコーディングしなければならなくなるでしょう.
カーネルがあるからこそ, プログラマはそのようなことを意識する負担から解放され,
新たに開発するプログラムに資源を集中させることができるのです.
また, プログラムの内容に従って, ハードウェアを動作させるデバイスドライバも
カーネルに含まれる機能です.
上記のことを少し抽象度を上げて, OSのカーネルの機能をまとめます.
カーネルの機能を利用するためにカーネルを直接操作するのは困難です.
そこで, ユーザやアプリケーションがカーネルの提供する機能を
利用するためのインタフェースが必要になります.
それが, シェルであり, システムコール(API)であるわけです.