annotate user/Itsuki/sigos2021.md @ 107:22cd14055697

backup 2022-08-03
author autobackup
date Wed, 03 Aug 2022 00:10:03 +0900
parents 6c46d8f76ec4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
1 # GearsOSの分散ファイルシステムの設計
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
2 author: 一木 貴裕, 河野 真治
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
3
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
4 profile: 琉球大学理工学研究科情報工学専攻 河野研究室
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
5
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
6 lang: Japanese
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
7
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
8 code-engine: coderay
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
9
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
10
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
11 ## OSと密に結合したファイルシステムの設計
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
12 - 信頼性と拡張性の保証を目的としたGearsOSを開発中
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
13 - GearsOSの分散ファイルシステムを開発したい
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
14 - 分散フレームワークChristieの構成をもとにする
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
15 - Christieが持つTopologyManagerという機能を使う
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
16 - プログラムの通信とストレージの接続を管理する
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
17
67
a4f167def66b backup 2021-05-26
autobackup
parents: 66
diff changeset
18 ## 従来のファイルシステムの問題点
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
19 - データベースになっていない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
20 - 重複度やリカバリをアプリケーションが担当している
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
21 - 暗号化などのセキュリティもアプリケーションが担当している
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
22 - OS自体がこれらの機能を持つのが望ましい
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
23
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
24 ### 従来のファイルシステムのトランザクション
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
25 - レコードのTransactionとして提供していない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
26 - 提供しているのは
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
27 - ファイルのロック
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
28 - ディレクトリの名前の置き換え
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
29 - FileSystemのAPIを総括してトランザクションとして設計したい
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
30
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
31 ### ファイルの型
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
32 - OSレベルから見たファイルの型が存在しない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
33 - 実行形式のみをOSが認識している
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
34 - 型の区別はアプリケーションに委ねられている
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
35 - lsとreadmeなどの型の区別がつかない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
36 - OS自体がファイルの型を見分けるように設計したい
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
37
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
38 ### ファイルの名前自体がデータベースのkeyとなっていない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
39 - 従来ではファイル固有のIDとファイル名を紐付けしたりする
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
40 - 様々なファイル単位が混同になっている
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
41 - 複数のレコード
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
42 - 複数の表
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
43 - sqlite3
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
44 - OS自体がユニークなファイルIDのリストを保持する設計にしたい
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
45
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
46 ### 重複度とファイルリカバリ
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
47 - ファイルの複製が行われた際の安全性が確保できない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
48 - バックアップデータを勝手な場所に置かれてしまう
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
49 - バックアップデータをOSが管理する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
50
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
51 ### 署名と暗号化
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
52 - ファイルの署名もしくは暗号化の機能をOSファイルシステムに持たせたい
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
53 - 公開鍵と秘密鍵
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
54 - 秘密鍵を持つファイルを作成したユーザと公開鍵を持つ任意のユーザが相互にエンコードとデコードが行える仕組み
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
55 - 署名はファイルにメタデータとして保持できるようにする
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
56 - 鍵の管理もOSが担うようにしたい
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
57
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
58 ## OSの信頼性について
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
59 - アプリケーションを動かすOSには高い信頼性が保証されるべきである
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
60 - OSの処理やコードの量は膨大になる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
61 - テストコードを用いた信頼性の保証は困難であると言える
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
62 - 数学的な背景に基づいた形式手法を用いて検証したい
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
63 - 定理支援証明
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
64 - モデル検査
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
65 - OSを形式手法にて証明するには状態遷移単位での記述が求められる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
66 - GearsOSはメタレベルとノーマルレベルの計算を分離して記述が行える構成である
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
67 - メタレベルの計算でプログラムの整合性を検証する
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
68
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
69 ## Continuation based C(CbC)
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
70 - CbCとはC言語の下位言語である
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
71 - CbCは関数呼び出しでなくjmp命令で移動する継続を導入している
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
72 - jmp命令でコード間を移動することにより軽量な継続を実現している
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
73 - CbCでは継続を用いてfor 文などのループ文を実装する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
74 - Gearというプログラム概念を持つ
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
75 - CbCでは関数の代わりにCodeGearという単位でプログラムを行う
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
76 - CodeGearによる記述は形式手法に必要な状態遷移そのものとして見ることができる。
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
77
67
a4f167def66b backup 2021-05-26
autobackup
parents: 66
diff changeset
78 ## Gearsの概念
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
79 - CodeGear:従来のプログラムやスレッド
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
80 - DataGear:変数データ
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
81 - CodeGearはDataGearと呼ばれる変数データを入力として受け取る
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
82 - CodeGearの処理結果を別のDataGear に書き込む
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
83 - 入力のDataGearをInputDataGear
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
84 - 出力されるDataGearをOutputDataGear
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
85 - CodeGearが参照できるDataGearはInput/output DataGearに限定される。
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
86 - CodeGearは関数呼び出しのスタックを持たない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
87 - 一度コードブロックを遷移すると元の処理に戻ってこられない
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
88
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
89 <center><img src="https://i.imgur.com/zCiaOrY.jpg" width="500px"></center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
90 <center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
91
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
92
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
93 ## GearsOS
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
94 - CbCを用いて記述されたOSである
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
95 - CodeGearとその入出力であるDataGearを基本とする
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
96 - 現在は並列フレームワークとして実装されている
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
97 - 実用的なOSのプロトタイプとして実装を目指している
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
98 - ノーマルレベルからではCodeGearの遷移は単純にCodeGearがDataGearをInput/Outputを繰り返し、コードブロックを移動するように見える
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
99 - 実際にはCodeGearから別のCodeGearへの遷移の際、データ整合性の確認などのメタ計算が加わる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
100 - これをMetaCodeGearと呼ぶ
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
101 - MetaCodeGearはCodeGearごとに実装される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
102 - MetaCodeGear内で参照されるDataGearをMetaDataGearと呼ぶ
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
103 - MetaCodeGearやMetaDataGearはプログラマが直接実装することはない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
104 - 現在はPerlスクリプトにより、GearsOSのビルド時に生成される
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
105
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
106 <center><img src="https://i.imgur.com/eL9rOF5.jpg" width="500px"></center>
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
107 <center>
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
108 CodeGearから別のCodeGearへ遷移する際のDataGearなどの関係性
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
109 </center>
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
110
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
111 ## Christie
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
112 - Christieは並列分散フレームワークである
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
113 - java言語で構成される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
114 - GearsOSと似てはいるが別のGearというプログラミング概念をもつ
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
115 - Gearは以下の四種類が存在しする。
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
116 - CodeGear (CG) : スレッド、クラス
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
117 - DataGear (DG) : 変数データ
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
118 - CodeGearManager (CGM) : ノード
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
119 - DataGearManager (DGM) : データプール
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
120
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
121
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
122 ### CodeGear(以下CG)
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
123 - DataGearを参照しながらプログラムを実行する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
124 - 処理に必要なDataGearのkeyをプログラム内に記述する必要がある
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
125 - CGMがsetupという処理を行うことで待ち合わせが始まる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
126 - プログラム(CG)内に記述された全てのDataGearのkeyにデータが格納されると実行される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
127
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
128 ### DataGear(以下DG)
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
129 - keyと変数データの組み合わせで構成される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
130 - アノテーションを用いて記述する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
131 - アノテーションの種類によりkeyの変数データの参照方法が変わる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
132
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
133 ### CodeGearManager(以下CGM)
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
134 - CodeGear,DataGear,DataGearManagerを管理する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
135 - 分散処理のノードに相当する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
136 - それぞれポートを持つ
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
137 - putという操作でDagaGearを任意のCGMの持つDataGearManagerに格納する
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
138
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
139 ### DataGearManager(以下DGM)
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
140 - 各CodeGearManagerが1つづつ所持している
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
141 - データプールになっておりCGMが利用するDGを全て保持している
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
142 - LocalDGMとRemoteDGMの二種類存在する(後述)
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
143
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
144 ## Christieのコード例
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
145 - Christieを用いてHelloWorldを記述した際のコードが以下となる。
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
146 ```
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
147 public class StartHelloWorld extends StartCodeGear {
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
148
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
149 public static void main(String[] args){
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
150 CodeGearManager cgm = createCGM(10000);  //CGMの作成
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
151 cgm.setup(new HelloWorldCodeGear()); //CGMにCGをsetupする
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
152 cgm.getLocalDGM().put("hellokey","hello"); //setupされたCGが持つDGのkeyにデータを設定する
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
153 cgm.getLocalDGM().put("hellokey","world");//同上
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
154 }
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
155 }
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
156 ```
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
157
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
158 ```
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
159 public class HelloWorldCodeGear extends CodeGear {
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
160
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
161 @Take //アノテーション
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
162 String hellokey; //待ち合わせ&プログラム内で使用するDataGear
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
163
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
164 @Override
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
165 protected void run(CodeGearManager cgm) { //CGの処理内容
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
166 System.out.print(hellokey + " ");
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
167 cgm.setup(new HelloWorldCodeGear());
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
168 }
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
169 }
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
170 ```
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
171
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
172
67
a4f167def66b backup 2021-05-26
autobackup
parents: 66
diff changeset
173 ## LocalDGMとRemoteDGM
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
174 - LocalDGMは各ノード固有のデータプールである
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
175 - RemoteDGMは他ノードのLocalDGMに対応するプールである
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
176 - 接続しているノードの数だけ存在する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
177 - DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
178 - Localであれば、LocalのCGMが管理するDGMに対しDGを格納する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
179 - RemoteDGMを指定してputすると、接続している任意のノードにDGを送信する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
180 - CGMの接続をする=接続先のRemoteDGMを作成する
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
181
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
182 ![](https://i.imgur.com/BJNVkii.jpg)
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
183
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
184
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
185 ## TopologyManager
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
186 - Christieがもつ通信形成を簡潔に行う機能である
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
187 - Topologyに参加を表明したノードを自動的に配線する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
188 - Topologyの形状に合わせ、各ノードにRemoteDGMを作成する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
189 - ノードは相対的に接続された別のノードにラベルをつけ参照することができる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
190 - ソケット接続などの処理を全てTopologyManagerに任せることができる
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
191
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
192
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
193 ## GearsOSのファイルアクセスAPI
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
194 - WordCount例題を通して構築する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
195 - WordCount
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
196 - 指定したファイルの中身の文字列を読み取る
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
197 - 文字数と行列数のcount
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
198 - 加えて文字列を出力する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
199 - WordCountのコードブロックは大きく分けて二つに分類できる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
200 - FileOpenスレッド
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
201 - 指定した名前のファイルをFile構造体としてOpenする
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
202 - ファイル内文字列を1行づつブロックとしてWordCountスレッドに送信する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
203 - WordCountスレッド
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
204 - 文字列のブロックを受け取る
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
205 - 文字列を表示する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
206 - 文字数と行列のCountUpをする
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
207 - WordCountとファイルの接続はプログラムの外で接続される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
208 - 将来的にChristieのTopologyManagerで接続を行いたい
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
209
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
210 <center><img src="https://i.imgur.com/IFffeMq.jpg" width="600px"></center>
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
211
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
212 ## 競合アクセスを可能とするChristieAPI 
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
213 - GearsOS上のファイルは名前のついた大域的な資源として扱われる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
214 - 複数のCodeGearから競合的にアクセスされる場合がある
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
215 - 上記のAPIではファイルとWordCountが直接的に結合されている
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
216 - 競合的なアクセスには対応していない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
217 - Christieを元とした、DataGearsStreamに名前をつけてアクセスするAPIを導入する
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
218
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
219
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
220 <center><img src="https://i.imgur.com/K3nYFkh.jpg" width="600px"></center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
221 <center>
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
222 WordCountをRemoteDGMを用いて構成する際の協調図
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
223 </center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
224
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
225 - NodeAにて任意のファイルを開く
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
226 - ファイルの中身を1行ごとに文字列をNodeBに送信する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
227 - NodeBにてWordCountの処理(countup,文字列表示など)を行う
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
228 - ackとしてフラグをNodeAに返信する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
229 - 文字列ブロックの送信と受け取りのフラグのやり取りでループする
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
230 - NodeBがeofをフラグとしてNodeAから受け取った場合、WordCountの結果を表示する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
231 - 両ノードの処理の終了を行う
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
232 - NodeA,B間のファイル内文字列のBlockとフラグの送受信は、RemoteDGMを介して行う
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
233 - RemoteDGMにはkeyとデータの組み合わせとなる(Christie仕様の)DataGearが必要となる。
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
234 - DGのpushにあたる操作はmeta部分で実装を行う
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
235
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
236
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
237 ## FileSystem Implementation
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
238 - GearsOS FileSystemは単なるDGのリストとなる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
239 - これはDataGearManagerにあたる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
240 - ファイルの中身を要求された際、リスト内部のDGを順次に送受信する形となる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
241 - 別ノードからファイルを参照する際はRemoteDGMを通してファイルの中身を送受信する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
242 - 持続的なファイルシステムとして保存する場合、DGのリストをSSDなどのデバイスに格納する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
243 - メモリ領域において不要となったメモリはmeta部分にて回収を行う
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
244
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
245
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
246 <center><img src="https://i.imgur.com/lcqdiSx.jpg" width="600px"></center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
247 <center>
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
248 ファイルを別ノード上から参照する際の図
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
249 </center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
250
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
251
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
252 ## File Persistency
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
253 - 持続性のあるファイルとして保存されたDGMを操作するには、SSDなどデバイス上に保存されたDGMをLocalDGMとして呼び出せば良い
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
254 <center><img src="https://i.imgur.com/GWzj9qW.jpg " width="600px"></center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
255 <center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
256 <center>
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
257 デバイス上に保存されたDGMを呼び出す際の図
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
258 </center>
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
259
65
937323467f4d backup 2021-05-24
autobackup
parents:
diff changeset
260
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
261 ## UNIX FileSystemとの比較
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
262 - UNIX FileSystem において File Stream と Socket Stream は煩雑な処理が必要となる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
263 - GearsOSではSocket Stream部分をTopologyManagerが担う
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
264 - FileStreamはmetaCodeGear部分で実装することでユーザレベルから隠蔽することができる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
265 - UNIXではStreamに型がないので不完全なデータが生じてしまう
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
266 - GearsOSではこれらはDGMのメタな機能として実装することができる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
267 - UNIXファイルシステムにはfsckと呼ばれる修復機能があるが、メモリに対する修復機能は存在しない。
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
268 - GearsOSではメモリの一部不良に対応する機能をDGMとして作るといったことが考えられる。
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
269 - GearsOSではDGMの名前とその中のDataGear Streamに対応するkeyでアクセスする対象が決まる
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
270 - 自由な名前空間の構成が行える
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
271 - これはUNIXでいうi-node番号に相当する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
272
66
9e6952aef1e6 backup 2021-05-25
autobackup
parents: 65
diff changeset
273 ## まとめ
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
274 - GearsOS におけるファイルシステム API の設計を議論した
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
275 - 現在のファイルシステムの問題点
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
276 - Gearsファイルシステムに搭載する機能の考察
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
277 - GearsファイルシステムのAPIは二種類が存在する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
278 - アプリケーションで閉じた決定的な実行を行う直接接続したもの
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
279 - DataGearManagerに名称をつけ、競合的なアクセスを許可するもの
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
280 - ファイルはDataGearManager
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
281 - DataGearManagerは分散環境での通信でもある
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
282 - 精進して実装していきたい