1 / 9

ネットワーク・プログラミング

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

idalee
Download Presentation

ネットワーク・プログラミング

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  5. ハードディスク プロセスの生成とコマンドの実行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

  6. 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 システムコールや割込みにより状態が遷移する。 ゾンビ状態 カーネルモード 実行中 消滅したという意味の英語 スリープ状態 実行可能状態 プロセスの状態

  7. 宿題: elapse_time.cを参考にして、子プロセスの実行時間を測定するプログラム(hw4.c)を作成せよ。 尚、子プロセスは5秒間sleep後、exitする。 表紙に氏名と学籍番号を書く 本文にプログラムを書く プログラムの実行結果を書く プログラムの動作を説明する図を作成し、図の説明文を書く レポートの締切は次の授業がある週の水曜日18:00 elapse_time.c 宿題4 #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]$

  8. hw4.c 宿題4のヒント #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",end-start); return EXIT_SUCCESS; } 親 子 fork() time() sleep(5) wait() time() exit() この部分に、5秒間スリープ後、exit()するプログラムを書く。 2行です。子プロセスの実行結果(EXIT_SUCCESS)も忘れずに入れる。

  9. まとめ • カーネルの構成 • モジュール • トラップ • カーネルの開始 • プロセスの生成と環境変数 • プロセスの状態

More Related