分散環境上におけるファイルへの統一的アクセス機構

分散環境上におけるファイルへの統一
的アクセス機構
move! B2 micchie
動機

ユビキタスネットワーク
–
–


システム(ノード)の分散化
個人が利用するデータの分散化
遠隔のファイルもローカルのファイルと同じよう
に扱いたいという要求
既存の実現方法
–
–
分散ファイルシステムを利用したマウント
ファイルをローカルにコピー
既存の方法を利用して遠隔ファイルを扱うこ
との問題点

NFSなどを使ったマウント
–
マウント(アンマウント)にはルート権限が必要

–

通常のアプリケーションは一般ユーザー権限で動作
ディレクトリ単位での扱いになる
ローカルにコピー
–
多くのステップが必要
※既存の解決方法
–
Plan9, Inferno

プロセス単位でファイルシステムをマウント
-> ユーザー権限でのマウントが可能
目的



ユーザ権限での遠隔ファイルへのシンプルなア
クセス機構の実装
アプリケーションに対する共通インターフェイス
の提供
(今後の低レイヤーの研究への第一歩と実装能
力の強化)
アプローチ

open()システムコールの拡張
–
–

第1引数に、IPアドレスが指定されていたら、そのホ
ストの、パスで指定されたファイルをオープンする
Ex) fd = open(133.27.171.80:/home/micchie/hoi,
O_RDONLY, 0) ;
OSの機能として実装する理由
–
アプリケーションへ共通インターフェースを提供する
ため
動作概要
micchie@damier
fd =
open(133.27.171.80:
/home/micchie/hoi, O_RDWR, 0) ;
ホスト133.27.171.80
/
/etc
/usr
/home
skk/
moe
micchie/
hogehoge
hoi
設計

ローカルのファイル構造体と遠隔のvnode構造
体を結びつける
–


ファイルを扱うがI/Oは行わない操作に関して, ネット
ワーク越しに行う必要をなくすため
クライアント側はファイル構造体を割り当てた後
開くファイルのデータをサーバーに送信
サーバー側は, vnodeを開いてその情報をクライ
アントに送り返す
内部動作
クライアント
open()
falloc()
サーバ
ユーザー空間
uvopen()
カーネル空間
file記述子
file構造体
rv_open()
vn_open()
vnode構造体
vn_open()
vnode構造体
構造・苦労話
open()
kern_open()
falloc()
-> file構造体割り当て
EXCPTHOST() -> パスにIPが含まれているか判別
NDINIT() -> nameidata構造体初期化
rv_open() -> msghdr構造体初期化、各種変数初期化
socket()
kern_sendit() ----------------- sendto(),sendit()は失敗
sosend()
uiomove() -> ここでuser空間からコピーしようとして失敗してた
send()
進捗

open()の中でファイル構造体を割り当てた後IP
を解析してそのホストへ情報を伝達
–
–

open()で指定された引数 (IPアドレス部分は除く)
実効UID, GID
をデータとする
送られてきたデータを元にvnodeを開くシステム
コールの実装
今後
–
–
–
–
サーバー側がvnodeのデータを送り返す
それに基づいてクライアント側がファイル構造体を設
定, read, write操作への対応
高速化
ネットワークを使うことによる問題の解決


切断
データ損失
まとめ

リモートのファイルを開くためのopen()の拡張
–
–
カーネルの中からリモートのホストへデータを送る
送られてきたデータをもとにvnodeを開くシステムコール
→ ここまで実装 → 続きは来期実装
★ その他今期学んだこと ★
・ソースコードを読むことでシステム
コールの内部、カーネルのことを勉
強
・カーネルいじりのエグさ…