changeset 27:0cc59d15f2e5

fix
author riono <e165729@ie.u-ryukyu.ac.jp>
date Thu, 06 May 2021 19:01:08 +0900
parents 9be93a860595
children 1f65d62932d7
files Paper/riono-sigos.pdf Paper/riono-sigos.tex
diffstat 2 files changed, 28 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
Binary file Paper/riono-sigos.pdf has changed
--- a/Paper/riono-sigos.tex	Thu May 06 15:58:36 2021 +0900
+++ b/Paper/riono-sigos.tex	Thu May 06 19:01:08 2021 +0900
@@ -138,33 +138,37 @@
 \begin{itemize} %箇条書き
 \item CodeGear 
 \item DataGear
-\item CodeGearManager 
-\item DataGearManager 
+\item CodeGearManager (以下CGM)
+\item DataGearManager (以下DGM)
 \end{itemize}
 
 以下はjava版のChristieについて解説を行う。
 CodeGearはクラスやスレッドに相当する。
 DataGearは変数データに相当し、CodeGear内でannotationを用いて変数データを取得する。CodeGear内に記述した全てのDataGearの中にデータが格納された際に、初めてそのCodeGearが実行されるという仕組みになっている。
-CodeGearManagerはノードであり、CodeGear、DataGear、DataGearManagerを管理する。
-DataGearManagerはDataGearを管理するものであり、putという操作により変数データ、つまりDataGearを格納できる。DataGearManagerのput操作を行う際にはLocalとRemoteのどちらかを選び、変数のkeyとデータを引数として渡す。
-Localであれば、LocalのCodeGearManagerが管理しているDataGearManagerに対しDataGearを格納していく。Remoteであれば、接続したRemote先のCodeGearManagerが管理しているDataGearManagerにDataGearを格納できる。
+CGM はノードであり、CodeGear、DataGear、DGMを管理する。
+DGMはDataGearを管理するものであり、putという操作により変数データ、つまりDataGearを格納できる。DGMのput操作を行う際にはLocalとRemoteのどちらかを選び、変数のkeyとデータを引数として渡す。
+Localであれば、LocalのCGMが管理しているDGMに対しDataGearを格納していく。Remoteであれば、接続したRemote先のCGMが管理しているDGMにDataGearを格納できる。
+
+図 \ref{fig:christieclass} は、Christie を同一プロセスで複数のインスタンスを立ち上げた際のDGM やCGM の接続の構造を示している。
+全てのCodeGearManger はThreadPool と他のCGM をList として共有している。ThreadPool とはCPU に合わせた並列度でqueue に入ったThread を順次実行していく実行機構である。ThreadPool が増えると、CPU コア数に合わない量のThread を管理することになり並列度が下がるため、1つのThreadPool で全てのCGM を管理している。
+また、CGM のList を共有することでメタレベルで全てのCodeGear/DataGear にアクセス可能となっている。
 
 \begin{figure}[h] %PDF
 \begin{center}
-\includegraphics[width=8cm]{fig/ChristieClass.pdf}
+\includegraphics[width=10cm]{fig/ChristieClass.pdf}
 \caption{Christie の複数インスタンスの立ち上げ}
-\label{fig:ring}
+\label{fig:christieclass}
 \end{center}
 \end{figure}
 
-put操作を行った後は、対象のDataGearManagerの中にqueueとして保管される。DataGearを取り出す際には、CodeGearm内で宣言した変数データにannotationをつける。DataGearのannotationにはTake、Peek、TakeFrom、PeekFromの4つがある。
+put操作を行った後は、対象のDGMの中にqueueとして保管される。DataGearを取り出す際には、CodeGearm内で宣言した変数データにannotationをつける。DataGearのannotationにはTake、Peek、TakeFrom、PeekFromの4つがある。
 
 
 \begin{description}
 \item[Take] 先頭のDataGear を読み込み、そのDataGear を削除する。DataGearが複数ある場合、この動作を用いる
 \item[Peek] 先頭のDataGear を読み込むが、DataGear が削除されない。そのため、特に操作をしない場合は同じデータを参照し続ける。
-\item[TakeFrom (Remote DGM name)] Take と似ているが、Remote DGM nameを指定することで、その接続先(Remote) のDataGearManager からTake 操作を行える。
-\item[PeekFrom (Remote DGM name)] Peek と似ているが、Remote DGM name を指定することで、その接続先(Remote) のDataGearManager からPeek 操作を行える。
+\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}
 
 
@@ -188,20 +192,20 @@
 \lstinputlisting[caption=java HelloWorldCodeGear, label=code:javaHWC]{src/HelloWorldCodeGear.java}
 \lstinputlisting[caption=java FinishHelloWorld, label=code:javaFHW]{src/FinishHelloWorld.java}
 
