• 検索結果がありません。

オペレーティングシステム2003 第2回:

N/A
N/A
Protected

Academic year: 2021

シェア "オペレーティングシステム2003 第2回:"

Copied!
34
0
0

読み込み中.... (全文を見る)

全文

(1)

1

オペレーティングシステム

2004

プロセス

(1)

2004年10月8日

海谷 治彦

(2)

2

目次

• アプリケーションプログラムの動作

• プロセスの意味の復習

• カーネル (復習)

• カーネル内でのプロセス

• プロセスの作成

• プロセスの停止と削除

• リソース

• その他,雑多な用語の話

(3)

3

アプリの動かし方

Linuxの例

(4)

4

アプリの動かし方

Winの例1

(5)

5

アプリの動かし方

Winの例2

実は

Windowsでもコマンドを指定してプログラムを起動で

きる.

(6)

6

プログラムの処理の流れ

• プログラムがメモリに読

み込まれる.

• 計算に必要なメモリも確

保される.(変数等のため

)

• CPUがプログラムを順に

読んで,計算をする.

• 必要ならば,デバイス(ファ

イル等

)にアクセスする.

メモリ

CPU

アーキテクチャの授業等

の復習ですな.

ディスク

(7)

7

プロセス

• 処理中のプログラム.

• プログラムのインスタンス.

• 全頁の「メモリに読み込まれたプログラムとデー

タ」に対応する概念.

• 1つのプログラムをもとに複数のプロセスが発生

するため,プログラムとは概念的に区別される.

• 以下の対比でイメージを得て!

書き物

実行

ソフトウェア

プログラム プロセス

音楽

譜面

演奏

(8)

8

Linuxでの実際

• プロセスが計算を実行するためには資源が必要,

少なくともメモリと

CPUは必要.

• 1つのプログラムをもとに多数のプロセスが生成

されている.

• 無論,実行可能なプログラムは多数ある.

• 沢山のプロセスが同時に動いている(ように見え

).

• プロセスの生成と消滅が繰り返されている.

OSを通して業務(アプリの実行)するので当たり前か.

• プロセスの寿命はまちまち.

ls は一瞬で終わるが,httpdは何日も動いている.

(9)

9

プロセス管理の

(kernelへの)要件

• どんなプロセスが存在するのかを記録しておか

なければならない.

資源分配のため.

• プロセスの生成と削除ができなければならない.

生成・削除の要求を出すのはカーネルとはかぎらない.

• プロセスが計算するのに必要な資源(メモリ,CPU

など

)を各プロセスに割り当てあげないといけな

い.

• 特にCPUを使える(計算をできる)順番をスケジュー

ルしないといけない.

一般にプロセスの数の方が

CPUの数(普通1つ)より多い.

(10)

10

マルチプロセス

• 昨今のOSは同時に複数のプロセスを実行

することができる.

– 例えば,音楽を聞きながらワープロで文章が

書ける.

• まずは,ある時点でどんなプロセスがいく

つ動作しているかを観察する.

(11)

11

Linuxでのプロセスの観察1

psコマンドはプロセスの状態を

安易?に観察するツールである.

(12)

12

Linuxでのプロセスの観察2

(13)

13

Winでのプロセスの観察

タスクマネージャー

から動作しているプ

ロセスを観察できる.

(通常,Ctrl・Alt・Del

のキーを同時に押

すと出てくる.

)

(14)

14

プロセスの生成

• 一般的にUNIXでは,すでに存在するプロ

セスの複製をつくり,複製の内容を作り変

えることで,新しいプロセスを生成する.

• この複製もとになっているプロセスを通常,

「親プロセス」と呼ぶ.

(15)

15

プロセスの親子関係の例

UID PID PPID C STIME TTY TIME CMD root 1 0 0 Aug27 ? 00:00:05 init

root 2 1 0 Aug27 ? 00:00:00 [kflushd] root 3 1 0 Aug27 ? 00:00:01 [kupdate] root 4 1 0 Aug27 ? 00:00:00 [kpiod] root 5 1 0 Aug27 ? 00:00:04 [kswapd]

root 6 1 0 Aug27 ? 00:00:00 [mdrecoveryd] root 47 1 0 Aug27 ? 00:00:00 [khubd]

