# HG changeset patch # User mir3636 # Date 1548408345 -32400 # Node ID 6c375f3eef72e4335f7aada06aa14f2ba438ea3d # Parent ddf62b7397035023a0f50a92a77b131d898a2d48 update diff -r ddf62b739703 -r 6c375f3eef72 paper/gearsOS.tex --- a/paper/gearsOS.tex Fri Jan 25 03:48:23 2019 +0900 +++ b/paper/gearsOS.tex Fri Jan 25 18:25:45 2019 +0900 @@ -94,4 +94,23 @@ \lstinputlisting[label=TaskManager, caption=TaskManager の Interface]{./src/taskManagerInterface.cbc} \section{TaskQueue} +Gears OS における TaskQueue は Synchronized Queue で実現される。 +Worker の Queue はTaskManager を経由して Task を送信するスレッドと、 +Task を取得する Worker 自身のスレッドで扱われる。 +Gears OS の TaskQueue はマルチスレッドでの操作を想定しているため、データの一貫性を保証する必要がある。 +そのため、データの一貫性を並列実行時でも保証するために Compare and Swap(CAS) を利用して Queue の操作を行っている。 +CAS はデータの比較・置換をアトミックに行う命令である。 +メモリからデータの読みだし、変更、メモリへのデータの書き出しという一連の処理を CAS を利用することで +処理の間に他のスレッドがメモリに変更を加えないことを保証することができる。 +CAS に失敗した場合は置換を行わず、再びデータの呼び出しから始める。 + \section{Workers} + +Worker は自身の Queue から Task を取得し、Task の Code Gear を実行し、Output Data Gear の書き出しを行っている。 +Worker は初期化の際に スレッドを生成する。 +生成されたスレッドはまず、Context を生成する。 +Context をスレッド毎に生成することで、メモリ空間をスレッド毎に持てるため他のスレッドを止めることはない。 +Context の生成後は Queue から Task を取得する。 +Task は Context であるため Context を入れ替え、Task を実行する。 +Task の実行後に Data Gear の書き出しと依存関係の解決を行う。 +その後、Context を Worker の Context に入れ替え、再び Task を取得する。 diff -r ddf62b739703 -r 6c375f3eef72 paper/generate_code.tex --- a/paper/generate_code.tex Fri Jan 25 03:48:23 2019 +0900 +++ b/paper/generate_code.tex Fri Jan 25 18:25:45 2019 +0900 @@ -101,7 +101,7 @@ \begin{figure}[ht] \begin{center} - \includegraphics[width=70mm]{./fig/generate_context3.pdf} + \includegraphics[width=120mm]{./fig/generate_context3.pdf} \end{center} \caption{generate\_context による Context の生成} \label{fig:gc} diff -r ddf62b739703 -r 6c375f3eef72 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed