差分

移動先: 案内検索

オペレーティングシステムとは何か

3,564 バイト追加, 2020年2月9日 (日) 05:38
/* 広義と狭義の議論 */
* リソースを効率的に利用するリソースを効率的に利用し、また管理をする
* アプリケーションが直接リソースを制御する必要をなくする
* アプリケーションにとってリソースをさらに抽象化する
 
 
 
=== リソースとは ===
==== ハードウェアリソース ====
 * CPU* 主記憶装置* 補助記憶装置* 入出力装置* etc.ハードウェアリソースにはCPU、主記憶装置(メモリ)、補助記憶装置、入出力装置、ほかがあります。
===== CPU =====
CPUと直接やりとりする記憶装置を指します。
演算のための値を記憶しておく、結果を記憶しておく、命令を記憶しておくなどといったために使われます。
以前は、単純にCPU ←→主メモリという構造で説明が十分だったのですが、現在での具体的な物理メモリの構成は、いくつかの階層にわかれていて、CPUと記憶をやりとりしています。わりきって一言でいうなら電気を切ったら消えてしまう一時的な記憶装置です。←→主メモリという構造で説明が十分だったのですが、現在での具体的な物理メモリの構成は、アクセスの効率を考え何段階かの動作速度や容量が異なるキャッシュメモリを用意しておき、CPUと記憶をやりとりしています。わりきって一言でいうなら電気を切ったら消えてしまう一時的な記憶装置だといえます。
===== 補助記憶装置 =====
現在ではコンパクトフラッシュメモリやUSBメモリなどもこのような区分けに入ってきます。
主記憶装置との違いは、CPUと直接記憶のやりとりを行なわないこと、記憶の容量が大きいこと、長期間記憶
(割り切って言えば電気を切っても消えない記憶わり切って言えば電気を切っても消えない記憶)
を保持するユニットです。
 
===== 入出力装置 =====
: '''調べてみよう''': ハードウェアリソースを構成するものとしてこの他に、どんなものがあるだろうか。ハードウェアリソースを構成<ref>コンピュータの構成と設計 第5版 上 , ジョン・L. ヘネシー (著), デイビッド・A. パターソン (著), 成田 光彰 (翻訳), 2014/12/6, ISBN 4822298426</ref><ref>コンピュータの構成と設計 第5版 下, デイビッド・A・パターソン (著), ジョン・L・ヘネシー (著), 成田光彰 (翻訳), 2014/12/6, ISBN 4822298434</ref>するものとしてこの他に、どんなものがあるだろうか。
==== ソフトウェアリソース ====
たとえばオペレーティングシステムの心臓部である[[カーネルの構造と機能|カーネル部分]]、アプリケーションが使うライブラリ、あるいはシステムを運用する上で必要なコマンド群などなどがあげられます。どのソフトウェアどんな役割を担うのかの議論は後程しましょう。、アプリケーションが使うライブラリ、あるいはシステムを運用する上で必要なコマンド群などがあげられます。データベースを考えるとアプリケーションとしてのデータベースプログラムとその中に格納されアプリケージョンに利用されるデータから成り立ちます。この両者があってソフトウェアリソースとして提供されるデータベースとして意味をなします。多種多様なソフトウェアリソースがどのような役割を担うのかの議論は後ほどしましょう。
==== ヒューマンリソース ====
== オペレーティングシステムの潮流 ==
最近は、どんどんハードウェアが小型化し、また高性能になっていきます。時が立つにつれ、どんどんハードウェアが小型化し、また高性能になっていきます。例えば、2010 年のデスクトップコンピュータ、いわゆるパソコンと呼ばれる機械の上位機種の計算スピードは、私がこの業界に入った 1980 年半ばのスーパーコンピュータ並、あるいはそれ以上の性能を持っています。この文章を読んでいるこの瞬間では、2010年のデスクトップパソコンなど性能的に時代遅れになっているでしょう。例えば、デスクトップコンピュータ、いわゆるパソコンと呼ばれる機械の上位機種の計算スピードは、私がこの業界に入った1980 年半ばのスーパーコンピュータ並、あるいはそれ以上の性能をたたき出しています。
1990年当時から比較しても、エンジニアリングワークステーションと呼ばれていた数百万から一千万円くらいの価格だったコンピュータシステムよりも遥かに高速です。1990 年当時から比較しても、エンジニアリングワークステーションと呼ばれていた数百万から一千万円くらいの価格だったコンピュータシステムよりも遥かに高速です。<ref>RASPBERRY PI 2 MODEL B http://www.raspberrypi.org/products/raspberry-pi-2-model-b/ </ref><ref>Iridis-pi: a low-cost, compact demonstration cluster https://www.southampton.ac.uk/~sjc/raspberrypi/raspberry_pi_iridis_lego_supercomputer_paper_cox_Jun2013.pdf</ref>
現在のハードウェアとオペレーティングシステムの関係をハードウェアの歴史の変遷を踏まえて考えてみます。みなさんが使っているデスクトップのコンピュータに至る流れには2つの流れがあります。
 
