Download presentation
Presentation is loading. Please wait.
Published byえりか あざみ Modified 約 8 年前
1
ネットワーク・プログラミ ング カーネルの役割とプロセス生成
2
1.1 OS の役割 仮想マシン OS はハードウェアの多様性 をカプセル化し、利用者を 複雑な処理から開放する。 プロセス管理 時間多重化により各プロセ スに CPU を割当てる。 メモリ管理 メモリ空間の多重化により、 各プロセスにメモリを割当 る。 資源管理 各プロセスに資源(プリン タ、ハードディスク等)の 共有及びアクセス保護のた めのインタフェースを提供 する。 Latex オペレーションシステム( OS) tar ls xfig 周辺装置メモリ CPU
3
1. 2 カーネルモードとユーザモード カーネルモード カーネルの特権モード。 プロセッサの全命令を利 用でき、全メモリ領域を アクセス出来る。マシン 資源と直接対話出来る。 ユーザモード プロセスの実行モード。 実行できる命令は制限さ れ、ユーザモードのメモ リ領域のみアクセス出来 る。マシン資源と直接対 話出来ない。 システムコール カーネルがプロセスに代 わってマシン資源をアク セスし、結果を返す。 資源1資源2 カーネル プロセス A プロセス B システムコー ル 結果 マシン資源と はハードディ スク等のハー ドウェアを指 す
4
プロセスの生成とコマンドの実 行 2.1 プロセスの生成 lv.c #include int main(int argc,char *argv[]) { int dep_time; dep_time=atoi(argv[1])*60-300; if (fork()==0) { // 子プロセスの生成 sleep(dep_time); fprintf(stderr,”Leave in 5 min\n”); } return EXIT_SUCCESS; } % gcc lv.c –o lv %./lv 30 ( 30 分後に予 定あり) % % Leave in 5 min ( 5 分前にア ラーム) fork 子プロセスを生成する インクルードファイル #include #include 書式 pid_t fork (void); 戻値成功時 親プロセス : 子プロセス ID 子プロセス : 0 失敗時 -1 説明子プロセスは親プロセスの複製で あり、戻値によって各プロセスは自 身が親か子かを判断する。 親プロセス pid=100 fork(); 戻値 102 子プロセス pid=102 fork(); 戻値 0 子プロセスの生成 /usr/include/stdlib.h ポインタ変数の配 列 % man fork % man atoi
5
2.2 簡単なシェルの作成 nsh.c int main() { char command[256],line[256]; int st; static char prompt[64]=“>”; fprintf(stderr, “%s”,prompt); while (fgets(line,sizeof(line),stdin) !=NULL) { if (sscanf(line,”%s”,command)>0) { if (fork()==0) { if (execl(command,command,NULL)<0) { exit(EXIT_SUCCESS); } else { wait(&st); } fprintf(stderr,”%s”,prompt); } return EXIT_SUCCESS; } %./nsh > /bin/ps プロセスの一覧が表示される >/bin/ls ファイル名一覧が表示される > ( Ctrl-D を押すと、もとのシェルに戻る) % シェルとは、 1. 文字列を入力する 2. 入力された文字列で示されるコ マンド(プログラム)を実行 3. コマンドの実行が終ったら1. へ nsh.c を実行しましょう。 プロンプト ( > )をディス プレイ上に表示 子プロセ ス が実行 command を子プ ロセス上で実行 子プロセス終 了 親プロセ ス が実行
6
2.3 プログラムの実行 execl プログラムをロードし実行 インクルードファイル #include 書式 int execl(const char *path, const char *arg,..); 戻値成功時 なし 失敗時 -1 説明 execl の引く数で指定したプログラムが execl を呼出たプロセスを上書きする プロセス execl(“/bin/ls”,”/bin/ls”,”-l”,NULL); ハードディスク / ls wait 子プロセスの終了を待つ インクルードファイル #include #include 書式 pid_t wait (int *status); 戻値成功時 子プロセス ID 失敗時 -1 親プロセス fork(); wait(); 子プロセス exit(); usrbin execl を実行する と、ハードディス クに格納された ls コマンドをメモリ 上にロードする。 子プロセス の終了を待 つ 子プロセスの生成
7
宿題3 宿題:20秒前と5秒前にメッ セージを出すプログラム (hw3.c) を作成し、動作を linux 上で確認せよ。 表紙に氏名と学籍番号を書く 本文にプログラムを書く プログラムの実行結果を書く 実施した内容を説明する文章 を書く レポートの締切は次の週の水 曜日 18:00 親子孫 sleep(40) printf() fork() return sleep(15) printf() return fork() return hw3.c #include int main(int argc, char *argv[]) { int dep_time; int dep_time2=15; dep_time=atoi(argv[1])*60-20; if (fork()==0) { //child if (fork()==0) { //grandchild sleep(dep_time2); fprintf(stderr,"Leave in 5 sec\n"); } return EXIT_SUCCESS; } 20 秒前にメッセージ ( ”Leave in 20 sec” ) を出力する命令文 (2行)をここに挿 入する。 $./hw3 1 $ Leave in 20 sec Leave in 5 sec $ 5 秒前にこのメッセージが出 る
8
まとめ OS の役割と構成 カーネルモードとユーザモード プロセスの生成と実行
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.