コンピュータ・システムの構成

システム・プログラム

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/syspro-2000/2000-04-17
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html

■コンピュータの構成

■オペレーティング・システムの構成要素

UNIXオペレーティング・システムは、カーネル、サーバ、シェ ル、コマンド群、各種ライブラリ関数、といった要素から構成さ れている。

図? オペレーティング・システムの構成要素

図? オペレーティング・システムの構成要素

◆カーネル

カーネルkernel ) とは、直接ハードウェアを制御する、オペレーティング・システムの中心部 である。たとえば、ハードディスクやキーボードとの入出力を行ったり、ネットワー クを制御したりする。

UNIXのカーネルは、ファイル、プロセス、プロセス間通信といったシステムの 基本的な機能を提供する。具体的には、ファイルのアクセス権の確認、プロ セスの保護、CPU資源のスケジューリング、パイプ、ソケット、 TCP/IPによるプロセス間通信機能等がある。

◆シェル

シェル ( shell ) とは、カーネルを取り囲んでいる殻という意味である。シェルは、利用者と対話 を行い、利用者からの入力を解析し、それにしたがってプログラム(コマンド) を実行します。シェルのことを、 コマンド・インタプリタ (command interpreter ) と呼ぶこともある。

実験では、シェルを作ることで、システムの仕組みを学ぶ。

標準入力、標準出力、標準エラー、パイプによる結合、入出力の切り換えは、 シェルの仕事である。

◆コマンド群

コマンドcommand ) とは、利用者がシェルに与える指令である。UNIXのシェルは、指令を受け取っ ても、具体的な仕事をほとんど何もしない。cd, exit, set, umask のような、 自分自身の状態を変えたりプログラムの実行環境を変えるものを除いて、全部 外部のプログラムを実行する。シェル自身が実行するコマンドを 組込みコマンドbuilt-in command )、 そうでないものを 外部コマンド ) とう。

UNIXでは、ディレクトリの一覧表、ファイルのコピー、ファイルの画面への表 示といった基本的な仕事も、それぞれ ls, cp, cat といった名前の外部コマ ンドにより実行される。

◆システム・コールとライブラリ

UNIXを使って仕事をする人(利用者、ユーザ)にとって大事なものは、シェル とコマンドである。UNIXの上でプログラムを書く人 ( プログラマ ) プログラマにとって大事なことは、 システム・コール ( system call ) と ライブラリ ( library ) である。

システム・コールというのは、カーネル(システム)の機能を呼出すことである。 たとえば、ファイルの入力出力でいうと、単純な読込み read() や、単純な書 込み write() がシステム・コールである。システム・コールをより使いやすい 形にしたものが、ライブラリである。たとえば、ファイルの内容を1行読み込む fgets()や、書式付きの出力を行うprintf() などがライブラリになっている。

システム・コールもライブラリも、C言語からは、両方とも関数呼出しの形で 使えるようになっていて、一見、区別がつかない。ただしマニュアルを見ると、 システム・コールは2章、ライブラリは、3章に入っている。man コマンドで 見た時に、最初の行に"READ(2)"のように、"(2)" となっていれば、システム・ コール、"PRINTF(3)" のように、"(3)" になっていれば、ライブラリである。

システム・コールは、トラップ命令(trap instruction)を含んでいる。これ は、カーネルに制御を移す働きがある。この部分は、アセンブリ言語で書かれ ている。ライブラリ関数は、アセンブリ言語で書かかれているものもあるが、 大部分はC言語で書かれている。

システム・コールとライブラリの集合を API (Application Programming Interface) という。 たとえC言語で書かれていても、API が違うとコンパイルして機械語に変換す ることはできても、実行できない。

ライブラリやシステム・コールは、コンパイルされてオブジェクト・コードの 形で保存されている。これらは、実行形式を作る時に 抜き出され、アプリケーション・プログラマから作成した オブジェクト・コードと結合される。この操作を、 リンク(link) ( リンケージ・エディット(linkage edit)結合編集 ) という。

リンクには、静的リンクと動的リンクの2種類がある。 静的リンク(static link) では、プログラム実行する前(実行形式を作成する時点)で、ライブラリ関数の 呼出しをすべて機械語の手続き呼び出し命令にしたり、データへの参照を絶対 番地に変換する。 動的リンク(dynamiclink) では、プログラム実行中に必要に応じてリンク処理を行う。

動的リンクを行う時には、しばしば 共有ライブラリ(shared library) を使う。これは、複数のプロセスで共通に使うライブラリを動的リンクで共有 するものである。動的リンクを使うことで、実行時の環境に応じてプログラム の動きを変えることができる。この機能を使って、たとえば、古いバージョン のシステムでコンパイルされた実行形式をバージョンのシステムで動作させる ことができる。また、共有ライブラリを使うと、1つひとつの実行形式が小さ くなるので、メモリの節約にななる。

◆デーモン

デーモン ( daemon ) とは、本来オペレーティング・システムの一部であるが、他のプログラムと 同じようにプロセスとして活動しているプログラムである。たとえば、プリント・ デーモンは、カーネルと同じように、いろいろな利用者からの仕事(プリント) を請け負う。デーモンというのはUNIXの言葉で、一般的には、 サーバ・プロセス ( server process ) とう。これは、サービスを提供するプロセスを意味する。

◆ウィンドウ・システム

最近では、 GUI(Graphical User Interface) を提供するコンピュータが普通である。GUIを提供するための中心的なシス テムであるウィンドウ・システムである。ウィンドウ・システムも、シェルに 並んでコンピュータの利用者に対する見え方を決定する重要な要素である。

ウィンドウ・システムは、オペレーティング・システムとは独立した存在とし て扱わることもありますが、目的や役割を考えるとオペレーティング・システ ムと共通している。

O2 で動いているウィンドウ・システムは、Xウィンドウである。Xウィンド ウでは、モニタやキーボードを管理するサーバ・プロセスとそれらを利用する クライアント・プロセスに分かれている。

この講義では、ウインドウ・システムについては扱わない。
↑[もどる] ・[4月17日] →[4月24日]
Last updated: 2000/04/16 20:05:48
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>