ネットワーク・プログラミング デバイスドライバと環境変数.

Slides:



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

ネットワーク・プログラミ ング カーネルの役割とプロセス生成. 1.1 OS の役割 仮想マシン OS はハードウェアの多様性 をカプセル化し、利用者を 複雑な処理から開放する。 プロセス管理 時間多重化により各プロセ スに CPU を割当てる。 メモリ管理 メモリ空間の多重化により、 各プロセスにメモリを割当.
プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
システムプログラミング 第10回 情報工学科 篠埜 功. 今回の内容 プロセス(続き) – execve システムコール 現在のプロセスを、引数に与えられたファイル(実行 形式ファイルあるいはシェルスクリプト等の実行可能 なファイル)を受け取り、現在のプログラムをそれで 置き換える(変身)。 fork.
ARTLinuxの特徴 ARTLinux: ハードリアルタイム処理機能を拡張したLinuxカーネル 固定優先度に基づくスケジューリング機能
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
システムプログラミング 第6回、7回 main関数の引数 usageメッセージ システムコールのエラーメッセージ ファイル
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
ファイルシステムの構造 外部記憶装置のパーティション(区画) ファイルシステムとパーティション(区画) ファイルシステムのmount
データ構造とアルゴリズム 第10回 mallocとfree
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
第8回ネットワークプログラミング 中村 修.
ソフトウェア階層 分類 具体例 応用ソフト 基本ソフト アプリケーションソフト 個別アプリケーション SEやユーザが開発するプログラム
第8回 プログラミングⅡ 第8回
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
Linuxカーネルについて 2014/01.
CC/7700,CC32を用いた データ収集システム 筑波大学 木村 博美 小松原 哲郎 (c)2007 木村博美 筑波大学.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
シグナル通信 普通の割込みとソフトウェア割込み ソフトウェア割込みとシグナル キーボードからのシグナル 例外 (exception)
オペレーティングシステム2004 プロセス (1) 2004年10月8日 海谷 治彦.
型付きアセンブリ言語を用いた安全なカーネル拡張
オペレーティングシステム2004 プロセス (2) および カーネルモード・システムコール
プログラミング論 ファイル入出力
セキュリティ(3) 05A2013 大川内 斉.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
マルチスレッド処理 マルチプロセス処理について
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
演習1の解答例の解説 2004年10月21日 海谷 治彦.
第14章 ファイル操作 (コマンドプロンプト版)
プログラミング論 ファイル入出力
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
演習1の解答例の解説 2006年11月8日 海谷 治彦.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
ネットワーク・プログラミング ソケットオプションとスレッド.
C言語演習 情報ネットワーク特論.
オペレーティングシステムJ/K 2004年11月15日2時限目
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
組込みシステムとは コンピュータ制御システム?
UNIX演習 情報ネットワーク特論資料.
UNIX演習 情報ネットワーク特論資料.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
実装について 前田俊行.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
ネットワーク・プログラミング Cプログラミングの基礎.
ネットワーク・プログラミング Linuxシステムとソフトウェア開発.
ネットワーク・プログラミング 非同期I/Oとスレッド同期制御.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
ネットワーク・プログラミング TCPサーバ.
ネットワーク・プログラミング メッセージの作成とセマフォ.
ネットワーク・プログラミング ソケットプログラミングと共有メモリ.
ネットワーク・プログラミング 1対多のプロセス間通信.
ネットワーク・プログラミング パイプライン通信とシグナル.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ネットワーク・プログラミング マルチタスク.
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
ネットワーク・プログラミング プロセスとファイルシステム管理.
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
Presentation transcript:

ネットワーク・プログラミング デバイスドライバと環境変数

全体の位置づけ オペレーションシステム(Linux) ソケットプログラミング プロセス カーネルとシステムコール プロセス間通信 スレッド クライアントーサーバ 非同期I/Oとマルチタスク

1.1 デバイスドライバとモジュール Linux OS デバイスドライバ モジュール 1.1 デバイスドライバとモジュール Linux OS デバイスドライバ ハードディスク、キーボード等のキャラクタデバイスをアクセスするためのソフトウェア。 モジュール 高機能ハードウェア(ビットマップディスプレイ、ネットワーク)をアクセスするためのソフトウェア。 カーネルと独立した設計、実装単位。 汎用性の高いモジュールインタフェース。 カーネル モジュール インタフェース デバイスドライバ インタフェース モジュール デバイス ドライバ イーサネットボード ハードディスク

