Mercurial > hg > Papers > 2020 > menikon-thesis
view slide/thesis_slide.html @ 30:10bdabd06497 default tip
fix
author | menikon |
---|---|
date | Mon, 17 Feb 2020 04:52:15 +0900 |
parents | d4c7ffd507a3 |
children |
line wrap: on
line source
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>CbC による xv6 の FileSystem の書き換え</title> <meta name="generator" content="Slide Show (S9) v4.0.1 on Ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin17]"> <meta name="author" content="Takahiro Sakamoto, Shinji Kono" > <!-- style sheet links --> <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> <link rel="stylesheet" href="s6/themes/screen.css" media="screen"> <link rel="stylesheet" href="s6/themes/print.css" media="print"> <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection"> <!-- JS --> <script src="s6/js/jquery-1.11.3.min.js"></script> <script src="s6/js/jquery.slideshow.js"></script> <script src="s6/js/jquery.slideshow.counter.js"></script> <script src="s6/js/jquery.slideshow.controls.js"></script> <script src="s6/js/jquery.slideshow.footer.js"></script> <script src="s6/js/jquery.slideshow.autoplay.js"></script> <!-- prettify --> <link rel="stylesheet" href="scripts/prettify.css"> <script src="scripts/prettify.js"></script> <script> $(document).ready( function() { Slideshow.init(); $('code').each(function(_, el) { if (!el.classList.contains('noprettyprint')) { el.classList.add('prettyprint'); } }); prettyPrint(); } ); </script> <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> <!--[if IE]> <script src="s6/js/jquery.microsoft.js"></script> <![endif]--> </head> <body> <div class="layout"> <div id="header"></div> <div id="footer"> <div align="right"> <img src="s6/images/logo.svg" width="200px"> </div> </div> </div> <div class="presentation"> <div class='slide cover'> <table width="90%" height="90%" border="0" align="center"> <tr> <td> <div align="center"> <h1><font color="#808db5">CbC による xv6 の FileSystem の書き換え</font></h1> </div> </td> </tr> <tr> <td> <div align="left"> Takahiro Sakamoto, Shinji Kono 琉球大学工学部情報工学科並列信頼研 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> </div> </td> </tr> </table> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="研究目的">研究目的</h2> <ul> <li> <p>OSに対し高い信頼性を実現させたい</p> </li> <li> <p>そのために当研究室ではContinuation based C (CbC)を用いたGearsOSを設計中である</p> </li> <li> <p>前段階としてシンプルであるが基本的な機能を揃えたOSであるxv6をCbCで書き換える</p> </li> <li> <p>CbCは処理の基本単位をCodeGearとし、stackに値を積む事なくCodeGear間を遷移する</p> </li> <li> <p>CodeGear間は状態遷移であるためOS内部を明確化することができる</p> </li> <li> <p>本研究ではOS内部の明確化を実現し信頼性を向上させるためにCbCを用いFileSystemを書き換える</p> </li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="研究概要">研究概要</h2> <p>-</p> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="continuation-based-c">Continuation based C</h2> <ul> <li>Continuation based C (CbC) はこの Code Gear 処理の単位としてプログラミング言語として開発している。</li> <li>Code Gear は 関数呼び出し時の環境を使わずに次の Code Gear へと goto 文によって遷移する</li> <li>この goto 文による遷移を軽量継続と呼ぶ</li> <li>継続を用いることによって状態遷移ベースでのプログラミングが可能である</li> <li>CbC は C と互換性のある言語なので、C の関数も呼び出すことができる </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="cbc-のコード例">CbC のコード例</h2> </li> <li>CbC では Code Gear は __code Code Gear 名 (引数) の形で記述される</li> <li>Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない</li> <li>goto の後に Code Gear 名と引数を並べて、次の Code Gear の遷移を記述する</li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="cbc-のコード例-1">CbC のコード例</h2> <ul> <li>この goto の行き先を継続と呼び、このときの a+b が次の Code Gear への出力となる</li> </ul> <pre><code>__code cg0(int a, int b){ goto cg1(a+b); } __code cg1(int c){ goto cg2(c); } </code></pre> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="cbc-の継続">CbC の継続</h2> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="gears-におけるメタ計算">Gears におけるメタ計算</h2> <ul> <li>Gears OS ではメタ計算を Meta Code Gear、Meta Data Gear で表現する</li> <li>Meta Code Gear はノーマルレベルの Code Gear の直後に遷移され、メタ計算を実行する</li> <li>Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う</li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="meta-gear">Meta Gear</h2> <ul> <li>Gears OS では、Meta Code Gear は通常の Code Gear の直前、直後に挿入され、メタ計算を実行する</li> <li>通常の計算からはメタ計算は見ることができない</li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="context">Context</h2> <ul> <li>Gears OS では Context と呼ばれる、使用されるすべての Code Gear、Data Gear を持つ Meta Data Gear を持っている</li> <li>Gears OS は必要な Code Gear、Data Gear を参照したい場合、この Context を通す必要がある</li> <li>Context は Meta Data Gear であるため、Meta Code Gear を介してアクセスする</li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="context-1">Context</h2> <ul> <li>Context は全ての Code Gear のリストを持っており、enum で番号とアドレスを対応付けている <pre><code>enum Code { C_popSingleLinkedStack, C_pushSingleLinkedStack, C_stackTest3, C_assert3, ... }; </code></pre> <pre><code>context->code[C_popSingleLinkedStack] = popSingleLinkedStack_stub; context->code[C_pushSingleLinkedStack] = pushSingleLinkedStack_stub; context->code[C_stackTest3] = stackTest3_stub; context->code[C_assert3] = assert3_stub; </code></pre> </li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="context-2">Context</h2> <ul> <li>Data Gear も Code Gear と同様に Context が全ての Data Gear のリストを持っている</li> <li>Data Gear のリストも enum で管理されている</li> <li>これは引数格納用の Data Gear の番号である <pre><code>enum DataType { D_Code, D_SingleLinkedStack, D_Stack, D_TaskManager, D_Worker, ... }; </code></pre> </li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="interface">Interface</h2> <ul> <li>Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される</li> <li>Interface は GearsOS でのモジュール化の仕組み</li> <li>Interface は使用される Data Gear の定義と、それに対する Code Gear の集合である</li> <li>Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる</li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="interface-の定義">Interface の定義</h2> <ul> <li>Stack の Interface の例である</li> <li>typedef struct Interface 名で記述する</li> <li>Impl は実際に実装した際のデータ構造の型になる</li> </ul> <pre><code>typedef struct Stack<Impl> { union Data* stack; union Data* data; __code next(...); __code whenEmpty(...); __code clear(Impl* stack, __code next(...)); __code push(Impl* stack, union Data* data, __code next(...)); __code pop(Impl* stack, __code next(union Data* ...)); __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); } </code></pre> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="interface-の定義-1">Interface の定義</h2> <ul> <li>Data Gear は 操作する Data Gear と 操作に必要な全ての Data Gear Gear が記述されている</li> <li>__code で記述されているものが操作の Code Gear である</li> </ul> <pre><code>typedef struct Stack<Impl> { union Data* stack; union Data* data; __code next(...); __code whenEmpty(...); __code clear(Impl* stack, __code next(...)); __code push(Impl* stack, union Data* data, __code next(...)); __code pop(Impl* stack, __code next(union Data* ...)); __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); } </code></pre> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="interface-の実装の記述">Interface の実装の記述</h2> <ul> <li>ソースコードは Interface の実装の初期化のコードである</li> <li>操作の Code Gear には実装した Code Gear の番号が代入されるが、ここを入れ替えることで、複数の実装を持つことができる <pre><code>Stack* createSingleLinkedStack(struct Context* context) { struct Stack* stack = new Stack(); struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); stack->stack = (union Data*)singleLinkedStack; singleLinkedStack->top = NULL; stack->push = C_pushSingleLinkedStack; stack->pop = C_popSingleLinkedStack; stack->isEmpty = C_isEmptySingleLinkedStack; stack->clear = C_clearSingleLinkedStack; return stack; } </code></pre> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="xv6-の書き換えの方針">xv6 の書き換えの方針</h2> </li> <li>xv6 を CbC で書き換え、Gears OS の機能と置き換えることで Gears OS に OS の基本構造を持たせたい</li> <li>このためには xv6 をモジュール化することで、xv6 の機能を明らかにする必要がある</li> <li>xv6 の Interface を定義し、Gears OS の機能をこれに合わせることによって実現したい</li> </ul> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="cbc-による-filesystem-の書き換え">CbC による FileSystem の書き換え</h2> </div> <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="まとめと今後の方針">まとめと今後の方針</h2> </div> </div><!-- presentation --> </body> </html>