root 547 1 0 Aug27 ? 00:00:02 /usr/sbin/sshd root 940 547 0 23:18 ? 00:00:00 /usr/sbin/sshd kaiya 941 940 0 23:18 pts/0 00:00:00 -csh

kaiya 1013 941 0 23:23 pts/0 00:00:00 ps -ef kaiya 968 941 0 23:19 pts/0 00:00:00 vi a.c root 538 1 0 Aug27 ? 00:00:00 inetd

root 983 538 0 23:22 ? 00:00:00 in.rlogind

root 984 983 0 23:22 pts/1 00:00:00 login -- kaiya kaiya 985 984 0 23:22 pts/1 00:00:00 -bash

kaiya 1012 985 3 23:23 pts/1 00:00:00 emacs Foo.java

(16)

16

読み方

UID PID PPID C STIME TTY TIME CMD root 538 1 0 Aug27 ? 00:00:00 inetd

root 983 538 0 23:22 ? 00:00:00 in.rlogind

root 984 983 0 23:22 pts/1 00:00:00 login -- kaiya kaiya 985 984 0 23:22 pts/1 00:00:00 -bash

kaiya 1012 985 3 23:23 pts/1 00:00:00 emacs Foo.java

1行が1プ ロセス プロセスのもととなっ たコマンド名 自プロセ スの番号 親プロセ スの番号

inetd

in.rlogind

login

bash

上の場合,下の図のような親子関係

になっている.子は親の複製がもとになっている.

emacs …

(17)

17

最初のプロセス

• 複製をもとにプロセスが生成されると,最

初にタネになるプロセスがないとはじまら

ない.

• Linuxには以下の2つのタネになるプロセス

がある.

– プロセス0 Swapper, 初期化プロセス等とよば

れ,カーネル内の変数等の初期化をする.

– プロセス1 Init ほとんどすべてのプロセスの先

祖となる

(18)

18

最初のプロセスの実際

• プロセス0 Swapper

– init/main.c の中の,start_kernel(void)関数が実体.

• プロセス1 init

– init/main.c の,init(void * unused)関数が実体.

– init/main.c の中の一番最後に記述されている.

• ゼロからLinuxが起動するあたりの話は別の回

にやりますが,文献

10あたりがイイカンジ.

UID PID PPID C STIME TTY TIME CMD root 1 0 0 Aug27 ? 00:00:05 init

root 2 1 0 Aug27 ? 00:00:00 [kflushd] root 3 1 0 Aug27 ? 00:00:01 [kupdate] root 4 1 0 Aug27 ? 00:00:00 [kpiod] root 5 1 0 Aug27 ? 00:00:04 [kswapd]

(19)

19

どうやって複製を作るか?

• forkシステムコールを利用

– 実際に複製を作成する関数.

– man fork 参照

• cloneシステムコールを利用

– 親と一部のデータを共有する子プロセスを作

成する関数.

– 上記のforkより処理が軽い.

– 本講義ではとりあず扱わない.

(20)

20

forkのサンプルプログラム (抜粋)

1| void showchar(char c){

2| // 省略

3| }

4|

