Mercurial > hg > Papers > 2019 > mitsuki-master
changeset 10:6c375f3eef72
update
author | mir3636 |
---|---|
date | Fri, 25 Jan 2019 18:25:45 +0900 |
parents | ddf62b739703 |
children | 2ae5331e815e |
files | paper/gearsOS.tex paper/generate_code.tex paper/master_paper.pdf |
diffstat | 3 files changed, 20 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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 を取得する。
--- 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}