annotate paper/anatofuz_prosym_2019.tex @ 7:fa62e0367f58

tweak
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 07 Jan 2020 13:35:49 +0900
parents 66295a8187ad
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 % withpage: ページ番号をつける (著者確認用)
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 % english: 英語原稿用フォーマット
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \documentclass{ipsjprosym}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 %\documentclass[withpage, english]{ipsjprosym}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 \usepackage[dvipdfmx]{graphicx}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 \usepackage{latexsym}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 \usepackage{comment}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 \usepackage{listings}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \usepackage{here}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 \lstset{
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 language=C,
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 tabsize=2,
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 frame=single,
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 basicstyle={\tt\footnotesize}, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 identifierstyle={\footnotesize}, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 commentstyle={\footnotesize\itshape}, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 keywordstyle={\footnotesize\ttfamily}, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 ndkeywordstyle={\footnotesize\ttfamily}, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 stringstyle={\footnotesize\ttfamily},
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 breaklines=true,
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 captionpos=b,
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 columns=[l]{fullflexible}, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 xrightmargin=0zw, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 xleftmargin=1zw, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 aboveskip=1zw,
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 numberstyle={\scriptsize}, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 stepnumber=1,
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 numbersep=0.5zw, %
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 lineskip=-0.5ex,
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 \renewcommand{\lstlistingname}{Code}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 \usepackage{caption}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 \captionsetup[lstlisting]{font={small, tt}}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \usepackage{url}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 \begin{document}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 % Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 \title{継続を基本としたOS Gears OS}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 %\affiliate{IPSJ}{情報処理学会}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 \affiliate{KRYUKYU}{琉球大学大学院理工学研究科情報工学専攻}
7
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
43 \affiliate{IERYUKYU}{琉球大学工学部工学科知能情報コース}
0
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 \author{清水 隆博}{Takahiro SHIMIZU}{KRYUKYU}[anatofuz@cr.ie.u-ryukyu.ac.jp]
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 \author{河野 真治}{Shinji KONO}{IERYUKYU}[kono@ie.u-ryukyu.ac.jp]
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 %概要
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \begin{abstract}
2
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
50 継続を基本とするCと互換性のある言語、 Conitinuation Based C(CbC)を用いてOSの実装を考案した。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
51 状態遷移単位でOSの処理を実装することで、 処理の入出力が明確化され、 定理証明支援系に適した表現形式で処理が記述可能である。
7
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
52 現在CbCを用いて開発しているOS、 GearsOSはXv6をベースに実機での動作を目指している。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
53 ここでは現在のGearsOSの状況、 今後の展望について考察する。
0
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 \end{abstract}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 \begin{jkeyword}
7
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
57 システムプログラミング, CbC, 軽量継続, OS, CMake
0
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 \end{jkeyword}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 \maketitle
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 \section{証明可能なOS}
3
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
64 コンピュータ上で動作するあらゆるソフトウェアや資源を管理するOSは、 高い信頼性が保証されてほしい。
1
b6c782f35e4f modify abstract
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
65 信頼性の保証にはテストプログラムを用いた検証や、 形式手法を用いた証明を使う手法が存在する。
3
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
66 頻繁に並列処理を行うOSでは、 スレッド間の共通資源の競合などの非決定的な実行を行う。
5
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
67 このため、 OSの信頼性を保証する上で、 テストやデバッグを用いる手法では、 発生しうる状態を完全に保証するのは困難である。
6
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
68
4
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
69 テストを用いる方法ではなく、 形式手法的なアプローチを用いてOSの信頼性を保証したい。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
70 そのためには定理証明支援系などで証明が可能な形式と、 等価な形式でOSを記述する必要性がある。
1
b6c782f35e4f modify abstract
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
71 現在開発しているGearsOSは、 継続を基本とする言語Conitinuation Based C(CbC)で実装されている。
4
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
72 CbCは状態遷移単位での実行であり、 他の状態に遷移する際に今までの環境を持たない。
6
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
73 CbCで実装した処理は入出力が明確化され、 定理証明支援系で表現可能な形式にする事が可能である。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
74
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
75 \section{Continuation Based C}
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
76 Continuation Based C(CbC) とは GearsOSの記述に利用しているプログラミング言語である。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
77 C言語の下位言語として設計されており、CコンパイラであるGCC、 LLVM/Clang上に実装が存在する。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
78 CbCは通常の関数呼び出しとは異なり、 軽量継続を基本としている。
7
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
79 通常Cの関数呼び出しでは、 call命令により、 スタックポインタを操作し、 ローカル変数や、 レジスタ情報をスタックに保存する。
6
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
80 CbCの軽量継続は、 アセンブラレベルでは jmp で表現され、 スタックフレームを操作することなく次の状態に遷移する。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
81 CbCの状態はCodeGearと呼ばれる単位で記述される。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
82
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
83 \section{GersOSの基本単位}
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
84 実行単位としてはCbCで導入されたCodeGearを用いる。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
85 CodeGearは関数よりも単位が小さく、 かつアセンブラよりも単位が大きく処理を記述することが可能である。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
86 そのため、 OSの必要な資源管理などのメタ計算を記述するのに適していると考えられる。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
87
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
88 GearsOSでは使われる情報を、 DataGearと呼ばれる単位で構成する。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
89 DataGearはCの構造体のように宣言するが、 すべてのDataGearはContextと呼ばれるデータ構造の中で、 共用体として管理されている。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
90 CodeGearでは入出力をDataGearで管理している。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
91 CodeGearの入力で使用されるDataGearを、 InputDataGearと呼び、 出力するDataGearをOutputDataGearと呼ぶ。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
92 この入出力の組を Task として定義し、 InputDataGearの依存関係が解決されたTaskから、 CodeGearが並列実行される。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
93
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
94
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
95 \section{GearsOSで記述されたxv6}
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
96 GearsOSの機能であるContextなどを用いて、 実際に実機で動作するOSを作成したい。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
97 実機で動作するOSのベース実装として、 システムコールなどのシンプルなUNIXの機能を持つxv6に着目した。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
98 xv6はARMプロセッサを持つRaspberryPi上で動作する、 xv6\_rpiというバリエーションが存在する。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
99 GearsOSを実行で動作させるために、 xv6\_rpiのソースコードをGearsOSで一部再実装している。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
100 現在はxv6のプロセスである proc構造体に、 GearsOSのcontextを導入し、 GearsOSとしてもxv6としても解釈可能な形で開発している。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
101
0
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
5
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
103 \section{GearsOSのクロスコンパイル}
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
104 GearsOSはRaspberryPi上での動作を目指している。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
105 RaspberryPiはARMのCPUが搭載されている為、 動作にはARMのバイナリファイルが必要となる。
6
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
106 しかしRaspberryPiを利用してGearsOS自身のビルドを行うと、 マシンパワーの問題でビルドに莫大な時間が掛かってしまう。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
107 著者らが使うことが多い、 資源が潤沢なx86マシンから、 ARMにクロスコンパイルする必要がある。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
108 GCC上に実装しているCbCコンパイラは、 ARMを出力するようにコンパイラを再構築する必要があった。
5
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
109 他方LLVM/clang上に実装しているCbCコンパイラは、 ARMのライブラリは必要であるものの、 本体を再度ビルドすることなくクロスコンパイラとして利用可能である。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
110 今回はRaspberryPiのデフォルトOSであるRaspbianから、 ARMのライブラリをx86マシン上に転送し、 LLVM/clang上に実装したCbCコンパイラを用いてビルドした。
6
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
111 ビルドツールとしてはCMakeを導入している。
7
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
112 CMakeでクロスコンパイルを行う際に、クロスコンパイラなどを引数で指定する必要がある為、 引数の解決に一部Perlスクリプトを利用している。
5
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
113
0
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
6
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
115
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
116 \section{今後の課題}
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
117 現状はxv6をGearsOSとして書き直している段階であり、 システムコールで呼び出された後のkernel部分の処理を順次Interfaceとして実装している。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
118 RaspberryPi上で動作する様にクロスコンパイルをする環境はCMakeを利用して構築出来たので、 実際にRaspberryPi上でInterfaceを導入したGearsOSを動作させる必要がある。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
119 またxv6はUEFIでのブートが組み込まれていので、 これを実装したい。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
120 UEFIでブートが可能になると、 各種デバイスドライバを組み込むのが容易になる為、 USB3.0の規格であるxHCIなどをxv6上に実装することが可能となる。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
121 xHCIを実装する事によってxv6を実機で動かした際に、 USB接続をしたキーボードが使用可能となる。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
122 これらの実装には、 CbCで実装された実装としても使用可能な仕様記述言語を用いる予定である。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
123 また、 実際にxv6上での処理を定理証明支援系などで証明を行い、 証明しやすい実装と、 処理に適した実装にInterfaceを通して切り替える機構を実装することも課題である。
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
124
0
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 \nocite{*}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 \bibliographystyle{ipsjsort}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 \bibliography{reference}
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
7b0fb5455804 inital commit
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 \end{document}