プロセス

システム・プログラム

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

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

プロセス

プロセスとは

プログラムとプロセス

プロセッサ(CPU)が実行できる機械命令の列がプログラムである。 プロセスとは、プログラムがオペレーティング・システムによってメモリに読 み込まれ、やはりオペレーティング・システムの管理下にあるプロセッサによっ て実行の対象になったものである。

メモリにプロセスが3つ、UNIXカーネル、ハードディスク、CPU

プログラムとプロセス

プロセスには、保護、資源割り当てのような機能がある。

保護

あるプロセスが 暴走 して他のプロセスを破壊したり、あるいは、意図的に他のプロセスからデータ を盗もうとしたとしても、それを禁止してプロセスを守ることをプロセスの保 護という。プロセスを保護するためには、プロセスが直接他のプロセスのメモ リなどにアクセスできないようにプロセスとプロセスを隔離する。Unix では、 基本的にはプロセスごとに独立した論理アドレス空間を割り当てることで実現 している。

資源割当て

資源とは、 メモリ、ディスク、プリンタ、ディスプレイ、キーボードなど コンピュータが処理を進める上で利用価値のあるものを総称である。 プロセスは、資源を公平に配分するための単位としての役割がある。

プロセスの操作

プロセスの操作には次のようなものがある。

プロセスを作ろう==プログラムを実行しよう

シェルにコマンドを与えると、それに対応したプロセスが作られ、 その結果コマンドが実行される。 (ただし、cdやsetなどのシェルの内部コマンドではプロセスは作られない。) 例えば、lsコマンドを与えると、 新しいプロセスが作られ、ls というプログラム ( /bin/ls/usr/bin/ls などのファイルに保存されている ) がメモリに読み込まれて実行される。 Xウインドウでメニューから ktermを起動すると、ktermのプロセスとその端末 の中で動くシェルのプロセスの2つが作られる。

プロセスの観察

プロセスの属性

YHM_EKeyword_Define(ps.ek,ps(process),ps) コマンドを実行すると、プロセスの一覧を表示する。 psコマンドの表示の例を示す。
----------------------------------------------------------------------
% ps [←]
   PID TTY     TIME CMD
  9086 ttyq1   0:00 cat 
  9084 ttyq1   0:00 emacs 
  9123 ttyq1   0:00 ps 
  9072 ttyq1   0:01 tcsh 
% []
----------------------------------------------------------------------
psコマンドの実行結果は1行が1プロセスである。 左から、以下のような意味がある。
PID (プロセス識別子)
プロセスを区別するための16ビットの整数。0〜65535、または、0〜32767の範囲。
TTY (端末名)
プロセスがどの端末と結びつけられているかを示している。 端末 /dev/ttyq1ttyq1の意味。
TIME
CPU時間 (CPUがそのプロセスを実行するために費やした時間)。
COMMAND
そのプロセスを起動した時のコマンド。

プロセスと資源

プロセスにはメモリやCPUなどの資源が割り当てられる。 これはpsコマンドに-lオプションをつけると表示される。
----------------------------------------------------------------------
% ps -l [←]
  F S   UID   PID  PPID  C PRI NI  P    SZ:RSS      WCHAN TTY     TIME CMD
 b0 T  1231  9155  9153  0  60 20  *   462:106          - ttyq1   0:00 man 
 b0 T  1231  9086  9072  0  60 20  *    50:28           - ttyq1   0:00 cat 
 b0 T  1231  9084  9072  0  60 20  *  2114:849          - ttyq1   0:00 emacs 
 b0 T  1231  9153  9072  0  60 20  *   462:108          - ttyq1   0:01 man 
 b0 R  1231  9161  9072  4  62 20  0   405:160          - ttyq1   0:00 ps 
 b0 T  1231  9156  9155  0  60 20  *    78:44           - ttyq1   0:00 sh 
 b0 T  1231  9157  9156  0  60 20  *   519:210          - ttyq1   0:00 less 
 b0 S  1231  9072  9070  1  39 20  *   703:324   8027eb80 ttyq1   0:01 tcsh 
% []
----------------------------------------------------------------------
TIME は過去に利用した CPU 時間の割合、 SZ は、プロセスが確保しているメモリ、 RSSは、そのうちメインメモリに入っている部分である。

S は、 プロセスの YHM_NKeyword_Define(state-processnk,状態,じょうたい(ぷろせすの)) (YHM_EKeyword_Define(state-process.ek,STATe,state(process))) であり、次のようなものがある。

R (runnable)
実行可能な状態。CPUが空いていれば実行できる。
D (Disk)
ディスク入出力を行ない、その完了を待っている状態。
S (Sleep)、I (I)
キーボードや他のプロセスからの入力を待っている状態。
Z (Zombie)
既に終了していて、終了処理の完了を待っている。
T (Traced)
一時的に停止しているか、デバッグの対象になっている。
Irix には、そのほかに 0, X などがある。

プロセスの親子関係

Unix では、後で説明する fork() システムコールを 発行すると、新しくプロセスが作られる。 (Unix では、これ以外の方法ではプロセスは作られない。) この時、「もとのプロセス」の「親プロセス」という。 プロセスの親プロセスのプロセス識別子は、psコマンドに「-l」オプションを つけるとPPIDのところに表示されている。
↑[もどる] ←[4月24日] ・[5月01日] →[5月08日] [課題]
Last updated: 2000/04/30 20:27:51
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>