# HG changeset patch # User mir3636 # Date 1486893721 -32400 # Node ID 72e058e7e5944574f7dad1e78dbb449c4a56bbea # Parent f516c12e52326b7b629c270bf0348bac22b41e7a update diff -r f516c12e5232 -r 72e058e7e594 final_main/chapter3.tex --- a/final_main/chapter3.tex Sat Feb 11 18:23:22 2017 +0900 +++ b/final_main/chapter3.tex Sun Feb 12 19:02:01 2017 +0900 @@ -34,7 +34,7 @@ %\end{figure} \section{CbC による Gears OS の構文サポート} -Gears OS では Context という 接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。 +Gears OS では Context という接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。 Gears OS は必要な Code/Data Gear に参照したい場合、この Context を通す必要がある。 %メインとなる Context と Worker 用の Context があり、TaskQueue と Persistent Data Tree は共有される。 %Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。 @@ -43,11 +43,37 @@ しかし、Context を直接扱うのはセキュリティ上好ましくない。 そこで Context から必要なデータを取り出して Code Gear に接続する Meta Code Gear である stub を定義し、これを介して間接的に必要な Data Gear にアクセスする。 -現在 CbC で Gears OS を記述すると通常の Computation に加えて Meta Computation である stub を記述する必要がある。 -Meta Computation +%現在 CbC で Gears OS を記述すると通常の Computation に加えて Meta Computation である stub を記述する必要がある。 +%Meta Computation + -Context や stub は Meta Computation であるため。 +%Context や stub は Meta Computation であるため。 + +\section{Meta Code Gear} +Gears OS では Code Gear 間の遷移に meta レベルの Meta Code Gear を挟む。 +その様子を表したのが図 \ref{fig:metaCS}である。 +通常レベルの Code Gear は一度 Meta Code Gear へと継続し、その後次の Code Gear へと継続する。 +Meta Code Gear は Meta Computation を行う Code Gear で、メモリの確保やネットワーク管理等が Meta Computation にあたる。 +Code Gear にはこれらの処理を書かず、Meta Code Gear に必要に応じて記述する。 +%通常レベルの Code Gear からは Meta Code Gear への継続は見えず、通常レベルの Code Gear に直接継続しているように見えるべきである + +\begin{figure}[htpb] + \begin{center} + \scalebox{0.55}{\includegraphics{fig/metaCS.pdf}} + \end{center} + \caption{meta computation} + \label{fig:metaCS} +\end{figure} + +\section{stub Code Gear} +Gears OS では Code Gear は Meta Code Gear に継続し、その後 Code Gear に継続すると述べたが、正確には Meta Code Gear から Code Gear に継続する際に stub Code Gear を挟む。 +stub Code Gear では、Code Gear が必要とする Data Gear を context から取り出すという処理を行うものである。 +stub Code Gear は Code Gear 毎に生成される。 + +%この機能により、CbC は Code Gear のみでなく Data Gear を単位として用いることが可能になった。 +%Meta Code Gear、Meta Data Gear により meta computation を通常の Code Gear 内に記述せずにすむ、Code Gear 間に実行される Meta Code Gear で継続先を変更する、エラーハンドリングを行うといった使い方ができるようになるだろう。 + %\section{TaskQueue} %ActiveTaskQueue と WaitTaskQueue の 2 つの TaskQueue を持つ。 @@ -71,7 +97,6 @@ %処理後、必要なデータを Persistent Data Tree に書き出して再び Task の取得・実行を行う。 % \section{interface の記述} -interface は interface を記述することで diff -r f516c12e5232 -r 72e058e7e594 final_main/chapter4.tex --- a/final_main/chapter4.tex Sat Feb 11 18:23:22 2017 +0900 +++ b/final_main/chapter4.tex Sun Feb 12 19:02:01 2017 +0900 @@ -19,7 +19,7 @@ \item[SSA-based Machine Code Optimizations]\mbox{}\\ SSA-based Machine Code に対する最適化を行う。各最適化はそれぞれ独立した pass になっている。 \item[Register Allocation]\mbox{}\\ - 仮装レジスタから物理レジスタへの割り当てを行う。ここで PHI 命令が削除され、SSA-based でなくなる. + 仮装レジスタから物理レジスタへの割り当てを行う。ここで PHI 命令が削除され、SSA-based でなくなる。 \item[Prolog/Epilog Code Insertion]\mbox{}\\ Prolog/Epilog Code の挿入を行う、どちらも関数呼び出しに関わるものであり、Prolog は関数を呼び出す際に呼び出す関数 のためのスタックフレームを準備する処理、Epilog は呼び出し元の関数に戻る際に行う処理である。 diff -r f516c12e5232 -r 72e058e7e594 final_main/chapter5.tex --- a/final_main/chapter5.tex Sat Feb 11 18:23:22 2017 +0900 +++ b/final_main/chapter5.tex Sun Feb 12 19:02:01 2017 +0900 @@ -1,1 +1,22 @@ \chapter{Context、stub の自動生成} + +Gears OS では 3 章で述べたように通常の Computation の他に Meta Computation を記述する必要がある。 +しかし Meta Computation はユーザーが関知すべきではないので perl スクリプトによる自動生成を行った。 + +\section{Context の生成} +Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 +Data Gear を取得するために perl スクリプトは context.h を読み宣言された Data Gear を取得する。 + +Code Gear は指定された cbc ファイルから stub を見て取得を行う。 + +Context で Code Gear の名前とポインタの対応は生成する enum Code によって表現される。 +実際に Code Gear に接続する際は enum Code を指定することで接続を行う。 + + +%enum で Code Gear と Data Gear +%Data Gear の typedef +%stub の extern +%Data Gear の init (ALLOCA) +%target 毎の init context + + diff -r f516c12e5232 -r 72e058e7e594 final_main/main.aux --- a/final_main/main.aux Sat Feb 11 18:23:22 2017 +0900 +++ b/final_main/main.aux Sun Feb 12 19:02:01 2017 +0900 @@ -24,7 +24,11 @@ \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {3.1}Gears OS}{5}} \@writefile{toc}{\contentsline {section}{\numberline {3.2}CbC による Gears OS の構文サポート}{5}} -\@writefile{toc}{\contentsline {section}{\numberline {3.3}interface の記述}{6}} +\@writefile{toc}{\contentsline {section}{\numberline {3.3}Meta Code Gear}{5}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces meta computation}}{6}} +\newlabel{fig:metaCS}{{3.1}{6}} +\@writefile{toc}{\contentsline {section}{\numberline {3.4}stub Code Gear}{6}} +\@writefile{toc}{\contentsline {section}{\numberline {3.5}interface の記述}{6}} \newlabel{gotoWithTheEnv}{{3.1}{6}} \@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}stack の interface}{6}} \@writefile{toc}{\contentsline {chapter}{\numberline {第4章}LLVM/clang による CbC の実装}{7}} @@ -42,6 +46,7 @@ \@writefile{toc}{\contentsline {chapter}{\numberline {第5章}Context、stub の自動生成}{10}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {5.1}Context の生成}{10}} \@writefile{toc}{\contentsline {chapter}{\numberline {第6章}今後の課題}{11}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} diff -r f516c12e5232 -r 72e058e7e594 final_main/main.dvi Binary file final_main/main.dvi has changed diff -r f516c12e5232 -r 72e058e7e594 final_main/main.lof --- a/final_main/main.lof Sat Feb 11 18:23:22 2017 +0900 +++ b/final_main/main.lof Sun Feb 12 19:02:01 2017 +0900 @@ -4,6 +4,7 @@ \contentsline {figure}{\numberline {2.2}{\ignorespaces code segment の軽量継続}}{3} \contentsline {figure}{\numberline {2.3}{\ignorespaces 環境付き継続}}{4} \addvspace {10\p@ } +\contentsline {figure}{\numberline {3.1}{\ignorespaces meta computation}}{6} \addvspace {10\p@ } \contentsline {figure}{\numberline {4.1}{\ignorespaces LLVM の 処理過程}}{8} \addvspace {10\p@ } diff -r f516c12e5232 -r 72e058e7e594 final_main/main.log --- a/final_main/main.log Sat Feb 11 18:23:22 2017 +0900 +++ b/final_main/main.log Sun Feb 12 19:02:01 2017 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.2.4) 11 FEB 2017 18:04 +This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.2.4) 12 FEB 2017 19:01 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -199,7 +199,8 @@ File: fig/gotowithenv.pdf Graphic file (type pdf) ) (./chapter3.tex [3] [4] 第 3 章 -[5 +File: fig/metaCS.pdf Graphic file (type pdf) + [5 ]) (./chapter4.tex [6] 第 4 章 @@ -237,12 +238,12 @@ ) Here is how much of TeX's memory you used: - 2344 strings out of 493683 - 32210 string characters out of 6149654 - 378243 words of memory out of 5000000 - 5889 multiletter control sequences out of 15000+600000 + 2348 strings out of 493683 + 32278 string characters out of 6149654 + 377243 words of memory out of 5000000 + 5892 multiletter control sequences out of 15000+600000 14691 words of font info for 58 fonts, out of 8000000 for 9000 929 hyphenation exceptions out of 8191 26i,5n,49p,556b,1689s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on main.dvi (17 pages, 40364 bytes). +Output written on main.dvi (17 pages, 44080 bytes). diff -r f516c12e5232 -r 72e058e7e594 final_main/main.pdf Binary file final_main/main.pdf has changed diff -r f516c12e5232 -r 72e058e7e594 final_main/main.toc --- a/final_main/main.toc Sat Feb 11 18:23:22 2017 +0900 +++ b/final_main/main.toc Sun Feb 12 19:02:01 2017 +0900 @@ -6,10 +6,13 @@ \contentsline {chapter}{\numberline {第3章}Gears OS}{5} \contentsline {section}{\numberline {3.1}Gears OS}{5} \contentsline {section}{\numberline {3.2}CbC による Gears OS の構文サポート}{5} -\contentsline {section}{\numberline {3.3}interface の記述}{6} +\contentsline {section}{\numberline {3.3}Meta Code Gear}{5} +\contentsline {section}{\numberline {3.4}stub Code Gear}{6} +\contentsline {section}{\numberline {3.5}interface の記述}{6} \contentsline {chapter}{\numberline {第4章}LLVM/clang による CbC の実装}{7} \contentsline {section}{\numberline {4.1}LLVM clang}{7} \contentsline {section}{\numberline {4.2}LLVM の基本構造}{7} \contentsline {section}{\numberline {4.3}LLVM/clang のデバッグ}{8} \contentsline {chapter}{\numberline {第5章}Context、stub の自動生成}{10} +\contentsline {section}{\numberline {5.1}Context の生成}{10} \contentsline {chapter}{\numberline {第6章}今後の課題}{11}