view mid_thesis.tex @ 1:6508682e0d51

fix
author tobaru
date Wed, 25 Oct 2017 18:46:44 +0900
parents 82e5501f2105
children 69c1099f7849
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
\usepackage{abstract}
\usepackage{url}
%\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 卒業研究中間発表会}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\input{dummy.tex}
\renewcommand{\abstractname}{概要}
\begin{document}
\title{Gears OS on Raspberry Pi}
%\title{Supporting NAT in Screen Sharing System TreeVNC}
\author{145759E 氏名 {桃原}{優} 指導教員 : 河野 真治}
\date{}
\maketitle
\thispagestyle{fancy} 

\section{Gears OS}
当研究室では、Code Segment と Data Segment によって構成される Gears OS の開発を行っている。Gears OS は、並列プログラミングフレームワークの Cerium と 分散フレームワークの Alice の開発を通して得られた知見を元に開発を進めている。 \\
  Cerium はオブジェクト指向言語である C++ を用いて開発した並列プログラミングフレームワークである。Cell、マルチコアCPU、GPU を用いた並列実行をサポートしている。並列処理の単位として Task を記述し、Task に他の Task との依存関係を設定する事で並列実行を実現するが、データは汎用ポインタで Task に渡されるため、データの依存関係を保証できない。データの正しさや依存関係を保証できていないので、並列処理は行えるが、信頼性が低い。その知見から、並列分散処理 には Code の分割だけではなく Data の分割も必要である事が分かった。\\
  Alice では処理の単位である、 Code Segment、データの単位である Data Segment を用いてプログラムを記述する。Code Segment は使用する Input Data Segment、Output Data Segment  を指定することで処理とデータの依存関係を解決する。Gears OSでは、Gear という単位を用いてプログラムを Code Gear、Data Gear に細かく分割するが、これは Alice のCode Segment、Data Segment にそれぞれ対応する。\\
  Gears OS では 当研究室で開発している CbC を用いて Data Sement を定義し、実装を行っている。
%当研究室で開発している Code Segment を処理単位とする プログラミング言語 CbC を用いて Data Segment を定義し、Gears OS の実装を行っている。


\section{CbC}
  Gears OS の実装には LLVM/Clang 上に実装した CbC(Continuation based C)を用いる。\\
CbC は Code Segment を基本的な処理単位とする。C の関数とは異なり返り値を持たないが、Code Segment の宣言は C の関数の構文と同じように行い、型に \_\_code を用いる。\\
  CbC は for 文や while 文といったループ制御構文を持たないので、ループ処理は自分自身への再帰的な継続を行う事で実現する。\\
   現在の Code Segment から次の Code Segment への移動は goto の後に Code Segment 名と引数を並べて記述する。この goto による処理の遷移を継続と呼ぶ。C と異なり、戻り値を持たない Code Segment ではスタックに値を積んで行く必要が無くスタックは変更されない。このようなスタックに値を積まない継続を軽量継続と呼ぶ。この軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。\\


\begin{figure}[htpb]
 \begin{center}
  \scalebox{0.5}{\includegraphics{pic/codesegment.pdf}}
 \end{center}
 \caption{goto による code gear 間の継続}
 \label{fig:cs}
\end{figure}

\section{Code Gear と Data Gear}
Gears OS では、プログラムの単位として Gear を用いる。Gear は並列実行の単位、データの分割、Gear 間の接続等になる。
  Code Gear はプログラムの処理そのものであり、任意の数の Data Gear を参照し、処理が完了すると任意の数の Data Gear に書き込む。Code Gear は接続された Data Gear 以外にアクセスできない。Code Segment と同じように Code Gear から次の Code Gear への処理の移動は goto の後に Code Gear の名前と引数を指定する事で実現できる。
  Data Gear はデータそのものを表す。int や 文字列などの Primitive Data Type を持っている。Gear の特徴として処理やデータの構造が Code Gear、Data Gear に閉じている事にある。これにより、実行時間、メモリ使用量などを予測可能なものにすることができる。

\begin{figure}[htpb]
    \begin{center}
        \scalebox{0.2}{\includegraphics{pic/gearsos.pdf}}
    \end{center}
    \caption{Gears OS の構成図}
    \label{fig:gearsos}
\end{figure}

\section{Context}
  接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear 等のためのメモリ空間を持っており、Context を通してアクセスすることができる。Context にはメインとなる Context と Worker 用の Context がある。Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉する事はできない。

\section{Raspberry Pi 上での実装}
本研究では、ARM で動くシングルボードコンピュータである Raspberry Pi 上で Gears OS を動かせるようになる事で、ハードウェア上でも信頼性があり、並列実行ができるプログラミングを を記述できるようになる事を目指している。\\

\section{xv6}
  xv6とは、マサチューセッツ工科大の大学院生向け講義の教材として使うために、UNIX V6 という OS を ANSI-C に書き換え、x86に移植した OS である。
xv6 を CbC に書き直す事で、Raspberry Pi で CbC を動かす。

\section{LLVM CrossCompile}
Raspberry Pi だとメモリが足りないため、LLVM をコンパイルする事ができない。OSX 上で CrossCimpile する事でこの問題を解決する。
OSX 上でCrossCimpiler を行える arm-linux-gnueabihf をインストールし、そこに入っている arm-linux-gnueabihf-gcc を指定してコンパイルすることで arm のバイナリを出力することができる。

\section{clang のバージョンアップ}
  CbC はバージョン 3.9 の clang を使用している。現在のバージョンの LLVM と clang を使用して、CbCをコンパイラできるように修正を加える必要がある。





\nocite{*}
\bibliographystyle{junsrt}
\bibliography{reference}
\end{document}