オペレーティングシステム2004 プロセス (1) 2004年10月8日 海谷 治彦.

Slides:



Advertisements
Similar presentations
システムプログラミング 第11回 シグナル 情報工学科 篠埜 功. 今回の内容 前回の補足( exit システムコールについ て) プロセス間通信 – シグナルの送信 --- 今回の内容 – パイプによる通信 – ソケットによる通信.
Advertisements

ネットワーク・プログラミ ング カーネルの役割とプロセス生成. 1.1 OS の役割 仮想マシン OS はハードウェアの多様性 をカプセル化し、利用者を 複雑な処理から開放する。 プロセス管理 時間多重化により各プロセ スに CPU を割当てる。 メモリ管理 メモリ空間の多重化により、 各プロセスにメモリを割当.
プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
システムプログラミング 第10回 情報工学科 篠埜 功. 今回の内容 プロセス(続き) – execve システムコール 現在のプロセスを、引数に与えられたファイル(実行 形式ファイルあるいはシェルスクリプト等の実行可能 なファイル)を受け取り、現在のプログラムをそれで 置き換える(変身)。 fork.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
社会人学習講座 「Javaプログラミング概論」
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
シェル シェルスクリプト 最低限vi 山下 達也 (北大理・宇宙理学専攻) INEX 第4回/最低限 UNIX(Linux) その3
シェル シェルスクリプト 最低限vi 山下 達也 (北大理・宇宙理学専攻) INEX 第4回/最低限 UNIX(Linux) その3
物理実験 I 情報実験第9回 2004/12/10 小西 丈予 2003/12/12 中神 雄一
東京工科大学 コンピュータサイエンス学部 亀田弘之
Java I 第2回 (4/18)
コンピュータリテラシー 第3回授業の復習 基本的なUNIXコマンド
システムプログラミング 第6回、7回 main関数の引数 usageメッセージ システムコールのエラーメッセージ ファイル
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
山田 由貴子 (北大理・地球惑星科学専攻) 2004年10月29日
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
第8回ネットワークプログラミング 中村 修.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
小型デバイスからのデータアクセス 情報処理系論 第5回.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
実習1:コマンドシェルの使い方.
Linuxカーネルについて 2014/01.
Telnet, rlogin などの仮想端末 ftp などのファイル転送 rpc, nfs
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
Linux リテラシ2006 第6回 デーモン CIS RAT.
オペレーティングシステム デーモン・サービス
スレッドとプロセス 本題: スケジューリング
RMI ソフトウェア特論 第6回 /
アスペクト指向プログラミングを用いたIDSオフロード
オペレーティングシステム2004 プロセス (2) および カーネルモード・システムコール
C言語でスレッド (Pthread) 2007年1月11日 海谷 治彦.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
ファイル入出力と プロセス間通信 (2) 2004年12月16日 海谷 治彦.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
オペレーティングシステム2006 第1回 概要 2006年10月12日 海谷 治彦.
マルチスレッド処理 マルチプロセス処理について
OSの仕組みとその機能 1E16M001-1 秋田 梨紗 1E16M010-2 梅山 桃香 1E16M013-3 大津 智紗子
プログラミング 4 記憶の割り付け.
実行時情報に基づく OSカーネルのコンフィグ最小化
オペレーティングシステム イントロダクション
演習1の解答例の解説 2004年10月21日 海谷 治彦.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
演習1の解答例の解説 2006年11月8日 海谷 治彦.
JXTA Shell (1) P2P特論 (ソフトウェア特論) 第4回 /
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
JXTA Shell (2) P2P特論 (ソフトウェア特論) 第5回 /
オペレーティングシステム i386アーキテクチャ(1)
B演習(言語処理系演習)第2回 田浦.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
プログラムが実行されるまで 2002年4月14日 海谷 治彦.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
情報処理Ⅱ 2005年1月25日(火) レポート課題2の解説.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
ネットワーク・プログラミング デバイスドライバと環境変数.
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
ネットワーク・プログラミング Linuxシステムとソフトウェア開発.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
X Window System 牧之内研 博士3年 木村健一郎.
ネットワーク・プログラミング マルチタスク.
情報処理Ⅱ 2005年11月25日(金).
ネットワーク・プログラミング プロセスとファイルシステム管理.
モバイルプログラミング第3回 Cプログラミングの基礎( 2 )
Presentation transcript:

