# HG changeset patch # User Shohei KOKUBO # Date 1455005444 -32400 # Node ID 910e143c28e73fbf6157fc7c156dbccc0d078b8a # Parent 52eec0b775762a37152be558dcf9b4c14365d56c modify style diff -r 52eec0b77576 -r 910e143c28e7 gearsos.tex --- a/gearsos.tex Tue Feb 09 04:21:34 2016 +0900 +++ b/gearsos.tex Tue Feb 09 17:10:44 2016 +0900 @@ -69,13 +69,14 @@ \lstinputlisting[label=context, caption=Context]{src/context.h} \lstinputlisting[label=initcontext, caption=initContext]{src/initContext.c} -Context はヒープサイズを示す heap\_limit, ヒープの初期位置を示す heap\_start, ヒープの現在位置を示す heap を持っている。 +Context はヒープサイズを示す heapLimit, ヒープの初期位置を示す heapStart, ヒープの現在位置を示す heap を持っている。 必要な Data Gear のサイズに応じて heap の位置を動かすことで Allocation を実現する。 allocate を行うには allocate に必要な Data Gear に情報を書き込む必要がある。 -この Data Gear は Context 生成時に生成する必要がある。 +この Data Gear は Context 生成時に生成する必要があり、ソースコード:\ref{context} 14行目の Allocate がそれに当たる。 +UniqueData で定義した Data Gear は Context と同時に生成される。 -Temporal Data Gear にある Data Gear は基本的には破棄可能なものなので heap\_limit を超えたら heap を heap\_start の位置に戻し、ヒープ領域を再利用する(図:\ref{fig:allocation})。 +Temporal Data Gear にある Data Gear は基本的には破棄可能なものなので heapLimit を超えたら heap を heapStart の位置に戻し、ヒープ領域を再利用する(図:\ref{fig:allocation})。 必要な Data Gear は Persistent Data Tree に書き出すことで他の Worker からアクセスすることが可能になる。 \begin{figure}[!ht] @@ -86,7 +87,7 @@ \label{fig:allocation} \end{figure} -実際に allocate を行うコードはソースコード:\ref{allocate} の通りである。 +実際に allocate を行う Code Gear はソースコード:\ref{allocate} の通りである。 Context 生成時に実行可能な Code Gear と名前が対応付けられる。 その対応付けられた Code Gear が Context の code に格納される。 @@ -97,6 +98,27 @@ \lstinputlisting[label=allocate, caption=allocate]{src/allocate.c} -\section{List} +\newpage + \section{Synchronized Queue} +Gears OS における Synchronized Queue は TaskQueue として利用される。 +メインとなる Context と Worker 用の Context で共有され、Woker が TaskQueue から Task を取得し実行することで並列処理を実現する。 + +Gears OS での Queue を Queue を表す Data Gear と Queue の構成要素である Element によって表現する。 +Queue を表す Data Gear には先頭の Element を指す first, 末尾の Element を指す last, Element の個数を示す count が格納される。 +Element を表す Data Gear には Task を示す task, 次の Element を示す next が格納される。 + +ソースコード:\ref{queue} は Context の定義(ソースコード:\ref{context})に追加する Queue と Element の定義である。 + +\lstinputlisting[label=queue, caption=queue]{src/queue.h} + +新たに Queue に対する操作を行う Code Gear の名前を追加し、UniqueData には Queue の情報が入る Queue(ソースコード:\ref{queue} 9行目) と Enqueue に必要な情報を書き込む Element(ソースコード:\ref{queue} 10行目) を定義している。 + +通常の Enqueue, Dequeue を行う Code Gear はソースコード:\ref{enqueue} と ソースコード:\ref{dequeue} の通りである。 + +\lstinputlisting[label=enqueue, caption=Enqueue]{src/enqueue.c} +\lstinputlisting[label=dequeue, caption=Dequeue]{src/dequeue.c} + +ソースコード:\ref{enqueue} とソースコード:\ref{dequeue} はシングルスレッドでは正常に動作するが、並列実行すると期待した値にならない。 + \section{Red-Black Tree} diff -r 52eec0b77576 -r 910e143c28e7 images/allocation.pdf Binary file images/allocation.pdf has changed diff -r 52eec0b77576 -r 910e143c28e7 images/images.graffle Binary file images/images.graffle has changed diff -r 52eec0b77576 -r 910e143c28e7 master_paper.pdf Binary file master_paper.pdf has changed diff -r 52eec0b77576 -r 910e143c28e7 master_paper.sty --- a/master_paper.sty Tue Feb 09 04:21:34 2016 +0900 +++ b/master_paper.sty Tue Feb 09 17:10:44 2016 +0900 @@ -82,6 +82,8 @@ %年度 \def\@year{} \def\year#1{\gdef\@year{#1}} +\def\@eyear{} +\def\eyear#1{\gdef\@eyear{#1}} %和文タイトル \def\jetitle{} \def\jtitle#1{\gdef\@title{#1}} @@ -94,8 +96,23 @@ \def\@affiliation{} \def\affiliation#1{\gdef\@affiliation{#1}} \let\belongto\affiliation +%名前 +\def\@name{} +\def\name#1{\gdef\@name{#1}} +\def\@ename{} +\def\ename#1{\gdef\@ename{#1}} -\def\thesis{学位論文(修士)} +\def\thesis{修士(工学)学位論文} +\def\ethesis{Master's Thesis of Engineering} + +\def\university{琉球大学} +\def\euniversity{Universty of the Ryukyus} + +\def\department{大学院理工学研究科} +\def\edepartment{Graduate School of Engineering and Science} + +\def\course{情報工学専攻} +\def\ecourse{Infomation Engineering Course} %表紙 %\renewcommand{\maketitle}{% @@ -122,19 +139,38 @@ \thispagestyle{empty} \vskip 1cm% \begin{center}% -\let\footnote\thanks - {\huge\bfseries\mc\@title \par}% - \vskip 3.0em% - {\huge\textbf{\@etitle}\par}% - \vskip 1.5em% - {\LARGE \@year \ \thesis \par}% - \vskip 13em% - {\LARGE \@affiliation \par}% - \vskip 1.5em% - {\LARGE \@author \par}% + \let\footnote\thanks + {\Large\bfseries\thesis \par} + \vskip 0.3 em + {\Large\textbf\ethesis \par} + \vskip 2.0 em + {\LARGE\bfseries\mc\@title \par} + \vskip 0.3 em + {\LARGE\textbf{\@etitle} \par} + \vskip 1.0 em + {\large \@year \par} + \vskip 0.3 em + {\large\textbf\@eyear \par} + \vskip 2.0 em + {\large \@name \par} + \vskip 0.3 em + {\large \@ename \par} + \vskip 2.0 em + {\large \@affiliation \par} + \vskip 2.0 em + {\large\bfseries\university \par} + \vskip 0.3 em + {\large\bfseries\department \par} + \vskip 0.3 em + {\large\bfseries\course \par} + \vskip 1.0 em + {\large\textbf\euniversity \par} + \vskip 0.3 em + {\large\textbf\edepartment \par} + \vskip 0.3 em + {\large\textbf\ecourse \par} \end{center}} - %abstract \renewenvironment{abstract}{% \titlepage diff -r 52eec0b77576 -r 910e143c28e7 master_paper.tex --- a/master_paper.tex Tue Feb 09 04:21:34 2016 +0900 +++ b/master_paper.tex Tue Feb 09 17:10:44 2016 +0900 @@ -9,18 +9,17 @@ \jtitle{Code Segment と Data Segment によって構成される Gears OS の設計} \etitle{Design of Gears OS with consist of Code and Data Semgment} -\year{平成27年度 3月} +\year{2016年 3月} +\eyear{March 2016} \affiliation{\center% \includegraphics[clip,keepaspectratio,width=.15\textwidth] - {images/u-ryukyu-Mark.eps}\\ - \vskip10mm - 琉球大学大学院 \ 理工学研究科\\ 情報工学専攻} + {images/u-ryukyu-Mark.eps} +} -\author{小久保 翔平} - +\name{小久保 翔平} +\ename{Shohei KOKUBO} \marklefthead{% 左上に挿入 \begin{minipage}[b]{.4\textwidth} - \includegraphics[height=1zw,clip,keepaspectratio]{images/emblem-bitmap.eps} 琉球大学大学院学位論文(修士) \end{minipage}} \markleftfoot{% 左下に挿入 diff -r 52eec0b77576 -r 910e143c28e7 src/context.h --- a/src/context.h Tue Feb 09 04:21:34 2016 +0900 +++ b/src/context.h Tue Feb 09 17:10:44 2016 +0900 @@ -1,6 +1,7 @@ /* Context definition example */ #define ALLOCATE_SIZE 1000 +// Code Gear Name enum Code { Code1, Code2, @@ -8,6 +9,7 @@ Exit, }; +// Unique Data Gear enum UniqueData { Allocate, }; @@ -23,14 +25,18 @@ union Data **data; }; +// Data Gear definition union Data { + // size: 4 byte struct Data1 { int i; } data1; + // size: 5 byte struct Data2 { int i; char c; } data2; + // size: 8 byte struct Allocate { long size; } allocate;