担当:青木義満 yaoki@sic.shibaura-it.ac.jp 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満 yaoki@sic.shibaura-it.ac.jp.

Slides:



Advertisements
Similar presentations
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
Advertisements

情報・知能工学系 山本一公 プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
ヒープソートの演習 第13回.
第11回 整列 ~ シェルソート,クイックソート ~
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
システムプログラミング 第6回、7回 main関数の引数 usageメッセージ システムコールのエラーメッセージ ファイル
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
2007/1/18 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
第8回 プログラミングⅡ 第8回
データ構造とアルゴリズム 分割統治 ~ マージソート~.
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
第11回 整列 ~ シェルソート,クイックソート ~
10: ファイル入出力 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第10回 プロセス間通信3 担当:青木義満
システムプログラミング 第6回、7回、8回 情報工学科 篠埜 功.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
マルチスレッド処理 マルチプロセス処理について
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
iioLoadFile()とiioMallocImageBuffer()の補足
iioLoadFile()とiioMallocImageBuffer()の補足
第7回 プログラミングⅡ 第7回
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
アルゴリズムとデータ構造 補足資料6-2 「サンプルプログラムcat2.c」
アルゴリズムとデータ構造1 2005年7月1日
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第4回 ファイル入出力方法.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
プログラミング演習I 2003年7月2日(第11回) 木村巌.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第12回 システムプログラミング 反復サーバと並行サーバ 担当:青木義満
アルゴリズムとプログラミング (Algorithms and Programming)
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
ネットワーク・プログラミング デバイスドライバと環境変数.
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
ネットワーク・プログラミング 1対多のプロセス間通信.
ネットワーク・プログラミング パイプライン通信とシグナル.
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
ネットワーク・プログラミング プロセスとファイルシステム管理.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
プログラミング入門2 第5回 配列 変数宣言、初期化について
Presentation transcript:

担当:青木義満 yaoki@sic.shibaura-it.ac.jp 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満 yaoki@sic.shibaura-it.ac.jp

プロセス間通信 (IPC:Inter Process Communication) プロセス間でデータのやり取りを行う機構 マルチプロセス機能 1つの処理を複数のプロセスに分配 データのやり取りと同期が必要 例) X Window : XサーバとXクライアント Webシステム:WebサーバーとPCブラウザ(クライアントプロセス)

プロセス間通信の機構 パイプ: 1つのUNIXシステム内のプロセス ソケット: インターネットの異なるUNIXシステム間でもOK 共有メモリ パイプやソケットにファイル記述子を介してアクセス read(), write()システムコールでファイル同様の入出力 共有メモリ

パイプとは? メモリ内に設けられるバッファリング領域 読み出し用の口と書き込み用の口 2つのプロセスをパイプで繋ぐ バッファリング領域 → 特別なファイル ファイル記述子を使ってアクセス ファイル記述子を共有できる親子関係,直系の間柄のプロセス間通信 単方向パイプと双方向パイプ

パイプにおけるファイル記述子の共有

単方向パイプ

双方向パイプ

ファイル間チャネル(パイプ)の作成 fd[0] : 読み出しモードでオープンされたファイル記述子 #include <unistd.h> int pipe ( int fd[2] ); int fd[2] : ファイル記述子 ※正常終了すると値0を返し, エラーの場合には-1を返して外部変数errnoにエラーを示す値をセット 引数fdで渡された2個の配列の各要素に(パイプの)ファイル記述子を格納して返す。 fd[0] : 読み出しモードでオープンされたファイル記述子 fd[1] : 書き込みモードでオープンされたファイル記述子

単方向パイプとファイル記述子

ファイル入出力 read() #include <unistd.h> ssize_t read( int fd, void *buf, size_t count ) int fd : ファイル記述子 void *buf : 入力バッファの先頭アドレス size_t count : 読み出しバイト数 ※正常終了すると実際に読み出されたバイト数を示す負でない値を返し, エラーの場合には-1を返して外部変数errnoにエラーを示す値をセット

ファイル入出力 write() #include <unistd.h> ssize_t write( int fd, const void *buf, size_t count ) int fd : ファイル記述子 void *buf : 出力バッファの先頭アドレス size_t count : 書き込みバイト数 ※正常終了すると実際に書き込まれたバイト数を示す負でない値を返し, エラーの場合には-1を返して外部変数errnoにエラーを示す値をセット

ファイルを閉じる close() #include <unistd.h> int close( int fd ) ※正常終了すると値0を返し, エラーの場合には-1を返して外部変数errnoにエラーを示す値をセット

単方向パイプによるプロセス間通信 「simplex_pipe.c」 新たなプロセスを生成し,子プロセスから親プロセスにコマンド行から入力したメッセージを送る

双方向パイプ

双方向パイプによるプロセス間通信 「duplex_pipe.c」 新たなプロセスを生成して,子プロセスと親プロセスとの間でコマンド行から入力したメッセージ(文字列データ)を双方向にやりとり

パイプを用いたプロセス間通信 演習課題1 「simplex_pipe.c」を変更。単方向パイプでint型の配列データを子プロセスから親プロセスへ送り,親プロセスで受け取った後にその内容を表示するプログラムを作成せよ。  ※配列へのデータの与え方は,プログラム内で与えても,ファイル読み出しで与えても,コマンドライン引数で与えてもよい。

パイプを用いたプロセス間通信 演習課題2 2.2つの未整列済みの整数列を用意。2つの子プロセスを生成し,そのプロセスにそれらの配列をソートさせる(ソートの方法は何でもOK)。それぞれソートした整数配列を親プロセスへ送り,親プロセスは受け取った2つのソート済み整数配列をマージソートして,全体的なソートを完成させるプログラムを作成せよ。

2ウェイ併合法(マージソート) 主記憶上に入りきらないデータを整列する.外部整列の一種 併合を用いる 参考資料 2ウェイ併合法(マージソート) 主記憶上に入りきらないデータを整列する.外部整列の一種 併合を用いる ここでは,次の条件でのアルゴリズムを示す キー集合は,ハードディスク上にn個のブロックに分割されて格納されている 主記憶上には3ブロック分の大きさの作業領域を確保できる

アルゴリズム 1. ディスクから3ブロックずつ取り出し,内部整列を行いディスクに書き出す. 個のソート列が出来る.      個のソート列が出来る. 2. 二つの部分ソート列を,一つに併合(マージ)することを繰り返す.

処理過程

併合(パス1)の流れ

併合操作 ①データ列a, bのどちらかの終末に来るまで以下を繰り返す ②aiとbjを比べ小さい方をcpにコピーし,小さい方のデータ列 データ列の先頭からの番号をそれぞれ i, j, pとする ①データ列a, bのどちらかの終末に来るまで以下を繰り返す  ②aiとbjを比べ小さい方をcpにコピーし,小さい方のデータ列     の番号を1つ先に進める ③終末に達していないデータ列のデータを終末になるまでcにコピー

演習課題の提出 12/4(火)授業開始前まで メール添付にて2つのソースファイル(課題、2)を提出。 メールタイトル: system8 学籍番号 苗字(全て半角英数で)