オペレーティングシステム2004 プロセス (1) 2004年10月8日 海谷 治彦

目次 アプリケーションプログラムの動作 プロセスの意味の復習 カーネル (復習) カーネル内でのプロセス プロセスの作成 プロセスの停止と削除 リソース その他,雑多な用語の話

アプリの動かし方 Linuxの例 ターミナルから実行可能プログラムのパス名を打つ.

アプリの動かし方 Winの例1 基本的にはアイコンをつっつくとアプリが起動できる.

アプリの動かし方 Winの例2 実はWindowsでもコマンドを指定してプログラムを起動できる.

プログラムの処理の流れ プログラムがメモリに読み込まれる. 計算に必要なメモリも確保される.(変数等のため) プログラム CPU 必要ならば,デバイス(ファイル等)にアクセスする. CPU プログラム メモリ 変数等 ディスク アーキテクチャの授業等 の復習ですな.

プロセス 処理中のプログラム. プログラムのインスタンス. 全頁の「メモリに読み込まれたプログラムとデータ」に対応する概念. 1つのプログラムをもとに複数のプロセスが発生するため,プログラムとは概念的に区別される. 以下の対比でイメージを得て!

Linuxでの実際 プロセスが計算を実行するためには資源が必要,少なくともメモリとCPUは必要. 1つのプログラムをもとに多数のプロセスが生成されている. 無論,実行可能なプログラムは多数ある. 沢山のプロセスが同時に動いている(ように見える). プロセスの生成と消滅が繰り返されている. OSを通して業務(アプリの実行)するので当たり前か. プロセスの寿命はまちまち. ls は一瞬で終わるが,httpdは何日も動いている.

プロセス管理の(kernelへの)要件 どんなプロセスが存在するのかを記録しておかなければならない. 資源分配のため. プロセスの生成と削除ができなければならない. 生成・削除の要求を出すのはカーネルとはかぎらない. プロセスが計算するのに必要な資源(メモリ,CPUなど)を各プロセスに割り当てあげないといけない. 特にCPUを使える(計算をできる)順番をスケジュールしないといけない. 一般にプロセスの数の方がCPUの数(普通1つ)より多い.

マルチプロセス 昨今のOSは同時に複数のプロセスを実行することができる. まずは,ある時点でどんなプロセスがいくつ動作しているかを観察する. 例えば,音楽を聞きながらワープロで文章が書ける. まずは,ある時点でどんなプロセスがいくつ動作しているかを観察する.

Linuxでのプロセスの観察1 psコマンドはプロセスの状態を 安易?に観察するツールである.

Linuxでのプロセスの観察2 top というコマンドでも観察できる.

Winでのプロセスの観察 タスクマネージャーから動作しているプロセスを観察できる. (通常,Ctrl・Alt・Delのキーを同時に押すと出てくる.)

プロセスの生成 一般的にUNIXでは,すでに存在するプロセスの複製をつくり,複製の内容を作り変えることで,新しいプロセスを生成する. この複製もとになっているプロセスを通常,「親プロセス」と呼ぶ.

プロセスの親子関係の例 ある日,あるマシンのプロセスを抜粋 (ps –ef) 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 ある日,あるマシンのプロセスを抜粋 (ps –ef)

読み方 上の場合,下の図のような親子関係 inetd になっている.子は親の複製がもとになっている. in.rlogind login 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 …

最初のプロセス 複製をもとにプロセスが生成されると,最初にタネになるプロセスがないとはじまらない. Linuxには以下の2つのタネになるプロセスがある. プロセス0 Swapper, 初期化プロセス等とよばれ,カーネル内の変数等の初期化をする. プロセス1 Init ほとんどすべてのプロセスの先祖となる

