Download presentation
Presentation is loading. Please wait.
1
ネットワーク・プログラミング プロセスとファイルシステム管理
2
全体の位置づけ オペレーションシステム(Linux) ソケットプログラミング プロセス カーネルとシステムコール プロセス間通信 スレッド
クライアントーサーバ 非同期I/Oとマルチタスク
3
sleep()やパケット受信、キーボードからの入力処理
1.1 プロセス管理 プロセス管理 sleep()やパケット受信、キーボードからの入力処理 アドレス空間、ファイルの保護 複数のプロセスにCPUを割当る タイマと 割込み 保護 メカニズム プロセス間 通信 スケジューラ カーネル データ この授業の メインテーマ プロセステーブル パイプライン、シグナル、共有メモリ、メッセージ、セマフォ、スレッド、ソケット
4
1.2 システムコールと割込み システムコール時 割込み時 カーネルモードのプロセス実行 プロセスのスケジューリング ユーザモード
1.2 システムコールと割込み ユーザモード プロセス実行 システムコール時 システム関数の実行 ret_from_sys_call ペンディングのシグナル処理 ペンディングの割込処理 プロセスのスケジューリング 割込み時 IRQに対応するISRを実行 速い割込処理 処理中は他の割込みは無効 遅い割込処理 ret_from_sys_callを実行 割込処理番号 IRQ trap ISR システムコール 遅い 割込処理 システム関数を実行 速い 割込処理 ret_from_sys_call プロセスの実行を継続 プロセスの スケジューリング カーネルモードのプロセス実行
5
1.3 スケジューラと保護メカニズム スケジューラ 実行可能プロセスの中で最も優先度の高いプロセスにCPUを割当る。 時間
1.3 スケジューラと保護メカニズム 実行するプロセスがない場合に実行される 割込み処理ルーチン スケジューラ 実行可能プロセスの中で最も優先度の高いプロセスにCPUを割当る。 カーネル関数schedule() ret_from_sys_callコードの一部 保護メカニズム アドレス空間の分離 プロセスは他のプロセスのアドレス空間を読み書き出来ない。 ファイルの保護 各ファイルはユーザ(uid)、グループ(gid)を持ち、読出し、書込み、実行の権限が設定されている。 アイドル プロセス プロセス 1 プロセス 2 時間 カーネル ISR CPU時間 スケジューリング コマンドls –lで確認出来る CPUが実行するプログラム
6
1.4 プロセステーブル プロセステーブル プロセステーブル プロセスid1,2,3,… state state プロセス記述子の生成
1.4 プロセステーブル プロセステーブル プロセス記述子(task_struct構造体)の集合。 プロセス毎に記述子を持つ。 プロセス状態に依存してリンクを持つ。 例えば、子は親のプロセス記述子を指す。 例えば、入出力完了待ちプロセスは割込み待ちリストに入る。 プロセス記述子の生成 親プロセスの記述子からコピーする。 子プロセス固有の値に修正する。例えば、pid、子、親、兄弟とのリンク、プロセス生成時刻等。 子の状態を実行可能状態にする。 プロセスid1,2,3,… ポインター変数 state nice tty fs files mm sig flag プロセス記述子 struct task_struct state nice tty fs files mm sig flag state nice tty fs files mm sig flag プロセスの状態 state Next_task pid fs files mm sig nice オープンファイル記述子 シグナル …. プロセステーブル
7
1.5 プロセス間通信(IPC)と同期 セマフォによる同期 プロセス間通信(IPC)
プロセス間でハードウェア資源を同時にアクセスするのを避ける。 並列処理実行時の同期を取る。 プロセス間通信(IPC) シグナル 非同期に信号を送る。 パイプライン 循環バッファを使い、プロセス間でデータを移動する。 共有メモリ カーネル内のメモリブロックをプロセス間で共有する。 ソケット ソケットを使って、ネットワークを介して情報の読書きを行う。 プロセス A プロセス B プロセス C プロセス間通信 同期 シグナル パイプライン 共有メモリ ソケット カーネル スレッドも学びます ファイル
8
2.ファイルシステム 2.1 ディスク中のファイルシステム
2.ファイルシステム 2.1 ディスク中のファイルシステム パーティション ハードディスクは幾つかのパーティションに分れている。 ファイルシステムはパーティション毎にある。 マウント Linuxが起動されると各パーティションはマウントされ、統一されたファイルシステムが出来る。 パーティション2にあるhw.cの絶対パス名は/home/oida/hw.cである。 ネットワーク上のディスクをマウントする場合もある(NFS)。 マウント情報はコマンド(df)とファイル(/etc/fstab)で確認出来る。 パーティション0 / bin home usr パーティション2 パーティション3 / / oida ito bin hw.c マウント 統一された ファイルシステム / bin home usr oida ito bin hw.c
9
カーネルのキャッシュ情報とディスクの情報を一致させる
2.2 パーティションの情報を得る 読み取り専用文字列へのポインタ変数 ndf.c statfs スーパブロックの情報を取出す #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/vfs.h> int main(int argc, char *argv[]) { struct statfs buf[1]; sync(); if (statfs(argv[1], buf)<0) { fprintf(stderr, “Cannot read super block!\n”); exit(EXIT_FAILURE); } fprintf(stderr,”%4.1f %% free\n”, 100.0*buf[0].f_bfree/buf[0].f_blocks); return EXIT_SUCCESS; インクルードファイル #include <sys/vfs.h> 書式 int statfs(const char *path, struct statfs *buf); 戻値 成功時 0 失敗時 -1 パーティション全体の情報 statfs構造体 ファイルシステム の種類 カーネルのキャッシュ情報とディスクの情報を一致させる f_type ブート ブロック スーパ ブロック f_bsize ブロックサイズ グループ ディスクリプタ パーティ ション0 ブロック グループ 0 f_blocks 全ブロック数 データブロック ビットマップ f_bfree 空ブロック数 ブロック グループ 1 f_bavail iノード ビットマップ f_files iノードの総数 iノード テーブル . f_ffree 空iノード数 データ ブロック f_fsid ブロック グループ N f_namelen f_spare[6] % ./ndf / 40.2 % free % パーティション”/”を引数で指定する。 sync スーパブロックを更新する インクルードファイル #include <unistd.h> 書式 void sync(void); 戻値 なし
10
宿題5 宿題:(ndf.cを参考にして)パーティションのブロックサイズ(f_bsize)を表示するプログラム(hw5.c)を作成せよ。
Linux上でmanコマンドを使って、f_bsizeの型を確認すること。例えば、出力する場合、 int型のフォーマットは、%d long型のフォーマットは、%ld 宿題:(ndf.cを参考にして)パーティションのブロックサイズ(f_bsize)を表示するプログラム(hw5.c)を作成せよ。 ブロックサイズを表示するパーティションは以下の2つ。 / /boot レポート内容 表紙に氏名と学籍番号を書く。 本文にプログラムを書く。 プログラムの実行結果を書く。 実施した内容を説明する文章を書く レポートの締切は次の週の水曜日18:00 hw5.c #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/vfs.h> int main(int argc,char *argv[]) { struct statfs buf[1]; sync(); if (statfs(argv[1],buf)<0) { fprintf(stderr,"Cannot read super block!\n"); exit(EXIT_FAILURE); } return EXIT_SUCCESS; ここに、ブロックサイズを出力 する命令を1行書いて下さい。
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.