分散環境上におけるファイルへの統一 的アクセス機構 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を開くシステムコール → ここまで実装 → 続きは来期実装 ★ その他今期学んだこと ★ ・ソースコードを読むことでシステム コールの内部、カーネルのことを勉 強 ・カーネルいじりのエグさ…
© Copyright 2024 ExpyDoc