==== 下から上への流れ ====
1976年ぐらいになると、Apple、Sol、Altairといった最も初期の頃のパソコンが作られてきます。この頃、Bill GatesとPaul AllenはAltair 8080 (メモリ4KByte版)用に大型汎用機上で動いていたBASIC言語を移植しMITSへライセンスします。翌、1977年にはSteve WozniakとSteve JobsがApple メモリ4KByte版)用に大型汎用機上で動いていたBASIC言語を移植しMITSへライセンスします。翌、1977年には [[Steve Wozniak]] とSteve Jobs <ref> スティーブ・ジョブズ 1 (講談社+α文庫) ISBN 4062816148 </ref>がApple Corporationを設立し、また同じくしてBill Gates とPaul Allenは正式にMicrosoft companyを設立します。 
Apple や Sol や Altairのような初期のパソコンが作られます。スミソニアン博物館にある初期のパソコンたちの写真です。
Apple や Sol や Altairのような初期のパソコンが作られます。下がスミソニアン博物館にある世界初のパソコンの写真です(著者撮影)。
[[image:IMG_2551.JPG|thumb|220px|Homebrew computer club ]]
[[image:IMG_2548.JPG|thumb|220px|Apple]]
[[image:IMG_2549.JPG|thumb|220px|Sol]]
[[image:IMG_2547.JPG|thumb|220px|Altair]]
このように下から上へ向かうトレンドが、まず1つあります。
 