-Code \ref{code:javaSHW} ではCodeGearManager を作り、setup(new CodeGear) を行うことで各CodeGear に記述されたDataGear の待ち合わせを行う。全てのDataGear が揃った場合にCodeGear が実行される。CodeGearaManager の作成方法はStartCodeGear を継承したものから、createCGM(port) を実行することにより、CodeGearManager が作成できる。
+Code \ref{code:javaSHW} ではCGM を作り、setup(new CodeGear) を行うことで各CodeGear に記述されたDataGear の待ち合わせを行う。全てのDataGear が揃った場合にCodeGear が実行される。CodeGearaManager の作成方法はStartCodeGear を継承したものから、createCGM(port) を実行することにより、CGM が作成できる。
 
-Code \ref{code:javaSHW} の11、12行目はput(key, data) を行うことでDataGearManager のqueue にデータを格納することができる。key はstring 型のみで格納したい変数名を指定する。11、12行目のput ではCode \ref{code:javaHWC} のフィールド変数helloWorld を指定し、データは"hello" と"world" を逐次的に格納している。
+Code \ref{code:javaSHW} の11、12行目はput(key, data) を行うことでDGM のqueue にデータを格納することができる。key はstring 型のみで格納したい変数名を指定する。11、12行目のput ではCode \ref{code:javaHWC} のフィールド変数helloWorld を指定し、データは"hello" と"world" を逐次的に格納している。
 
-Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} がCodeGearにあたる。それぞれのフィールド変数には@Take annotation が付いており、DataGearManager に格納されたkey を参照してデータを取得する。その後DataGearManger に格納されたデータは破棄される。
+Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} がCodeGearにあたる。それぞれのフィールド変数には@Take annotation が付いており、DGM に格納されたkey を参照してデータを取得する。その後DataGearManger に格納されたデータは破棄される。
 
-Code \ref{code:javaHWC} では最初にフィールド変数 helloWorld にstring 型の"hellow"を取得、print を行い、再びkey hello、data "hello" をDataGearManager にput している。また8行目で自らをsetpuしているため、再帰的にHelloWorldCodeGear が再実行される。2回目の実行ではフィールド変数 helloWorld に"world" が格納と出力がされ、key world、data "world" がDataGearManager に格納される。Code \ref{code:javaHWC} でput した"hello" と"world" は最終的に、Code \ref{code:javaFHW} の同名のフィールド変数に格納される。
-2回目の実行でもsetup しているが、DataGearManagerにはkey helloWorld のデータが無いため、3回目以降は実行されない。
+Code \ref{code:javaHWC} では最初にフィールド変数 helloWorld にstring 型の"hellow"を取得、print を行い、再びkey hello、data "hello" をDGM にput している。また8行目で自らをsetpuしているため、再帰的にHelloWorldCodeGear が再実行される。2回目の実行ではフィールド変数 helloWorld に"world" が格納と出力がされ、key world、data "world" がDGM に格納される。Code \ref{code:javaHWC} でput した"hello" と"world" は最終的に、Code \ref{code:javaFHW} の同名のフィールド変数に格納される。
+2回目の実行でもsetup しているが、DGMにはkey helloWorld のデータが無いため、3回目以降は実行されない。
 
 Code \ref{code:javaHWC} の2回の実行後、Code \ref{code:javaHWC} のローカル変数hello とworld が全て揃ったことによりCode \ref{code:javaHWC} が実行されプログラムは終了する。
 
 
 
-\section{C\# でのChristie}
+\section{Christie \#}
 Code \ref{code:csSHW}、Code \ref{code:csHWC}、Code \ref{code:csFHW}、はCode \ref{code:javaSHW} 、Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} の例題をC\# に書き換えたものである。
 
 \lstinputlisting[caption=C\# StartHelloWorld, label=code:csSHW]{src/StartHelloWorld.cs}
@@ -220,7 +224,7 @@
 
 
 
-\section{annotation の書き換え}
+\section{Take annotation の実装}
 java 版ではDataGear を取得する際に、annotation という java の機能を用いて行った。C\#には annotation はなく、代わりにattribute を利用して DataGear の取得を行っている。
 以下のCode \ref{code:javaTake}、Code \ref{code:csTake}はjava とC\# におけるTakeの実装である。
 
@@ -271,6 +275,13 @@
 
 
 \section{チート対策について}
+オンラインネットワークゲーム開発にはチート対策が必須になっている。チートの種類には、サーバへ送信するデータをクライアント側で改竄を行うもの、メモリ上の値を書き換えるものなど多岐にわたる。
+
+通常のオンラインゲームでのチート対策としては、クライアントをモニタリングする、ダメージ計算などを全てサーバ側で処理する、ゲームをプレイしている他のプレイヤーからの通報などがある。
+しかし、チート開発とチート対策はいたちごっこになっているというのが現状である。
+
+Christie では従来の通信ライブラリとは異なり、型があるDataGear をタプル空間であるDGM にkey を持つストリームとして格納する方式をとっている。他のノードとの通信には
+そのため、
 
 \section{実装の現状}