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-&gt;code[C_popSingleLinkedStack] = popSingleLinkedStack_stub;
context-&gt;code[C_pushSingleLinkedStack]  = pushSingleLinkedStack_stub;
context-&gt;code[C_stackTest3] = stackTest3_stub;
context-&gt;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&lt;Impl&gt; {
    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&lt;Impl&gt; {
    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-&gt;stack = (union Data*)singleLinkedStack;
  singleLinkedStack-&gt;top = NULL;
  stack-&gt;push = C_pushSingleLinkedStack;
  stack-&gt;pop  = C_popSingleLinkedStack;
  stack-&gt;isEmpty = C_isEmptySingleLinkedStack;
  stack-&gt;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>