comparison Paper/paper.tex @ 5:16305e9540cc

add about context etc
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Fri, 30 Apr 2021 16:30:47 +0900
parents 48b77cf5b5cd
children 9cf99ee758a5
comparison
equal deleted inserted replaced
4:48b77cf5b5cd 5:16305e9540cc
95 当研究室ではOSの信頼性の検証を目的としたOSであるGearsOSを開発している. 95 当研究室ではOSの信頼性の検証を目的としたOSであるGearsOSを開発している.
96 GearsOSはユーザレベルとメタレベルを分離して記述が行える言語であるContinuation based C(以下CbC)で記述されており, Gearというプログラミング概念を持つ. 96 GearsOSはユーザレベルとメタレベルを分離して記述が行える言語であるContinuation based C(以下CbC)で記述されており, Gearというプログラミング概念を持つ.
97 97
98 GearsOSは現在開発途上であるため, 現在は言語フレームワークとしてしか動作しない。OSとして起動するためにこれから実装が必要な機能が多く存在しており, その中の一つとして分散ファイルシステムが挙げられる. 98 GearsOSは現在開発途上であるため, 現在は言語フレームワークとしてしか動作しない。OSとして起動するためにこれから実装が必要な機能が多く存在しており, その中の一つとして分散ファイルシステムが挙げられる.
99 GearsOSの分散ファイルシステムを構成するために、当研究室が開発している分散フレームワークChristieの仕組みを用いようと考えた. 99 GearsOSの分散ファイルシステムを構成するために、当研究室が開発している分散フレームワークChristieの仕組みを用いようと考えた.
100
100 ChrsitieはGearsOSのもつGearという概念とよく似た, 別のGearというプログラミング概念を持っており, DataGearと呼ばれる変数データを接続されたノード同士が送信しあうことで分散処理を簡潔に記述することができる. DataGearは指定された型と名前を持つkeyに対応しており, プログラムが必要なkeyにデータが揃ってから初めてプログラムが処理される. 101 ChrsitieはGearsOSのもつGearという概念とよく似た, 別のGearというプログラミング概念を持っており, DataGearと呼ばれる変数データを接続されたノード同士が送信しあうことで分散処理を簡潔に記述することができる. DataGearは指定された型と名前を持つkeyに対応しており, プログラムが必要なkeyにデータが揃ってから初めてプログラムが処理される.
101 また, ChrisiteはTopologyManagerと呼ばれる機能を持っており, 任意の形でノード同士の配線を行いTopologyを形成する機能を持っている. 102 また, ChrisiteはTopologyManagerと呼ばれる機能を持っており, 任意の形でノード同士の配線を行いTopologyを形成する機能を持っている.
102 103
103 104
104 %2 105 %2
105 \section{現代のファイルシステムについて} 106 \section{現代のファイルシステムについて}
106 107
107 108
108 %2.1 109 %2.1
109 \section{Continuation based C} 110 \section{Continuation based C}
110 GearsOSはC言語の下位言語であるContinuation based Cを用いて記述されている. CbCは関数呼び出しでなく, 継続を導入しており, スタック領域を用いずjmp命令でコード間を移動することにより軽量な継続を実現している. CbCではこの継続を用いてfor文などのループの代わりに再起呼び出しを行う. 実際のOSやアプリケーションを記述する際にはGCCまたはLLVM/clangのCbC実装を用いる. 111 GearsOSはC言語の下位言語であるContinuation based Cを用いて記述されている. CbCは関数呼び出しでなく, 継続を導入しており, スタック領域を用いずjmp命令でコード間を移動することにより軽量な継続を実現している. CbCではこの継続を用いてfor文などのループの代わりに再起呼び出しを行う. 実際のOSやアプリケーションを記述する際にはGCCまたはLLVM/clangのCbC実装を用いる.
111 112
112 CbCでは関数の代わりにCodeGear(以下CG)という単位でプログラミングを行う. CodeGearは\texttt{\_\_code}で宣言を行い, 各CodeGearはDataGearと呼ばれる変数データを入力として受け取り, その結果を別のDataGearに書き込む. 特に入力のDataGeatをInputDataGear, 出力されるDataGearを OutputDataGearと呼ぶ. CodeGearとDataGearの関係図を図\ref{fig:cgdg}に示す. 113 CbCでは関数の代わりにCodeGearという単位でプログラミングを行う. CodeGearは\texttt{\_\_code}で宣言を行い, 各CodeGearはDataGearと呼ばれる変数データを入力として受け取り, その結果を別のDataGearに書き込む. 特に入力のDataGeatをInputDataGear, 出力されるDataGearを OutputDataGearと呼ぶ. CodeGearとDataGearの関係図を図\ref{fig:cgdg}に示す.
113 CodeGearは関数呼び出しのスタックを持たないため, 一度CodeGearを遷移すると元の処理に戻ってくることができない. 114 CodeGearは関数呼び出しのスタックを持たないため, 一度CodeGearを遷移すると元の処理に戻ってくることができない.
114 115
115 CbCコードの例をソースコード\ref{label=src:cbc_example}に示す.%refを使う 116 CbCコードの例をソースコード\ref{label=src:cbc_example}に示す.%refを使う
116 117
117 \begin{figure}[tb] 118 \begin{figure}[tb]
141 142
142 \end{lstlisting} 143 \end{lstlisting}
143 144
144 145
145 \section{CbCを用いたOSの記述} 146 \section{CbCを用いたOSの記述}
146 CodeGearの遷移はノーマルレベルから見ると単純にCodeGearがDataGearをInput, Outputをのみ繰り返し, コードブロックを移動しているように見えるが, 実際にはCodeGearからCodeGearへの遷移にはデータの整合性の確認などのメタ計算が必要となる. 147 CodeGearの遷移はノーマルレベルから見ると単純にCodeGearがDataGearをInput, Outputをのみ繰り返し, コードブロックを移動しているように見える.
147 148 CodeGearが別のDataGearに遷移する際のDataGearとの関係性を図\ref{fig:meta-cgdg} に示す. ノーマルレベルではDataGearを受け取ったCodeGearを実行, 実行結果をDataGearに書き込み別のCodeGearに継続していると見える.
148 149
149 \ref{fig:meta-cgdg} 150 しかし, 実際にはCodeGearから別のCodeGearへの遷移にはデータの整合性の確認などのメタ計算が必要となる.
151 コード間の遷移に必要となるメタ計算は, MetaCodeGearと呼ばれるCodeGearごとに実装されたCodeGearで行う.
152 MetaCodeGearで参照されるDataGearをMetaDataGear呼び, また, CodeGearの直前に実行されるMetaCodeGearをStubCodeGearと呼ぶ.
153 これらMeta計算部分を含めたCodeGearの遷移とDataGearの関係性を図示すると図\ref{fig:meta-cgdg} の下段の形に表せる. CordGearの実行前後に実行されるMetaCodeGearや入出力のDataGearをMetaDagaGearから取り出すなどのメタ計算が加わる.
154
155 MetaCodeGearは詳細な処理の変更や, スクリプトに問題がある場合を除き, プログラマが直接実装する必要がなく, GearsOSが持つPerlスクリプトにより, GearsOSがビルドされる際に生成される.
156
157 CodeGearの遷移に重要な役割を持つMetaDataGearとしてcontextが存在する。
158 contextは遷移先のCodeGearとMetaDataGearの紐付けや, 計算に必要なDataGearの保存や管理を行う.
159 加えてcontextは処理に必要になるCodeGearの番号とMetaCodeGearの対応表や, DataGearの格納場所を持つ. contextと各データ構造の役割を図\ref{fig:context}に示す.
160 計算に必要なデータ構造と処理を持つデータ構造であることから, contextは従来のOSのプロセスに相当し, ユーザープログラムごとにcontextが存在している.
150 161
151 162
152 \begin{figure}[tb] 163 \begin{figure}[tb]
153 \begin{center} 164 \begin{center}
154 \includegraphics[width=80mm]{images/meta-cg-dg.pdf} 165 \includegraphics[width=80mm]{images/meta-cg-dg.pdf}
155 \end{center} 166 \end{center}
156 \caption{CodeGearとMetaCodeGearの関係図} 167 \caption{CodeGearとMetaCodeGearの関係図}
157 \label{fig:meta-cgdg} 168 \label{fig:meta-cgdg}
158 \end{figure} 169 \end{figure}
159 170
160 171 \begin{figure}[tb]
172 \begin{center}
173 \includegraphics[width=80mm]{images/Context_ref.pdf}
174 \end{center}
175 \caption{Contextを介したCodeGearの継続}
176 \label{fig:context}
177 \end{figure}
161 178
162 %3 179 %3
163 \section{論文フォーマットの指針} 180 \section{論文フォーマットの指針}
164 \label{sec:format} 181 \label{sec:format}
165 182