Mercurial > hg > Papers > 2022 > pine-thesis
changeset 10:884ba6158dd6
add describe for transpiler
author | Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 30 Jan 2022 23:34:06 +0900 |
parents | 48187f47422f |
children | 49d3390d757e |
files | paper/figs/transpiler.png paper/text/Jabstract.tex paper/text/cbc.tex paper/text/existingDebugger.tex paper/text/gears.tex paper/text/gearsdebugger.tex paper/text/introduction.tex paper/text/reference.tex paper/thesis.pdf paper/thesis.tex |
diffstat | 10 files changed, 38 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/text/Jabstract.tex Sun Jan 30 16:17:20 2022 +0900 +++ b/paper/text/Jabstract.tex Sun Jan 30 23:34:06 2022 +0900 @@ -1,9 +1,8 @@ プログラミングにおいてエラー・バグは付き物であり、その発見・修正が重要である。 -エラー・バグの発見を支援するツールとしてデバッガがある。デバッガを使うことで変数の値の確認や、 -スタックトレースによる関数呼び出しの確認を行うことでエラー・バグの発見を行う。 +エラー・バグの発見を支援するツールとしてデバッガがある。デバッガを用いて変数の値の確認や、スタックトレースによる関数呼び出しの確認を行い、エラー・バグの発見・修正をしている。 -本研究室では、Continuation Based C(CbC)を用いて信頼性と拡張性を両立させたOSであるGearsOSの開発を行っている。 -GearsOSの開発においてもエラー・バグの発見のためにデバッガを用いてデバッグを行っている。 +本研究室では、継続(goto)によりプログラム遷移を行うContinuation Based Cを用いて信頼性と拡張性を両立させたOSであるGearsOSの開発を行っている。 +GearsOSの開発においてもエラー・バグの発見のためにデバッガを用いている。 しかし、GearsOSは変数の格納方法が複雑なため煩雑な記述を行わなければならない特性や、 スタックを持たないためにスタックトレースが使えないなどの特性を持つ。 これらの特性により既存デバッガを用いたデバッグが難しく、エラー・バグの特定が難しいという問題を抱えている。
--- a/paper/text/cbc.tex Sun Jan 30 16:17:20 2022 +0900 +++ b/paper/text/cbc.tex Sun Jan 30 23:34:06 2022 +0900 @@ -1,5 +1,5 @@ \chapter{Continuation Based C} -Continuation Based C(CbC)\cite{cbc_kono}とは、本研究室で開発している軽量継続を導入したC言語の下位言語である。軽量継続とはSchemeのcall/ccなどの環境を持つ継続とは異なり、スタックが無く環境を持たない継続である。そのためcall/ccよりも軽量であることから軽量継続と呼ばれる。 +Continuation Based C(以下CbC)\cite{cbc_kono}とは、本研究室で開発している軽量継続を導入したC言語の下位言語である。軽量継続とはSchemeのcall/ccなどの環境を持つ継続とは異なり、スタックが無く環境を持たない継続である。そのためcall/ccよりも軽量であることから軽量継続と呼ばれる。 \section{CodeGear} CbCは従来のプログラミング言語における関数ではなくCodeGearという単位でプログラムを記述する。プログラムの遷移はCodeGearからCodeGearへの遷移によって実現され、軽量継続であるgoto文を用いて行われる。 @@ -8,7 +8,7 @@ \begin{figure}[htbp] \begin{center} - \includegraphics[width=7.5cm]{./figs/CbC_goto_example.png} + \includegraphics[width=12cm]{./figs/CbC_goto_example.png} \caption{gotoによる軽量継続を用いたCodeGear遷移} \label{figs:CbC_goto_example} \end{center} @@ -21,17 +21,19 @@ \section{メタ計算} 記述したプログラムの計算を行うためには、メモリ管理や、スレッド管理、GPUの資源管理などのOSレベルの計算を行う必要がある。このOSレベルの計算をメタ計算と呼び、ユーザーが記述したプログラムをノーマルレベルの計算と呼ぶことで2つの計算を区別している。 -\section{MetaCodeGear} -CbCにおいてメタ計算を行うCodeGearをMetaCodeGearといい、特に実行したいCodeGearの直前で実行されるMetaCodeGearをStubCodeGearという。ノーマルレベルから見るとCodeGearが直接InputDataGearからデータを受け取り、プログラム実行、その後OutputDataGearにデータを書き込んでいるように見えるが、実際にはCodeGear実行の前にMetaCodeGearが実行され、MetaCodeGearを経由してDataGearとデータの受け渡しを行っている。メタレベルの計算をMetaCodeGearが行うことで、ノーマルレベルの計算とメタレベルの計算の分離を実現している。MetaCodeGear、DataGearを含めたCodeGearの遷移を図\ref{figs:MetaCodeGear_flow}に示す。 +\section{MetaCodeGearとMetaDataGear} +CbCにおいてメタ計算を行うCodeGearをMetaCodeGearといい、特に実行したいCodeGearの直前で実行されるMetaCodeGearをStubCodeGearという。 + +また、CPUやGPUの情報、計算に必要な全てのDataGearなどメタ計算を行うために必要な情報を持つのがMetaDataGearである。 + +ノーマルレベルから見るとCodeGearが直接InputDataGearからデータを受け取り、プログラム実行、その後OutputDataGearにデータを書き込んでいるように見えるが、実際にはCodeGear実行の前にMetaCodeGearが実行され、MetaCodeGearを経由してDataGearとデータの受け渡しを行っている。メタレベルの計算をMetaCodeGearが行うことで、ノーマルレベルの計算とメタレベルの計算の分離を実現している。MetaCodeGear、MetaDataGearを含めたCodeGearの遷移を図\ref{figs:MetaCodeGear_flow}に示す。 \begin{figure}[htbp] \begin{center} - \includegraphics[width=9.1cm]{./figs/meta-cg-dg.pdf} + \includegraphics[width=13cm]{./figs/meta-cg-dg.pdf} \caption{MetaCodeGearを含めたCodeGearの遷移} \label{figs:MetaCodeGear_flow} \end{center} \end{figure} -\section{MetaDataGear} -CPUやGPUの情報、計算に必要な全てのDataGearなどメタ計算を行うために必要な情報を持つのがMetaDataGearである。
--- a/paper/text/existingDebugger.tex Sun Jan 30 16:17:20 2022 +0900 +++ b/paper/text/existingDebugger.tex Sun Jan 30 23:34:06 2022 +0900 @@ -1,8 +1,6 @@ \chapter{既存のデバッガについて} デバッガとはプログラムのデバッグを行う際に用いられるソフトウェアであり、変数の値を確認したり、プログラムを1行単位で実行したりしながらプログラムのバグの発見・修正を行う。 - - \section{代表的なデバッガの機能} - 既存のデバッガとしてGDB\cite{gdb}やLLDB\cite{lldb}などが挙げられる。またこれらのデバッガの持つ代表的な機能として以下が挙げられる。 +既存デバッガとしてはGDB\cite{gdb}やLLDB\cite{lldb}などがあり、これらの既存デバッガの持つ代表的な機能として以下が挙げられる。 \section{ステップ実行} プログラムを1ステップずつ実行させる機能である。これによりプログラムの動作を1つずつ確認することができる。ステップ実行には種類がありステップイン、ステップオーバー、ステップアウトなどがある。
--- a/paper/text/gears.tex Sun Jan 30 16:17:20 2022 +0900 +++ b/paper/text/gears.tex Sun Jan 30 23:34:06 2022 +0900 @@ -32,3 +32,16 @@ \section{Interface} GearsOSにおけるモジュール化の仕組みとしてInterfaceが導入されている。InterfaceはDataGearの定義と、そのDataGearに対しての操作(API)を行うCodeGearの集合である。Interfaceは仕様(Interface)と実装(Implement, Impl)の2つに分けて記述する。これによってAPIとなるCodeGearの実装を変えることで、同じCodeGear(API)だが別の処理を行うというようなことが実現できる。CodeGearとしては同じであるため、呼び出し元のコードを変更することなく、処理だけ変えることが可能である。 + +\section{トランスパイラ} +特定のプログラミング言語から別のプログラミング言語を生成するコンパイラのことをトランスパイラという。GearsOSはノーマルレベルとメタレベルの分離を取り入れたCbCの拡張言語であるためコンパイル時に純粋なCbCへと変換される\cite{transpiler}。そのためこれは一種のトランスパイラといえる。このトランスパイラはgenerate\_stub.plとgenerate\_context.plという2つのPerlスクリプトによって実現される。generate\_stub.plはCbCファイルにメタレベルの情報を付け加え、GearsOSの拡張構文を取り除いた結果のCbCファイルを新たに生成する\cite{generate_stub}。generate\_context.plはContextの初期化関連の処理を行うPerlスクリプトで、Contextの定義が記述されたcontext.hの生成や、CbCファイルとcontext.hから実行に必要なファイルの生成を行う。 +図\ref{figs:transpiler}にPerlトランスパイラによるCbCファイルの変換の図を示す。 + +\begin{figure}[htbp] + \begin{center} + \includegraphics[width=12cm]{./figs/transpiler.png} + \caption{MetaCodeGearを含めたCodeGearの遷移} + \label{figs:transpiler} + \end{center} +\end{figure} +
--- a/paper/text/gearsdebugger.tex Sun Jan 30 16:17:20 2022 +0900 +++ b/paper/text/gearsdebugger.tex Sun Jan 30 23:34:06 2022 +0900 @@ -6,15 +6,10 @@ \subsection{ユーザーインプット機能} ユーザーインプット機能はユーザーが行いたいデバッグ処理を指定するための機能で、プロンプトにより対話形式でデバッグコマンドを入力することでデバッグが可能になった。 -デバッグコマンドは後述するnextやpdコマンドなどが存在する。図\ref{figs:user_input}に(Gears Debugger)とあるが、これがユーザーへ入力を促すプロンプトである。 +デバッグコマンドは後述するnextやpdコマンドなどが存在する。ソースコード\ref{src:prompt_result}にユーザーへ入力を促すプロンプトを示す。 +ソースコード\ref{src:prompt_result}の7行目に(Gears Debugger)とあるが、これが実際にユーザーへ入力を促すプロンプトである。ここで各デバッグコマンドを入力することでデバッグを行う。 -\begin{figure}[htbp] - \begin{center} - \includegraphics[width=13cm]{./figs/user_input.png} - \caption{ユーザーへ入力を促すプロンプト} - \label{figs:user_input} - \end{center} -\end{figure} +\lstinputlisting[label=src:prompt_result, caption=ユーザーへ入力を促すプロンプト]{src/prompt_result.txt} \subsection{CodeGear単位でのデバッグ} GearsOSはCodeGearとDataGearを単位として実行される。そのためデバッグ時においては1つのCodeGearを実行した後の情報を見ることで、そのCodeGearによってどのDataGearがどのように変化したのかを見ることができる。そのため1つのCodeGear実行後にdebugMetaを呼ぶことによりCodeGear単位でのデバッグを実現している。 @@ -22,15 +17,9 @@ \subsection{DataGearの表示} CbCのデータ単位であり、GearsOSの基本単位であるDataGearの表示が可能となった。 -表示する際にはprint DataGearを意味するpdコマンドを入力する。また複数存在するDataGearの指定に対応するため、オプションでDataGear名を指定することで特定のDataGearの表示が出来る。表示の際には全てのDataGearの参照ができるcontextを経由して参照を行う。実際にDPPMCで使用されるDataGearであるPhilsの表示結果を図\ref{figs:pdPhils}に示す。 +表示する際にはprint DataGearを意味するpdコマンドを入力する。また複数存在するDataGearの指定に対応するため、オプションでDataGear名を指定することで特定のDataGearの表示が出来る。表示の際には全てのDataGearの参照ができるcontextを経由して参照を行う。実際にDPPMCで使用されるDataGearであるPhilsの表示結果をソースコード\ref{src:pd_example}に示す。 -\begin{figure}[htbp] - \begin{center} - \includegraphics[width=13cm]{./figs/pdPhils.png} - \caption{pdコマンドを用いたPhilsの表示結果} - \label{figs:pdPhils} - \end{center} -\end{figure} +\lstinputlisting[label=src:pd_example, caption=pdコマンドを用いたPhilsの表示結果]{src/pd_example.txt} \section{DebugWorker} \label{DebugWorker} Debug用のWorkerとしてDebugWorkerの作成を行った。通常のWorkerと異なる部分として、debugMetaの実装が挙げられる。ソースコード\ref{src:debugMeta}がdebugMetaの定義の一部である。ソースコード\ref{src:debugMeta}の1行目の\_\_ncodeは、ユーザーが定義できるMetaCodeGearである。通常のCodeGearの定義はソースコード\ref{src:hello}の1行目のように\_\_codeを用いて定義を行う。この\_\_codeを使った定義の場合はトランスパイラによる変換時にノーマルレベルのCodeGearだと判断され、メタ計算を行うStubCodeGearがトランスパイラによって生成される。しかし\_\_ncodeを使ったCodeGearの定義はトランスパイラによってMetaCodeGearと判断され、Stubの生成などがされない。 @@ -55,6 +44,8 @@ \ref{DebugWorker}でDebugWorker内にdebugMetaを作成したが、そのdebugMetaの行う処理について記述していく。 debugMetaはデバッグ処理におけるユーザーインプット部分を担うMetaCodeGearである。GearsDebuggerは1つのCodeGearの実行後にDataGearの表示などデバッグ情報を見たい。そのため、各CodeGearの呼び出し後にdebugMetaを呼び出すことでユーザーに入力を促す。これによって各CodeGear実行後にデバッグを行うことができる。 +\newpage + \section{meta.pm} \ref{debugMeta}にて各CodeGearの呼び出し後にdebugMetaを呼び出すと説明したが、その呼び出し方法としてmeta.pm\cite{meta.pm}というGearsOSのビルドシステムのAPIを用いている。通常はCodeGear実行後、次のCodeGearのStubCodeGearへと遷移するが、meta.pmを使うことでCodeGear実行後の遷移先を特定のMetaCodeGearへと変更することができる。ソースコード\ref{src:meta.pm}にmeta.pmを示す。ソースコード\ref{src:meta.pm}の7行目にqr/HelloImpl/と正規表現がある。トランスパイラはこの正規表現にマッチしたCodeGearのgoto先を切り替えている。例でいうと、HelloImplという文字列を含むCodeGearがあった場合、ソースコード\ref{src:meta.pm} 13行目のサブルーチンgeneratedebugMetaを呼び出し、goto先をdebugMetaへと切り替えている。
--- a/paper/text/introduction.tex Sun Jan 30 16:17:20 2022 +0900 +++ b/paper/text/introduction.tex Sun Jan 30 23:34:06 2022 +0900 @@ -10,7 +10,7 @@ 本研究室では定理証明やモデル検査を用いて信頼性の保証を行うGearsOSの開発を行っている。 GearsOSはContinuation Based C(CbC)を用いて記述したOSである。CbCは本研究室で開発している言語で、CodeGearというプログラム単位で記述・遷移するC言語の下位言語である。 CodeGear間の遷移は通常の関数呼び出しではなく、goto文によって行われるため、呼び出し元へ戻らない。 -そのためプログラムの記述をそのまま状態遷移として落とし込むことができ、これにより定理証明やモデル検査が可能である。 +そのためプログラムの記述をそのまま状態遷移として落とし込むことができ、これにより定理証明やモデル検査が容易になる。 GearsOSは定理証明やモデル検査により信頼性の保証を行っているが、 これらの定理証明やモデル検査自体を自分がどう証明したのかを確かめたり、GearsOS上の例題のデバッグしたいということがある。
--- a/paper/text/reference.tex Sun Jan 30 16:17:20 2022 +0900 +++ b/paper/text/reference.tex Sun Jan 30 23:34:06 2022 +0900 @@ -4,7 +4,10 @@ \bibitem{lldb} https://lldb.llvm.org/ \bibitem{cbc_kono} 河野真治. 継続を持つ c の下位言語によるシステム記述. 日本ソフトウェア科学会第 17 回大会, 2000. \bibitem{GearsOS} 河野真治, 伊波立樹, 東恩納琢偉. Code gear、data gear に基づく os のプロトタイ プ. 情報処理学会システムソフトウェアとオペレーティング・システム研究会 (OS), May 2016. +\bibitem{transpiler} 清水隆博. GearsOSのメタ計算. 琉球大学大学院理工学研究科情報工学専攻修士論文, pp.68, March 2021. +\bibitem{generate_stub} 清水隆博. GearsOSのメタ計算. 琉球大学大学院理工学研究科情報工学専攻修士論文, pp.32, March 2021. \bibitem{ikkunMaster} 東恩納琢偉. GearsOS におけるモデル検査を実現する手法について. 琉球大学大学院理工学研究科情報工学専攻修士論文, March2021. \bibitem{meta.pm} 清水隆博. GearsOSのメタ計算. 琉球大学大学院理工学研究科情報工学専攻修士論文, pp.77, March 2021. +\bibitem{parusuMaster} 伊波 立樹. Gears OSの並列処理. 琉球大学大学院理工学研究科情報工学専攻修士論文, March 2018. \end{thebibliography}