Mercurial > hg > Papers > 2021 > anatofuz-master
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
--- /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 +