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

Similar documents
オペレーティングシステム2004 プロセス \(1\)

オペレーティングシステム 第9回: デーモン・サービス

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

ファイル入出力と プロセス間通信 \(2\)

演算増幅器

OS

計算機のリソースとは 1.CPU 2. 主記憶 3. 補助記憶装置 の抽象化

PowerPoint プレゼンテーション

Microsoft PowerPoint - スハ?コン利用入門_ _UNIX利用の基礎知識.pptx

スレッドとプロセス

OS

01-introduction.ppt

TOMOYO Linuxを体験しよう

スクールCOBOL2002

PowerPoint Presentation

XEN 仮想マシンの移植 Islandcenter.jp 2009/04/14 既に作成済みの XEN 仮想マシンを移植する方法を説明します 仮想マシンイメージは 通常 /var/lib/xen/image/myvmachine に作成されていますが このファイルを tar 圧縮してリムーバブルメデ

Microsoft PowerPoint - InfPro_I6.pptx

Microsoft PowerPoint - kougi9.ppt

OS

目次

04-process_thread_2.ppt

第 3 回情報基礎演習 UNIX / Linux: ファイルシステム シェルを理解しよう! 谷口貴志 Panda に login し 情報基礎演習クラスの VDI から Ubuntu に接続し Linux に login した後, 左 上の Activity 端末のアイオン をクリック 端末 を立ち

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

Islandcenter.jp SUSE Linux Enterprise Server の XEN GUI とコマンドの相関 ここでは SUSE Linux Enterprise Server 10 に実装された YaST の Virtual Machine Manager と 一般に良く知られて

プレポスト【解説】

スライド 1

PowerPoint Presentation

C#の基本

OS

Microsoft PowerPoint - OS07.pptx

gengo1-12

PowerPoint プレゼンテーション

memo

PowerPoint Presentation

Microsoft PowerPoint - kougi11.ppt

Microsoft PowerPoint - kougi4.ppt

プログラミング基礎

Prog1_12th

Micro Focus Enterprise Developer チュートリアル メインフレーム COBOL 開発 : MQ メッセージ連携 1. 目的 本チュートリアルでは CICS から入力したメッセージを MQ へ連携する方法の習得を目的としています 2. 前提 使用した OS : Red H

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

para02-2.dvi

目次 1 はじめに 2 pfile の設定パラメータ (1) 基本パラメータ (2) オプションパラメータ 3 再起動スクリプトの記述方法 4 pcheck の起動 停止 (1) コマンドラインからの起動 (2) rc からの起動 5 運用管理 (1) 監視の一時停止 再開コマンド (2) 監視状態

10-vm1.ppt

はしがき 本書は CLUSTERPRO MC ProcessSaver 1.0 for Linux ( 以後 ProcessSaver と記載します ) に よるプロセス監視の基本的な動作について記載したものです (1) 商標および商標登録 Linux は Linus Torvalds 氏の米国およ

JDK のインストール (2012 年 8 月時点でのバージョン ) Java の実行環境 開発環境は さまざまな企業 団体が開発 配布を行っているが 当テキストでは Java の生みの親である Sun MicroSystems 社 ( 現 Oracle 社 ) の実行環境 開発環境を使用する Ja

2006年10月5日(木)実施

file:///D|/C言語の擬似クラス.txt

Microsoft PowerPoint - dev1.ppt

gengo1-12

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

Microsoft Word - CygwinでPython.docx

UNIX とは? 1969 年 米国のベル研究所で開発されたオペレーティングシステム特徴 文字ベースの対話型 OS マルチユーザ 複数のユーザが同時に利用できる マルチタスク マルチプロセス 複数の処理を平行して行える タイムシェアリング 一定の時間に区切って処理を行う 複数の処理を平行しているよう

C 言語第 8 週コメント Q: arg の使い方を理解しておらず 難しく感じるようになった A: arg というのは何のことでしょう? 第 8 週の講義内では出て来なかったと思いますが? Q: C 言語でも統合開発環境はありますか?( 動作を少し確認したいときがあるため ) A: Windows

slide4.pptx

