Mercurial > hg > Papers > 2017 > atton-master
diff paper/cbc.tex @ 100:ebe838b83ada
Self review
author | atton <atton@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 12 Feb 2017 11:52:20 +0900 |
parents | 16dc3337a5a9 |
children |
line wrap: on
line diff
--- a/paper/cbc.tex Sun Feb 12 11:13:08 2017 +0900 +++ b/paper/cbc.tex Sun Feb 12 11:52:20 2017 +0900 @@ -1,7 +1,7 @@ \chapter{Continuation based C} \label{chapter:cbc} -Continuation based C (CbC)は当研究室で開発しているプログラミング言語であり、OSや組み込みソフトウェアの開発を主な対象としている。 +Continuation based C (CbC)は当研究室で開発しているプログラミング言語であり、OSや組み込みソフトウェアを主な対象としている。 CbC は C言語の下位の言語であり、構文はほぼC言語と同じものを持つが、よりアセンブラに近い形でプログラムを記述する。 CbC は CodeSegment と呼ばれる単位で処理を定義し、それらを組み合わせることにでプログラム全体を構成する。 データの単位は DataSegment と呼ばれる単位で定義し、それら CodeSegment によって変更していくことでプログラムの実行となる。 @@ -55,7 +55,7 @@ Scheme などの call/cc といった継続はトップレベルから現在までの位置を環境として保持する。 通常環境とは関数の呼び出しスタックの状態である。 CbC の軽量継続は呼び出し元の情報を持たないため、スタックを破棄しながら処理を続けていく。 -よって、リスト\ref{src:goto} のプログラムでは cs0 から cs1 へと継続した後にcs0 へ戻ることはできない。 +よって、リスト\ref{src:goto} のプログラムでは cs0 から cs1 へと継続した後には cs0 へ戻らずに処理を続ける。 もう少し複雑な CbC のソースコードをリスト\ref{src:factrial}に、実行される流れを図\ref{fig:factrial}に示す。 このソースコードは整数の階乗を求めるプログラムである。 @@ -82,7 +82,8 @@ プログラムを動作させるためにメタ計算部分は必須であり、しばしば本来の処理よりも複雑度が高い。 CodeSegment を用いたプログラミングスタイルでは計算とメタ計算を分離して記述する。 -分離した計算は階層構造を持ち、本来行ないたい処理をノーマルレベルとし、メタ計算はメタレベルとしてノーマルレベルよりも上の存在に位置する。 +なお、分離した計算は階層構造を持つ。 +本来行ないたい処理はノーマルレベルであり、メタ計算はメタレベルとして上位に位置する。 複雑なメタ計算部分をライブラリやOS側が提供することで、ユーザはノーマルレベルの計算の記述に集中することができる。 また、ノーマルレベルのプログラムに必要なメタ計算を追加することで、並列処理やネットワーク処理などを含むプログラムに拡張できる。 さらに、ノーマルレベルからはメタレベルは隠蔽されているため、メタ計算の実装を切り替えることも可能である。 @@ -106,9 +107,9 @@ \section{Continuation based C におけるメタ計算の例: GearsOS} CbC を用いてメタ計算を実現した例として、GearsOS\cite{weko_142109_1}が存在する。 GearsOS は並列に、信頼性高く動作することを目標としたOS であり、 マルチコアCPUやGPU環境での動作を対象としている。 -現在OSの設計と並列処理部分の実装が行なわれている。 +現在はOSの設計と並列処理部分の実装が行なわれている。 GearsOS におけるメタ計算はMonad\cite{Moggi:1991:NCM:116981.116984}を用いている~\cite{kkb-master}。 -現在実装済みのメタ計算はメモリの管理、並列に書き込むことが可能な Synchronized Queue、データの保存用の非破壊赤黒木がある。 +実装済みのメタ計算はメモリの管理、並列に書き込むことが可能な Synchronized Queue、データの保存用の非破壊赤黒木がある。 GearsOS では CodeSegment と DataSegment はそれぞれ CodeGear と DataGear と呼ばれている。 マルチコアCPU環境では CodeGear と CodeSegment は同一だが、GPU 環境では CodeGear には OpenCL~\cite{opencl}/CUDA~\cite{cuda} における kernel も含まれる。 @@ -163,8 +164,7 @@ CodeGear の名前と CodeGear の関数ポインタの対応は enum と関数ポインタによって実現されている。 CodeGear の名前は enum (リスト\ref{src:context} 5-9行) で定義され、コンパイル後には整数へと変換される。 プログラム全体で利用する CodeGear は code フィールドに格納されており、enum を用いてアクセスする。 - この対応表を動的に変更することにより、実行時に比較ルーチンなどを変更することが可能になる。 - + この対応表を動的に変更することで、実行時に比較ルーチンなどを変更することが可能になる。 \item CodeGear が参照する DataGear へのポインタ @@ -194,9 +194,6 @@ stub は Context が持つ DataGear のポインタ data に対して enum を用いてアクセスしている。 なお、現在はメタレベルの計算とノーマルレベルの分離はコンパイラ側がサポートしていないため、引数に Meta DataGear である Context が渡されているが、本来はノーマルレベルではアクセスできない。 -% また、stub は全ての CodeGear に対してユーザが1つずつ定義する必要があるため、 CodeGear の定義が煩雑になっている。 -% レベルの分離と stub の自動生成を行なうスクリプトも存在しているが、コンパイラ側のサポートはまだ行なわれていない。 -% 型情報を用いたコンパイル時 stub 生成や、軽量継続時の型チェックを行なうために本研究では CbC の型システムを定義する。 また、GearsOS におけるメタ計算として CodeGear のモデル検査がある。 通常レベルの CodeGear を変更することなく、その仕様を検証するものである。