Mercurial > hg > Papers > 2022 > matac-thesis
comparison slide/slide.html @ 46:8fbd88035545
...
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 02 Feb 2022 20:55:43 +0900 |
parents | 53b74a9cb1ef |
children | a56209284c1f |
comparison
equal
deleted
inserted
replaced
45:d40d5c4e392f | 46:8fbd88035545 |
---|---|
5 | 5 |
6 <!DOCTYPE html> | 6 <!DOCTYPE html> |
7 <html> | 7 <html> |
8 <head> | 8 <head> |
9 <meta http-equiv="content-type" content="text/html;charset=utf-8"> | 9 <meta http-equiv="content-type" content="text/html;charset=utf-8"> |
10 <title>GearsOSにおけるinodeを用いたFile systemの設計</title> | 10 <title>GearsOSにおけるinodeを用いたFile systemの実装</title> |
11 | 11 |
12 <meta name="generator" content="Slide Show (S9) v4.1.0 on Ruby 3.0.3 (2021-11-24) [arm64-darwin21]"> | 12 <meta name="generator" content="Slide Show (S9) v4.1.0 on Ruby 3.0.3 (2021-11-24) [arm64-darwin21]"> |
13 <meta name="author" content="又吉 雄斗" > | 13 <meta name="author" content="又吉 雄斗" > |
14 | 14 |
15 <!-- style sheet links --> | 15 <!-- style sheet links --> |
68 <div class='slide cover'> | 68 <div class='slide cover'> |
69 <table width="90%" height="90%" border="0" align="center"> | 69 <table width="90%" height="90%" border="0" align="center"> |
70 <tr> | 70 <tr> |
71 <td> | 71 <td> |
72 <div align="center"> | 72 <div align="center"> |
73 <h1><font color="#808db5">GearsOSにおけるinodeを用いたFile systemの設計</font></h1> | 73 <h1><font color="#808db5">GearsOSにおけるinodeを用いたFile systemの実装</font></h1> |
74 </div> | 74 </div> |
75 </td> | 75 </td> |
76 </tr> | 76 </tr> |
77 <tr> | 77 <tr> |
78 <td> | 78 <td> |
79 <div align="left"> | 79 <div align="left"> |
80 又吉 雄斗 | 80 又吉 雄斗 |
81 河野研 | 81 並列信頼研 |
82 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> | 82 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> |
83 </div> | 83 </div> |
84 </td> | 84 </td> |
85 </tr> | 85 </tr> |
86 </table> | 86 </table> |
99 <li>信頼性確保の方法として定理証明やモデル検査がある</li> | 99 <li>信頼性確保の方法として定理証明やモデル検査がある</li> |
100 </ul> | 100 </ul> |
101 </li> | 101 </li> |
102 <li>当研究室では,信頼性の保証を目的としたGearsOSを開発している</li> | 102 <li>当研究室では,信頼性の保証を目的としたGearsOSを開発している</li> |
103 <li>GearsOSで未実装の機能であるファイルシステムの実装を目指す</li> | 103 <li>GearsOSで未実装の機能であるファイルシステムの実装を目指す</li> |
104 <li>今回はUnix likeにディレクトリシステムを実装した</li> | 104 <li><span style="color: red; ">今回はUnix likeにディレクトリシステムを実装した</span></li> |
105 <li>GearsOSへUnixのFile systemの仕組みを取り入れるアプローチをとる</li> | 105 <li>GearsOSへUnixのFile systemの仕組みを取り入れるアプローチをとる</li> |
106 <li>GearsOSのディレクトリシステムであるgearsDirectoryについて説明する</li> | 106 <li>GearsOSのディレクトリシステムであるgearsDirectoryについて説明する</li> |
107 </ul> | 107 </ul> |
108 | 108 |
109 | 109 |
119 <li>プログラムはCodeGearと呼ばれる処理の単位で記述する</li> | 119 <li>プログラムはCodeGearと呼ばれる処理の単位で記述する</li> |
120 <li>データはDataGearと呼ばれる単位を用いる</li> | 120 <li>データはDataGearと呼ばれる単位を用いる</li> |
121 <li>ノーマルレベルとメタレベルの処理を切り分けることが可能である</li> | 121 <li>ノーマルレベルとメタレベルの処理を切り分けることが可能である</li> |
122 <li>function callの継続の代わりにgotoによる継続を用いる | 122 <li>function callの継続の代わりにgotoによる継続を用いる |
123 <ul> | 123 <ul> |
124 <li>function callの継続と区別して軽量継続と呼ぶ</li> | 124 <li>呼び出し履歴を持たないことから軽量継続と呼ぶ</li> |
125 </ul> | 125 </ul> |
126 </li> | 126 </li> |
127 </ul> | 127 </ul> |
128 | 128 |
129 <div style="text-align: center;"> | 129 <div style="text-align: center;"> |
139 <h2 id="gearsos">GearsOS</h2> | 139 <h2 id="gearsos">GearsOS</h2> |
140 | 140 |
141 <ul> | 141 <ul> |
142 <li>当研究室にて,信頼性と拡張性の両立を目的として開発している</li> | 142 <li>当研究室にて,信頼性と拡張性の両立を目的として開発している</li> |
143 <li>Gearという概念があり,実行の単位をCodeGear,データの単位をDataGearと呼ぶ</li> | 143 <li>Gearという概念があり,実行の単位をCodeGear,データの単位をDataGearと呼ぶ</li> |
144 <li>同様にGearの概念を持つCbC(Continuation based C)で記述されている.</li> | 144 <li>同様にGearの概念を持つCbC(Continuation based C)で記述されている</li> |
145 <li>軽量継続を基本とし,stackを持たない代わりに全てを従来OSのプロセスに当たるContext経由で実行する</li> | 145 <li>軽量継続を基本とし,stackを持たない代わりに全てを従来OSのプロセスに当たるContext経由で実行する</li> |
146 <li>ノーマルレベルとメタレベルの処理を切り分けることができる</li> | 146 <li>ノーマルレベルとメタレベルの処理を切り分けることができる</li> |
147 <li>OSとして動作するために今後実装しなければならない機能がいくつか残っている</li> | 147 <li>OSとして動作するために今後実装しなければならない機能がいくつか残っている</li> |
148 </ul> | 148 </ul> |
149 | 149 |
215 | 215 |
216 <div class='slide'> | 216 <div class='slide'> |
217 <!-- _S9SLIDE_ --> | 217 <!-- _S9SLIDE_ --> |
218 <h2 id="unixのfile-system">UnixのFile system</h2> | 218 <h2 id="unixのfile-system">UnixのFile system</h2> |
219 | 219 |
220 <p>UnixのFile systemはinodeのBTreeで構成されており,xv6もその仕組みを用いている</p> | |
221 | |
220 <h3 id="xv6">xv6</h3> | 222 <h3 id="xv6">xv6</h3> |
221 | 223 |
222 <ul> | 224 <ul> |
223 <li>MITで教育用の目的で開発されたOS</li> | 225 <li>MITで教育用の目的で開発されたOS</li> |
224 <li>Unixの基本的な構造を持つ</li> | 226 <li>Unixの基本的な構造を持つ</li> |
241 <div class='slide'> | 243 <div class='slide'> |
242 <!-- _S9SLIDE_ --> | 244 <!-- _S9SLIDE_ --> |
243 <h2 id="gearsfilesystemにおけるdirectoryの構成">GearsFileSystemにおけるdirectoryの構成</h2> | 245 <h2 id="gearsfilesystemにおけるdirectoryの構成">GearsFileSystemにおけるdirectoryの構成</h2> |
244 | 246 |
245 <ul> | 247 <ul> |
246 <li>2つのFileSystemTreeを用いる | 248 <li>2つのRedBlackTreeを用いる |
247 <ol> | 249 <ol> |
248 <li>inode numberとfileのポインタのペアを持つTree</li> | 250 <li>inode numberとfileのポインタのペアを持つTree</li> |
249 <li>filenameとinode numberのペアを持つTree</li> | 251 <li>filenameとinode numberのペアを持つTree</li> |
250 </ol> | 252 </ol> |
251 </li> | 253 </li> |
252 </ul> | 254 <li>カレントディレクトリはgearsDirectory->currentDirectoryに保存される</li> |
253 | 255 </ul> |
254 <div style="text-align: center;"> | 256 |
255 <img src="../paper/figs/inode.svg" width="800" /> | 257 <div style="text-align: center;"> |
258 <img src="figs/inode.svg" width="1000" /> | |
256 </div> | 259 </div> |
257 | 260 |
258 | 261 |
259 | 262 |
260 </div> | 263 </div> |
297 <h2 id="unix-like-な-interface-1">Unix Like な interface</h2> | 300 <h2 id="unix-like-な-interface-1">Unix Like な interface</h2> |
298 | 301 |
299 <h3 id="mkdir-1">mkdir</h3> | 302 <h3 id="mkdir-1">mkdir</h3> |
300 | 303 |
301 <div style="text-align: center;"> | 304 <div style="text-align: center;"> |
302 <img src="../paper/figs/mkdir.svg" width="600" /> | 305 <img src="figs/mkdir.svg" width="700" /> |
303 </div> | 306 </div> |
304 | 307 |
305 | 308 <!-- |
306 | 309 ## Unix Like な interface |
307 </div> | 310 |
308 | 311 ### ls |
309 <div class='slide'> | 312 |
310 <!-- _S9SLIDE_ --> | 313 ```c |
311 <h2 id="unix-like-な-interface-2">Unix Like な interface</h2> | 314 __code ls(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) { |
312 | |
313 <h3 id="ls">ls</h3> | |
314 | |
315 <pre><code class="language-c">__code ls(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) { | |
316 Node* dir = new Node(); | 315 Node* dir = new Node(); |
317 dir->key = name->value; | 316 dir->key = name->value; |
318 struct FTree* cDirectory = new FTree(); | 317 struct FTree* cDirectory = new FTree(); |
319 cDirectory = gearsDirectory->currentDirectory; | 318 cDirectory = gearsDirectory->currentDirectory; |
320 goto cDirectory->get(dir, ls2); | 319 goto cDirectory->get(dir, ls2); |
321 } | 320 } |
322 | 321 |
323 __code ls2(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { | 322 __code ls2(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { |
324 printf("%d\n", node->key); | 323 printf("%d\n", node->key); |
325 goto next(...); | 324 goto next(...); |
326 } | 325 } |
327 </code></pre> | 326 ``` |
328 | 327 |
329 | 328 ## Unix Like な interface |
330 | 329 |
331 </div> | 330 ### ls |
332 | 331 |
333 <div class='slide'> | 332 <div style="text-align: center;"> |
334 <!-- _S9SLIDE_ --> | 333 <img src="figs/ls.svg" width="1000"> |
335 <h2 id="unix-like-な-interface-3">Unix Like な interface</h2> | 334 </div> |
336 | 335 |
337 <h3 id="ls-1">ls</h3> | 336 ## Unix Like な interface |
338 | 337 |
339 <div style="text-align: center;"> | 338 ### cd |
340 <img src="../paper/figs/ls.svg" width="800" /> | 339 |
341 </div> | 340 ```c |
342 | 341 __code cd2Child(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) { |
343 | |
344 | |
345 </div> | |
346 | |
347 <div class='slide'> | |
348 <!-- _S9SLIDE_ --> | |
349 <h2 id="unix-like-な-interface-4">Unix Like な interface</h2> | |
350 | |
351 <h3 id="cd">cd</h3> | |
352 | |
353 <pre><code class="language-c">__code cd2Child(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) { | |
354 struct FTree* cDirectory = new FTree(); | 342 struct FTree* cDirectory = new FTree(); |
355 cDirectory = gearsDirectory->currentDirectory; | 343 cDirectory = gearsDirectory->currentDirectory; |
356 struct Node* node = new Node(); | 344 struct Node* node = new Node(); |
357 node->key = name->value; | 345 node->key = name->value; |
358 goto cDirectory->get(node, cd2Child2); | 346 goto cDirectory->get(node, cd2Child2); |
359 } | 347 } |
360 | 348 |
361 __code cd2Child2(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { | 349 __code cd2Child2(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { |
362 struct FTree* iNodeTree = new FTree(); | 350 struct FTree* iNodeTree = new FTree(); |
363 iNodeTree = gearsDirectory->iNodeTree; | 351 iNodeTree = gearsDirectory->iNodeTree; |
364 goto iNodeTree->get(node->value, cd2Child3); | 352 goto iNodeTree->get(node->value, cd2Child3); |
365 } | 353 } |
366 | 354 |
367 __code cd2Child3(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { | 355 __code cd2Child3(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { |
368 gearsDirectory->currentDirectory = node->value; | 356 gearsDirectory->currentDirectory = node->value; |
369 goto next(...); | 357 goto next(...); |
370 } | 358 } |
371 </code></pre> | 359 ``` |
372 | 360 |
373 | 361 ## Unix Like な interface |
374 | 362 |
375 </div> | 363 ### cd |
376 | 364 |
377 <div class='slide'> | 365 <div style="text-align: center;"> |
378 <!-- _S9SLIDE_ --> | 366 <img src="figs/cd.svg" width="1200"> |
379 <h2 id="unix-like-な-interface-5">Unix Like な interface</h2> | 367 </div> |
380 | 368 |
381 <h3 id="cd-1">cd</h3> | 369 --> |
382 | 370 |
383 <div style="text-align: center;"> | 371 |
384 <img src="../paper/figs/cd.svg" width="800" /> | 372 |
385 </div> | 373 </div> |
386 | 374 |
387 | 375 <div class='slide'> |
388 | 376 <!-- _S9SLIDE_ --> |
389 </div> | 377 <h2 id="gearsdirectoryの非破壊的編集による">GearsDirectoryの非破壊的編集による</h2> |
390 | |
391 <div class='slide'> | |
392 <!-- _S9SLIDE_ --> | |
393 <h2 id="gearsdirectoryの非破壊的編集によるバックアップ">GearsDirectoryの非破壊的編集によるバックアップ</h2> | |
394 | 378 |
395 <ul> | 379 <ul> |
396 <li>GearsOSにおける永続データは非破壊的な編集を行う木構造を用いて保存する</li> | 380 <li>GearsOSにおける永続データは非破壊的な編集を行う木構造を用いて保存する</li> |
397 <li>ディレクトリシステム自体にバックアップの機能を搭載することが可能と考える</li> | 381 <li>ディレクトリシステム自体にバックアップの機能を搭載することが可能と考える</li> |
398 </ul> | 382 </ul> |
406 </div> | 390 </div> |
407 | 391 |
408 <div class='slide'> | 392 <div class='slide'> |
409 <!-- _S9SLIDE_ --> | 393 <!-- _S9SLIDE_ --> |
410 <h2 id="gearsfilesystemの今後">GearsFileSystemの今後</h2> | 394 <h2 id="gearsfilesystemの今後">GearsFileSystemの今後</h2> |
411 | |
412 <h3 id="gearsshell">GearsShell</h3> | |
413 | |
414 <ul> | |
415 <li>現状のGearsOSはユーザーの入力を受け付けることが出来ず,プログラミングインターフェースの様に機能している.</li> | |
416 <li>gearsFileSystemなどGearsOSの各機能と接続し,今回作成したcdやlsの様なコマンドを受け付けるGearsShellを作成したい.</li> | |
417 </ul> | |
418 | |
419 <h3 id="gearsdirectory-filename">gearsDirectory filename</h3> | |
420 | |
421 <ul> | |
422 <li>現状はgearsDirectoryのfilenameはIntegerの構造で管理されている</li> | |
423 <li>filenameは一般的に文字列型であるためIntegerから文字列型に変更する必要がある</li> | |
424 </ul> | |
425 | |
426 | |
427 | |
428 </div> | |
429 | |
430 <div class='slide'> | |
431 <!-- _S9SLIDE_ --> | |
432 <h2 id="gearsfilesystemの今後-1">GearsFileSystemの今後</h2> | |
433 | 395 |
434 <h3 id="gearsdirectory-path">gearsDirectory path</h3> | 396 <h3 id="gearsdirectory-path">gearsDirectory path</h3> |
435 | 397 |
436 <ul> | 398 <ul> |
437 <li>gearsDirectoryにはpathの機能が実装されていない</li> | 399 <li>gearsDirectoryにはpathの機能が実装されていない</li> |
438 <li>full path指定のlsなどが実装できない状態である</li> | 400 <li>full path指定のlsなどが実装できない状態である</li> |
439 <li>FileSystemTreeを拡張し,ノードをたどりpathを生成する様な機能を実装する必要がある</li> | 401 <li>FileSystemTreeを拡張し,ノードをたどりpathを生成する様な機能を実装する必要がある</li> |
440 </ul> | 402 </ul> |
441 | 403 |
404 <h3 id="gearsdirectory-filename">gearsDirectory filename</h3> | |
405 | |
406 <ul> | |
407 <li>現状はgearsDirectoryのfilenameはIntegerの構造で管理されている</li> | |
408 <li>filenameは一般的に文字列型であるためIntegerから文字列型に変更する必要がある</li> | |
409 </ul> | |
410 | |
411 | |
412 | |
413 </div> | |
414 | |
415 <div class='slide'> | |
416 <!-- _S9SLIDE_ --> | |
417 <h2 id="gearsfilesystemの今後-1">GearsFileSystemの今後</h2> | |
418 | |
419 <h3 id="gearsdirectory-on-disk">gearsDirectory on disk</h3> | |
420 | |
421 <ul> | |
422 <li>現状はgearsDirectoryはon memoryで実装されている</li> | |
423 <li>inodeをdisk上に構築する必要がある</li> | |
424 </ul> | |
425 | |
426 <h3 id="gearsshell">GearsShell</h3> | |
427 | |
428 <ul> | |
429 <li>現状のGearsOSはユーザーの入力を受け付けることが出来ず,言語フレームワークの様に機能している</li> | |
430 <li>gearsFileSystemなどGearsOSの各機能と接続し,今回作成したcdやlsの様なコマンドを受け付けるGearsShellを作成したい</li> | |
431 </ul> | |
432 | |
442 <h3 id="ファイルのバックアップ">ファイルのバックアップ</h3> | 433 <h3 id="ファイルのバックアップ">ファイルのバックアップ</h3> |
443 | 434 |
444 <ul> | 435 <ul> |
445 <li>レコードのDataをファイルの差分履歴として保持し,日時情報を付け加えることでVersion Control Systemのような機能を持たせることが可能であると考えられる</li> | 436 <li>レコードのDataをファイルの差分履歴として保持し,日時情報を付け加えることでVersion Control Systemのような機能を持たせることが可能であると考えられる</li> |
446 </ul> | 437 </ul> |
449 | 440 |
450 </div> | 441 </div> |
451 | 442 |
452 <div class='slide'> | 443 <div class='slide'> |
453 <!-- _S9SLIDE_ --> | 444 <!-- _S9SLIDE_ --> |
454 <h2 id="まとめ">まとめ</h2> | 445 <h2 id="gearsdirectoryまとめ">gearsDirectoryまとめ</h2> |
455 | 446 |
456 <ul> | 447 <ul> |
457 <li>gearsDirectoryの実装について説明した</li> | 448 <li>gearsDirectoryの実装について説明した</li> |
458 <li>RedBlackTreeのシンプルなinterfaceにより比較的容易に実装を行うことができた</li> | 449 <li>RedBlackTreeのシンプルなinterfaceにより比較的容易に実装を行うことができた</li> |
459 <li>形式手法とファイルシステムの機能の両面で信頼性の向上が図れると考える</li> | 450 <li>形式手法とファイルシステムの機能の両面で信頼性の向上が図れると考える</li> |
460 <li>RedBlackTreeを用いてinodeの仕組みを構築し,ls,cd,mkdirを作成するなどして, | 451 <li>RedBlackTreeを用いてinodeの仕組みを構築し,ls,cd,mkdirを作成するなどして, |
461 Unix Likeに構築することが出来た.</li> | 452 Unix Likeに構築することが出来た</li> |
462 </ul> | 453 </ul> |
463 | 454 |
464 </div> | 455 </div> |
465 | 456 |
466 | 457 |