Mercurial > hg > Papers > 2024 > matac-master
changeset 17:6b40679f0eef
...
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Jan 2024 20:22:51 +0900 |
parents | 110cf95f4106 |
children | 66e1b4c4df1f |
files | mindmaps/gears_fs_db.mm |
diffstat | 1 files changed, 49 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/mindmaps/gears_fs_db.mm Mon Jan 08 16:06:55 2024 +0900 +++ b/mindmaps/gears_fs_db.mm Mon Jan 08 20:22:51 2024 +0900 @@ -2,7 +2,7 @@ <!--To view this file, download free mind mapping software Freeplane from https://www.freeplane.org --> <node TEXT="GearsOS上のファイルシステムとDBの信頼性(仮)" FOLDED="false" ID="ID_452131666" CREATED="1610381621610" MODIFIED="1702111913150" STYLE="oval"> <font SIZE="18"/> -<hook NAME="MapStyle"> +<hook NAME="MapStyle" zoom="0.8"> <properties edgeColorConfiguration="#808080ff,#ff0000ff,#0000ffff,#00ff00ff,#ff00ffff,#00ffffff,#7c0000ff,#00007cff,#007c00ff,#7c007cff,#007c7cff,#7c7c00ff" associatedTemplateLocation="template:/standard-1.6-noEdgeColor.mm" fit_to_viewport="false"/> <map_styles> @@ -397,7 +397,7 @@ <node TEXT="gotoによる軽量継続" ID="ID_726882949" CREATED="1703307895880" MODIFIED="1703307911540"/> <node TEXT="CodeGearの記述例" ID="ID_1731637915" CREATED="1703307784821" MODIFIED="1703307887307"/> </node> -<node TEXT="信頼性の保証を目的としたGearsOS" ID="ID_1315567458" CREATED="1701692210913" MODIFIED="1703311040671"> +<node TEXT="信頼性の保証を目的としたGearsOS" FOLDED="true" ID="ID_1315567458" CREATED="1701692210913" MODIFIED="1703311040671"> <node TEXT="3種類のGearsOS" ID="ID_1326415213" CREATED="1703309744902" MODIFIED="1703309750565"/> <node TEXT="メタ処理を記述するmetaGear" FOLDED="true" ID="ID_1666892566" CREATED="1703309692742" MODIFIED="1703309713823"> <node TEXT="ノーマルレベルとメタレベルの切り分け" ID="ID_719507396" CREATED="1703308470210" MODIFIED="1703308478844"> @@ -413,7 +413,7 @@ <node TEXT="Copyがない" ID="ID_1861504637" CREATED="1704625774975" MODIFIED="1704625778526"/> </node> </node> -<node TEXT="GearsOSのファイルシステム(現状の話" ID="ID_667012992" CREATED="1701694178540" MODIFIED="1704630791818"> +<node TEXT="GearsOSのファイルシステム(現状の話" FOLDED="true" ID="ID_667012992" CREATED="1701694178540" MODIFIED="1704630791818"> <node TEXT="GearsOSのファイルシステム" ID="ID_188577314" CREATED="1704630094596" MODIFIED="1704630099465"> <node TEXT="ファイルシステムはOSの重要な機能である" ID="ID_46805604" CREATED="1704630103040" MODIFIED="1704630119191"/> <node TEXT="分散ファイルシステムとi-nodeを用いたファイルシステムが存在する" ID="ID_1509553363" CREATED="1704630119858" MODIFIED="1704630152926"/> @@ -435,12 +435,54 @@ <node TEXT="GearsFileSystemにおけるGCとレプリケーション" ID="ID_1092227909" CREATED="1701690558237" MODIFIED="1704632532265" HGAP_QUANTITY="16.25 pt" VSHIFT_QUANTITY="-1.5 pt"> <node TEXT="ファイルシステムの信頼性" ID="ID_200982245" CREATED="1704630258973" MODIFIED="1704630267498"> <node TEXT="信頼性に関する追加機能" ID="ID_1574949535" CREATED="1704630312069" MODIFIED="1704630320377"/> -<node TEXT="これらは実装されていない" ID="ID_878946385" CREATED="1704630323433" MODIFIED="1704630331968"/> +<node TEXT="GCやレプリケーションの機能がない" ID="ID_878946385" CREATED="1704630323433" MODIFIED="1704632961588"/> <node TEXT="実装するためにはデータのCopyが必要" ID="ID_822351907" CREATED="1704630337081" MODIFIED="1704630382753"/> <node TEXT="現状はTreeにCopyがない" ID="ID_65833123" CREATED="1704630383271" MODIFIED="1704630397371"/> -<node TEXT="" ID="ID_1314300132" CREATED="1704632535428" MODIFIED="1704632535428"/> +<node TEXT="Copyを実装したい" ID="ID_1314300132" CREATED="1704632535428" MODIFIED="1704632976417"/> +</node> +<node TEXT="GearsFileSystemのGC" ID="ID_442801060" CREATED="1704692757836" MODIFIED="1704692764197"> +<node TEXT="GCの種類" ID="ID_1746770811" CREATED="1704695739812" MODIFIED="1704696582051"> +<node TEXT="CopyingGCとは" ID="ID_344664264" CREATED="1704692777863" MODIFIED="1704692782352"> +<node TEXT="正確なGC" ID="ID_267216671" CREATED="1704696904268" MODIFIED="1704696908732"/> +<node TEXT="ヒープ領域をFrom領域とTo領域に分割" ID="ID_1262852949" CREATED="1704711856815" MODIFIED="1704711932146"/> +<node TEXT="ルートから参照できるオブジェクトをFrom領域からTo領域にコピーする" ID="ID_1311182649" CREATED="1704711932613" MODIFIED="1704711957213"/> +</node> +<node TEXT="Reference counting GC" ID="ID_776539806" CREATED="1704696590166" MODIFIED="1704696594363"> +<node TEXT="オブジェクトの被参照数を表すカウンタを用いる" ID="ID_166536665" CREATED="1704710714477" MODIFIED="1704710852447"/> +<node TEXT="被参照数が0になった時オブジェクトが解放される" ID="ID_1678718232" CREATED="1704711836498" MODIFIED="1704711854290"/> +</node> +<node TEXT="Mark \& Sweep GC" ID="ID_715438606" CREATED="1704696594768" MODIFIED="1704696598757"> +<node TEXT="マークフェーズとスイープフェーズからなる" ID="ID_1584128194" CREATED="1704710119330" MODIFIED="1704710167419"/> +<node TEXT="マークフェーズ" ID="ID_393316688" CREATED="1704710141321" MODIFIED="1704710158148"> +<node TEXT="生きているオブジェクト全てにマークをつける" ID="ID_684669159" CREATED="1704710178984" MODIFIED="1704710191749"/> +</node> +<node TEXT="スイープフェーズ" ID="ID_1823266942" CREATED="1704710168764" MODIFIED="1704710173540"> +<node TEXT="マークがつけられなかったオブジェクトを回収する" ID="ID_1569463715" CREATED="1704710220250" MODIFIED="1704710369400"/> +</node> +</node> </node> -<node TEXT="RedBlackTreeは単なる2分木" ID="ID_1037813952" CREATED="1704632767323" MODIFIED="1704632780206"/> +<node TEXT="GCは併用される" ID="ID_1496671439" CREATED="1704696631667" MODIFIED="1704696640285"/> +<node TEXT="Rustのスマートポインタ" ID="ID_881149259" CREATED="1704696608959" MODIFIED="1704696615328"/> +<node TEXT="CopyingGCを用いる" ID="ID_1639428535" CREATED="1704692768575" MODIFIED="1704692777490"> +<node TEXT="なぜCopyingGCなのか" ID="ID_1226680678" CREATED="1704696722580" MODIFIED="1704696736347"> +<node TEXT="全てのデータはRedBlackTreeに格納される" ID="ID_1096077315" CREATED="1704710451766" MODIFIED="1704710463902"> +<node TEXT="(使用中のデータ)" ID="ID_55750630" CREATED="1704710470136" MODIFIED="1704710480143"/> +</node> +<node TEXT="木を辿れば全ての生きているオブジェクトを参照することが可能" ID="ID_1690086792" CREATED="1704710464413" MODIFIED="1704710513053"> +<node TEXT="正確なGC" ID="ID_1987344082" CREATED="1704710533695" MODIFIED="1704710540754"/> +</node> +<node TEXT="なのでCopyingGCを簡単に適用できる" ID="ID_1935146464" CREATED="1704710513688" MODIFIED="1704710568354"/> +</node> +<node TEXT="どのように利用するか" ID="ID_549509034" CREATED="1704696775586" MODIFIED="1704696779463"> +<node TEXT="通常のCopyingGCではヒープ領がコピーされる" ID="ID_830576894" CREATED="1704692782815" MODIFIED="1704692814222"/> +<node TEXT="GearsFileSystemの場合は木をコピーする" ID="ID_1003156855" CREATED="1704692814851" MODIFIED="1704692831840"/> +<node TEXT="参照しているオブジェクトは木のルートから辿れる" ID="ID_1653048898" CREATED="1704696789481" MODIFIED="1704696806177"/> +<node TEXT="辿れるノードのみコピーするだけでGCになる" ID="ID_355389629" CREATED="1704696807343" MODIFIED="1704696829530"/> +</node> +<node TEXT="併用はしないのか" ID="ID_939269191" CREATED="1704696736711" MODIFIED="1704696742433"/> +<node TEXT="Rustのスマートポインタのような仕組みにしないのか" ID="ID_110730790" CREATED="1704696742911" MODIFIED="1704696758432"/> +</node> +</node> <node TEXT="RedBlackTreeのコピーを用いる" ID="ID_1495626047" CREATED="1704630409263" MODIFIED="1704632465291"> <node TEXT="Copy" ID="ID_1713857745" CREATED="1699848476363" MODIFIED="1699848479936"> <node TEXT="単なる2分木のコピー" ID="ID_1165724596" CREATED="1699849455588" MODIFIED="1699849469353"/> @@ -448,28 +490,6 @@ <node TEXT="木を辿るためにStackを使う" ID="ID_278711519" CREATED="1699849561986" MODIFIED="1699849582652"> <node TEXT="コピー後に消されるので使って良い" ID="ID_841332618" CREATED="1701690823328" MODIFIED="1701690834394"/> </node> -<node TEXT="アルゴリズム" ID="ID_1656007390" CREATED="1699849518269" MODIFIED="1699849522647"> -<node TEXT="左側を深さ優先で辿る" ID="ID_1668782448" CREATED="1699849525266" MODIFIED="1699849604742"> -<node TEXT="Stack push" ID="ID_687427551" CREATED="1699849778090" MODIFIED="1699849781012"/> -</node> -<node TEXT="アロケートしたノードは別のContext上に作る" ID="ID_143303559" CREATED="1699849620905" MODIFIED="1699849638042"> -<node TEXT="GCのため" ID="ID_938753766" CREATED="1699849638520" MODIFIED="1699849668501"/> -<node TEXT="Copy後古いContextを消す" ID="ID_743040439" CREATED="1699849646521" MODIFIED="1699849693755"/> -<node TEXT="メモリ管理をモナドで表していることになる" ID="ID_4878265" CREATED="1699849705089" MODIFIED="1699849715878"/> -</node> -<node TEXT="リーフまで降りたらroot方向に木を戻る" ID="ID_1651314723" CREATED="1699849731393" MODIFIED="1699849765553"> -<node TEXT="Stack pop" ID="ID_657141661" CREATED="1699849765982" MODIFIED="1699849773214"/> -<node TEXT="右側を呼び出す" ID="ID_412841654" CREATED="1699849789218" MODIFIED="1699849803550"/> -</node> -<node TEXT="Stackを2つ使うならば" ID="ID_179912595" CREATED="1699849785880" MODIFIED="1699850937824"> -<node TEXT="全体のStack" ID="ID_605104581" CREATED="1699850965212" MODIFIED="1699858010811"> -<node TEXT="originの木を辿るために使う" ID="ID_742122803" CREATED="1699858046929" MODIFIED="1699858071837"/> -</node> -<node TEXT="途中のStack" ID="ID_1233298698" CREATED="1699850966215" MODIFIED="1699858024318"> -<node TEXT="右側を呼び出す際にそれまでの左側部分木を保持" ID="ID_573311498" CREATED="1699851138198" MODIFIED="1699858042178"/> -</node> -</node> -</node> <node TEXT="Copy前後の同一性確認が必要" ID="ID_659073251" CREATED="1699849956727" MODIFIED="1699849974942"/> <node TEXT="Copy中の変更" ID="ID_58260128" CREATED="1699849982760" MODIFIED="1699849992692"/> <node TEXT="毎回全てをGCするか" ID="ID_1441955822" CREATED="1699858222922" MODIFIED="1699858309153"> @@ -490,6 +510,7 @@ </node> </node> </node> +<node TEXT="RedBlackTreeは単なる2分木" ID="ID_1037813952" CREATED="1704632767323" MODIFIED="1704632780206"/> </node> <node TEXT="CopyRedBlackTreeによるGCの仕組み" ID="ID_694714867" CREATED="1701696212033" MODIFIED="1703491006779"> <node TEXT="CopyingGCを使用する" ID="ID_1956008882" CREATED="1704630535071" MODIFIED="1704630542771"/>