PowerPoint プレゼンテーション

02: 変数と標準入出力

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

NUMAの構成

CLUSTERPRO/システム構築ガイド

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

InfoPrint 5577/5579 ネットワーク設定ガイド(第5章 UNIX/Linux環境で使用する)

InfoPrint 5577/5579 ネットワーク設定ガイド(第4章 UNIX/Linux環境で使用する)

練習 4 ディレクトリにあるファイルを直接指定する (cat) cat コマンドを使う (% cat ファイル名 ) と ファイルの内容を表示できた ファイル名のところにパス名を使い ディレクトリ名 / ファイル名 のように指定すると ディレクトリ内にあるファイルを直接指定できる 1 % cat _

slide5.pptx

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

CLUSTERPRO MC RootDiskMonitor CLUSTERPRO MC StorageSaver for BootDisk 仮想環境 ( ゲスト OS) での設定手順 (Linux 版 Windows 版 ) 2017(Apr) NEC Corporation 仮想環境 ( ゲスト

HULFT8 for Windows/UNIX/Linux/zLinux の機能で発生する不具合について

Microsoft PowerPoint - kougi2.ppt

<4D F736F F F696E74202D E3F FC96E55F F554E CC8AEE D8EAF2E B8CDD8AB B83685D>

POSIXプログラミング Pthreads編

PowerPoint プレゼンテーション

Microsoft Word - FreeBSD

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - prog03.ppt

ガイダンス

プロセス

<48554C46545F F A5490E08E9197BF2E786C73>

組込み Linux の起動高速化 株式会社富士通コンピュータテクノロジーズ 亀山英司 1218ka01 Copyright 2013 FUJITSU COMPUTER TECHNOLOGIES LIMITED

Si 知識情報処理

CLUSTERPRO MC ProcessSaver for Linux クイックリファレンス 第 1 版 2016 年 3 月 日本電気株式会社

05-scheduling.ppt

Microsoft Word - quick_unix.doc

Microsoft Word - VPN...[.U.K.C.hLinux doc

インテル(R) Visual Fortran コンパイラ 10.0

Troubleshooting SSH connections with Reflection X

2 / 8 オンデマンドダウンロード機能 を使用するときに次の制約があります 1. インターネットに接続されていない ( オフライン ) 場合は OneDrive エリアのみにあるファイルを開くことはできない 2.OneDrive エリアからダウンロードが完了するまでいくらか待たされるし ( 特に大

2-3- 基 Linux のシステム管理に関する知識 1 独立行政法人情報処理推進機構

Windows Powershell 入門

仮想化基礎演習テキスト Ⅰ 第 1.0 版 演習で学ぶ仮想化基礎 ( クライアント仮想化編 ) 九州ラーニングネット株式会社 特定非営利活動法人パソコン整備士協会

gengo1-12

Linux システムの導入と管理 コード L- 0:00~7:00 ( 休憩 含む ) 定員 0 名受講料 ( テキスト代含 ),00 前提条件 UNIX または Linux の基本的操作経験 ( コマンドによるファイル操作 ファイル編集 ) があること 最低開講人数 0 名 Linux システムの

02: 変数と標準入出力

2 1. Ubuntu 1.1 OS OS OS ( OS ) OS ( OS ) VMware Player VMware Player jp/download/player/ URL VMware Plaeyr VMware

Prog2_10th

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi7.ppt

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

PowerPoint プレゼンテーション

Transcription:

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

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

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

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

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

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

プロセス 処理中のプログラム. プログラムのインスタンス. 全頁の メモリに読み込まれたプログラムとデータ に対応する概念. 1 つのプログラムをもとに複数のプロセスが発生するため, プログラムとは概念的に区別される. 以下の対比でイメージを得て! 書き物実行ソフトウェアプログラムプロセス音楽譜面演奏 7

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

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

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

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

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

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

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

プロセスの親子関係の例 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) 15

読み方 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 16

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

最初のプロセスの実際 プロセス 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] 18

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

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

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

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

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

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

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

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

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

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

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

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

以下は雑多な用語の解説 31

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

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

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