ネットワーク・プログラミング ソケットオプションとスレッド.

Slides:



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

ネットワーク・プログラミ ング カーネルの役割とプロセス生成. 1.1 OS の役割 仮想マシン OS はハードウェアの多様性 をカプセル化し、利用者を 複雑な処理から開放する。 プロセス管理 時間多重化により各プロセ スに CPU を割当てる。 メモリ管理 メモリ空間の多重化により、 各プロセスにメモリを割当.
プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
システムプログラミング 第10回 情報工学科 篠埜 功. 今回の内容 プロセス(続き) – execve システムコール 現在のプロセスを、引数に与えられたファイル(実行 形式ファイルあるいはシェルスクリプト等の実行可能 なファイル)を受け取り、現在のプログラムをそれで 置き換える(変身)。 fork.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
システムプログラミング 第6回、7回 main関数の引数 usageメッセージ システムコールのエラーメッセージ ファイル
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
ファイルシステムの構造 外部記憶装置のパーティション(区画) ファイルシステムとパーティション(区画) ファイルシステムのmount
データ構造とアルゴリズム 第10回 mallocとfree
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
ネットワークプログラミング 第9回「応用ネットワークプログラミング(1)」
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第8回 プログラミングⅡ 第8回
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
シグナル通信 普通の割込みとソフトウェア割込み ソフトウェア割込みとシグナル キーボードからのシグナル 例外 (exception)
プログラミング2 関数
UDPエコーサーバ UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム)
ソケットプログラム(TCP,UDP) EasyChat開発
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
マルチスレッド処理 マルチプロセス処理について
岡村耕二 トランスポート層 ソケットプログラミング 岡村耕二 情報ネットワーク.
プログラミング 4 記憶の割り付け.
ソケットプログラム(TCP,UDP) EasyChat開発2
デバッガ dbx の使い方.
インターネットにおける真に プライベートなネットワークの構築
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
演習1の解答例の解説 2004年10月21日 海谷 治彦.
UDPマルチキャストチャット    空川幸司.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
演習1の解答例の解説 2006年11月8日 海谷 治彦.
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
ネットワーク・プログラミング デバイスドライバと環境変数.
ネットワーク・プログラミング Cプログラミングの基礎.
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
ネットワーク・プログラミング 非同期I/Oとスレッド同期制御.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
ネットワーク・プログラミング TCPサーバ.
ネットワーク・プログラミング メッセージの作成とセマフォ.
ネットワーク・プログラミング ソケットプログラミングと共有メモリ.
ネットワーク・プログラミング 1対多のプロセス間通信.
ネットワーク・プログラミング パイプライン通信とシグナル.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ネットワーク・プログラミング マルチタスク.
情報処理Ⅱ 2005年11月25日(金).
ネットワーク・プログラミング プロセスとファイルシステム管理.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
TCP/IPの通信手順 (tcpdump)
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
モバイルプログラミング第3回 Cプログラミングの基礎( 2 )
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

ネットワーク・プログラミング ソケットオプションとスレッド

optValのサイズを格納したint型変数のアドレス 1.1 ソケットオプション optValのサイズを格納したint型変数のアドレス 層(レイヤ) オプション名 値 オプションを読出す int getsockopt(int socket, int level, int optName, void *optVal, unsigned int *optLen) オプションを設定する int setsockopt(int socket, int level, int optName, const void *optVal, unsigned int optLen) ソケット層 optValのデータ型 TCP層 SOL_SOCKETレベル, データ型, 値 SO_BROADCAST, int, 0/1 説明 ブロードキャストを有効にする SO_KEEPALIVE, int, 0/1 キープアライブを有効にする SO_LINGER, linger{}, 時間 close()が確認を待つための遅延時間 SO_RCVBUF, int, バイト数 ソケットの受信バッファサイズ。 SO_RCVLOWAT, int, バイト数 recv()が処理を戻すまでに受信するバイト数の最小値 SO_REUSEADDR, int, 0/1 すでに使用中のアドレス/ポートへのバインドを有効にする SO_SNDLOWAT, int, バイト数 送信パケットのバイト数の最小値 SO_SNDBUF, int, バイト数 ソケットの送信バッファサイズ IPPROTO_TCPレベル, データ型, 値 TCP_MAX, int, バイト数 説明 キープアライブメッセージの間隔 TCP_NODELAY, int, 0/1 Nagleアルゴリズムの禁止 値 IPPROTO_IPレベル, データ型, 値 IP_TTL, int, 0~255 説明 IPパケットのユニキャスト存続時間 IP_MULTICAST_TTL, unsigned char 0~255 IPパケットのマルチキャスト存続時間 IP_MULTICAST_LOOP, int, 0/1 自身がマルチキャストソケットで送信したパケットの受信を有効にする IP_ADD_MEMBERSHIP, ip_mreq{}, グループアドレス 指定したマルチキャストグループのパケットの受信を有効にする IP_DROP_MEMBERSHIP,ip_mreq{}, グループアドレス 指定したマルチキャストグループのパケットの受信を無効にする オプション名

