ネットワーク・プログラミング プロセスとファイルシステム管理.

Slides:



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

ネットワーク・プログラミ ング カーネルの役割とプロセス生成. 1.1 OS の役割 仮想マシン OS はハードウェアの多様性 をカプセル化し、利用者を 複雑な処理から開放する。 プロセス管理 時間多重化により各プロセ スに CPU を割当てる。 メモリ管理 メモリ空間の多重化により、 各プロセスにメモリを割当.
プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
システムプログラミング 第10回 情報工学科 篠埜 功. 今回の内容 プロセス(続き) – execve システムコール 現在のプロセスを、引数に与えられたファイル(実行 形式ファイルあるいはシェルスクリプト等の実行可能 なファイル)を受け取り、現在のプログラムをそれで 置き換える(変身)。 fork.
ARTLinuxの特徴 ARTLinux: ハードリアルタイム処理機能を拡張したLinuxカーネル 固定優先度に基づくスケジューリング機能
■プロセスとfileの関係 プロセスが一つファイルをオープンすると以下のようなデータ構造が作られる。
Chapter11-4(前半) 加藤健.
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
システムプログラミング 第6回、7回 main関数の引数 usageメッセージ システムコールのエラーメッセージ ファイル
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
ファイルシステムの構造 外部記憶装置のパーティション(区画) ファイルシステムとパーティション(区画) ファイルシステムのmount
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
オペレーティングシステム (OSの機能と構造)
第8回 プログラミングⅡ 第8回
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
Ibaraki Univ. Dept of Electrical & Electronic Eng.
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
Linuxカーネルについて 2014/01.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
シグナル通信 普通の割込みとソフトウェア割込み ソフトウェア割込みとシグナル キーボードからのシグナル 例外 (exception)
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
オペレーティングシステム2004 プロセス (2) および カーネルモード・システムコール
UDPエコーサーバ UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム)
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第10回 プロセス間通信3 担当:青木義満
システムプログラミング 第6回、7回、8回 情報工学科 篠埜 功.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
マルチスレッド処理 マルチプロセス処理について
オペレーティングシステム イントロダクション
Ibaraki Univ. Dept of Electrical & Electronic Eng.
演習1の解答例の解説 2004年10月21日 海谷 治彦.
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
オペレーティングシステムJ/K (システムプログラミング)
オペレーティングシステム 第2回 割り込みとOSの構成
演習1の解答例の解説 2006年11月8日 海谷 治彦.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
オペレーティングシステムJ/K 2004年11月18日
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
ネットワーク・プログラミング ソケットオプションとスレッド.
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
第4回 ファイル入出力方法.
C言語演習 情報ネットワーク特論.
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
組込みシステムとは コンピュータ制御システム?
オペレーティングシステム (OSの機能と構造)
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
オペレーティングシステムJ/K 2004年10月4日
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
オペレーティングシステムJ/K (システムプログラミング)
ネットワーク・プログラミング デバイスドライバと環境変数.
ネットワーク・プログラミング Cプログラミングの基礎.
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
ネットワーク・プログラミング Linuxシステムとソフトウェア開発.
ネットワーク・プログラミング 非同期I/Oとスレッド同期制御.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
ネットワーク・プログラミング TCPサーバ.
ネットワーク・プログラミング メッセージの作成とセマフォ.
ネットワーク・プログラミング ソケットプログラミングと共有メモリ.
ネットワーク・プログラミング 1対多のプロセス間通信.
オペレーティングシステム (OSの機能と構造)
ネットワーク・プログラミング パイプライン通信とシグナル.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ネットワーク・プログラミング マルチタスク.
情報処理Ⅱ 2005年11月25日(金).
Presentation transcript:

ネットワーク・プログラミング プロセスとファイルシステム管理

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

sleep()やパケット受信、キーボードからの入力処理 1.1 プロセス管理 プロセス管理 sleep()やパケット受信、キーボードからの入力処理 アドレス空間、ファイルの保護 複数のプロセスにCPUを割当る タイマと 割込み 保護 メカニズム プロセス間 通信 スケジューラ カーネル データ この授業の メインテーマ プロセステーブル パイプライン、シグナル、共有メモリ、メッセージ、セマフォ、スレッド、ソケット

1.2 システムコールと割込み システムコール時 割込み時 カーネルモードのプロセス実行 プロセスのスケジューリング ユーザモード 1.2 システムコールと割込み ユーザモード プロセス実行 システムコール時 システム関数の実行 ret_from_sys_call ペンディングのシグナル処理 ペンディングの割込処理 プロセスのスケジューリング 割込み時 IRQに対応するISRを実行 速い割込処理 処理中は他の割込みは無効 遅い割込処理 ret_from_sys_callを実行 割込処理番号 IRQ trap ISR システムコール 遅い 割込処理 システム関数を実行 速い 割込処理 ret_from_sys_call プロセスの実行を継続 プロセスの スケジューリング カーネルモードのプロセス実行

1.3 スケジューラと保護メカニズム スケジューラ 実行可能プロセスの中で最も優先度の高いプロセスにCPUを割当る。 時間 1.3 スケジューラと保護メカニズム 実行するプロセスがない場合に実行される 割込み処理ルーチン スケジューラ 実行可能プロセスの中で最も優先度の高いプロセスにCPUを割当る。 カーネル関数schedule() ret_from_sys_callコードの一部 保護メカニズム アドレス空間の分離 プロセスは他のプロセスのアドレス空間を読み書き出来ない。 ファイルの保護 各ファイルはユーザ(uid)、グループ(gid)を持ち、読出し、書込み、実行の権限が設定されている。 アイドル プロセス プロセス 1 プロセス 2 時間 カーネル ISR CPU時間 スケジューリング コマンドls –lで確認出来る CPUが実行するプログラム

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 オープンファイル記述子 シグナル …. プロセステーブル

1.5 プロセス間通信(IPC)と同期 セマフォによる同期 プロセス間通信(IPC) プロセス間でハードウェア資源を同時にアクセスするのを避ける。 並列処理実行時の同期を取る。 プロセス間通信(IPC) シグナル 非同期に信号を送る。 パイプライン 循環バッファを使い、プロセス間でデータを移動する。 共有メモリ カーネル内のメモリブロックをプロセス間で共有する。 ソケット ソケットを使って、ネットワークを介して情報の読書きを行う。 プロセス A プロセス B プロセス C プロセス間通信 同期 シグナル パイプライン 共有メモリ ソケット カーネル スレッドも学びます ファイル

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

カーネルのキャッシュ情報とディスクの情報を一致させる 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); 戻値 なし

宿題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行書いて下さい。