changeset 100:39001ece437e

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sat, 06 Feb 2021 09:26:14 +0900
parents 7b4d7d2446e6
children cb7fc7356561
files paper/chapter/03-gears.tex paper/chapter/04-interface.tex paper/drawio/stackstackstackstack.drawio paper/drawio/stackstackstackstack.pdf paper/final.pdf paper/master_paper.pdf paper/src/stackStack.sh paper/src/stackStack1.sh paper/src/stackStack2.sh paper/src/stackStack3.sh paper/src/stackStack4.sh
diffstat 11 files changed, 92 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter/03-gears.tex	Sat Feb 06 07:11:56 2021 +0900
+++ b/paper/chapter/03-gears.tex	Sat Feb 06 09:26:14 2021 +0900
@@ -290,6 +290,41 @@
 例えばQueueの実装では先頭要素を指し示す情報が必要であるが、 これをInterface側のDataGearにしてしまうと、 呼び出し時に毎回更新されてしまう。
 常に持っておきたい値は、 Impl側のDataGearの要素として定義する必要がある。
 
+\subsection{Stack.Stack-{\textgreater}Stack.stack}
+Contextのデータ保管場所について確認する。
+ここではソースコード\ref{}を実行する際に、 Contextが持つ引数保管場所がどのような値になるかを見る。
+
+ソースコード\ref{src:StackStack1}の1行目で作製したStackTest Interfaceのアドレスは、 3行目の出力である\texttt{0x7fff2f806b50}である。
+Interfaceが持つ実装へのポインタは、 5行目の先頭のstackTestに代入されている値である\texttt{0x7fff2f806bb8}となっている。
+\lstinputlisting[label=src:StackStack1, caption=gdbを使って作製したInterfaceのアドレスを確認する]{src/stackStack1.sh}
+
+ソースコード\ref{src:StackStack2}の行を実行し、 contextの引数格納用の場所にInterfaceのアドレスを書き込む。
+\lstinputlisting[label=src:StackStack2, caption=contextの引数格納用の場所に代入]{src/stackStack2.sh}
+ソースコード\ref{src:StackStack3}では、 引数格納用の場所の値を確認する。
+これはunion Data型であるので、StackTest型を指定して確認する。(4行目)
+
+出力結果のstackTestの値は\texttt{0x7fff2f806b50}である。(4行目、8行目)
+この値はInterfaceのアドレスと一致している。
+\lstinputlisting[label=src:StackStack3, caption=contextの引数格納用の場所の値を確認]{src/stackStack3.sh}
+
+
+ソースコード\ref{src:StackStack4}で続けてstackTestフィールドが指すunion DataのポインタをStackTest型として指定し値を確認する。(1行目)
+2行目で表示されているstackTestフィールドの値は、StackInterfaceが持つ実装へのアドレスと一致している。
+CbC上では5行目のように、ドットでフィールドを指定すると値が取れる。
+\lstinputlisting[label=src:StackStack4, caption=contextのdata配列からInterfaceを取り出す]{src/stackStack4.sh}
+この状況を纏めると、図\ref{fig:stackstackstackstack}のようになる。
+Contextの引数格納用の場所は、最初はその型のInterfaceへのポインタが、Interfaceが通常実装へのポインタを指すフィールドに書き込まれる。
+これはGearsOSではStack.stack-{\textgreater}Stack.stack記法と言われている。
+
+
+\begin{figure}[ht]
+  \begin{center}
+   \includegraphics[width=120mm]{drawio/stackstackstackstack.pdf}
+  \end{center}
+  \caption{Stack.stack-{\textgreater}Stack.stack}
+  \label{fig:stackstackstackstack}
+\end{figure}
+
 \section{par goto}
 \texttt{par goto}とはGearsOSの並列処理用の構文である。
 ソースコード\ref{src:twice}では、 配列を初期化するcreateArray、 配列要素を2倍するtwice、 配列の状況を出力するprintArrayを並列で動作させている。
--- a/paper/chapter/04-interface.tex	Sat Feb 06 07:11:56 2021 +0900
+++ b/paper/chapter/04-interface.tex	Sat Feb 06 09:26:14 2021 +0900
@@ -425,4 +425,8 @@
 これによってInterface呼び出しの問題が、 Perlスクリプトによって変換する前に検知可能になった。
 
 \section{par goto のInterface経由の呼び出しの対応}
