Mercurial > hg > Papers > 2023 > matac-sigos
view Paper/figs/gearsDirectoryMM.json @ 16:661c35912701
no image version
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 17 Apr 2023 10:27:01 +0900 |
parents | 466b958a3419 |
children |
line wrap: on
line source
{ "name": "GearsOSにおけるinodeを用いたFile systemの設計", "children": [ { "name": "研究目的", "children": [ { "name": "GearsOSとは", "children": [ { "name": "信頼性と拡張性", "children": [], "metadata": { "type": "header", "level": 4 } }, { "name": "ノーマルレベルメタレベルの分離", "children": [ { "name": "信頼性", "children": [ { "name": "モデル検査", "children": [ { "name": "継続性", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 6 } }, { "name": "定理証明", "children": [ { "name": "agda", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 6 } } ], "collapsed": false, "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "ファイルシステム未実装", "children": [ { "name": "だがOSにおいて重要な機能である", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "GearsOSのファイルシステム設計", "children": [ { "name": "基幹となるディレクトリシステム", "children": [], "metadata": {} }, { "name": "ファイル構造", "children": [], "metadata": {} }, { "name": "API設計中", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "取り入れたい要素", "children": [ { "name": "backup", "children": [], "metadata": {} }, { "name": "log", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "CbC", "children": [ { "name": "簡単な説明", "children": [ { "name": "Cの下位言語", "children": [ { "name": "Cとの違いは", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "関数呼び出しの代わりに継続を用いる", "children": [ { "name": "継続とは", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "環境を持たない", "children": [ { "name": "環境とは", "children": [ { "name": "プログラムが実行される際、その出力に影響を与える変数やデータのこと", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } }, { "name": "関数型言語のtail callスタイルにあたるプログラミング", "children": [ { "name": "tail call スタイルとは", "children": [], "metadata": {} }, { "name": "末尾再帰とも言う", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "Code Gear", "children": [ { "name": "関数の代わり", "children": [], "metadata": {} }, { "name": "_codeで宣言を行う", "children": [], "metadata": {} }, { "name": "Input/Output DG", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "Data Gear", "children": [], "metadata": { "type": "header", "level": 3 } }, { "name": "normal level", "children": [ { "name": "user", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "meta level", "children": [ { "name": "kernel", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "継続性", "children": [ { "name": "goto", "children": [ { "name": "jmp命令を用いる", "children": [], "metadata": {} }, { "name": "引数付き", "children": [], "metadata": {} }, { "name": "普通のgotoと違うところは", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "軽量継続", "children": [ { "name": "環境を持たない", "children": [ { "name": "必要なデータは毎回inputする", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } }, { "name": "関数呼び出し(call)せず、jmpする", "children": [ { "name": "処理はcallよりjmpが軽量", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "GearsOSについて", "children": [ { "name": "GearsOSとは", "children": [ { "name": "信頼性の保証が目的", "children": [ { "name": "モデル検査", "children": [], "metadata": { "type": "header", "level": 5 } }, { "name": "ノーマルレベルメタレベル切り分けがされている", "children": [], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } } ], "collapsed": false, "metadata": { "type": "header", "level": 3 } }, { "name": "Context", "children": [ { "name": "全てのCG, DGを参照できるMetaDG", "children": [ { "name": "normalレベルのCGから直接参照してしまうとメタレベルを切り分けた意味がなくなってしまう", "children": [], "metadata": {} }, { "name": "Metaなのでnormalから直接参照しない", "children": [], "metadata": {} }, { "name": "必ずMetaCGから参照される", "children": [], "metadata": {} }, { "name": "CodeGearはDataGearの一種であるからMetaDGにMetaCGの参照を入れることが可能", "children": [], "metadata": {} }, { "name": "CGとDGの接続に用いられる", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "従来OSのプロセスに相当", "children": [ { "name": "UserプロセスにあたるUser Contextが存在する", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "種類", "children": [ { "name": "Kernel Context", "children": [ { "name": "OS上の全てのContextを参照できる", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } }, { "name": "User Context", "children": [ { "name": "ユーザーごとに存在する", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } }, { "name": "CPU Context", "children": [ { "name": "実行しているCPUやGPUごとに存在する", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } }, { "name": "Context参照の流れ", "children": [ { "name": "CGがOutputDataGearへデータをoutput", "children": [], "metadata": {} }, { "name": "次のCGのstubCodeGearへgoto", "children": [], "metadata": {} }, { "name": "stubCGはinputDataGear(前のCGのoutputDG)とOutputDGを参照", "children": [], "metadata": {} }, { "name": "CGへgoto", "children": [], "metadata": {} }, { "name": "OutputDGへOutput", "children": [], "metadata": {} }, { "name": "次のstubCodeGearへgoto", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "collapsed": false, "metadata": { "type": "header", "level": 3 } }, { "name": "stub", "children": [], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "Christie", "children": [ { "name": "Christieとは", "children": [ { "name": "並列分散通信フレームワーク", "children": [], "metadata": { "type": "header", "level": 4 } }, { "name": "CbCとは異なるGearの概念", "children": [ { "name": "DataGear", "children": [ { "name": "atomic", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } }, { "name": "CodeGear", "children": [], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "DataGearManager", "children": [ { "name": "DGを管理している", "children": [], "metadata": { "type": "header", "level": 4 } }, { "name": "key value store", "children": [ { "name": "CGMが利用するCGのkeyとputされたDG(value)の組み合わせをもつ", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "Fileとして用いる", "children": [], "metadata": { "type": "header", "level": 4 } }, { "name": "LocalDGMとRemoteDGM", "children": [ { "name": "LocalはCGM自身が所持するDGのプール", "children": [], "metadata": {} }, { "name": "RemoteはCGMが配線されている別のCGMがもつDGのプール", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "topology manager", "children": [ { "name": "任意のtopologyを生成することができる", "children": [ { "name": "topologyのノードはCGM", "children": [], "metadata": {} }, { "name": "ノード同士の通信接続を管理", "children": [], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } }, { "name": "分散プログラムを簡潔に書くために必要", "children": [], "metadata": { "type": "header", "level": 4 } }, { "name": "静的topology", "children": [ { "name": "任意のtopologyとノードの配線ができる", "children": [], "metadata": {} }, { "name": "dotファイルに記述し,TopologyManagerに参照させる", "children": [], "metadata": {} }, { "name": "dotファイルに記述したノードの数と参加ノードの数が一致した場合に動作する", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "動的topology", "children": [ { "name": "参加を表明したノードに対し,自動的に配線を行う", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "UnixのFilesystem", "children": [ { "name": "xv6", "children": [ { "name": "MITで教育用の目的で開発されたOS", "children": [], "metadata": {} }, { "name": "Unixの基本構造を持つ", "children": [], "metadata": {} }, { "name": "filesystem", "children": [ { "name": "inode", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "CbCによるxv6の書き換えが行われた", "children": [], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "inode", "children": [ { "name": "Fileの属性情報", "children": [ { "name": "File Types", "children": [], "metadata": {} }, { "name": "Permissions", "children": [], "metadata": {} }, { "name": "UID", "children": [], "metadata": {} }, { "name": "GID", "children": [], "metadata": {} }, { "name": "File Size", "children": [], "metadata": {} }, { "name": "Time Stamps", "children": [], "metadata": {} }, { "name": "Number of link", "children": [], "metadata": {} }, { "name": "Location on hard disk", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "inode number", "children": [ { "name": "inodeを識別するための番号", "children": [], "metadata": {} }, { "name": "ファイル名とinodeがペアになっている", "children": [], "metadata": {} }, { "name": "Mac OSではls -iで確認可能", "children": [], "metadata": {} }, { "name": "ファイルシステム内で一意の番号", "children": [], "metadata": {} }, { "name": "ファイル数の上限がここで決まってくる", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "collapsed": true, "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "GearsFileSystemのディレクトリ", "children": [ { "name": "Treeによるディレクトリ構造(図などでここ詳しく)", "children": [ { "name": "RedBlackTree", "children": [ { "name": "DataGearManagerを格納してFileSystemに", "children": [], "metadata": {} }, { "name": "API", "children": [ { "name": "put", "children": [], "metadata": {} }, { "name": "get", "children": [], "metadata": {} }, { "name": "remove", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } }, { "name": "2つの木を用いる", "children": [ { "name": "inumとfile pointer", "children": [ { "name": "key: inum", "children": [], "metadata": {} }, { "name": "value: file pointer", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } }, { "name": "inumとfilename", "children": [ { "name": "key: filename", "children": [], "metadata": {} }, { "name": "value: inum", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "Unix Like", "children": [ { "name": "mkdir", "children": [], "metadata": {} }, { "name": "cd", "children": [], "metadata": {} }, { "name": "ls", "children": [ { "name": "filenameのlistを入れることでlsのリスト表示を実装できる", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "非破壊的編集によるBackUp", "children": [ { "name": "バックアップ機能をOS自体に持たせたいという目的", "children": [], "metadata": { "type": "header", "level": 4 } }, { "name": "GearsOSにおける永続データ", "children": [ { "name": "木構造を用いる", "children": [ { "name": "RedBlackTree", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 5 } }, { "name": "ルートノードから変更ノードまでのパスを全てコピー", "children": [], "metadata": { "type": "header", "level": 5 } }, { "name": "コピーしたパス上に存在しないノードはコピー元の木構造と共有", "children": [], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "ファイル構造", "children": [ { "name": "構成", "children": [ { "name": "I/O stream", "children": [ { "name": "keyで参照", "children": [], "metadata": { "type": "header", "level": 5 } }, { "name": "競合的アクセス", "children": [ { "name": "synchronizedQueue", "children": [ { "name": "parusuさんの論文", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 6 } } ], "metadata": { "type": "header", "level": 5 } }, { "name": "3つのQueue", "children": [ { "name": "input", "children": [ { "name": "データをinputしたい場合にこのQueueにput", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 6 } }, { "name": "output", "children": [ { "name": "データを取得したい場合にこのQueueからtake", "children": [ { "name": "Synchronized QueueかSingleLinkedQueueを選べる", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 7 } } ], "metadata": { "type": "header", "level": 6 } }, { "name": "main", "children": [ { "name": "データそのもの", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 6 } }, { "name": "input -> main -> output のような繋がり", "children": [], "metadata": {} }, { "name": "queueの中身は共通してelement", "children": [ { "name": "elementとは", "children": [], "metadata": { "type": "header", "level": 7 } } ], "metadata": { "type": "header", "level": 6 } }, { "name": "これらのQueueはkeyとペアになっており,keyで参照することができる.", "children": [], "metadata": { "type": "header", "level": 6 } } ], "metadata": { "type": "header", "level": 5 } } ], "metadata": { "type": "header", "level": 4 } }, { "name": "logによるバージョン管理", "children": [ { "name": "git mercurial的", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "collapsed": false, "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "WordCount", "children": [ { "name": "APIの設計に用いる", "children": [], "metadata": { "type": "header", "level": 3 } }, { "name": "機能", "children": [ { "name": "ファイルの中身を読み取り", "children": [ { "name": "文字数", "children": [], "metadata": {} }, { "name": "行数", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "Unix Fileに対して行う", "children": [], "metadata": { "type": "header", "level": 4 } }, { "name": "中間報告の時の図", "children": [], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "GearBox的に処理する", "children": [ { "name": "一木さん図5", "children": [], "metadata": {} }, { "name": "File操作の仕組み", "children": [], "metadata": {} }, { "name": "GearBoxとは", "children": [ { "name": "GearsOSの機能を表現する手法", "children": [], "metadata": {} }, { "name": "状態遷移図とクラスダイアグラムを組み合わせたような図", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "考察", "children": [ { "name": "現状", "children": [ { "name": "実装できた部分", "children": [ { "name": "RBTreeの動作test(予定)", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "課題", "children": [ { "name": "GearsOSへのtopologyManagerの実装", "children": [], "metadata": {} }, { "name": "ディレクトリ構造の作成", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "collapsed": false, "metadata": { "type": "header", "level": 3 } }, { "name": "今後の課題", "children": [ { "name": "分散ファイルシステム", "children": [], "metadata": {} }, { "name": "信頼性", "children": [ { "name": "GearsAgda", "children": [], "metadata": {} }, { "name": "モデル検査", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "shell", "children": [], "metadata": { "type": "header", "level": 4 } }, { "name": "path", "children": [], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "信頼性について", "children": [ { "name": "モデル検査", "children": [ { "name": "RedBlackTreeのモデル検査", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "定理証明", "children": [], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "参考文献", "children": [ { "name": "一木さん", "children": [ { "name": "https://ie.u-ryukyu.ac.jp/~kono/papers/kono/2021/ikki-sigos-2021.pdf", "children": [], "metadata": {} }, { "name": "一木 貴裕 ,河野 真治(琉球大学), 情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS), May, 2021", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "アナグラさん", "children": [ { "name": "http://www.cr.ie.u-ryukyu.ac.jp/hg/Papers/2021/anatofuz-master/raw-file/tip/paper/master_paper.pdf", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "parusuさん", "children": [], "metadata": {} }, { "name": "xv6", "children": [ { "name": "https://pdos.csail.mit.edu/6.828/2018/xv6/book-rev11.pdf", "children": [], "metadata": {} }, { "name": "Papers/2020/anatofuz-sigos/", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "付録", "children": [ { "name": "mindmap", "children": [], "metadata": {} }, { "name": "gearsDirectory source", "children": [], "metadata": {} } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } }, { "name": "章立て", "children": [ { "name": "GearsOSにおける分散ファイルシステム(研究目的)", "children": [], "metadata": { "type": "header", "level": 3 } }, { "name": "CbC", "children": [], "metadata": { "type": "header", "level": 3 } }, { "name": "GearsOSについて", "children": [], "metadata": { "type": "header", "level": 3 } }, { "name": "Christie", "children": [ { "name": "Gear概念", "children": [], "metadata": {} }, { "name": "DataGearManager", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "UnixのFilesystem", "children": [ { "name": "inode", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "GearsFileSystemのディレクトリ", "children": [ { "name": "Treeによるディレクトリ構造(図などでここ詳しく)", "children": [], "metadata": {} }, { "name": "Unix Like", "children": [ { "name": "inodeを用いたディレクトリエントリ", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } }, { "name": "非破壊的編集によるBackUp", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "ファイル構造", "children": [ { "name": "構成", "children": [ { "name": "logによるバージョン管理", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 4 } } ], "metadata": { "type": "header", "level": 3 } }, { "name": "WordCount", "children": [], "metadata": { "type": "header", "level": 3 } }, { "name": "考察", "children": [ { "name": "今後の課題", "children": [], "metadata": {} } ], "metadata": { "type": "header", "level": 3 } }, { "name": "参考文献", "children": [], "metadata": { "type": "header", "level": 3 } } ], "collapsed": false, "metadata": { "type": "header", "level": 2 } } ], "metadata": { "type": "header", "level": 1, "mode": "mindmap" } }