2014年3月23日日曜日

人で無しのための計算機理論入門 その6 基本ソフトの基本機能(OSのカーネルについて)

まだまだ寒かったり暑かったりですが、本日はよく晴れて春麗ら。連休最終日に好天に恵まれたか人出も多く、宛にしていた図書館の駐車場も満杯といった様子。どうしたものかと途方に暮れて喫茶店に入ったところです。

さて、今日は何をやるかというともちろんピクニックではありません。日本語では基本ソフトともいわれるオペレーションシステム(以下OS)の基本機能について簡単に触れたいと思います。この部分は縁の下の力持ちの部分ですので、あまり普段は意識して使っていないかもしれませんが、理解しておいても損はありません。

まず、OSの大まかな役割としては、前回の仮想メモリのお話でも分かるようにハードウエアの差異を吸収する、言い換えれば、ハードウエアを抽象化するという働きがまずあります。
それは、CPUから見たときのメモリばかりでなく、人間からみた場合もそうでした。細かいハードウエアの差異を吸収し、ほぼ同じような操作性を提供しています。

このほかに、CPUの処理能力やメモリを効率的に利用できるようにする、計算資源(一般にはリソースと呼ばれる場合も多い)の最適化ほか、入出力装置(IO)に関しての管理(パソコンに新しい機器を繋ぐとデバイスドライバをインストールしています、などと表示されますよね)などなど、さまざまな機能を持っています。

世の中に出回っているOSには、たくさんの種類があり色々なやり方で構成されていますが、どのOSにも共通している基本的な機能、言い換えれば、計算機のハードウエアに一番近い処理を管理するをプログラム群のことをカーネル(Kernel)と言い、基本的に次の4つの機能に分けることができます。


1.プロセスの管理
 プロセスというのは、計算機が処理を行う上で基本単位となりうるプログラムとデータのセットだと考えて下さい。

ほかに、計算機の処理における仕事の単位としてタスクというのがありますが、これは、人間からみた場合の計算機にやらせたい仕事の単位です。
以前にも少しお話ししましたが、CPUさんは単純なものすごく細かい処理を、1秒間に10億回といった単位で処理しています。一方、人間の入出力の単位はせいぜいマイクロ秒、ミリ秒単位でしょう。そのため、人間には気づかれないように、自分がやりやすいように処理を分割して、人間からは並列に見えるような程度に処理の時間を区切りつつ多数の処理をちょっとずつ行っていたりします。

したがって、人間が計算機に何かやってとお願いしているときとの仕事の単位と、実際に計算機が処理を行っているときに管理する仕事の単位とは全く別のものになります。
たとえば、スマートフォンのアプリ。これは、人間からみたら、一つのプログラムに見えますよね。でも実際にたくさんの機能があって、それぞれの機能も計算機側からみたらいくつもの種類に分けることが可能です。

このように、スマートフォンのアプリのように人間が計算機にやらせようと考える仕事の単位をタスク、計算機側からみた仕事の単位をプロセスといいます。

このプロセスの管理や、計算機資源の効率的な仕様、並列処理などのお話はまた稿を改めて詳しくお話しするつもりです。


2.メモリ管理
 メモリとCPUは計算機にはなくてはならないもの。このメモリの抽象化については、仮想メモリについて述べましたが、このほかに、メモリを管理する上で、別のプログラムが同じメモリ領域にアクセスしないようにするメモリの保護などというものもあります。


3.デバイス管理
 OSのカーネルはデバイスドライバという形で、計算機の付属する各入出力装置や、外部記憶装置、あるいはネットワーク機器など一般にデバイス(IT業界におけるデバイスの意味は広いので使い方が難しいですが、OSのカーネルについて触れる時は、CPUとメモリ以外の様々なIO装置群)を
動かすプログラムを保持、その動作を管理しています。

たとえば、ディスプレイやキーボードなどの基本的な入出力装置以外に、プリンタに出力を送りプリントが終わればユーザに知らせたりもします。このほかに、ネットワークやファイル・ディレクトリの管理など、 カーネルはそのようなIOの管理機能の基本的な部分を提供しています。


4.システムコール
 以上のようなカーネルの機能はもちろんプログラムで書かれています。しかし、カーネルはハードウエアと密接に関わる部分であるため、簡単にカーネルの処理にアクセスするようなプログラムを作ってそれに触れるようなことがあればコンピュータは正常に動かなくなってしまいます。そこで、一般には、通常、カーネルはOSもしくはCPUが提供する特権モードで動作し、特別な許可を持つユーザしか触れることしかできません。しかし、一方で、一般のユーザもハードウエアに近い部分できめ細かい作業を行いたい場合もあります。そのような場合に、安全にカーネルの機能を提供する為の機能がシステムコールです。

例として、Windows系のOSでは、Windows APIと言われるものがあり、C言語やVisual BASICのようなプログラム言語から関数して呼び出すことができるような形で提供されています。


今回は、少しややこしかったですね。私もだいぶ忘れているところも多くありましたので、今回は、ウキペディアの記事のいくつかを参考書として勉強させていただきました。機能の分類は比較的一般的になものであり、ほかに引用などそのまま使用した部分はありませんが、念のために記載しておきます。

ウキペディアでの参考記事
・カーネル   : http://ja.m.wikipedia.org/wiki/カーネル
・OS      : http://ja.m.wikipedia.org/wiki/オペレーティングシステム
・システムコール http://ja.m.wikipedia.org/wiki/システムコール

0 件のコメント:

コメントを投稿