changeset 0:c1b0c73d36ce

add mindmap and thesis
author Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
date Tue, 18 Jan 2022 17:39:39 +0900
parents
children 739159c6668d
files .hgignore GearsDebugger.xmind paper/figs/CbC_goto_example.png paper/figs/MetaCodeGear_flow.png paper/figs/debug_option_flow.png paper/figs/meta-cg-dg.pdf paper/ie-thesis.sty paper/logo_u-ryukyu.jpg paper/src/after_mcMeta.cbc paper/src/before_mcMeta.cbc paper/src/context.h paper/src/debug_execute_DPPMC.txt paper/src/enumCode.h paper/src/normal_execute_DPPMC.txt paper/src/pd_example.txt paper/src/prompt_result.txt paper/src/unionData.h paper/text/Eabstract.tex paper/text/Jabstract.tex paper/text/cbc.tex paper/text/gears.tex paper/text/gearsdebugger.tex paper/text/introduction.tex paper/text/modelchecking.tex paper/text/reference.tex paper/thesis.pdf paper/thesis.tex
diffstat 25 files changed, 804 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,388 @@
+syntax: glob
+# Created by https://www.toptal.com/developers/gitignore/api/latex
+# Edit at https://www.toptal.com/developers/gitignore?templates=latex
+
+### LaTeX ###
+## Core latex/pdflatex auxiliary files:
+*.aux
+*.lof
+*.log
+*.lot
+*.fls
+*.out
+*.toc
+*.fmt
+*.fot
+*.cb
+*.cb2
+.*.lb
+
+## Intermediate documents:
+*.dvi
+*.xdv
+*-converted-to.*
+# these rules might exclude image files for figures etc.
+# *.ps
+# *.eps
+# *.pdf
+
+## Generated if empty string is given at "Please type another file name for output:"
+.pdf
+
+## Bibliography auxiliary files (bibtex/biblatex/biber):
+*.bbl
+*.bcf
+*.blg
+*-blx.aux
+*-blx.bib
+*.run.xml
+
+## Build tool auxiliary files:
+*.fdb_latexmk
+*.synctex
+*.synctex(busy)
+*.synctex.gz
+*.synctex.gz(busy)
+*.pdfsync
+
+## Build tool directories for auxiliary files
+# latexrun
+latex.out/
+
+## Auxiliary and intermediate files from other packages:
+# algorithms
+*.alg
+*.loa
+
+# achemso
+acs-*.bib
+
+# amsthm
+*.thm
+
+# beamer
+*.nav
+*.pre
+*.snm
+*.vrb
+
+# changes
+*.soc
+
+# comment
+*.cut
+
+# cprotect
+*.cpt
+
+# elsarticle (documentclass of Elsevier journals)
+*.spl
+
+# endnotes
+*.ent
+
+# fixme
+*.lox
+
+# feynmf/feynmp
+*.mf
+*.mp
+*.t[1-9]
+*.t[1-9][0-9]
+*.tfm
+
+#(r)(e)ledmac/(r)(e)ledpar
+*.end
+*.?end
+*.[1-9]
+*.[1-9][0-9]
+*.[1-9][0-9][0-9]
+*.[1-9]R
+*.[1-9][0-9]R
+*.[1-9][0-9][0-9]R
+*.eledsec[1-9]
+*.eledsec[1-9]R
+*.eledsec[1-9][0-9]
+*.eledsec[1-9][0-9]R
+*.eledsec[1-9][0-9][0-9]
+*.eledsec[1-9][0-9][0-9]R
+
+# glossaries
+*.acn
+*.acr
+*.glg
+*.glo
+*.gls
+*.glsdefs
+*.lzo
+*.lzs
+
+# uncomment this for glossaries-extra (will ignore makeindex's style files!)
+# *.ist
+
+# gnuplottex
+*-gnuplottex-*
+
+# gregoriotex
+*.gaux
+*.gtex
+
+# htlatex
+*.4ct
+*.4tc
+*.idv
+*.lg
+*.trc
+*.xref
+
+# hyperref
+*.brf
+
+# knitr
+*-concordance.tex
+# TODO Comment the next line if you want to keep your tikz graphics files
+*.tikz
+*-tikzDictionary
+
+# listings
+*.lol
+
+# luatexja-ruby
+*.ltjruby
+
+# makeidx
+*.idx
+*.ilg
+*.ind
+
+# minitoc
+*.maf
+*.mlf
+*.mlt
+*.mtc
+*.mtc[0-9]*
+*.slf[0-9]*
+*.slt[0-9]*
+*.stc[0-9]*
+
+# minted
+_minted*
+*.pyg
+
+# morewrites
+*.mw
+
+# nomencl
+*.nlg
+*.nlo
+*.nls
+
+# pax
+*.pax
+
+# pdfpcnotes
+*.pdfpc
+
+# sagetex
+*.sagetex.sage
+*.sagetex.py
+*.sagetex.scmd
+
+# scrwfile
+*.wrt
+
+# sympy
+*.sout
+*.sympy
+sympy-plots-for-*.tex/
+
+# pdfcomment
+*.upa
+*.upb
+
+# pythontex
+*.pytxcode
+pythontex-files-*/
+
+# tcolorbox
+*.listing
+
+# thmtools
+*.loe
+
+# TikZ & PGF
+*.dpth
+*.md5
+*.auxlock
+
+# todonotes
+*.tdo
+
+# vhistory
+*.hst
+*.ver
+
+# easy-todo
+*.lod
+
+# xcolor
+*.xcp
+
+# xmpincl
+*.xmpi
+
+# xindy
+*.xdy
+
+# xypic precompiled matrices and outlines
+*.xyc
+*.xyd
+
+# endfloat
+*.ttt
+*.fff
+
+# Latexian
+TSWLatexianTemp*
+
+## Editors:
+# WinEdt
+*.bak
+*.sav
+
+# Texpad
+.texpadtmp
+
+# LyX
+*.lyx~
+
+# Kile
+*.backup
+
+# gummi
+.*.swp
+
+# KBibTeX
+*~[0-9]*
+
+# TeXnicCenter
+*.tps
+
+# auto folder when using emacs and auctex
+./auto/*
+*.el
+
+# expex forward references with \gathertags
+*-tags.tex
+
+# standalone packages
+*.sta
+
+# Makeindex log files
+*.lpz
+
+# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
+# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
+# Uncomment the next line to have this generated file ignored.
+#*Notes.bib
+
+### LaTeX Patch ###
+# LIPIcs / OASIcs
+*.vtc
+
+# glossaries
+*.glstex
+
+# End of https://www.toptal.com/developers/gitignore/api/latex
+
+# Created by https://www.toptal.com/developers/gitignore/api/macos
+# Edit at https://www.toptal.com/developers/gitignore?templates=macos
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# End of https://www.toptal.com/developers/gitignore/api/macos
+
+# Created by https://www.toptal.com/developers/gitignore/api/emacs
+# Edit at https://www.toptal.com/developers/gitignore?templates=emacs
+
+### Emacs ###
+# -*- mode: gitignore; -*-
+*~
+\#*\#
+/.emacs.desktop
+/.emacs.desktop.lock
+*.elc
+auto-save-list
+tramp
+.\#*
+
+# Org-mode
+.org-id-locations
+*_archive
+
+# flymake-mode
+*_flymake.*
+
+# eshell files
+/eshell/history
+/eshell/lastdir
+
+# elpa packages
+/elpa/
+
+# reftex files
+*.rel
+
+# AUCTeX auto folder
+/auto/
+
+# cask packages
+.cask/
+dist/
+
+# Flycheck
+flycheck_*.el
+
+# server auth directory
+/server/
+
+# projectiles files
+.projectile
+
+# directory configuration
+.dir-locals.el
+
+# network security
+/network-security.data
+
+# mac
+.DS_Store
+
+# End of https://www.toptal.com/developers/gitignore/api/emacs
Binary file GearsDebugger.xmind has changed
Binary file paper/figs/CbC_goto_example.png has changed
Binary file paper/figs/MetaCodeGear_flow.png has changed
Binary file paper/figs/debug_option_flow.png has changed
Binary file paper/figs/meta-cg-dg.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/ie-thesis.sty	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,103 @@
+%   ie-thesis:  Standard Thesis Style File @ ie.u-ryukyu
+%   (based on jsreport.cls)
+%   (c) Itsuki KUNITA (kunita@ie.u-ryukyu.ac.jp)
+%   2021/12/07
+%
+%
+% packages
+\usepackage[dvips]{graphicx}
+\usepackage[dvipdfmx]{color}
+\usepackage{setspace}
+\usepackage{url}
+\usepackage{amsmath}
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\chead{}
+\lhead{琉球大学学位論文(学士)}
+\rhead[\leftmark]{\leftmark}
+\cfoot[\thepage]{\thepage}
+\renewcommand{\chaptermark}[1]{\markboth{第\ \normalfont\thechapter\ 章~#1}{}}
+
+% settings
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{2}
+
+  
+%
+% title in Japanese
+\def\jtitle#1{\gdef\@jtitle{#1}}
+\def\@jtitle{}
+% affiliation
+\def\affiliation#1{\gdef\@affiliation{#1}}
+\def\@affiliation{}
+% student ID 
+\def\studentid#1{\gdef\@studentid{#1}}
+\def\@studentid{}
+% supervisor 
+\def\supervisor#1{\gdef\@supervisor{#1}}
+\def\@supervisor{}
+% abstract, Japanese
+\def\Jabstract#1{\gdef\@Jabstract{#1}}
+\def\Eabstract#1{\gdef\@Eabstract{#1}}
+%
+% maketitle
+\renewcommand{\maketitle}{%
+\newpage\null
+\thispagestyle{empty}
+%\pagenumbering{roman} %Don't remove.
+    \begin{center}%
+		\vskip -7.0em
+		%\begingroup
+		\renewcommand{\arraystretch}{1.5}
+		\begin{tabular}{c}
+			\textbf{\Large \number\year 年度 卒業論文}\\
+			\textbf{\Large Bachelor's Thesis}\\
+		\end{tabular}\\
+		\vspace{3zw}
+		\renewcommand{\arraystretch}{3.0}
+		\begin{tabular}{c}
+			\begin{minipage}[c]{36zw}	\center{\textbf{\LARGE \@jtitle}}\end{minipage}\\
+			\begin{minipage}[c]{36zw}	\center{\textbf{\LARGE \@title}}\end{minipage}\\
+		\end{tabular}\\%
+		\renewcommand{\arraystretch}{1.5}
+		\vspace{6zw}
+		\includegraphics[width=70mm]{logo_u-ryukyu.jpg}\\
+		\vspace{6zw}
+		\renewcommand{\arraystretch}{1.5}
+		\begin{tabular}{c}%
+			\textbf{\Large \@affiliation}\\
+			\textbf{\Large \@studentid \hspace{1zw} \@author}\\
+			\\
+			\textbf{\Large 指導教員 \hspace{1zw} \@supervisor}
+		\end{tabular}%
+	\end{center}%
+\newpage\null
+\thispagestyle{empty}
+	\begin{spacing}{1.5}
+		\leftline{\textbf{\Large 要旨}}
+	\end{spacing}
+	\begin{spacing}{1.2}
+		\fontsize{12pt}{0mm}\selectfont
+		\@Jabstract
+	\end{spacing}
+\newpage\null
+\thispagestyle{empty}
+	\begin{spacing}{1.5}
+		\leftline{\textbf{\Large Abstract}}
+	\end{spacing}
+	\begin{spacing}{1.2}
+		\fontsize{12pt}{0mm}\selectfont
+		\@Eabstract
+	\end{spacing}
+%\newpage\null
+}
+
+%章
+\renewcommand{\chapter}{%
+  \if@openright\cleardoublepage\else\clearpage\fi
+  %\pagenumbering{arabic} %Don't remove.
+  \thispagestyle{empty}%
+  \global\@topnum\z@
+  \@afterindentfalse
+  \secdef\@chapter\@schapter
+}
Binary file paper/logo_u-ryukyu.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/after_mcMeta.cbc	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,16 @@
+__ncode mcMeta(struct Context* context, enum Code next) {
+    context->next = next; // remember next Code Gear
+    struct MCWorker* mcWorker =  (struct MCWorker*) context->worker->worker;
+    StateNode st ;
+    StateDB out = &st;
+    struct Element* list = NULL;
+    struct MCTaskManagerImpl* mcti = (struct MCTaskManagerImpl *)mcWorker->taskManager->taskManager;
+    out->memory = mcti->mem;
+    out->hash = get_memory_hash(mcti->mem,0);
+...
+    if (DEBUG_OPTION == 0) {
+        goto meta(context, context->next);
+    } else {
+        goto debugMeta(context, context->next);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/before_mcMeta.cbc	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,12 @@
+__ncode mcMeta(struct Context* context, enum Code next) {
+    context->next = next; // remember next Code Gear
+    struct MCWorker* mcWorker =  (struct MCWorker*) context->worker->worker;
+    StateNode st ;
+    StateDB out = &st;
+    struct Element* list = NULL;
+    struct MCTaskManagerImpl* mcti = (struct MCTaskManagerImpl *)mcWorker->taskManager->taskManager;
+    out->memory = mcti->mem;
+    out->hash = get_memory_hash(mcti->mem,0);
+...
+	goto meta(context, context->next);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/context.h	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,31 @@
+struct Context {
+    enum Code next;
+    struct Worker* worker;
+    struct TaskManager* taskManager;
+    int codeNum;
+    __code (**code) (struct Context*);
+    union Data **data;
+    struct Meta **metaDataStart;
+    struct Meta **metaData;
+    void* heapStart;
+    void* heap;
+    long heapLimit;
+    int dataNum;
+    // task parameter
+    int idgCount; //number of waiting dataGear
+    int idg;
+    int maxIdg;
+    int odg;
+    int maxOdg;
+    int gpu; // GPU task
+    struct Context* task;
+    struct Element* taskList;
+#ifdef USE_CUDAWorker
+    int num_exec;
+    CUmodule module;
+    CUfunction function;
+#endif
+    /* multi dimension parameter */
+    int iterate;
+    struct Iterator* iterator;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/enumCode.h	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,8 @@
+enum Code {
+    C_checkAndSetAtomicReference,
+    C_clearSingleLinkedStack,
+    C_clearSynchronizedQueue,
+    C_code1,
+    C_code2,
+	...
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/pd_example.txt	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,10 @@
+(Gears Debugger) pd Phils
+DataGear Name: Phils
+DataGear Address: 0x7fcdb4c00000
+Phils Address: 0x7fccb4c00614
+putdown_rfork: 0
+thinking: 0
+pickup_lfork: 0
+pickup_rfork: 0
+eating: 0
+next: 10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/prompt_result.txt	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,9 @@
+$ ./DPPMC -debug
+get -debug option in main function
+cpus:		1
+gpus:		0
+ffffffff ffffffff ffffffff ffffffff ffffffff 46000000 46000000 46000000 46000000 46000000  flag 0 0x7ff5c6d05da0 -> 0x7ff5c6d05da0 hash d4d42cb2
+4: thinking
+ffffffff ffffffff ffffffff ffffffff ffffffff 23000000 46000000 46000000 46000000 46000000  flag 0 0x7ff5c6d05da0 -> 0x7ff5c6c041f0 hash cf87d844 iter 5
+
+(Gears Debugger)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/unionData.h	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,23 @@
+union Data {
+    struct Atomic {
+        union Data* atomic;
+        union Data** ptr;
+        union Data* oldData;
+        union Data* newData;
+        enum Code checkAndSet;
+        enum Code next;
+        enum Code fail;
+    } Atomic;
+
+    struct AtomicReference {
+    } AtomicReference;
+
+    struct CPUWorker {
+        pthread_mutex_t mutex;
+        pthread_cond_t cond;
+        struct Context* context;
+        int id;
+        int loopCounter;
+    } CPUWorker;
+	...
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/text/Eabstract.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,1 @@
+ここには英語で要旨を記述する.日本語で記述される卒業論文であってもこの項目を省略することはできない.分量規定はないが,日本語用紙と比較して極端に少ないことがないようにする.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/text/Jabstract.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,1 @@
+ここには日本語要旨を記述する.分量の目安は全角300文字以上1ページ以内程度である.本文が英語の場合であっても日本語要旨を記述するものとする.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/text/cbc.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,40 @@
+\chapter{Continuation Based C}
+Continuation Based C(以下CbC)\cite{cbc_kono}とは、本研究室で開発している軽量継続を導入したC言語の下位言語である。軽量継続とはSchemeのcall/ccなどの環境を持つ継続とは異なり、スタックが無く環境を持たない継続である。そのためcall/ccよりも軽量であることから軽量継続と呼ばれる。
+
+\section{CodeGear}
+CbCは従来のプログラミング言語における関数ではなくCodeGearという単位でプログラムを記述する。プログラムの遷移はCodeGearからCodeGearへの遷移によって実現され、軽量継続であるgoto文を用いて行われる。
+CbCは軽量継続により遷移を行うため、次のCodeGearへ継続すると継続前のCodeGearに戻ることができない。
+gotoによる軽量継続を用いたCodeGearの継続の流れが図\ref{figs:CbC_goto_example}である。
+
+\begin{figure}[htbp]
+  \begin{center}
+   \includegraphics[width=7.5cm]{./figs/CbC_goto_example.png}
+   \caption{gotoによる軽量継続を用いたCodeGear遷移}
+   \label{figs:CbC_goto_example}
+   \end{center}
+\end{figure}
+
+TODO: 簡単なCodeGear遷移の例を作って、記述する。
+
+
+\section{DataGear}
+CodeGearと同じくCbCにおけるプログラミング単位の一つである。CodeGearから次のCodeGearへの継続の際に、データの受け渡しに用いられるのがDataGearである。
+特に、CodeGearからの入力を受け取るDataGearをInputDataGear、CodeGear実行後にCodeGearからの出力を受け取るDataGearをOutputDataGearという。
+
+\section{メタ計算}
+記述したプログラムの計算を行うためには、メモリ管理や、スレッド管理、GPUの資源管理などのOSレベルの計算を行う必要がある。このOSレベルの計算をメタ計算と呼び、ユーザーが記述したプログラムをノーマルレベルの計算と呼ぶことで2つの計算を区別している。
+
+\section{MetaCodeGear}
+CbCにおいてメタ計算を行うCodeGearをMetaCodeGearといい、特に実行したいCodeGearの直前で実行されるMetaCodeGearをStubCodeGearという。ノーマルレベルから見るとCodeGearが直接InputDataGearからデータを受け取り、プログラム実行、その後OutputDataGearにデータを書き込んでいるように見えるが、実際にはCodeGear実行の前にMetaCodeGearが実行され、MetaCodeGearを経由してDataGearとデータの受け渡しを行っている。メタレベルの計算をMetaCodeGearが行うことで、ノーマルレベルの計算とメタレベルの計算の分離を実現している。MetaCodeGear、DataGearを含めたCodeGearの遷移を図\ref{figs:MetaCodeGear_flow}に示す。
+
+\begin{figure}[htbp]
+  \begin{center}
+   \includegraphics[width=9.1cm]{./figs/meta-cg-dg.pdf}
+   \caption{MetaCodeGearを含めたCodeGearの遷移}
+   \label{figs:MetaCodeGear_flow}
+   \end{center}
+\end{figure}
+
+\section{MetaDataGear}
+CPUやGPUの情報、計算に必要な全てのDataGearなどメタ計算を行うために必要な情報を持つのがMetaDataGearである。
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/text/gears.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,36 @@
+\chapter{GearsOS}
+GearsOSは本研究室で開発しているCbCを用いて信頼性と拡張性の両立を目指したOS\cite{GearsOS}である。CbCと同様にCodeGearとDataGearを基本単位として実行し、ノーマルレベルの計算とメタレベルの計算の分離により信頼性を担保している。
+
+\section{GearsOSの構成・アーキテクチャ}
+GearsOSは様々な役割を持つCodeGearとDataGearで構成されている。本章では構成の中心となっているMetaDataGearや、モジュール化の仕組みとして導入されているInterfaceなどについて説明を行う。
+
+TODO: Gearsの構成図を書いて貼る
+
+\section{Context}
+ContextとはGearsOSの計算に必要なCodeGearやDataGearを持つMetaDataGearであり、従来のOSにおけるプロセスやスレッドに対応する。Contextは使用可能なCodeGearとDataGearのリストや、TaskQueueへのポインタ、DataGearを格納するためのメモリ空間などを持っている。ソースコード\ref{src:def_context}がContextの定義である。
+
+\lstinputlisting[label=src:def_context, caption=Contextの定義]{src/context.h}
+
+ソースコード\ref{src:def_context}6行目のcodeがCodeGearを格納するための配列である。code配列へアクセスするためのindexは、ソースコード\ref{src:def_enumCode}で定義されるenumを用いる。このenumはGearsOSで用いるCodeGearを全て列挙しており、コンパイル時に一意な番号へと変換される。この番号と配列へ格納されるCodeGearのポインタが対応しているため、特定のCodeGearの取り出しは対応した番号をindexに指定することで実現する。
+
+\lstinputlisting[label=src:def_enumCode, caption=CodeGearのenum]{src/enumCode.h}
+
+ソースコード\ref{src:def_context}7行目のdataがDataGearを格納するための配列である。data配列はunion Data型であり、これは共用体によって定義されている。ソースコード\ref{src:def_unionData}にunion Dataの定義を示す。
+union Data 共用体の中にAtomicやCPUWorkerなどのDataGearを構造体として定義を行っている。これは通常のC言語においては、struct Atomicとstruct CPUWorkerは当然別の型として判別される。しかしGearsOSのContextにおいてはAtomicもCPUWorkerもDataGearとして等しく扱う必要がある。そのため共用体を用いて汎用的なDataGear型であるunion Data型を定義することで任意のDataGearを一律に扱うことができる。
+
+\lstinputlisting[label=src:def_unionData, caption=union Dataの定義]{src/unionData.h}
+
+\section{Worker}
+WorkerはTaskManagerからTaskを取り出し、TaskのCodeGearの実行を行う。実行後はOutputDataGearへ書き込みを行う。
+Workerはまず生成時にスレッドを作成する。スレッド生成後はTaskManagerのTaskQueueからTaskを取得する。TaskはContextの形で表現されているため、WorkerのContextをTaskに入れ替えてTaskの次のCodeGearへと継続する。Task実行後はOutputDataGearの書き出しを行う。
+WorkerはCodeGearの前後で呼び出されるため、CodeGearの前後の状態を記録することが可能である。また、Worker自体がInterfaceによって定義されているためコードを変更せずにWorkerの切り替えが可能である。そのためGearsDebuggerではデバッグ用Workerを定義し、デバッグ時に通常のWorkerからデバッグ用Workerへ切り替えることによってCodeGearの実行前後でデバッグ用Workerを呼び出してデバッグを行う。
+
+\section{TaskManager}
+TaskManagerはTaskを実行するWorkerの生成、管理、Taskの送信などを行う。GearsOSにおけるTaskはContextの形で表現されており、実行するCodeGear、計算に必要なInputDataGear、計算後に書き出すOutputDataGearの格納場所などの情報を持っている。
+TaskManagerは、CodeGearの実行に必要なInputDataGearが揃っているか確認し、揃っていなければ待ち合わせを行い、揃った場合はTaskを送信し実行させる。
+
+\section{TaskQueue}
+Workerが利用するQueueでありSynchronizedQueueによって表現されている。SynchronizedQueueはマルチスレッドでもデータの一貫性を保証するQueueとなっており、データ更新時にCAS(Check And Set)を行う。CASは更新前のデータと更新後のデータを比較し、値が同じであればデータの競合がないとして更新に成功し、値が異なる場合は更新に失敗する。
+
+\section{Interface}
+GearsOSにおけるモジュール化の仕組みとしてInterfaceが導入されている。InterfaceはDataGearの定義と、そのDataGearに対しての操作(API)を行うCodeGearの集合である。Interfaceは仕様(Interface)と実装(Implement, Impl)の2つに分けて記述する。これによってAPIとなるCodeGearの実装を変えることで、同じCodeGear(API)だが別の処理を行うというようなことが実現できる。CodeGearとしては同じであるため、呼び出し元のコードを変更することなく、処理だけ変えることが可能である。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/text/gearsdebugger.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,6 @@
+\chapter{GearsDebugger}
+本研究では、GearsOSに特化したデバッガとしてGearsDebuggerの開発を行った。
+
+\section{GearsDebuggerの構成・アーキテクチャ}
+\section{GearsDebuggerの各機能について}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/text/introduction.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,10 @@
+\chapter{序論}
+本章は,標準として「背景と目的」および「論文の構成」の2節で構成される.分量の規定はないが,2節合わせて2$\sim $3ページ程度が標準的である.
+
+\section{背景と目的}
+この節には,研究の背景と目的を記述する.研究の社会的もしくは学術的な意義を明らかにするものとする.
+
+\section{論文の構成}
+この節では,卒業論文の全体構成を述べる.論文の構成は研究分野によって異なるので,指導教員と調整すると良い.その上で,卒業論文の内容に従って以下の例のように論文の構成を記述しなさい.この記述形式でないといけないということではないので,各自で適切に調整しなさい.
+
+本論文は以下の章で構成される.第1章の○○(○○に章タイトルを記述する)に続き,第2章の関連研究では△△△について述べる.第3章では,□□□について本論文で新たに提案する手法について述べる.第4章では,提案手法での植物形態の三次元再構成精度検証実験について述べるとともに,既存の研究結果との比較考察を述べる.最後に,第5章で本論文のまとめと今後の展望について述べる.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/text/modelchecking.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,4 @@
+\chapter{GearsOSにおけるモデル検査}
+先行研究にてGearsOSにおいてモデル検査を行う手法が提案されている。
+
+\section{stateDB}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/text/reference.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,14 @@
+\begin{thebibliography}{99}
+\bibitem{gdb} https://www.gnu.org/software/gdb/
+\bibitem{lldb} https://lldb.llvm.org/
+\bibitem{ikkunMaster} 東恩納琢偉. GearsOS におけるモデル検査を実現する手法について. 琉球大学大学院理工学研究科情報工学専攻修士論文, March2021.
+\bibitem{stateDB} 東恩納琢偉. GearsOS におけるモデル検査を実現する手法について. 琉球大学大学院理工学研究科情報工学専攻修士論文, pp.13, March2021.
+\bibitem{GearsDebugger} 東恩納琢偉. GearsOS におけるモデル検査を実現する手法について. 琉球大学大学院理工学研究科情報工学専攻修士論文, pp26-27, March 2021.
+\bibitem{cbc_kono} 河野真治. 継続を持つ c の下位言語によるシステム記述. 日本ソフトウェア科学会第 17 回大会, 2000.
+\bibitem{GearsOS} 河野真治, 伊波立樹, 東恩納琢偉. Code gear、data gear に基づく os のプロトタイ プ. 情報処理学会システムソフトウェアとオペレーティング・システム研究会 (OS), May 2016.
+\bibitem{cmake} https://cmake.org/
+\bibitem{parusuMaster} 伊波 立樹. Gears OSの並列処理. 琉球大学大学院理工学研究科情報工学専攻修士論文, March 2018.
+\bibitem{anaguraMaster} 清水隆博. GearsOSのメタ計算. 琉球大学大学院理工学研究科情報工学専攻修士論文, March 2021.
+
+
+\end{thebibliography}
Binary file paper/thesis.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/thesis.tex	Tue Jan 18 17:39:39 2022 +0900
@@ -0,0 +1,92 @@
+\documentclass[title,12pt]{jsreport}
+\usepackage{ie-thesis}
+
+% 必要なパッケージはここに記載する
+\usepackage{url}
+\usepackage{amsmath}
+\usepackage{listings}
+\usepackage{comment}
+
+
+\newcommand\figref[1]{図 \ref{fig:#1}}
+\newcommand\tabref[1]{表 \ref{tab:#1}}
+\newcommand\coderef[1]{ソースコード \ref{code:#1}}
+
+\lstset{
+  frame=single,
+  keepspaces=true,
+  stringstyle={\ttfamily},
+  commentstyle={\ttfamily},
+  identifierstyle={\ttfamily},
+  keywordstyle={\ttfamily},
+  basicstyle={\ttfamily},
+  breaklines=true,
+  xleftmargin=0zw,
+  xrightmargin=0zw,
+  framerule=.2pt,
+  columns=[l]{fullflexible},
+  numbers=left,
+  stepnumber=1,
+  numberstyle={\scriptsize},
+  numbersep=1em,
+  language={},
+  tabsize=4,
+  lineskip=-0.5zw,
+  escapechar={@, $},
+}
+
+\def\lstlistingname{ソースコード}
+\def\lstlistlistingname{ソースコード目次}
+
+\jtitle{Gears Debuggerの開発}
+\title{Development of Gears Debugger}
+
+\affiliation{琉球大学工学部工学科知能情報コース}
+\studentid{185703H}
+\author{松岡 隆斗}
+\supervisor{河野 真治}
+
+%\Jabstract{\include{./text/Jabstract}}
+\Jabstract{\input{./text/Jabstract.tex}}
+\Eabstract{\input{./text/Eabstract.tex}}
+   
+\begin{document}
+\maketitle %Don't remove.
+
+% 目次
+\tableofcontents	%Don't remove.
+
+% 図目次,図がある場合のみ
+\listoffigures
+
+% 表も軸,表がある場合のみ
+\listoftables
+
+% pagecounter settings
+\setcounter{page}{0}	%Don't remove.
+
+% main text
+% introduction
+\include{./text/introduction}
+
+% ... 
+\include{./text/cbc}
+
+\include{./text/gears}
+
+\include{./text/modelchecking}
+
+\include{./text/gearsdebugger}
+
+\chapter{まとめと今後の展望}
+
+\chapter*{謝辞}
+
+% reference
+\include{./text/reference}
+
+%付録がある場合のみ
+%\appendix
+%付録項目ごとに章構成する.章番号は本文とは独立に構成される.
+
+\end{document}
\ No newline at end of file