最初のプロセスの実際 プロセス0 Swapper プロセス1 init 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]

どうやって複製を作るか? forkシステムコールを利用 cloneシステムコールを利用 実際に複製を作成する関数. man fork 参照 親と一部のデータを共有する子プロセスを作成する関数. 上記のforkより処理が軽い. 本講義ではとりあず扱わない.

forkのサンプルプログラム (抜粋) 1| void showchar(char c){ 2| // 省略 3| } 4| 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| 13| }

fork()関数の実行 この実行が行われた時点でプロセスのコピーが作成される. 返り値=0: 子供 返り値>0: オリジナル,値は子供のプロセスID それ以外: fork()失敗. 前述の例では,if文の最初の条件が成り立った分岐は子の処理の流れ,次の分岐がオリジナルの流れとなる. 原則,分岐した流れは併合することはない.

fork1.cの説明 単純に自分の複製を作成するプログラム. プログラム自体は文字cを1秒おきに20個画面に表示するダケの関数 showchar(c)を実行しているだけ. しかし親プロセスと子プロセスで異なる文字を表示するため,プロセスが複製されたことがわかる.

fork1.c の実行と観察 単にコンパイルすれば動きます. 動作させて二つの文字が表示されるのを確認する. Cygwinでも動きました. 動作させて二つの文字が表示されるのを確認する. 同時にpsコマンド(ps –lx)で同じ名前のプロセスが存在し, 親子関係があるのを確認する.

shellの実体 プロセス複製器 tcshの例 bashの例 コマンド名をいれるとプログラムが実行されるのは,シェルといわれるプロセス複製プログラムと対話していることになる. 文献1 p.81, shellは自分で作れる!

fork2.c 簡単なshell 文字入力をコマンドとみたてて,その実行を行うプログラム. bashやtcshも基本的にはこの構成. プロセス生成・消滅機構の簡単な例. 観察事項 確かに他のコマンドを呼び出せるかを確認. 呼び出されたコマンドともとのプログラムに親子関係があるかを ps –xl 等で確認. 親が10秒待つようにコードをかいてある.

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| }

ライブラリ関数 execl 実行中のプロセスを他のプログラムに作り変える関数. システムコール execveを簡易に使えるようにしたもの.(フロントエンド) 詳細はマニュアルを参照. execlpとexeclvとか仲間の関数が多数ある. 詳細は次回に.

システムコール wait 子プロセスの実行終了を待つための関数. 同時に子プロセスの利用していた資源の解放も行う. コレによって子プロセスは完全に消滅する. コレをしないとゾンビ(後述)が残る場合がある.

プロセスの消滅とゾンビ 計算が終わるとプロセスも消滅し,カーネル内から削除される・・・・はずである. しかし,(死んだ)子供の情報に親がアクセスする場合をUNIXは想定しているので,計算が終わったのにプロセスのデータが残っているという状態が起こる. この状態を,ゾンビ状態という.

ゾンビの例 詳細は zombie.c を参照.

以下は雑多な用語の解説

アンケートで目についた用語 ADT BSD SVR4 Darwin Cygwin CUI / GUI IEEE POSIX kernel システムコール リソース Daemon DNS FTP cftp

リエントラント (再入可能) メモリにロードされた時点でも,複数のプロセスが共有可能なプログラムの性質. 文献2 p.82, 文献5 p.26 リエントラント (再入可能) メモリにロードされた時点でも,複数のプロセスが共有可能なプログラムの性質. コード側にデータ(static変数のようなもの)がなければ,普通リエントラント. コード (データは 含まれない) プロセス 1 データ プロセス 2 データ

80386 インテル社のCPUで,現在広く使われているペンティアム等の直系の祖先となる. 現在のインテル系CPUの基礎的技術が確立されたCPU. i386とかx86とか80x86とかIA32とかいう略称は,すべて80386とその子孫(ペンティアム等)を指す. 今日はおしまい