1.2 ノンブロッキングソケット data data/syn ブロック ノンブロック syn syn,ack ack ノンブロッキング 1.2 ノンブロッキングソケット Client Server send() sendto() ノンブロッキング 関数の呼出しをブロックしないように成功/失敗を表す値がすぐに返るようにする。 ソケットのノンブロッキング化 int fcntl(int socket, int command, long argument) command: F_GETFL: フラグを表示 F_SETFL: フラグを設定 argument: フラグ名 O_NONBLOCK: ノンブロックにする ノンブロッキングソケットの動作 connect()以外は、処理を正常に行うか、或いは(処理することがなければ)直ぐにエラーを返す。 connect()では、EINPROGRESS(コネクション確立中)のエラーを返す。 ノンブロッキングの欠点 同じ処理を定期的に何度も試行(ポーリング)しなければならない。 data 成功 recv() recvfrom() accept() ブロック data/syn 成功 recv() ノンブロック 受信が失敗したのではなくて、受信データが無いので直にリターンした エラー EWOULDBLOCK connect() syn エラー EINPROGRESS syn,ack ack

2.スレッド 2.1 スレッドの生成 forkシステムコールの欠点 スレッドを使えば並行して実行するプログラムが容易に書くことが出来る。 2.スレッド 2.1 スレッドの生成 forkシステムコールの欠点 子プロセスが親プロセスの情報を複製するための処理が重い。 親プロセスや他のプロセスとの情報交換にパイプやプロセス間通信を使わなければいけない。 スレッドを使えば並行して実行するプログラムが容易に書くことが出来る。 スレッドを使う場合、main関数が終了すると全てのスレッドが終了する。 プロセスのfork()に対応 pthread_create スレッドを生成する インクルードファイル  #include <pthread.h> 書式  int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); 戻値 成功時 0 (スレッド識別子を*threadに設定) 失敗時 0以外の値 *thread スレッド識別子を格納する変数 *attr   スレッドの属性、 NULL: デフォルトの属性 *start_routine  スレッドが実行する関数 *arg     スレッドが実行する関数の引数 start_routineは関数へのポインタ変数 プロセスのwait()に対応 pthread_join スレッドが終了するのを待つ インクルードファイル  #include <pthread.h> 書式  int pthread_join(pthread_t th, void **thread_return); 戻値 成功時 0  失敗時 0以外の値 th 終了待ちスレッド thread_return  スレッドの戻り値 ポインタ変数のアドレスを保持するポインタ変数

lv2.c 引数で指定した時間の5分前にメッセージ表示 2.2 目覚まし時計プログラム lv2.c 引数で指定した時間の5分前にメッセージ表示 スレッドの場合 プロセスの場合 #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { pthread_t thread; void *print_message(void *args); pthread_create(&thread, NULL, print_message, argv[1]); pthread_join(thread,NULL); return EXIT_SUCCESS; } void *print_message(void *args) { int dep_time; dep_time=atoi(args)*60-300; sleep(dep_time); fprintf(stderr, "You have to leave in 5 minutes\n"); return NULL; lv.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> Int main(int argc,char *argv[]) { int dep_time; int st; dep_time=atoi(argv[1])*60-300; if (fork()==0) { //子プロセスの生成 sleep(dep_time); fprintf(stderr,”Leave in 5 min\n”)   exit(EXIT_SUCCESS); } wait(&st); return EXIT_SUCCESS; [oida@rpc261 soft2]$ gcc lv.c –o lv [oida@rpc261 soft2]$./lv 30  [oida@rpc261 soft2]$ [oida@rpc261 soft2]$ Leave in 5 min  [oida@rpc261 soft2]$ gcc lv2.c -o lv2 -lpthread [oida@rpc261 soft2]$ ./lv2 30 You have to leave in 5 minutes [oida@rpc261 soft2]$ pthreadライブラリが必要

宿題12 (lv2.cを参考にして)スレッドを使って、20秒前と5秒前にメッセージを出すプログラム(hw12.c)。 表紙に氏名と学籍番号を書く 本文にプログラムを書く プログラムの実行結果を書く 実施した内容を説明する文章を書く レポートの締切は次の週の水曜日18:00 main() thread[0] thread[1] pthread_create pthread_create print pthread_join 20秒前 pthread_join print [oida@rpc261 soft2]$ gcc hw12.c -o hw12 -lpthread [oida@rpc261 soft2]$ ./hw12 30 You have to leave in 20 seconds You have to leave in 5 seconds [oida@rpc261 soft2]$ 5秒前 秒単位で指定する。

宿題12 hw12.c thread[0] thread[1] main() #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { pthread_t thread[2]; void *print_message(void *args); void *print_message2(void *args); pthread_create(&thread[0], NULL, print_message, argv[1]); pthread_create(&thread[1], NULL, print_message2, argv[1]); pthread_join(thread[0],NULL); pthread_join(thread[1],NULL); return EXIT_SUCCESS; } void *print_message(void *args) { int dep_time; dep_time=atoi(args)-20; sleep(dep_time); fprintf(stderr, "You have to leave in 20 seconds\n"); return NULL; void *print_message2(void *args) { thread[0] thread[1] main() pthread_create pthread_join print この部分に、5秒前にメッセージ を出す命令文(3行)を書く。

まとめ ソケットオプション ノンブロッキングソケット スレッド 目覚まし時計プログラム