-従来のpar gotoではInterface経由の呼び出しは想定しておらず、
+従来のpar gotoではInterface経由の呼び出しは想定していなかった。
+par gotoで継続したいCodeGearはInterfaceのAPIとしてではなく、 Interfaceを入力として受け取るCodeGearとして実装する必要があった。
+しかし食事する哲学者の問題(Dining Philosophers Problem、 DPP)の検証などでは、特定のInterfaceが並列で動いている必要がある。
+例えばDPPの例題の場合は、哲学者(Philosopher)のInterfaceは並列で処理される必要がある。
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/drawio/stackstackstackstack.drawio	Sat Feb 06 09:26:14 2021 +0900
@@ -0,0 +1,1 @@
+<mxfile host="Electron" modified="2021-02-06T00:09:23.764Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.1.8 Chrome/87.0.4280.88 Electron/11.1.1 Safari/537.36" etag="_P_VHkJydCIbF_rqYGr1" version="14.1.8" type="device"><diagram id="q0Ztnzr8BpSnF0PhTm10" name="ページ1">7ZfbcpswEIafRpfpgGQEXBpC0sz0OO5h0jsZicNEIApy7OTpKxlhICapO7HbtNMbkP5drYT202oAKCw2lzWpsreCMg6gRTcAnQMIXeyppxbuWsHRPS2kdU5bye6FRX7PjGgZdZVT1owcpRBc5tVYjEVZsliONFLXYj12SwQfz1qRlO0Ji5jwffVrTmXWqh50e/01y9Osm9nGfmspSOdsvqTJCBXrgYQigMJaCNm2ik3IuN67bl/acRePWHcLq1kpDxnwkb1z1nkZfr4Nzy82tAnTmzdnJsot4SvzwQBiruIFiVBh1arlndkK/H0lOsNZs03UXDkgq9r0RtVKzXsYJRZc1KMoACLfpZbr7o9dSBLffGKN7IKob2rjtPZXTedwpiRSVEo7eFKXEcys50z6iINJ8m67oGQbrWey4EqwVbORtbhhoVlWKUqmF5tz/kAiPE9L1Y1VZpnSg1tWy1wxOTeGIqdUTxOss1yyRUViPedaHUCl1WJVUqaTbu2WNaSkS7mKyTYDyVBzyUTBZH2nXLozbAA2J9ju+uv+PGDHaNngLHTgE3ME013knlLVMKD+ArT+s6GFk9BuGVDWK73tid7UCAHPBvOoi7+sd+mOHOBHwAsmTAcCogpCpZsiST6oMhK2FUyDMJnXAUhDZhTTlDAvifcAUxYce2yZHAcD5I85wPsY2HACA9s6AgdVSN9f32dLjkW8QtdR4Hw7RvGa5oASSYATAOf8JwAEIfAdEGH9DCwQucCfgbl3EDZqlBcCz9WK8vTnLwEkh3l0NgWSB5cI4+OAZKOXBhI8EUj7Kd27RXpTX3UmqNkCFTxNljIh4LfMQjCfGSVARgku/ghiPK++TOOWJAmMJ+sWxUvsHAk36MxGuEFrgjeEJ3izT8UbOuUF1tL1/xL7Sy6x2W+rPUM6noDiqqj4v1JwjkCM8+C2Omn5UN3+h3BrG/xVo+gH</diagram></mxfile>
\ No newline at end of file
Binary file paper/drawio/stackstackstackstack.pdf has changed
Binary file paper/final.pdf has changed
Binary file paper/master_paper.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/stackStack.sh	Sat Feb 06 09:26:14 2021 +0900
@@ -0,0 +1,27 @@
+49          Stack* stack = createSingleLinkedStack(context);
+(gdb) n
+50          StackTest* stackTest = createStackTestImpl3(context);
+(gdb) n
+51          Gearef(context, StackTest)->stackTest = (union Data*) stackTest;
+(gdb) p stackTest
+$24 = (StackTest *) 0x7fff2f806b50
+(gdb) p *stackTest
+$25 = {stackTest = 0x7fff2f806bb8, stack = 0x0, data = 0x0, data1 = 0x0, insertTest1 = C_insertTest1StackTestImpl3,
+  insertTest2 = C_insertTest2StackTestImpl3, insertTest3 = C_insertTest3StackTestImpl3, insertTest4 = C_insertTest4StackTestImpl3,
+  pop2Test = C_pop2TestStackTestImpl3, pop2Test1 = C_pop2Test1StackTestImpl3, next = C_checkAndSetAtomicReference}
+(gdb) n
+52          Gearef(context, StackTest)->stack = stack;
+(gdb) p context->data[D_StackTest]
+$26 = (union Data *) 0x7fff2f806444
+(gdb) p context->data[D_StackTest]->StackTest
+$27 = {stackTest = 0x7fff2f806b50, stack = 0x0, data = 0x0, data1 = 0x0, insertTest1 = C_checkAndSetAtomicReference,
+  insertTest2 = C_checkAndSetAtomicReference, insertTest3 = C_checkAndSetAtomicReference, insertTest4 = C_checkAndSetAtomicReference,
+  pop2Test = C_checkAndSetAtomicReference, pop2Test1 = C_checkAndSetAtomicReference, next = C_checkAndSetAtomicReference}
+(gdb) p context->data[D_StackTest]->StackTest.stackTest
+$28 = (union Data *) 0x7fff2f806b50
+(gdb) p context->data[D_StackTest]->StackTest.stackTest->StackTest
+$29 = {stackTest = 0x7fff2f806bb8, stack = 0x0, data = 0x0, data1 = 0x0, insertTest1 = C_insertTest1StackTestImpl3,
+  insertTest2 = C_insertTest2StackTestImpl3, insertTest3 = C_insertTest3StackTestImpl3, insertTest4 = C_insertTest4StackTestImpl3,
+  pop2Test = C_pop2TestStackTestImpl3, pop2Test1 = C_pop2Test1StackTestImpl3, next = C_checkAndSetAtomicReference}
+(gdb) p context->data[D_StackTest]->StackTest.stackTest->StackTest.stackTest
+$30 = (union Data *) 0x7fff2f806bb8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/stackStack1.sh	Sat Feb 06 09:26:14 2021 +0900
@@ -0,0 +1,7 @@
+50          StackTest* stackTest = createStackTestImpl3(context);
+(gdb) p stackTest
+$24 = (StackTest *) 0x7fff2f806b50
+(gdb) p *stackTest
+$25 = {stackTest = 0x7fff2f806bb8, stack = 0x0, data = 0x0, data1 = 0x0, insertTest1 = C_insertTest1StackTestImpl3,
+  insertTest2 = C_insertTest2StackTestImpl3, insertTest3 = C_insertTest3StackTestImpl3, insertTest4 = C_insertTest4StackTestImpl3,
+  pop2Test = C_pop2TestStackTestImpl3, pop2Test1 = C_pop2Test1StackTestImpl3, next = C_checkAndSetAtomicReference}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/stackStack2.sh	Sat Feb 06 09:26:14 2021 +0900
@@ -0,0 +1,2 @@
+(gdb)
+51          Gearef(context, StackTest)->stackTest = (union Data*) stackTest;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/stackStack3.sh	Sat Feb 06 09:26:14 2021 +0900
@@ -0,0 +1,8 @@
+(gdb) p context->data[D_StackTest]
+$26 = (union Data *) 0x7fff2f806444
+(gdb) p context->data[D_StackTest]->StackTest
+$27 = {stackTest = 0x7fff2f806b50, stack = 0x0, data = 0x0, data1 = 0x0, insertTest1 = C_checkAndSetAtomicReference,
+  insertTest2 = C_checkAndSetAtomicReference, insertTest3 = C_checkAndSetAtomicReference, insertTest4 = C_checkAndSetAtomicReference,
+  pop2Test = C_checkAndSetAtomicReference, pop2Test1 = C_checkAndSetAtomicReference, next = C_checkAndSetAtomicReference}
+(gdb) p context->data[D_StackTest]->StackTest.stackTest
+$28 = (union Data *) 0x7fff2f806b50
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/stackStack4.sh	Sat Feb 06 09:26:14 2021 +0900
@@ -0,0 +1,7 @@
+(gdb) p context->data[D_StackTest]->StackTest.stackTest->StackTest
+$29 = {stackTest = 0x7fff2f806bb8, stack = 0x0, data = 0x0, data1 = 0x0, insertTest1 = C_insertTest1StackTestImpl3,
+  insertTest2 = C_insertTest2StackTestImpl3, insertTest3 = C_insertTest3StackTestImpl3, insertTest4 = C_insertTest4StackTestImpl3,
+  pop2Test = C_pop2TestStackTestImpl3, pop2Test1 = C_pop2Test1StackTestImpl3, next = C_checkAndSetAtomicReference}
+(gdb) p context->data[D_StackTest]->StackTest.stackTest->StackTest.stackTest
+$30 = (union Data *) 0x7fff2f806bb8
+