1.2 システムコール時のモード切替 CPUのモード切替 trap命令 プロセス実行時はユーザモード。 カーネル実行時はカーネルモード。 1.2  システムコール時のモード切替 実行中のプログラム CPUのモード切替 プロセス実行時はユーザモード。 カーネル実行時はカーネルモード。 trap命令 アセンブリ言語の命令。 CPUをカーネルモードに切替え、指定したアドレスにあるカーネル関数を実行させる命令。 モード ① : trap s 分岐テーブル ② ③ システムコール ポインタ変数の配列 関数 ユーザ空間 カーネル空間 ① CPUをカーネルモードに切替 ② カーネル空間内の分岐テーブル参照 ③ カーネル関数を実行

topやpsコマンドでプロセスを一覧出来る 1.3 カーネルの開始 ハードディスク内のカーネルがメモリ上にロードされる。 gettyプログラム ユーザがログイン出来るように、ユーザIDとパスワードの入力を受付ける。 ログインが成功すると、指定されたシェルプログラムを実行する。 デーモン(メモリ常駐プロセス) ネットワーク(inetd) システムログ(syslogd) 定期的に起動するプログラム(crond) カーネルは、ハードとソフト(割込処理、スケジューラ、クロック、モジュール)を初期化する。 initプロセス(プロセスid=1)がデーモン、getty等のプロセスを生成する。 w: 現在ログイン中のユーザ表示 last: 最近ログインしたユーザ表示 history: 過去に実行したコマンド topやpsコマンドでプロセスを一覧出来る

プロセスの生成とコマンドの実行 2.1 環境変数の利用 プロセスの生成とコマンドの実行 2.1 環境変数の利用 子は親の完全なコピー 子プロセス のメモリ空間 newenv.c 親プロセス (シェル) fork(); path argv[0] argv[1] envp[0] envp[1] . execl (/home/oida/newenv, newenv,envp); #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[], char *envp[]) { int i; for (i=0;envp[i]!=NULL;i++) { printf(“%s\n”,envp[i]); } return EXIT_SUCCESS; n e w e n v \0 n e w e n v \0 NULL P A T H = / u envp配列も親からコピーされる S H E L L = / % ./newenv PWD=/home/oida/ USER=oida …  環境変数の一覧が表示される % path argv[0] ハードディスク / execlにより、ハードディスクからnewenvを取ってきて子プロセスのメモリ上にロードする。 home usr newenv

2.2 プロセスの状態 ゾンビ状態 プロセスの状態 プロセス自体は消滅しているが、プロセステーブルが開放されていない状態。 2.2 プロセスの状態 ゾンビ状態 プロセス自体は消滅しているが、プロセステーブルが開放されていない状態。 子プロセスは実行終了後、親プロセスに終了したことを通知するシグナルを送った後、ゾンビ状態になる。 親プロセスがwaitシステムコールを実行すると、子プロセスはプロセステーブルから削除される。 zombie.c int main() { int i; if (fork()==0) { exit(EXIT_FAILURE); } else { sleep(300); wait(&i); printf(“return code=%d\n”, WEXITSTATUS(i)); } return EXIT_SUCCESS; 子プロセスの実行結果(EXIT_FAILURE)を表示する ユーザモード 実行中 % ./zombie & % ps l F UID PID … 000 1000 … ./zombie 044 1000 … [zombie <defunct>] … % return code=1 +Done ./zombie システムコールや割込みにより状態が遷移する。 カーネルモード 実行中 ゾンビ状態 消滅したという意味の英語 スリープ状態 実行可能状態 プロセスの状態

宿題4 elapse_time.c 宿題: elapse_time.cを参考にして、子プロセスの実行時間を測定するプログラム(hw4.c)を作成せよ。 尚、子プロセスは5秒間sleep後、exitする。 表紙に氏名と学籍番号を書く 本文にプログラムを書く プログラムの実行結果を書く 実施した内容を説明する文章を書く レポートの締切は次の週の水曜日18:00 #include <stdio.h> #include <stdlib.h> time_t start, end; int main() { time(&start); // start sleep(5); time(&end); // stop printf("elapsed time= %d seconds\n", end-start); return EXIT_SUCCESS; } [oida@rpc261 soft2]$ gcc elapse_time.c -o elapse_time [oida@rpc261 soft2]$ ./elapse_time elapsed time= 5 seconds [oida@rpc261 soft2]$

宿題4のヒント 親 子 time() fork() sleep(5) wait() exit() time() hw4.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> time_t start, end; int main() { int j; time(&start); // start if (fork()==0) { } wait(&j); time(&end); // stop printf("elapsed time= %d seconds\n", (int) (end-start)); return EXIT_SUCCESS; 親 子 time() fork() sleep(5) wait() time() exit() この部分に、5秒間スリープ後、exit()するプログラムを書く。 2行です。子プロセスの実行結果(EXIT_SUCCESS)も忘れずに入れる。