==== 上から下への流れ ====
高価なハードウェア上でもっと汎用的にプログラムを動かすために作られたシステムが1964年に作られたIBM S/360です。ここで始めて今日的なオペレーティングシステムが作られます。
汎用機という言葉は、この「汎用的にプログラムを動かすことができるシステム」という所から来ています。
  [[image:NASAComputerRoom7090.NARA.jpg|left|thumb|300px| 1962年にNASAで使われていた IBM 7090 の写真(NASAサイトより)<ref>NASA の著作権ポリシー http://www.jsc.nasa.gov/policies.html#Guidelines</ref>]]
このように必要な安全性を達成するには、下から上へ上がってきたようなレガシーなソフトウェアを切り捨てなければ困難こです。しかし、一方で膨大なソフトウェア資産があるわけです。この矛盾に終止符を打つのは大変長い時間がかかります。このように必要な安全性を達成するには、下から上へ上がってきたようなレガシーなソフトウェアを切り捨てなければ困難です。しかし、一方で膨大なソフトウェア資産があるわけです。この矛盾に終止符を打つのは大変長い時間がかかります。
しかし「最小限必要な」という定義は、かなり曖昧な表現です。なぜならば、ここには「誰が、どのように使うか」ということが抜けているからです。しかし「最小限必要な」という定義は、かなり曖昧な表現です。なぜならば、ここには「'''''誰が、どのように使うか'''''」ということが抜けているからです。
この部分を拡張していけば、たとえば「ワードブロセッシングを行いたい人が使うためのコンピュータ」という場合は「バンドルされているワードプロセッサのプログラムも含めてオペレーティングシステムである」という奇妙な結論が導かれてしまいます。
しかしながら、「パッケージを購入した時にバンドルされているものが最小限のセットであるので、これがオペレーティングシステムである」という誤解この「パッケージを購入した時にバンドルされているアプリケーション群が最小限のセットなので、これがオペレーティングシステムである」という誤解
<ref>
[http://ja.wikipedia.org/w/index.php?title=%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&oldid=29875236 日本語版wikipedia]ではウェブブラウザや時計などのアクセサリーも広義のオペレーティングシステムだということを書いていますが、そんなことをテストに書いて点数をくれる先生は極めて少数派でしょう。
は一般には多いようです。
もしこれが正しいとするならば、これではゲームのソリティアもオペレーティングシステムに含まれることになるので、やはり奇妙な結論と言えます。
このような表現での「最小パッケージ」とはGNU/Linuxのディストリビューションのデフォルトイントール環境にあたるもので、このオペレーティングシステムの定義を採用するとなると、世の中にはおびただしい数のオペレーティングシステムの種類<ref> オープンソース系オペレーティングシステムののディストリビューションを紹介する https://distrowatch.com には実に様々なディストリビューションが紹介されています。</ref>が存在することになります。このような定義を用いると、このような奇妙な結果が導き出されてしまうことになります。
一般的なUNIXシステムでは、GUIがなくても当然動きますし、サーバシステムではGUIなどは必須ではありません。もちろん先程のDebian GNU/Linux最小限セットの中にはX Window Systemは入っていません。逆にパーソナルコンピュータ用のオペレーティングシステムと呼ばれるものではウィンドウシステムは切り離すことができないコンポーネントとなっています。Systemは入っていません。逆にパーソナルコンピュータ用のオペレーティングシステムと呼び販売されているタイプのものではウィンドウシステムは切り離すことができないコンポーネントとなっています。
=== 揺らぐ定義 ===
[[File:Screenshot-Oracle VM VirtualBox.png|thumb|right|450px|コンソールでTOPを実行]]
右図は仮想マシンにVirtualBoxを使い、Debian 右図は仮想マシンに[https://www.virtualbox.org/ VirtualBox]を使い、[https://www.debian.org/ Debian GNU/Linux ] 6.0 を最小限インストールし立ち上げてみた状態です。
もちろんGUIはインストールしていません。なぜならGUIが存在しなくともきちんとコンピュータは動くからです。
Debian GNU/Linux 6.0はデスクトップやラップトップ、あるいはサーバに使われるディストリビューションで、組み込み用のものではありません。0 はデスクトップやラップトップ、あるいはサーバに使われるディストリビューションで、組み込み用のものではありません。topコマンドを使い、メモリや実行中のプロセスが、どのような状態になっているか観察してみました。top コマンドを使い、メモリや実行中のプロセスが、どのような状態になっているか観察してみました。用意しているメモリは128MBですが、この状態で使われている記憶領域は約26MBしか使っていません。用意しているメモリは 128MB ですが、この状態で使われている記憶領域は約 26MB しか使っていません。dfを使ってディスクの利用状況を見てみると、最小のインストールでは約645MBしか使っていません。df を使ってディスクの利用状況を見てみると、最小のインストールでは約 645MB しか使っていません。
最小限のセットを考えた場合、このように小さいメモリでも動くことができます。
この程度の資源でも(英文であれば、ですが)十分にテキストを編集し、スペルをチェックし、フォーマットし、さらにプリンタに出力ができます。
:'''捕捉''' さらに
:[[http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ Xen]]や[[http://www.vmware.com/ VMware]、[https://www.virtualbox.org/ VirtualBox]のようにハードウェア側を抽象化し、1つのハードウェア上に複数のオペレーティングシステムを動かすバーチャルマシンのシステムもあります。
==== 抽象化の例 ====
UNIXの上で次のコマンドを実行すると端末にHelloと表示されます。これは文字列UNIXの上で次のコマンドを実行すると端末にHelloと表示されます。これは文字列"Hello"を出力し、その出力先を ファイルを出力し、その出力先をファイル/dev/tty への入力するという働きをします。ファイル(デバイスファイルと呼びます)への入力するという働きをします。ファイル(デバイスファイルと呼びます)/dev/ttyというのは、tty端末を抽象化したものです。というのは、端末を抽象化したものです。
 <PREsyntaxhighlight lang="bash">
% echo "Hello" > /dev/tty
Hello
</PREsyntaxhighlight上の図で、プログラムA、B,....E、は、オペレーティングシステムから利用可能なリソースを割り当てられ、その中で実行しています。しかし、アプリケーションA、B,....は、割り当てられたリソースのコントロールを意識しません。例えば、プログラムがデータを補助記憶装置にファイルの形でデータを残そうとした時、プログラムが、補助記憶装置に使われているハードウェアを直接的にコントロールする必要はありません。 つまり、1つのプログラムは、1つの仮想化されたコンピュータで動いているように見えるわけです。
上の図で、プログラムA、B,....E、は、オペレーティングシステムから利用可能なリソースを割り当てられ、その中で実行しています。しかし、アプリケーションA、B,....は、割り当てられたリソースのコントロールを意識しません。
例えば、プログラムがデータを補助記憶装置にファイルの形でデータを残そうとした時、プログラムが、補助記憶装置に使われているハードウェアを直接的にコントロールする必要はありません。つまり、1つのプログラムは、1つの仮想化されたコンピュータで動いているように見えるわけです。
==== 不完全なリソース管理 ====
===== VFSからデバイスドライバまで =====
[[File:Filesystem-layer-1.png|thumb|right|400px|File System Layer]]
ファイルシステムをさらに抽象化するLinuxのファイルシステムを紹介しましょう。[[ファイルシステム]] をさらに抽象化するLinuxのファイルシステムを紹介しましょう。ファイルを書き込む説明で「ハードディスクに書き込む」という表現をみたことはないでしょうか。目の前にあるパソコン本体のみを考えるならば、このモノに書き出すというので説明は十分なのかも知れませんが、ファイルを書き込む・読み込むというのはもっと抽象的な動作をします。 Linuxのファイルシステムは、上位にVFS (Virtual File System)が存在し、その下に、FAX、ext4、JFS、XFS、NFS、その他のファイルシステムをもち、さらにその下にバッファキャッシュがあり、さらに下にデバイスドライバがあるといった、何重もの層を重ねる形になっています。が存在し、その下に、FAT、ext4、JFS、XFS、NFS、その他のファイルシステムをもち、さらにその下にバッファキャッシュがあり、さらに下にデバイスドライバがあるといった、何重もの層を重ねる形になっています。
プログラムは、Linuxのファイルを扱っているだけで、その下がFATのファイルシステムやJFSのファイルシステムであるか、あるいはネットワーク経由でファイルシステムを使うことができるNFSなのかを知らなくても利用することが可能です。
下層には、補助記憶装置との入出力効率を改善するために、バッファキャッシュというクッションをおいてあります。
さらなる下層には、ハードディスクやフラッシュメモリ (例えばUSBメモリやSDカードなど)といった記憶するためのハードウェア、あるいはNFSのようにネットワークを経由して使うためのネットワークハードウェアをコントロールするためのデバイスドライバの層があります。
ファイルの情報が最終的にハードディスクに書かれるとしても、ファイルを書き込む動作を行った時点で、まだハードディスクにかかれているわけではありません。
このようなことにより、たぶん一度や二度は経験したことがあるかも知れませんが、突然、機材の電源を停止すると永続的な情報を保持するためのエリア(ハードディスクやUSBメモリなど)にかかれていなかったファイルの情報は消えてしまうことになります。
 
<blockquote>
<syntaxhighlight lang="bash">
% sync;sync;sync
</syntaxhighlight>
 
sync
<ref>
syncを三回するのは "In the name of the Father, and of the Son, and of the Holy Spirit.(父と子と精霊の御名において)"と唱えて強制的にハードウェアリセットをするためだとむかし誰かに教わった。
</ref>
はバッファキャッシュなどにある情報を含めてすべてデバイスに同期させるコマンド。
</blockquote>
このように重層的な構造にすることによって、抽象化を図り、かつどの層が変化しようとも、上位の層がその違いを吸収するような形になっています。このような枠組みにより柔軟に機能・モジュールを追加、変更することが出来る仕組みになっています。このように重層的な構造にすることによって、抽象化を図り、かつどの層が変化しようとも、上位の層がその違いを吸収するような形になっています。またこのような枠組みにより柔軟に機能・モジュールを追加、変更することが出来る仕組みになっています。
== 脚注 ==