ブログをはじめるぞ、と意気込んではみたものの、書くネタに迷ってしまったので、最初の数回は現在担当している大学での非常勤講師の内容について書きたいと思います。
授業名は「オペレーティングシステム」で、今回は最初の授業の内容です。
導入
この授業ではオペーレーティングシステムについて学んでいくわけですが、そもそも「オペレーティングシステム」とは何でしょうか?
- パソコンを買うとついてくるもの
- スペック表を見ると書いてあるもの
- パソコンの電源を入れるとタイトル画面が出てくるもの
- 携帯電話向けOSなどで活発な競争を繰り広げているもの
などの説明はできるかもしれませんが、「オペレーティングシステムとは何か?」と改めて問いかけられると、なかなか明確な答えを返すことは難しいのではないかと思います。
モヤモヤとしたオペレーティングシステムのイメージを固めていくために、まずは既存のオペレーティングシステムの名前を次々と挙げてみましょう。
- Windowsシリーズ(8, 7, XP, Vista, 95, NT, 2000, 3.1)
- MacOS
- Linux(debian, redhat, ubuntu)
- iOS
- Android
- BSD
- SunOS(Solaris)
- UNIX(AT&T)
- Tron(若い学生さんでも毎年挙げてくれる人がいてうれしい。「超漢字」を挙げる人も)
皆さんがよく知っているWindowsやMacOSは「コンシューマ向けOS」と呼ばれ、一般的なユーザが使うパソコンに適するように作られているオペレーティングシステムです。
iOSやAndroidなどの「携帯電話向けOS」は、近年進歩著しく商業的にも非常に活況を呈していますね。
Linux, BSD, SunOS, UNIXは「サーバ向けOS」です。みなさんはこれまでこれらの名前はあまり聞いたことがなかったかもしれませんが、gmailなどを使ったことがある人がいれば、ネットワーク越しにこれらオペレーティングシステムを利用している事になります。
ソフトウェアとしてのオペレーティングシステム
更に議論を進めましょう、コンピュータには大きく分けて「ソフトウェア」と「ハードウェア」の部分があります。オペレーティングシステムは「ソフトウェア」の部分に属しますが、みなさんのイメージする「ソフトウェア」はどのようなものがあるでしょうか?
- ワープロソフト
- 表計算ソフト
- ブラウザ
- メディアプレーヤー
これらもソフトウェアですが、これらは特に「アプリケーションソフトウェア」と呼ばれます。カタカナで書くとわかりにくいですが、無理やり和訳すると「応用ソフトウェア」です。
「応用」の対をなす言葉は「基本」です。オペレーティングシステムはこの基本部分に分類されるソフトウェアです。
オペレーティングシステム成立の背景
コンピュータは「ソフトウェア」と「ハードウェア」の部分があり、「ソフトウェア」の部分は「アプリケーション(応用)ソフトウェア」と「オペレーティングシステム(基本ソフトウェア)」に分かれます。しかし、なぜこのような構成が採られるようになったのでしょうか?オペレーティングシステム成立の歴史から探っていきましょう。
オペレーティングシステム以前の時代
ソフトウェアは最初から応用と基本の2部分に分かれていたわけではありません。オペレーティングシステムが用いられるようになった以前の時代では、ソフトウェアは一体であり分かれてはいませんでした。
下は、オペレーティングシステム登場以前のコンピュータの構成を示した図です。A社というコンピュータメーカはAというハードウェアに適したAというソフトウェアを。B社というコンピュータメーカはBというハードウェアに適したBというソフトウェアをそれぞれ開発して出荷していました。
この時代は「Aというハードウェアに対してはAというソフトウェア」「Bというハードウェアに対してはBというソフトウェア」という関係は1対1に固定されていました。ソフトウェアAは、Aというハードウェアに依存して作られているためB社のコンピュータ上では動作しません。というのも、初期の時代のコンピュータの行なっていた仕事はミサイル発射のための弾道計算などであり、このような売り方でも問題は少なかったのです。
オペレーティングシステムが普及した背景には、1980年代に起こった大きな変化があります。下図のソフトウェアを見てください。
これはLotus 1-2-3というソフトウェアで1983年に開発されました。このソフトウェアは一般にも手に入れることができるコンピュータ(当時は高価でしたが)で動作させることができ、複雑なプログラミング作業を必要としないで望んだ計算を実行させることができる「表計算」というアイディアを実装することで、これまでミサイルの弾道計算などに利用されていたコンピュータの計算能力を小さな会社の経理などの飛躍的に広い領域で使うことができるようになりました。
Lotus 1-2-3はソフトウェア製品としては画期的なヒット作となると同時に、コンピュータも便利な道具として広く使われ始めます。Lotus 1-2-3の後を追えとばかりに、ワープロソフトや画像編集ソフトなど現在使われている様々なソフトウェアの原型の多くがこの時期に誕生し、ソフトウェア市場は質・量共に巨大化していきます。
しかしここで問題が起こります。ソフトウェア製品を広く流通させようと思っても、A社のコンピュータのために作ったソフトウェアはB社のコンピュータでは動作しないのです。
オペレーティングシステムのアイディア
1980年代には、現在のソフトウェアの原型となる多種多様なソフトウェアが開発されたのですが、ソフトウェア開発者たちはある事実に気づきます。違うソフトウェアであっても共通部分は案外多いのです。ここで、ソフトウェアで共通する部分をまとめて使いまわす、というアイディアが生まれました。更に開発者たちは、異なるハードウェアのコンピュータであっても、ソフトウェアの視点に立って見ると行わせたい処理の多くは共通である、ということにも気づきます。
ここで以下のようなアイディアが生まれました。
- ソフトウェアを共通の処理を実行する部分(基本ソフトウェア)と個々のソフトウェア独自の処理を実行する部分(応用ソフトウェア)に分離する。
- ハードウェアに依存する処理は基本ソフトウェア部分にプログラミングしておく。
- 応用ソフトウェアから基本ソフトウェアを呼び出すインターフェース(API)は、ハードウェアにかかわらず共通化しておく。
このような構成を採ることで、多様なハードウェアで動作するソフトウェアを容易に開発して流通させることができるようになります。これがオペレーティングシステムの基本的なアイディアです。
改めての問い:オペレーティングシステムとは何か?
これで「オペレーティングシステムとは何か?」という問いに答えることができるようになったと思います。
オペレーティングシステムとは、
- コンピュータ上で動作するソフトウェア
であり、
- アプリケーションソフトウェアとハードウェアの間に存在し
- アプリケーションソフトウェアとは共通化されているAPIによって区分される
部分です。
オペレーティングシステムとは何か?という問いに答えることの難しさは、オペレーティングシステムというソフトウェアは、実は多様(多様なハードウェアに依存して存在するのですから)であり、境界でしか定義できないという点にあります。でも今日の議論でその輪郭をはっきりとさせることができましたね。
オペレーティングシステムをなぜ学ぶのか
「オペレーティングシステム」の日本語名は「基本ソフトウェア」という話をしましたが、「オペレーティング」とは本来は「運用」という意味です。
今日の授業ではオペレーティングシステムとは、APIとハードウェアの間に存在するソフトウェア部分という説明をしましたが、実際には各コンピュータメーカーは、APIという切り口は共通ルールとして守りつつも、コンピュータの性能を引き出すためにオペレーティングシステムをハードウェアと密接に結合させて効率良く「運用する」仕組みをオペレーティングシステムに持たせています。
みなさんは、コンピュータを作る側になる人もいると思いますが、少なくとも仕事をする上で使わない人はいないでしょう。ハードウェアを効率良く運用するように作られているオペレーティングシステムですが、その内容を理解することでより効率よく利用できるようになります。オペレーティングシステムを学ぶことでコンピュータの性能を最大限に引き出して乗りこなせるF-1ドライバーになりましょう。
このブログでは授業では話せないマニアなトピックも取り扱っていく予定です。