5| main(int argc, char* argv[]){

6| pid_t ch;

7| if((ch=

fork

())==0){ // child

8| showchar('c');

9| }else if(ch>0){ // parent

10| showchar('p');

11| }

12|

(21)

21

fork()関数の実行

• この実行が行われた時点でプロセスのコピーが

作成される.

• 実行後,自分がコピー(子供)かオリジナルかは

fork()の返り値でわかる.

– 返り値=0: 子供

– 返り値>0: オリジナル,値は子供のプロセスID

– それ以外: fork()失敗.

• 前述の例では,if文の最初の条件が成り立った

分岐は子の処理の流れ,次の分岐がオリジナル

の流れとなる.

• 原則,分岐した流れは併合することはない.

(22)

22

fork1.cの説明

• 単純に自分の複製を作成するプログラム.

• プログラム自体は文字cを1秒おきに20個

画面に表示するダケの関数

showchar(c)を

実行しているだけ.

• しかし親プロセスと子プロセスで異なる文

字を表示するため,プロセスが複製された

ことがわかる.

(23)

23

fork1.c の実行と観察

• 単にコンパイルすれば動きます.

– Cygwinでも動きました.

• 動作させて二つの文字が表示されるのを

確認する.

• 同時にpsコマンド(ps –lx)で同じ名前のプロ

セスが存在し,

• 親子関係があるのを確認する.

(24)

24

shellの実体 プロセス複製器

tcshの例

bashの例

コマンド名をいれるとプログラムが実行されるのは,シェ

ルといわれるプロセス複製プログラムと対話していること

になる.

文献

1 p.81, shellは自分で作れる!

(25)

25

fork2.c 簡単なshell

• 文字入力をコマンドとみたてて,その実行

を行うプログラム.

• bashやtcshも基本的にはこの構成.

• プロセス生成・消滅機構の簡単な例.

• 観察事項

– 確かに他のコマンドを呼び出せるかを確認.

– 呼び出されたコマンドともとのプログラムに親

子関係があるかを

ps –xl 等で確認.

• 親が10秒待つようにコードをかいてある.

(26)

26

fork2.c の概要

1| main(int argc, char* argv[]){

2| pid_t ch; char buf[100];

3|

4| while(fgets(buf, 100, stdin)!=NULL){

5|

buf[strlen(buf)-1]='¥0';

6| if((ch=

fork

())==0){ // child

7|

execl

(buf, buf, NULL); //

execve

を呼ぶ

8| }else if(ch>0){ // parent

9| sleep(10);

10|

printf("done %d¥n", ch);

11|

wait

(0);

12| }

13| }

14|

15| }

(27)

27

ライブラリ関数

execl

• 実行中のプロセスを他のプログラムに作り

変える関数.

• システムコール execveを簡易に使えるよう

にしたもの.

(フロントエンド)

• 詳細はマニュアルを参照.

• execlpとexeclvとか仲間の関数が多数ある.

• 詳細は次回に.

(28)

28

システムコール

wait

• 子プロセスの実行終了を待つための関数.

• 同時に子プロセスの利用していた資源の

解放も行う.

– コレによって子プロセスは完全に消滅する.

– コレをしないとゾンビ(後述)が残る場合がある.

(29)

29

プロセスの消滅とゾンビ

• 計算が終わるとプロセスも消滅し,カーネ

ル内から削除される・・・・はずである.

• しかし,(死んだ)子供の情報に親がアクセ

スする場合を

UNIXは想定しているので,

計算が終わったのにプロセスのデータが

残っているという状態が起こる.

• この状態を,ゾンビ状態という.

(30)

30

ゾンビの例

(31)

31

(32)

32

アンケートで目についた用語

• kernel

• システムコール

• リソース

• Daemon

• DNS

• FTP

• cftp

• ADT

• BSD

• SVR4

• Darwin

• Cygwin

• CUI / GUI

• IEEE

• POSIX

(33)

33

リエントラント

(再入可能)

文献

2 p.82, 文献5 p.26

• メモリにロードされ

た時点でも,複数

のプロセスが共有

可能なプログラム

の性質.

• コード側にデータ

(static変数のような

もの

)がなければ,

普通リエントラント.

コード

(データは

含まれない

)

データ

データ

プロセス 1 プロセス 2

(34)

34

80386

• インテル社のCPUで,現在広く使われてい

るペンティアム等の直系の祖先となる.

• 現在のインテル系CPUの基礎的技術が確

立された

CPU.

• i386とかx86とか80x86とかIA32とかいう略

称は,すべて

80386とその子孫(ペンティア

ム等

)を指す.

今日はおしまい

参照

関連したドキュメント

⑴ 次のうち十分な管理が困難だと感じるものは ありますか。 (複数回答可) 特になし 87件、その他 2件(詳細は後述) 、

ヒュームがこのような表現をとるのは当然の ことながら、「人間は理性によって感情を支配

て当期の損金の額に算入することができるか否かなどが争われた事件におい

システムであって、当該管理監督のための資源配分がなされ、適切に運用されるものをいう。ただ し、第 82 条において読み替えて準用する第 2 章から第

「欲求とはけっしてある特定のモノへの欲求で はなくて、差異への欲求(社会的な意味への 欲望)であることを認めるなら、完全な満足な どというものは存在しない

・条例第 37 条・第 62 条において、軽微なものなど規則で定める変更については、届出が不要とされ、その具 体的な要件が規則に定められている(規則第

の主として労働制的な分配の手段となった。それは資本における財産権を弱め,ほとん

 筆記試験は与えられた課題に対して、時間 内に回答 しなければなりません。時間内に答 え を出すことは働 くことと 同様です。 だから分からな い問題は後回しでもいいので