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-&gt;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-&gt;key = name-&gt;value; 316 dir->key = name->value;
318 struct FTree* cDirectory = new FTree(); 317 struct FTree* cDirectory = new FTree();
319 cDirectory = gearsDirectory-&gt;currentDirectory; 318 cDirectory = gearsDirectory->currentDirectory;
320 goto cDirectory-&gt;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-&gt;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-&gt;currentDirectory; 343 cDirectory = gearsDirectory->currentDirectory;
356 struct Node* node = new Node(); 344 struct Node* node = new Node();
357 node-&gt;key = name-&gt;value; 345 node->key = name->value;
358 goto cDirectory-&gt;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-&gt;iNodeTree; 351 iNodeTree = gearsDirectory->iNodeTree;
364 goto iNodeTree-&gt;get(node-&gt;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-&gt;currentDirectory = node-&gt;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