# HG changeset patch # User anatofuz # Date 1590562943 -32400 # Node ID 58349e71879a44197c58f7fc3c447fffb32a11fd # Parent b11a5c6c29050b0442582ae843ec5335a39772bb add svg diff -r b11a5c6c2905 -r 58349e71879a slide/assets/context1.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slide/assets/context1.svg Wed May 27 16:02:23 2020 +0900 @@ -0,0 +1,3 @@ + + +
CodeGear
CodeGear
CodeGear
CodeGear
goto
goto
Viewer does not support full SVG 1.1
\ No newline at end of file diff -r b11a5c6c2905 -r 58349e71879a slide/assets/context2.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slide/assets/context2.svg Wed May 27 16:02:23 2020 +0900 @@ -0,0 +1,3 @@ + + +
CodeGear
CodeGear
CodeGear
CodeGear
Data Gear A
Data Gear A
Data Gear B
Data Gear B
Code Gear Pointer
Code Gear Pointer
Viewer does not support full SVG 1.1
\ No newline at end of file diff -r b11a5c6c2905 -r 58349e71879a slide/assets/context_last.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slide/assets/context_last.svg Wed May 27 16:02:23 2020 +0900 @@ -0,0 +1,3 @@ + + +
CodeGear
CodeGear
CodeGear
CodeGear
Data Gear A
Data Gear A
Data Gear B
Data Gear B
Code Gear Pointer
Code Gear Pointer
CodeGear
CodeGear
Meta CodeGear
Meta CodeGear
Viewer does not support full SVG 1.1
\ No newline at end of file diff -r b11a5c6c2905 -r 58349e71879a slide/gen.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slide/gen.sh Wed May 27 16:02:23 2020 +0900 @@ -0,0 +1,2 @@ +marp --theme ./themes/example.css --html slide.md +open slide.html diff -r b11a5c6c2905 -r 58349e71879a slide/slide.html --- a/slide/slide.html Wed May 27 14:32:41 2020 +0900 +++ b/slide/slide.html Wed May 27 16:02:23 2020 +0900 @@ -12,8 +12,8 @@ /* @theme example */div#p>svg>foreignObject>section{background-image:url("assets/logo.svg");background-position:right 3% bottom 2%;background-repeat:no-repeat;background-attachment:5%;background-size:20% auto} -/* @theme aiuhs9plvkf3wiwce2rs80ez7rcgddscms99vcbt5g6 */div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
-

xv6の構成要素の継続の分析

+/* @theme uykuymgtbk90iqgino298l7iz6xb7r6nm2bab9bce4g */div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

xv6の構成要素の継続の分析

  • 清水 隆博
      @@ -27,7 +27,7 @@
-
+

研究目的

  • アプリケーションの信頼性を向上させるたい @@ -48,7 +48,7 @@
-
+

OSの信頼性

  • OSそのもの動作も保証されるべき
  • @@ -71,7 +71,7 @@
  • ノーマル、メタレベルの計算の両方を保証しないといけない
-
+

テスト以外で信頼性を高める方法

  • モデル検査 @@ -97,7 +97,7 @@
  • OSをこれらの方法で信頼性を高めたい
-
+

OSの信頼性を高めるためには

  • 既存のOSのソースコードをそのまま使うのは困難
  • @@ -120,7 +120,7 @@
-
+

Continuation Based C

  • ノーマルレベル/メタレベルの実装に適している言語 @@ -142,7 +142,7 @@
-
+

CbCとCodeGear

  • 軽量継続で表現する単位をCodeGearと呼ぶ
  • @@ -164,7 +164,7 @@
  • cbcで書き直したxv6のreadシステムコールの例
-
+

CbCの呼び出し

  • CbCはgoto文で呼び出す
  • @@ -188,7 +188,7 @@
  • 呼び出し元には返ってこない
-
+

CbCを用いたOSの再実装

  • CbCのCodeGearは状態遷移単位での記述に向いている
  • @@ -205,7 +205,7 @@
-
+

xv6

  • マサチューセッツ工科大学で開発されたv6OSをもとにしたOS @@ -227,11 +227,83 @@
-
-

test

+
+

xv6のCbCを用いた書き換え

+
    +
  • xv6をCbCで部分的に書き換えていく +
      +
    • 今回はシステムコール部分の一部、 メモリ管理部分、 ファイルシステムなどを書き換えた
    • +
    +
  • +
  • 全てをCodeGearに書き換えてしまうとデータの管理やCodeGearの管理が困難になる +
      +
    • スタックを持たないので、実際に利用するデータの管理はメタ計算などで処理をしたい
    • +
    +
  • +
  • OS内部でノーマルレベル/メタレベルの処理の切り分けをしたい +
      +
    • メタな計算を行うCodeGearは直接呼び出したくない
    • +
    +
  • +
  • ノーマル/メタのCodeGearの切り分けと、データの管理をする構造を作成した
  • +
+
+
+

CbCのcotnext

+
    +
  • CbCのプログラムで利用するCodeGearとデータの組を管理する機能 +
      +
    • データをDataGearという単位として扱う
    • +
    • 計算で使用する各DataGearを実際に保存している
    • +
    +
  • +
  • ノーマルレベルのCodeGear間を遷移するようにプログラミングする +
      +
    • ノーマルレベルからはCodeGearを直接操作できない
        -
      • aa
      • -
      • aa
      • +
      • メタ計算中でCodeGearの番号をcontextでディスパッチする
      • +
      +
    • +
    • この間にMetaCodeGearが 実行される
    • +
    +
  • +
  • 実際のデータの入手、保存はcontextを触ることが出来るMeta Code Gearが行う
  • +
+
+
+

プログラマから見るとCodeGearからCodeGearへの継続のみ
+

+
+
+

実際は1度contextを参照するMetaCodeGearに継続する

+
    +
  • 番号から次のCodeGearに対応するMetaCodeGearを取り出す
  • +
+ +
+
+

read system callの書き換え

+
    +
  • xv6のシステムコールの一部を書き換えることを検討する
  • +
  • 素直にread systemcallの処理をCodeGearに変換していく
  • +
+
+
+

まとめ

+
    +
  • xv6の処理の一部を継続を用いてcbcで書き換えた +
      +
    • システムコールに着目する手法
    • +
    • 書き換える関数のBasic Blockに着目する手法
    • +
    +
  • +
  • 部分的にCbCでxv6が書き換え可能なことが解った
  • +
  • 今後はxv6の完全な書き換えを目指す +
      +
    • ユーザーコマンド側の書き換えも検討する
    • +
    +
  • +
  • xv6の証明可能な機能/構文の導入を目指す