# HG changeset patch # User ichikitakahiro # Date 1557315077 -32400 # Node ID 6819a4bd652897d2937d90ed02b82989bdbf14bd # Parent d356c4c52bcae67efad9de4c1b80d62a62f894e7 add src & write ~torque diff -r d356c4c52bca -r 6819a4bd6528 paper/sigos.pdf Binary file paper/sigos.pdf has changed diff -r d356c4c52bca -r 6819a4bd6528 paper/sigos.tex --- a/paper/sigos.tex Wed May 08 00:29:54 2019 +0900 +++ b/paper/sigos.tex Wed May 08 20:31:17 2019 +0900 @@ -1,14 +1,37 @@ - \documentclass[submit]{ipsj} %\documentclass{ipsj} - \usepackage[dvipdfmx]{graphicx} \usepackage{ascmac} \usepackage{graphicx} \usepackage{latexsym} +\usepackage{url} +\usepackage{listings,jlisting} +\usepackage{enumitem} + \lstset{ + language=C, + tabsize=2, + frame=single, + basicstyle={\ttfamily\footnotesize},% + identifierstyle={\footnotesize},% + commentstyle={\footnotesize\itshape},% + keywordstyle={\footnotesize\bfseries},% + ndkeywordstyle={\footnotesize},% + stringstyle={\footnotesize\ttfamily}, + breaklines=true, + captionpos=b, %キャプションの位置 + columns=[l]{fullflexible},% + xrightmargin=0zw,% + xleftmargin=1zw,% + aboveskip=1zw, + numberstyle={\scriptsize},% + stepnumber=1, + numbersep=0.5zw,% + lineskip=-0.5ex, +} +\renewcommand{\lstlistingname}{Code} \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline} @@ -93,10 +116,10 @@ %2 \section{ブロックチェーンについて} %2.1 -\subsection{P2P (Peer-to-Peer)} +\section{P2P (Peer-to-Peer)} ブロックチェーンはP2Pにてネットワーク間が動作している,つまり.ブロックチェーンネットワークにはサーバー,クライアントの区別がなく,全てのノードが平等である.そのため,非中央時にデータの管理をおこなう. -\subsection{ブロックとその構造} +\section{ブロックとその構造} ブロックチェーンにおけるブロックは,複数のトランザクションをまとめたものである.ブロックの構造はしようするコンセンサスアルゴリズムによって変わるが,基本的な構造としては次のとおりである. \begin{itemize} \item BlockHeader @@ -127,7 +150,7 @@ %\|http://www.ipsj.or.jp/journal/submit/style.html| %\end{quote} -\subsection{トランザクションとその構造} +\section{トランザクションとその構造} トランザクションとはデータのやり取りを行った記録の最小単位である. トランザクションの構造は次のとおりである. \begin{description} \item[TransactionHash] トランザクションをハッシュ化したもの. @@ -139,14 +162,13 @@ トランザクションはノード間で伝搬され,ノードごとに検証される.そして検証を終え,不正なトランザクションであればそのトランザクションを破棄し,検証に通った場合はTransaction Poolに取り組まれ,また検証したノードからトランザクションがブロードキャストされる. -\subsection{fork} +\section{fork} ブロックの生成をした後にブロードキャストをすると,ブロック高の同じ,もしくは相手のブロック高の高いブロックチェーンにたどり着く場合がある.当然,相手のブロックチェーンはこれを破棄する.しかしこの場合,異なるブロックを持った2つのブロックチェーンをこの状態をforkと呼ぶ.fork状態になると,2つの異なるブロックチェーンができることになるため,一つにまとめなければならない.1つにまとめるためにコンセンサスアルゴリズムを用いるが,コンセンサスアルゴリズムについては次章で説明する. -\section{コンセンサスアルゴリズムについて} -\subsection{Proof of Workを用いたコンセンサス} +\section{Proof of Workを用いたコンセンサス} ブロックチェーンでは,パブリックブロックチェーンの場合とコンソーシアムブロックチェーンによってコンセンサスアルゴリズムが変わる.この章ではパブリックブロックチェーンのBitcoin,Ethereumに使われているProof of Workとコンソーシアムブロックチェーンに使えるPaxosを説明する。 -\subsection{Proof of Workを用いたコンセンサス} +\section{Proof of Workを用いたコンセンサス} パブリックブロックチェーンとは,不特定多数のノードが参加するブロックチェーンシステムのことをさす。よって,不特定多数のノード間,全体のノードの参加数が変わる状況でコンセンサスが取れるアルゴリズムを使用しなければならない.Proof of Workは不特定多数のノードを対象としてコンセンサスが取れる.ノードの計算量によってコンセンサスを取るからである.次のような問題が生じてもProof of Workはコンセンサスを取ることができる. \begin{enumerate} @@ -178,12 +200,14 @@ \end{figure} 2の条件については,単純に(桁数 - difficulty + 1) * 10 $>$ hash とも置き換えることができる.\\nonceを変えていくことで,hashはほぼ乱数のような状態になる.つまり,difficultyを増やすほど,条件に当てはまるhashが少なくなっていくことがわかり,そのhashを探すための計算量も増えることがわかる.\\これがProof of Workでブロックを生成する手順となる.これを用いることによって,ブロックが長くなるほど,すでに作られたブロックを変更することは計算量が膨大になるため,不可能になっていく.Proof of Workでノード間のコンセンサスを取る方法は単純で,ブロックの長さの差が一定以上になった,場合,長かったブロックを正しいものとする.これを図で示すと3.2のようになる.\\ + \begin{figure}[h] \begin{center} \includegraphics[width=240pt]{./images/proof-of-work-fork.pdf} \caption{Proof of Workのコンセンサス} \end{center} \end{figure} + 計算量の差が51\%以上になると,forkしたブロック同士で差が生まれる.それによって,IPアドレスでのコンセンサではなく,CPUの性能によるコンセンサスを取ることができる.\\コンセンサスでは,ブロックとの差が大きければ大きいほど,コンセンサスが正確に取れる.しかし,正しいチェーンが決まるのに時間がかかる.そのため,コンセンサスに必要なブロックの差はコンセンサスの正確性と時間のトレードオフになっている.\\ この方法でコンセンサスを取る場合の欠点を挙げる. @@ -192,917 +216,170 @@ \item Transactionが確定するのに時間がかかる. \end{itemize} -\subsection{Paxos} +\section{Paxos} コンソーシアムブロックチェーンは許可したのノードのみが参加できるブロックチェーンである.そのため,ノードの数も把握できるため,Paxosを使うことができる.Paxosはノードの多数決によってコンセンサスを取るアルゴリズムである.ただし,Paxosは次のような問題があっても値を一意に決めることができる. \begin{enumerate} \item プロセス毎に処理の速度が違う. つまり, メッセージの返信が遅い可能性がある \item 通信にどれだけの時間がかかるかわからず, その途中でメッセージが失われる可能性がある, \item プロセスは停止する可能性がある. また, 復旧する可能性もある. \end{enumerate} - - -%4.2.1 -\subsubsection{表題} - -表題は,\|\title| および \|\etitle| で定義した表題はセンタリングされる. -文字数の多いものについては,適宜 \|\\| を挿入して改行する. - -%4.2.2 -\subsubsection{著者名・所属} - -各著者の所属を第一著者から順に \|\affiliate| を用いてラベル(第1引数)を付けながら定義すると, -脚注に番号を付けて所属が出力される. -なお,複数の著者が同じ所属である場合には,一度定義するだけで良い. - - - -現在の所属は \|\paffiliate| を用い,同様にラベル,所属先を記述する. -所属先には自動で「現在」, -\|\\|の改行で「Presently with」が挿入される. -著者名は \|\author| で定義する. -各著者名の直後に,英文著者名,所属ラベルとメールアドレスを記入する. -著者が複数の場合は \|\author| を繰り返すことで, -2人,3人,\dots と増えていく. -現在の所属や,複数の所属先を追加する場合には, -所属ラベルをカンマで区切り,追加すればよい. - - - -また, -メールアドレス部分は省略が可能だが,必ず代表者のアドレスは必要となる. -なお,和文著者名,英文著者名は,姓と名を半角(ASCII)の空白で区切る. - - - -%4.2.3 -\subsubsection{概要} - -和文の概要は \|abstract| 環境の中に, -英文の概要は \|eabstract| 環境の中に,それぞれ記述する. - -%4.2.4 -\subsubsection{キーワード} - -和文の概要は \|jkeyword| 環境の中に, -英文の概要は \|ekeyword| 環境の中に,それぞれ1〜5語記述する. - -%4.3 -\subsection{本文} - -%4.3.1 -\subsubsection{見出し} - -節や小節の見出しには \|\section|, \|\subsection|, \|\subsubsection|, -\|\paragraph| といったコマンドを使用する. - -\<「定義」,「定理」などについては,\|\newtheorem|で適宜環境を宣言し, -その環境を用いて記述する. - - -%4.3.2 -\subsubsection{行送り} - -2段組を採用しており, -左右の段で行の基準線の位置が一致することを原則としている. -また,節見出しなど,行の間隔を他よりたくさんとった方が読みやすい場所では, -この原則を守るようにスタイルファイルが自動的にスペースを挿入する. -したがって本文中では \|\vspace| や \|\vskip| を用いたスペースの調整を行なわないようにすること. - - - - -%4.3.3 -\subsubsection{フォントサイズ} - -フォントサイズは, -スタイルファイルによって自動的に設定されるため, -基本的には著者が自分でフォントサイズを変更する必要はない. - - - -%4.3.4 -\subsubsection{句読点} - -句点には全角の「.」,読点には全角の「,」を用いる. -ただし英文中や数式中で「.」や「,」を使う場合には, -半角文字を使う. -「。」や「、」は使わない. - -%4.3.5 -\subsubsection{全角文字と半角文字} - -全角文字と半角文字の両方にある文字は次のように使い分ける. - -\begin{enumerate} -\item 括弧は全角の「(」と「)」を用いる.但し,英文の概要,図表見出し, -書誌データでは半角の「(」と「)」を用いる. - -\item 英数字,空白,記号類は半角文字を用いる.ただし,句読点に関しては, -前項で述べたような例外がある. - -\item カタカナは全角文字を用いる. - -\item 引用符では開きと閉じを区別する. -開きには \|``| を用い,閉じには\|''| を用いる. -\end{enumerate} - +Proof of Workにある特性の4がないが,コンソーシアムブロックチェーンは3つの問題を解決するだけで十分である.何故ならば,コンソーシアムブロックチェーンは許可したノードのみが参加可能だからである.つまり,悪意あるノードが参加する可能性が少ないためである.// +Paxosは3つの役割ノードがある. +\begin{description} +\item[proposer] 値を提案するノード. +\item[acceptor] 値を決めるノード. +\item[learner] acceptorから値を集計し, 過半数以上のacceptorが持っている値を決める. +\end{description} +Paxosのアルゴリズムの説明の前に,定義された用語の解説をする.いかにその用語の定義を示す. -%4.3.6 -\subsubsection{箇条書} - -箇条書に関する形式を特に定めていない. -場合に応じて標準的な \|enumerate|, -\|itemize|, \|description| の環境を用いてよい. - - - -%4.3.7 -\subsubsection{脚注} - -脚注は \|\footnote| コマンドを使って書くと, -ページ単位に\footnote{脚注の例.}や\footnote{二つめの脚注.}のような -参照記号とともに脚注が生成される. -なお,ページ内に複数の脚注がある場合, -参照記号は \LaTeX を2回実行しないと正しくならないことに注意されたい. - - - -また場合によっては, -脚注をつけた位置と脚注本体とを別の段に置く方がよいこともある. -この場合には, -\|\footnotemark| コマンドや \|\footnotetext| コマンドを使って対処していただきたい. - - -なお,脚注番号は論文内で通し番号で出力される. +\begin{description} +\item[提案] 提案は, 異なる提案ごとにユニークな提案番号と値からなる. 提案番号とは, 異なる提案を見分けるための識別子であり, 単調増加する. 値は一意に決まってほしいデータである. +\item[値(提案)がacceptされる] acceptorによって値(提案)が決まること. +\item[値(提案)が選択(chosen)される] 過半数以上のacceptorによって, 値(提案)がacceptされた場合, それを値(提案)が選択されたと言う. - - - -%4.3.8 -\subsubsection{OverfullとUnderfull} - -組版時にはoverfullを起こさないことを原則としている. -従って,まず提出するソースが著者の環境でoverfullを起こさないように, -文章を工夫するなどの最善の努力を払っていただきたい. -但し,\|flushleft| 環境,\|\\|,\|\linebreak| などによる両端揃えをしない形でのoverfullの回避は, -できるだけ避けていただきたい. -また著者の執筆時点では発生しないoverfullが, -組版時の環境では発生することもある. -このような事態をできるだけ回避するために, -文中の長い数式や \|\verb| を避ける, -パラグラフの先頭付近では長い英単語を使用しない, -などの注意を払うようにして頂きたい. - - - -%4.4 -\subsection{数式}\label{sec:Item} - -%4.4.1 -\subsubsection{本文中の数式} - -本文中の数式は \|$| と \|$|, \|\(| と \|\)|, あるいは \|math| 環境のいずれで囲んでもよい. +paxosのアルゴリズムは2フェーズある.\\ +1つ目のフェーズ,prepare-promiseは次のような手順で動作する. - - -%4.4.2 -\subsubsection{別組の数式} - -別組数式(displayed math)については \|$$| と \|$$| は使用せずに, -\|\[| と \|\]| で囲むか, -\|displaymath|, \|equation|, \|eqnarray| のいずれかの環境を用いる.これらは -% -\begin{equation} -\Delta_l = \sum_{i=l|1}^L\delta_{pi} -\end{equation} -% -のように,センタリングではなく固定字下げで数式を出力し, -かつ背が高い数式による行送りの乱れを吸収する機能がある. - - - - -%4.4.3 -\subsubsection{eqnarray環境} - -互いに関連する別組の数式が2行以上連続して現れる場合には, -単に\|\[| と \|\]|, -あるいは \|\begin{equation}| と\|\end{equation}| で囲った数式を書き並べるのではなく, -\|\begin|\allowbreak\|{eqnarray}| と \|\end{eqnarray}| を使って, -等号(あるいは不等号)の位置で縦揃えを行なった方が読みやすい. +1フェーズ目を図にしたものを図3.3に示す. - - -%4.4.4 -\subsubsection{数式のフォント} - - -\LaTeX が標準的にサポートしているもの以外の特殊な数式用フォントは, -できるだけ使わないようにされたい. -どうしても使用しなければならない場合には, -その旨申し出て頂くとともに, -組版工程に深く関与して頂くこともあることに留意されたい. - - -\begin{figure}[tb] -\setbox0\vbox{ -\hbox{\|\begin{figure}[tb]|} -\hbox{\quad \|<|図本体の指定\|>|} -\hbox{\|\caption{<|和文見出し\|>}|} -\hbox{\|\ecaption{<|英文見出し\|>}|} -\hbox{\|\label{| $\ldots$ \|}|} -\hbox{\|\end{figure}|} -} -\centerline{\fbox{\box0}} -\caption{1段幅の図} -\ecaption{Single column figure with caption\\ -explicitly broken by $\backslash\backslash$.} -\label{fig:single} +\begin{figure}[h] +\begin{center} +\includegraphics[width=240pt]{./images/prepare-promise.pdf} +\caption{Proof of Workのコンセンサス} +\end{center} \end{figure} -%4.5 -\subsection{図} - -1段の幅におさまる図は, -\figref{fig:single} の形式で指定する. -位置の指定に \|h| は使わない. -また,図の下に和文と英文の双方の見出しを, -\|\caption| と \|\ecaption| で指定する. -文字数が多い見出しはは自動的に改行して最大幅の行を基準にセンタリングするが, -見出しが2行になる場合には適宜 \|\\| を挿入して改行したほうが -良い結果となることがしばしばある(\figref{fig:single} の英文見出しを参照). -図の参照は \|\figref{<|ラベル\|>}| を用いて行なう. - - - - - -また紙面スペースの節約のために, -1つの \|figure|(または \|table|)環境の中に複数の図表を並べて表示したい場合には, -\figref{fig:left} と \tabref{tab:right} のように個々の -図表と各々の \|\caption|/\|\ecaption| を \|minipage| 環境に入れることで実現できる. -なお図と表が混在する場合, -\|minipage| 環境の中で\|\CaptionType{figure}| あるいは \|\CaptionType| \|{table}| を指定すれば, -外側の環境が \|figure| であっても \|table| であっても指定された見出しが得られる. - - +2つ目のフェーズ, accept-acceptedは次のような手順で動作する. +\begin{enumerate} +\item proposerは過半数のacceptorから返信が来たならば, 次の提案をacceptorに送る. これをacceptリクエストという. +\begin{enumerate} +\item もし, 約束のみが返ってきているならば, 任意の値vをprepareリクエストで送った提案に設定する. +\item もし, acceptされた提案が返ってきたら, その中で最大の提案番号を持つ提案の値v'をprepareリクエストで送った提案の値として設定する. +\end{enumerate} -\begin{figure}[tb] -\begin{minipage}[t]{0.5\columnwidth} -\footnotesize -\setbox0\vbox{ -\hbox{\|\begin{minipage}[t]%|} -\hbox{\| {0.5\columnwidth}|} -\hbox{\|\CaptionType{table}|} -\hbox{\|\caption{| \ldots \|}|} -\hbox{\|\ecaption{| \ldots \|}|} -\hbox{\|\label{| \ldots \|}|} -\hbox{\|\makebox[\textwidth][c]{%|} -\hbox{\|\begin{tabular}[t]{lcr}|} -\hbox{\|\hline\hline|} -\hbox{\|left¢er&right\\\hline|} -\hbox{\|L1&C1&R1\\|} -\hbox{\|L2&C2&R2\\\hline|} -\hbox{\|\end{tabular}}|} -\hbox{\|\end{minipage}|}} -\hbox{} -\centerline{\fbox{\box0}} -\caption{\protect\tabref*{tab:right} の中身} -\ecaption{Contents of table \protect\ref{tab:right}.} -\label{fig:left} -\end{minipage}% -\begin{minipage}[t]{0.5\columnwidth} -\CaptionType{table} -\caption{\protect\figref*{fig:left} で作成した表} -\ecaption{A table built by\\ Fig.\,\protect\ref{fig:left}.} -\label{tab:right} -\vskip1mm -\makebox[\textwidth][c]{\begin{tabular}[t]{lcr}\hline\hline -left¢er&right\\\hline -L1&C1&R1\\ -L2&C2&R2\\\hline -\end{tabular}} -\end{minipage} +\item acceptorはacceptリクエストが来た場合, Promiseした提案よりもacceptリクエストで提案された提案番号が低ければ, その提案を拒否する. それ以外の場合はacceptする. +\end{enumerate} +2フェーズ目を図にしたものを図3.4に示す. + +\begin{figure}[h] +\begin{center} +\includegraphics[width=240pt]{./images/accept-accepted.pdf} +\caption{Proof of Workのコンセンサス} +\end{center} \end{figure} -\begin{figure*}[tb] -\setbox0\vbox{\large -\hbox{\|\begin{figure*}[t]|} -\hbox{\quad \|<|図本体の指定\|>|} -\hbox{\|\caption{<|和文見出し\|>}|} -\hbox{\|\ecaption{<|英文見出し\|>}|} -\hbox{\|\label{| $\ldots$ \|}|} -\hbox{\|\end{figure*}|}} -\centerline{\fbox{\hbox to.9\textwidth{\hss\box0\hss}}} -\caption{2段幅の図} -\ecaption{Double column figure.} -\label{fig:double} -%\vspace*{-2.5mm} -\end{figure*} - - -2段の幅にまたがる図は, -\figref{fig:double} の形式で指定する. -位置の指定は \|t| しか使えない. -図の中身では本文と違い, -どのような大きさのフォントを使用しても構わない(\figref{fig:double} 参照). -また図の中身として, -encapsulate されたPostScriptファイル(いわゆるEPSファイル)を読み込むこともできる. -読み込みのためには,プリアンブルで -% -\begin{quote} -\|\usepackage{graphicx}| -\end{quote} -% -を行った上で, -\|\includegraphics| コマンドを図を埋め込む箇所に置き, -その引数にファイル名(など)を指定する. - - - - -%4.6 -\subsection{表} - -表の罫線はなるべく少なくするのが, -仕上がりをすっきりさせるコツである. -罫線をつける場合には,一番上の罫線には二重線を使い, -左右の端には縦の罫線をつけない (\tabref{tab:example}). -表中のフォントサイズのデフォルトは\|\footnotesize|である. - - -また,表の上に和文と英文の双方の見出しを, - \|\caption|と \|\ecaption| で指定する. -表の参照は \|\tabref{<|ラベル\|>}| を用いて行なう. - - - -\begin{table}[tb] -\caption{表の例} -\ecaption{An example of table.} -\label{tab:example} -\hbox to\hsize{\hfil -\begin{tabular}{l|lll}\hline\hline -& column1 & column2 & column3 \\\hline -row1 & item 1,1 & item 2,1 & ---\\ -row2 & --- & item 2,2 & item 3,2 \\ -row3 & item 1,3 & item 2,3 & item 3,3 \\ -row4 & item 1,4 & item 2,4 & item 3,4 \\\hline -\end{tabular}\hfil} -\end{table} - - - -%4.7 -\subsection{参考文献・謝辞} - -%4.7.1 -\subsubsection{参考文献の参照} +このアルゴリズムによって,各acccepterごとに値が一意の決まる.値を集計,選択するのはLearnerの役割である.Learnerが値を集計する方法には2つの方法である. -本文中で参考文献を参照する場合には\|\cite|を使用する. -参照されたラベルは自動的にソートされ, -\|[]|でそれぞれ区切られる. -% -\begin{quote} -文献 \|\cite{companion,okumura}| は \LaTeX の総合的な解説書である. -\end{quote} -% -と書くと; -% -\begin{quote} -文献\cite{companion,okumura}は \LaTeX の総合的な解説書である. -\end{quote} -% -が得られる. - -%4.7.2 -\subsubsection{参考文献リスト} -参考文献リストには, -原則として本文中で引用した文献のみを列挙する. -順序は参照順あるいは第一著者の苗字のアルファベット順とする. -文献リストはBiB\TeX と\verb+ipsjunsrt.bst+(参照順) -または\verb+ipsjsort.bst+(アルファベット順)を用いて作り, -\verb+\bibliograhpystyle+と\verb+\bibliography+コマンドにより -利用することが出来る. -これらを用いれば, -規定の体裁にあったものができるので, -できるだけ利用していただきたい. -また製版用のファイル群には\verb+.bib+ファイルではなく\verb+.bbl+ファイルを -必ず含めることに注意されたい. -一方,何らかの理由でthebibliography環境で文献リストを -「手作り」しなければならない場合は, -このガイドの参考文献リストを注意深く見て, -そのスタイルにしたがっていただきたい. - - - -%4.7.3 -\subsubsection{謝辞} - -謝辞がある場合には,参考文献リストの直前に置き,\|acknowledgment|環境の中に入れる. - - -%4.8 -\subsection{著者紹介} - - +\begin{enumerate} +\item Acceptorによって値がacceptされた時に, 各Learnerに送信される. ただし, Message通信量が, Acceptorの数 times Learnerの数になる. +\item 1つのLearnerが各Learnerに選択された値を送信する. 1の方法に比べてMessage通信量が少なくなる(Acceptorの数 + Learnerの数になる)代わりに, そのLearnerが故障した場合は各LearnerがMessageを受け取れない. +\end{enumerate} -本文の最後(\|\end{document}| の直前)に,以下のように著者紹介を記述する. -\begin{quote} -\|\begin{biography}|\\ -\|\profile{m}{<|第一著者名\|>}{|第一著者の紹介\|}|\\ -\|\profile{m,F}{<|第二著者名\|>}{|第二著者の紹介\|}|\\ -\|\profile{m}{<|$\dots$\|>}{|$ldots$\|}|\\ -\|\end{biography}| -\end{quote} -なお最初の引数を変えることで,会員種別が変わる. -\begin{quote} -\|名誉会員   :h|\\ -\|正会員    :m|\\ -\|学生会員   :s|\\ -\|ジュニア会員 :j|\\ -\|非会員    :n| -\end{quote} -また会員種別と同時に,称号を表記することもできる. -\begin{quote} -\|フェロー   :F|\\ -\|シニア会員  :E|\\ -\|終身会員   :L| -\end{quote} -なお称号は著者紹介の末尾に表記される. - - -著者紹介用の写真は縦30ミリ×横25ミリのサイズにて使用する. -頭の一部が切れているものや背景と顔の輪郭が区別しにくいものなどは避け, -背景は無いもの,または薄い色のものを使用するのが望ましい. -なお写真データは,解像度300dpi以上,100万画素以上のカメラを使用したデータを推奨する. -電子データを用意できない場合は,証明写真を送付されたい. -また,著者紹介用写真は組版を行う際に印刷業者で取り込むため, -原稿作成時に写真を取り込む必要はない. - - -%5 -\section{論文内容に関する指針} - -論文の内容について, -論文誌ジャーナル編集委員会で作成した「べからず集」を以下に示す. -投稿前のチェックリストとして利用頂きたい. -これ以外にも,査読者用,メタ査読者用の「べからず集」\cite{webpage2}も公開しているので, -参照されたい. -また,作文技術に関する \cite{book1, book2, book3, book4}のような書籍も参考になる. - - - -%5.1 -\subsection{書き方の基本} +2つの方法はメッセージ通信量と耐障害性のトレードオフになっていることがわかる. +Paxosでコンセンサスを取ることは, Proof of Workと比較して次のようなメリットがある. \begin{itemize} - \item[$\Box$] 研究の新規性,有用性,信頼性が読者に伝わるように記述する. - \item[$\Box$] 読み手に,読みやすい文章を心がける(内容が前後する,背景・ - 課題の設定が不明瞭などは読者にとって負担). - \item[$\Box$] 解決すべき問題が汎用化(一般的に記述)されていないのは再 - 考を要する(XX大学の問題という記述に終始).あるいは, - (単に「作りました」だけで)解決すべき問題そのものの記述 - がないのは再考を要する. - \item[$\Box$] 結論が明確に記されていない,または,範囲,限界,問題点な - どの指摘が適切ではない,または,結論が内容にそったもので - はないものは再考を要する. - \item[$\Box$] 科学技術論文として不適当な表現や,分かりにくい表現がある - のは再考を要する. - \item[$\Box$] 極端な口語体や,長文の連続などは再考を要する. - \item[$\Box$] 章,節のたて方,全体の構成等が適切でない文章は再考を要す - る. - \item[$\Box$] 文中の文脈から推測しないと内容の把握が困難な論文にしない. - \item[$\Box$] 説明に飛躍した点があり,仮説等の説明が十分ではないのは再 - 考を要する. - \item[$\Box$] 説明に冗長な点,逆に簡単すぎる点があるのは再考を要する. - \item[$\Box$] 未定義語を減らす. -\end{itemize}\unskip - - -%5.2 -\subsection{新規性と有効性を明確に示す} - -\begin{itemize} - \item[$\Box$] 在来研究との関連,研究の動機,\pagebreak%%% - ねらい等が明確に説明されていないのは再考を要する. - \item[$\Box$] 既知/公知の技術が何であって,何を新しいアイデアとして提 - 案しているのかが書かれていないのは再考を要する. - \item[$\Box$] 十分な参考文献は新規性の主張に欠かせない. - \item[$\Box$] 提案内容の説明が,概念的または抽象的な水準に終始していて, - 読者が提案内容を理解できない(それだけで新規性が感じられ - ないもの)のは再考を要する. - \item[$\Box$] 論文で提案した方法の有効性の主張がない,またはきわめて貧 - 弱なのは再考を要する. -\end{itemize} - -%5.3 -\subsection{書き方に関する具体的な注意} - -\begin{itemize} - \item[$\Box$] 和文標題が内容を適切に表現していないのは再考を要する. - \item[$\Box$] 英文標題が内容を適切に表現していない,または英語として適 - 切でないのは再考を要する. - \item[$\Box$] アブストラクトが主旨を適切に表現していない,または英文が - 適切ではないのは再考を要する. - \item[$\Box$] 記号・略号等が周知のものでなく,または,用語が適切でなく, - または,図・表の説明が適当ではないのは再考を要する. - \item[$\Box$] 個人的あるいは非常に小さなグループ/企業だけで通用するよ - うな用語が特別な説明もなしに多用されているのは再考を要す - る. - \item[$\Box$] 図表自体は十分に明確ではない,または誤りがあるのは再考を - 要する. - \item[$\Box$] 図表が鮮明ではないのは再考を要する. - \item[$\Box$] 図表が大きさ,縮尺の指定が適切でないのは再考を要する. -\end{itemize} - -%5.4 -\subsection{参考文献} - -\begin{itemize} - \item[$\Box$] 参考文献は10件以上必要(分野によっては20件以上,30件以上 - という意見もある). - \item[$\Box$] 十分な参考文献は新規性の主張に欠かせない. - \item[$\Box$] 適切な文献が引用されておらず,その数も適切ではないのは再 - 考を要する. - \item[$\Box$] 日本人によるしかるべき論文を引用することで日本人研究コミュ - ニティの発展につながる. - \item[$\Box$] 参考文献は自分のものばかりではだめ. -\end{itemize} - -%5.5 -\subsection{二重投稿} - -\begin{itemize} - \item[$\Box$] 二重投稿はしてはならない ─ ただし国際会議に採択された論 - 文を著作権が問題にならないように投稿することは構わない. - \item[$\Box$] 他の論文とまったく同じ図表を引用の明示なしに利用すること - は禁止. - \item[$\Box$] 既発表の論文等との間に重複があるのは再考を要する. -\end{itemize} - -\newpage%% - -%5.6 -\subsection{他の人に読んでもらう} - -\begin{itemize} - \item[$\Box$] 投稿経験が少ない人は,採録された経験の豊富な人に校正して - もらう. - \item[$\Box$] 読者の立場から見て論理的な飛躍がないかに注意して記述する. -\end{itemize} - -%5.7 -\subsection{その他} - -\begin{itemize} - \item[$\Box$] 条件付採録後の修正で,採録条件以外を理由もなく修正するこ - とは禁止. - \item[$\Box$] 査読者を選べない. - \item[$\Box$] 投稿前にチェックリストの各項目を満たしているか,必ず確認 - する. +\item CPUのリソースを消費しない +\item Transactionの確定に時間がかからない. \end{itemize} -%6 -\section{おわりに} - -本稿では,A4縦型2段組み用に変更したスタイルファイルを用いた論文のフォーマット方法と, -論文誌ジャーナル編集委員会がまとめた「べからず集」に基づく論文の書き方を示した. -内容的にまだ不十分の部分が多いため,意見,要望等を -\begin{quote} - \|editt@ipsj.or.jp| -\end{quote} -までお寄せ頂きたい. - - - -\begin{acknowledgment} -A4横型に対するガイドを基に,本稿を作成した. -クラスファイルの作成においては, -京都大学の中島 浩氏にさまざまなご教示を頂き, -さらにBiB\TeX 関連ファイルの利用についても快諾頂いたことを深謝する. -また,A4横型に対するガイドを作成された当時の編集委員会の担当者に深謝する. -\end{acknowledgment} - -\begin{thebibliography}{9} -\bibitem{okumura} -奥村晴彦:改訂第5版 \LaTeXe 美文書作成入門, -技術評論社(2010). - -\bibitem{companion} -Goossens, M., Mittelbach, F. and Samarin, A.: {\it The LaTeX Companion}, -Addison Wesley, Reading, Massachusetts (1993). - -\bibitem{book1} -木下是雄: -理科系の作文技術, -中公新書(1981). - -\bibitem{book2} -Strunk, W.J. and White, E.B.: {\it The Elements of Style, Forth Edition}, -Longman (2000). - -\bibitem{book3} -Blake, G. and Bly, R.W.: {\it The Elements of Technical Writing}, -Longman (1993). - -\bibitem{book4} -Higham, N.J.: -{\it Handbook of Writing for the Mathematical Sciences}, -SIAM (1998). - -\bibitem{webpage1} -情報処理学会論文誌ジャーナル編集委員会: -投稿者マニュアル(オンライン), -\urlj{http://www.ipsj.or.jp/journal/ submit/manual/j\_manual.html}% -\refdatej{2007-04-05}. - -\bibitem{webpage2} -情報処理学会論文誌ジャーナル編集委員会: -べからず集(オンライン), -\urlj{http://www.ipsj.or.jp/journal/\\ manual/bekarazu.html}% -\refdatej{2011-09-15}. - -\end{thebibliography} - - - - -\appendix -%A.1 -\section{付録の書き方} - -付録がある場合には,参考文献リストの直後にコマンド \|\appendix| に引き続いて書く. -付録では,\|\section| コマンドが{\bf A.1},{\bf A.2}などの見出しを生成する. +\section{Paxosによるブロックチェーン} +PaxosはProof of Workと比べ,CPUのリソースを消費せず,Transactionの確定に時間がかからない.そのため,Paxosでブロックのコンセンサスを取るブロックチェーンを実装することにはメリットがある.また,Paxos自体がリーダー選出に向いているアルゴリズムである.そのため,リーダーを決め,そのノードのブロックチェーンの一貫性のみを考えることもできる. -%A.1.1 -\subsection{見出しの例} - -付録の \|\subsetion| ではこのよう見出しになる. - -%A.2 -\section{論文誌トランザクション用コマンド} -\label{sig} - -論文誌トランザクションには各々に固有のサブタイトル,略称,通番がある. -最終原稿では,以下のコマンドを \|\documentclass| の{\bf オプション}とすることで, -これらの情報を与える. - +\section{Christie} +Christieは当研究室で開発している分散フレームワークである.Christieは当研究室で開発しているGearsOSに組み込まれる予定がある.そのためGearsOSを構成する言語Continuation based Cと似た概念がある.Christieに存在する概念として次のようなものがある. \begin{itemize} -\item \|PRO|(プログラミング) -\item \|TOM|(数理モデル化と応用) -\item \|TOD|(データベース) -\item \|ACS|(コンピューティングシステム) -\item \|CDS|(コンシューマ・デバイス\,\&\,システム) -\item \|DCON|(デジタルコンテンツ) -\item \|TCE|(教育とコンピュータ) -\item \|TBIO|(Bioinformatics)\footnote{% -TBIO, SLDM, CVAは英文論文誌であるので和名はない.} -\item \|SLDM|(System LSI Design Methodology)\footnotemark[4] -\item \|CVA|(Computer Vision and Applicaitons)\footnotemark[4] +\item CodeGear(以下 CG) +\item DataGear(以下 DG) +\item CodeGearManager(以下 CGM) +\item DataGearManager(以下 DGM) \end{itemize} +CGはクラス,スレッドに相当し,javaの継承を用いて記述する.DGは変数データに相当し,CG内でアノテーションを用いて変数データを取り出せる.CGMはノードであり,DGM,CG,DGMを管理する.DGMはDGを管理するものであり,putという操作により変数データ,すなわちDGを格納できる.DGMのput操作を行う際にはLocalとRemoteと2つのどちらかを選び,変数のkeyとデータを引数に書く.Localであれば,LocalのCGMが管理しているDGMに対し,DGを格納していく.Remoteであれば接続したRemote先のCGMのDGMにDGを格納できる.put操作を行った後は,対象のDGMの中にqueとして補完される.DGを取り出す際には,CG内で宣言した変数データにアノテーションをつける.DGのアノテーションにはTake,Peek,TakeFrom,PeekFromの4つがある. -また英文論文作成の際には \|english| をオプションに追加すればよい. -したがって, -\|\documentclass[PRO]{ipsj}| とすれば「プログラミング」の和文用, -\|\documentclass[PRO,english]| \|{ipsj}| とすれば英文用となる. +\begin{description} +\item[Take] 先頭のDGを読み込み, そのDGを削除する. DGが複数ある場合, この動作を用いる. +\item[Peek] 先頭のDGを読み込むが, DGが削除されない. そのため, 特に操作をしない場合は同じデータを参照し続ける. +\item[TakeFrom(Remote DGM name)] Takeと似ているが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからTake操作を行える. +\item[PeekFrom(Remote DGM name)] Peekと似ているが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからPeek操作を行える. +\end{description} +\section{プログラミングの例} +ここでは,Christieで実際にプログラムを記述する例を述べる.CGMを作り,setup(new CodeGear)を動かすことにより,DGを持ち合わせ,DGが揃った場合にCodeGearが実装される.CGMを作る方法はStartCodeGear(以下SCG)を継承したものからcreate-CGM(port)methodを実行することによりCGMが作られる.SCGのコードの例をソースコード4.1に示す. -また論文誌トランザクションには「号」と連動しない「発行月」があるため, -学会あるいは編集委員会の指示に基づき,発行月を -% -\begin{itemize}\item[] -\|\setcounter{|{\bf 月数}\|}{<発行月>}| -\end{itemize} -% -によって指定する. +\begin{flushleft} +\lstinputlisting[label=code:StartHelloWorld, caption=StartHelloWorld]{./src/HelloWorld/StartHelloWorld.java} +\end{flushleft} -この他,以下の各節で示すように, -いくつかの論文誌に固有の機能を実現するためのコマンドなどが用意されている. - - - -%A.3 -\section{各論文誌トランザクション固有コマンド} - -各論文誌トランザクションによってそれぞれ細かい仕様が違うため, -同じコマンドでも出力結果が異なる場合がある. -また「再受付」,「再々受付」が入る場合があり,それらは +\end{description} -\noindent -和文では -\begin{itemize}\item[] -\|\|{\bf 再受付}\|{<年>}{<月>}{<日>}|\\ -\|\|{\bf 再再受付}\|{<年>}{<月>}{<日>}| -\end{itemize} -英文では -\begin{itemize}\item[] -\|\|{\bf rereceived}\|{<年>}{<月>}{<日>}|\\ -\|\|{\bf rerereceived}\|{<年>}{<月>}{<日>}| -\end{itemize} -とプリアンブルに追加する. +\section{TopologyManager} +Christieは当研究室で開発されたAliceを改良した分散フレームワークである.しかし,Aliceの機能を全て移行したわけではない.TopologyManagerは最たる例であり.分散プログラムを簡潔に書くために必要である.そのため,ChristieにTopoplogyManagerを実装した.// +ここではTopologyManagerがどのようなものかを述べる.TopologyManagerとは,Topologyを形成するために,参加を表明したノード,TopologyNodeに名前を与え,必要があればノード同士の配線も行うコードである.TopologyManagerのTopology形成方法として,静的Topologyと動的Topologyがある.静的Topologyはコード\ref{code:dot-example}のようなdotファイルを与えることで,ノードの関係を図\ref{fig:dot-example}のようにする.静的Topologyはdotがいるのノード数と同等のTopologyNodeがあって初めて,CodeGearが実行される. + + \lstinputlisting[caption=ring.dot, label=code:dot-example]{./src/ring.dot} + -%A.3.1 -\subsection{\<「プログラミング(PRO)」固有機能} - -\<「論文誌:プログラミング」には論文以外に, -プログラミング研究会での研究発表の内容梗概が含まれている. -この内容梗概は,\|\documentclass|のオプションとして\|abstract|を指定する. -\ref{config}~節の\|\maketitle|までの内容からなるファイル -(すなわち本文がないファイル)から生成する.なお\|\|{\bf 受付}や\|\|{\bf 採録}は不要であるが, -代わりに発表年月日を, +\begin{figure}[h] +\begin{center} +\includegraphics[width=120pt]{./images/ring.pdf} +\caption{ring.dotを図式化したもの} +\end{center} +\label{fig:dot-example} +\end{figure} + 動的Topologyは参加を表明したノードに対し,動的にノード同士の関係を作る.例えばTreeを構成する場合,参加したノードから順に,rootに近い位置の役割を与える.また,CodeGearはノードが参加しmparentに接続された後に実行される. + +\section{Chrisiteにおけるブロックチェーンの実装の利点と欠点} -\noindent -和文では -\begin{itemize}\item[] -\|\|{\bf 発表}\|{<年>}{<月>}{<日>}| -\end{itemize} -英文では -\begin{itemize}\item[] -\|\|{\bf Presented}\|{<年>}{<月>}{<日>}| -\end{itemize} -により指定する. +Christieにおいてブロック, トランザクション, Paxos, Proof of Workを実装した. +その際, Christieで実装した場合の便利な点を述べる. -%A.3.2 -\subsection{\<「データベース(TOD)」固有機能} - -\<「論文誌:データベース」の論文の担当編集委員は, -\begin{itemize}\item[] -\|\Editor{<氏名>}| +\begin{itemize} +\item データの取り出しが簡単. ChristieはDataGearという単位でデータを保持する. そのため, ブロックやトランザクションはDataGearに包めばいいため, どう送るかという問題を考えなくてすむ. +\item TopologyManagerでのテストが便利. dotファイルが有れば, TopologyManagerが任意の形でTopologyを作れる. そのため, ノードの配置については理想の環境を作れるため, 理想のテスト環境を作ることができる. +\item 機能ごとにファイルが実装できるため, 見通しが良い. ChristieはCbCのgotoと同じように関数が終わるとsetupによって別の関数に移動する. そのため自然に機能ごとにファイルを作るため, 見通しが良くなる. \end{itemize} -により指定する.和文では「担当編集委員」,英文では「Editor in Charge:」 -と入る. -またスタイルの変更に伴い,\underline{本文の最後}に入るので, -\|\end{document}|の前に直接置く. - - - +不便な点を以下に述べる. -%A.3.3 -\subsection{\<「コンシューマ・デバイス\,\&\,システム(CDS)」固有機能} +\begin{itemize} +\item デバッグが難しい. cgm.setupでCodeGearが実行されるが, keyの待ち合わせで止まり, どこのCGで止まっているかわからないことが多かった. 例えば, putするkeyのスペルミスでコードの待ち合わせが起こり, CGが実行されず, エラーなども表示されずにwaitすることがある. その時に, どこで止まっているか特定するのが難しい. +\item TakeFrom, PeekFromの使い方が難しい. TakeFrom, PeekFromは引数でDGM nameを指定する. しかし, DGMの名前を静的に与えるよりも, 動的に与えたい場合が多かった. +\item Takeの待ち合わせでCGが実行されない. 2つのCGで同じ変数をTakeしようとすると, setupされた時点で変数がロックされる. このとき, 片方のCGはDGがすべて揃っているのに, すべての変数が揃っていないもう片方のCGに同名の変数がロックされ, 実行されない場合がある. +\end{itemize} -\<「論文誌:コンシューマ・デバイス\,\&\,システム」では, -論文の種類によって見出しが変わるため, -オプションで切替えを行う. - -各種別は -\begin{itemize} -\item \|systems |コンシューマ・システム論文\\ -\| |Paper on Consumer Systems +\section{評価} +本研究室では,実際にコンセンサスアルゴリズムPaxosを分散環境場で実行した,分散環境場で動かすため,JobSchedulerの一種であるTorque Resource Manager(Torque)を使用した.ここではTorqueとは何か,どのような評価をしたかを述べる. -\item \|services |コンシューマ・サービス論文\\ -\| |Paper on Consumer Services - -\item \|devices |コンシューマ・デバイス論文\\ -\| |Paper on Consumer Devices +\section{Torqueとは} +PCクラスタ上でプログラムの実験を行う際には,他のプログラムとリソースを取り合う懸念がある.それを防ぐためにTorqueを使用する.Torqueはjobという単位でプログラムを管理し,リソースを確保できたら実行する.jobはqsubというコマンドを使って,複数登録することができる.また,実行中の様子もqstatというコマンドを使うことで監視ができる.\\ +Torqueには主に3つのNodeの種類がある.\\ -\item \|Research |研究論文\\ -\| |Research Paper -\end{itemize} -となる. +\begin{description} +\item[Master Node] pbs\_serverを実行しているノード. 他のノードの役割とも併用できる. +\item[Submit/Interactive Nodes] クライアントがjobを投入したり監視したりするノード. qsubやqstatのようなクライアントコマンドが実行できる. +\item[Computer Nodes] 投入されたjobを実際に実行するノード. pbs\_momが実行されており, それによってjobをstart, kill, 管理する. +\end{description} -和文のコンシューマ・システム論文なら,\\ -\|\documentclass[CDS,systems]{ipsj}| -となり,英文原稿なら \|english|を追加すればよい. - - - -%A.3.4 -\subsection{\<「デジタルコンテンツ(DCON)」固有機能} +今回は図\ref{fig:kvm}のように,学科のKVM上にMaster Node, Submit/Interactive Nodeの役割を持つVM1台と,Computer Nodesとして15台のVMを用意し,jobの投入を行なった. -\<「論文誌:デジタルコンテンツ」では, -論文の種類によって見出しが変わるため, -オプションで切替えを行う. - -各種別は -\begin{itemize} -\item \|Research |研究論文\\ -\| |Research Paper +\begin{figure}[h] +\begin{center} +\includegraphics[width=240pt]{./images/kvm.pdf} +\caption{環境実験} +\end{center} +\label{fig:kvm} +\end{figure} -\item \|Practice |産業論文\\ -\| |Practice Paper +jobはシェルスクリプトの形で与えることができる.ソースコードref{code:torque-example}を例として挙げる. -\item \|Content |作品論文\\ -\| |Content Paper -\end{itemize} -となる. +\lstinputlisting[caption=torque-example.sh,label=code:torque-example]{./src/torque-example.sh} -和文の研究論文なら,\\ -\|\documentclass[DC,Research]{ipsj}| -となり,英文原稿なら \|english|を追加すればよい. - - +「\#PBS オプション」とすることにより実行環境を設定できる. 使用できるオプションは参考文献に書かれてある. このスクリプトでは, ノード数10(vm0からvm9まで), jobの名前を「ExampleJob」という形で実行する設定をしている. もし, このコードを投入した場合, Submit/Interactive Nodesが各vmにsshし, hostnameコマンドを実行する. +実行後はstdout, stderrorの出力を「job名.o数字」, 「job名.e数字」というファイルに書き出す. -%A.3.5 -\subsection{\<「教育とコンピュータ(TCE)」固有機能} - -\<「論文誌\:教育とコンピュータ」では,論文の種類によって見出しが変わるため, -オプションで切替えを行う. - -各種別は -\begin{itemize} -\item \makebox[9.8zw][l]{指定なし}論文 - -\| |Regular Paper - -\item \makebox[9.8zw][l]{{\tt Short}}ショートペーパー - -\| |Short Paper - -\end{itemize} -となる. - -和文のショートペーパーなら,\\ -\|/documentclass[TCE,Short]{ipsj}| -となり,英文原稿なら\|english|を追加すればよい. - - - -%A.3.6 -\subsection{\<「Bioinformatics(TBIO)」固有機能} - -Trans.\ Bioinformatics (TBIO)は英文論文誌であるので,\|TBIO|オプションの -指定によって自動的に\|english|オプションが指定されたものとみなされ, -\|english| オプションの省略が可能. - -論文種別は以下の3種. -\begin{itemize} -\item \makebox[4.9zw][l]{指定なし} Original Paper (Default) -\item \|Data | Database/Software Paper -\item \|Survey | Survey Paper -\end{itemize} - -\|\documentclass[TBIO]{ipsj}|でOriginal Paper,\\ -\|\documentclass[TBIO,Survey]{ipsj}|でSurvey Paperとなる. - -また,担当編集委員はTOD同様,\|\Editor|で定義するが,「Communicated by」 -となる.TOD同様,\|\end{document}|の前に直接置く. - -%A.3.7 -\subsection{\<「Computer Vision and Applicaitons\\\<(CVA)」固有機能} - -Trans.\ CVAも英文論文誌であるため,\|english| オプションの省略が可. - -論文種別は4種類あり, -\begin{itemize} -\item \makebox[4.9zw][l]{指定なし} Regular Paper (Default) -\item \|Research | Research Paper -\item \|system | Systems Paper -\item \|Express | Express Paper -\end{itemize} -となる. - -TBIO同様,担当編集委員が入り, -挿入文章もTBIO同様,「Communicated by」となる. - -また,Express Paperでは著者紹介(\|\profile|)は不要のため,記述する必要はない. - - - -%A.3.8 -\subsection{\<「System LSI Design Methodology(SLDM)」固有機能} - -Trans.\ SLDMも英文論文誌であるため,\|english| オプションの省略が可. - -論文種別は2種類あり, -\begin{itemize} -\item \makebox[4.9zw][l]{指定なし} Regular Paper (Default) -\item \|Short | Short Paper -\end{itemize} -となる. - - -SLDMも担当編集委員が入るが挿入文章が論文によって自動挿入文章が異なる. - -通常は「Recommended by Associate Editor:」,\|invited|のオプションが入った場合のみ, -「Invited by Editor-in-Chief:」となる. - - - - -\begin{biography} -\profile{m,E}{情報 太郎}{1970年生.1992年情報処理大学理学部情報科学科卒業. -1994年同大学大学院修士課程修了.同年情報処理学会入社.オンライン出版の研究 -に従事.電子情報通信学会,IEEE,ACM 各会員.} -% -\profile{n}{処理 花子}{1960年生.1982年情報処理大学理学部情報科学科卒業. -1984年同大学大学院修士課程修了.1987年同博士課程修了.理学博士.1987年情報処 -理大学助手.1992年架空大学助教授.1997年同大教授.オンライン出版の研究 -に従事.2010年情報処理記念賞受賞.電子情報通信学会,IEEE,IEEE-CS,ACM -各会員.} -% -\profile{h,L}{学会 次郎}{1950年生.1974年架空大学大学院修士課程修了. -1987年同博士課程修了.工学博士.1977年架空大学助手.1992年情報処理大学助 -教授.1987年同大教授.2000年から情報処理学会顧問.オンライン出版の研究 -に従事.2010年情報処理記念賞受賞.情報処理学会理事.電子情報通信学会, -IEEE,IEEE-CS,ACM 各会員.} -\end{biography} - - - -\end{document} + + \end{document} \ No newline at end of file diff -r d356c4c52bca -r 6819a4bd6528 paper/src/HelloWorld/HelloWorldCodeGear.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/HelloWorld/HelloWorldCodeGear.java Wed May 08 20:31:17 2019 +0900 @@ -0,0 +1,17 @@ +package christie.example.HelloWorld; + +import christie.annotation.Take; +import christie.codegear.CodeGear; +import christie.codegear.CodeGearManager; + +public class HelloWorldCodeGear extends CodeGear { + + @Take + String helloWorld; + + @Override + protected void run(CodeGearManager cgm) { + System.out.print(helloWorld + " "); + cgm.setup(new HelloWorldCodeGear()); + } +} diff -r d356c4c52bca -r 6819a4bd6528 paper/src/HelloWorld/HelloWorldCodeGear.java.orig --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/HelloWorld/HelloWorldCodeGear.java.orig Wed May 08 20:31:17 2019 +0900 @@ -0,0 +1,18 @@ +package christie.example.HelloWorld; + +import christie.annotation.Take; +import christie.codegear.CodeGear; +import christie.codegear.CodeGearManager; + +public class HelloWorldCodeGear extends CodeGear { + + @Take + String helloWorld; + + @Override + protected void run(CodeGearManager cgm) { + System.out.print(helloWorld + " "); + if(helloWorld.equals("world")) return; + cgm.setup(new HelloWorldCodeGear()); + } +} diff -r d356c4c52bca -r 6819a4bd6528 paper/src/HelloWorld/StartHelloWorld.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/HelloWorld/StartHelloWorld.java Wed May 08 20:31:17 2019 +0900 @@ -0,0 +1,18 @@ +package christie.example.HelloWorld; + +import christie.codegear.CodeGearManager; +import christie.codegear.StartCodeGear; + +public class StartHelloWorld extends StartCodeGear { + + public StartHelloWorld(CodeGearManager cgm) { + super(cgm); + } + + public static void main(String[] args){ + CodeGearManager cgm = createCGM(10000); + cgm.setup(new HelloWorldCodeGear()); + cgm.getLocalDGM().put("helloWorld","hello"); + cgm.getLocalDGM().put("helloWorld","world"); + } +} diff -r d356c4c52bca -r 6819a4bd6528 paper/src/RemoteDataGearManager.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/RemoteDataGearManager.java Wed May 08 20:31:17 2019 +0900 @@ -0,0 +1,64 @@ +public class RemoteDataGearManager extends DataGearManager{ + boolean connect = false; + Object lock = new Object(); + + public RemoteDataGearManager(final String dgmName, final String address, final int port, CodeGearManager cgm) { + this.cgm = cgm; + RemoteDataGearManager manager = this; + new Thread("Connect-" + dgmName) { + public void run() { + do { + try { + SocketChannel sc = SocketChannel.open(new InetSocketAddress(address, port)); + connection = new Connection(sc.socket(), cgm); + connection.name = dgmName; + connection.socket.setTcpNoDelay(true); + + // add lock + synchronized (lock){ + connect = true; + lock.notify(); + } + } catch (IOException e) { + try { + Thread.sleep(50); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } + } + } while (!connect); + IncomingTcpConnection in = new IncomingTcpConnection(connection); + in.setManager(manager); + in.setName(dgmName+"-IncomingTcp"); + in.setPriority(MAX_PRIORITY); + in.start(); + OutboundTcpConnection out = new OutboundTcpConnection(connection); + out.setName(dgmName + "-OutboundTcp"); + out.setPriority(MAX_PRIORITY); + out.start(); + } + }.start(); + + } + + public void put(String key, Object data) { + + Command cm = new PutCommand(0, null, key, new DataGear(data)); + + if(!connect) connectWait(); // add wait + + connection.write(cm); + } + + // add method + public void connectWait(){ + synchronized (lock){ + while(!connect){ + try { + lock.wait(); + } catch (InterruptedException e) { + } + } + } + } +} \ No newline at end of file diff -r d356c4c52bca -r 6819a4bd6528 paper/src/ring.dot --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/ring.dot Wed May 08 20:31:17 2019 +0900 @@ -0,0 +1,5 @@ +digraph test { + node0 -> node1 [label="right"] + node1 -> node2 [label="right"] + node2 -> node0 [label="right"] +} diff -r d356c4c52bca -r 6819a4bd6528 paper/src/torque-example.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/torque-example.sh Wed May 08 20:31:17 2019 +0900 @@ -0,0 +1,8 @@ +#!/bin/sh +#PBS -N ExampleJob +#PBS -l nodes=10,walltime=00:01:00 +for serv in `cat $PBS_NODEFILE` +do + ssh $serv hostname & +done +wait \ No newline at end of file