1
|
1 \documentclass[9.5pt]{jarticle}
|
|
2 \usepackage[dvips,dvipdfmx]{graphicx}
|
|
3 \usepackage{multicol}
|
0
|
4 \usepackage{picins}
|
|
5 \usepackage{fancyhdr}
|
1
|
6 \usepackage{here}
|
0
|
7 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部工学科知能情報コース 中間発表予稿}
|
1
|
8 \usepackage[top=2cm, bottom=2cm, left=1cm, right=1cm]{geometry}
|
0
|
9
|
1
|
10
|
0
|
11
|
|
12 \begin{document}
|
1
|
13 \title{Gears OSのデバイスドライバの開発\\Gears OS device driver development}
|
0
|
14 \author{学籍番号:175701G 氏名: 奥田光希 {}{} 指導教員 : 河野真治}
|
|
15 \date{}
|
|
16 \maketitle
|
1
|
17 \begin{abstract}
|
5
|
18 An OS have to be reliable and extensible. We are designing Gears OS with the goal of guaranteeing reliability for normal level calculations and scalability for meta-level calculations.Currently, It need to connect a Mac to run Geas OS on a Raspberry Pi via serial communication to get input.Being able to use a keyboard and mouse on the Gears OS on the Raspberry Pi will improve convenience. It would also eliminate the need to connect to hardware other than the Raspberry Pi through a PC.The purpose of this study is to develop a Gears OS Device Driver in CbC on a Rasberry Pi.
|
1
|
19 \end{abstract}
|
|
20
|
0
|
21 \thispagestyle{fancy}
|
1
|
22 \begin{multicols*}{2}
|
0
|
23 \section{研究目的}
|
6
|
24 OSには信頼性が保証できることと拡張性があることが求められている。信頼性をノーマ ルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に Gears OS を設計中である。
|
|
25 現在、Geas OSをRaspberry Pi上で動かすためにはMacとシリアル通信で繋げなければ入力ができない。
|
|
26 Raspberry Pi上のGears OSでキーボードやマウスを使えるようになれば利便性が向上する。
|
|
27 また、Raspberry Pi以外のハードウェアで動かす時にも、PCを介して接続しなくて良くなる。
|
|
28 本研究では、Rasberry Pi上でGears OS のDevice DriverをCbCで開発しすることが目的である。
|
1
|
29 \section{Device Driver}
|
6
|
30 OSは、接続された機器を直接理解することはできず、OSと接続機器の橋渡しの役割を担うのがDevice Driverである(図\ref{fig1})。Device DriverはOSごとに作成する必要がある。当研究室で開発されているGeas OSに対応するDevice Driver としてUSB接続機器が市場に多いことやRaspberry Piに接続端子があることからUSB Driverを開発する。USB Driverの構成は図\ref{fig2}のようになる。また、開発されたDevice Driverの信頼性の検証をしたいため、USB DriverのソースコードをCbCで書いていく。
|
1
|
31 \begin{figure}[H]
|
5
|
32 \begin{center}
|
|
33 \includegraphics[width=75mm]{pic/fig1.pdf}
|
|
34 \end{center}
|
1
|
35 \caption{Device Driverの役割}
|
|
36 \label{fig1}
|
|
37 \end{figure}
|
|
38 \begin{figure}[H]
|
5
|
39 \begin{center}
|
|
40 \includegraphics[width=75mm]{pic/fig2.pdf}
|
|
41 \end{center}
|
1
|
42 \caption{USB Driverの構成}
|
|
43 \label{fig2}
|
|
44 \end{figure}
|
6
|
45 \cite{1,2}
|
0
|
46 \section{Countinuation based C(CbC)}
|
2
|
47 Countinuation based C(CbC)とは、当研究室で開発されているプログラミング言語である。
|
|
48 CbCは、Cからサブルーチンコールとループ制御構造を取り除き、継続を導入したCの下位言語である。
|
6
|
49 CbC は Code Segment を基本的な処理単位とする。
|
|
50 C の関数とは異なり返り値を持たないが、Code Segment の宣言はCの関数の構文と同じように行い、型に\_\_code を用いる。
|
|
51 CbC は for 文や while 文といったループ制御構文を持たないので、ループ処理は自分自身への再帰的な継続を行う事で実現する。
|
|
52 現在の Code Segment から次の Code Segment への移動は goto の後に Code Segment 名と引数を並べて記述する。
|
|
53 この goto による処理の遷移を継続と呼ぶ。
|
2
|
54 C と異なり、戻り値を持たない Code Segment ではスタックに値を積んで行く必要が無くスタックは変更されない。このようなスタックに値を積まない継続を軽量継続と呼ぶ。
|
|
55 この軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。
|
6
|
56 \cite{3,4}
|
0
|
57
|
|
58 \section{Geas OS}
|
2
|
59 Gears OSは当研究室で開発を行っているOSである。
|
|
60 Gears OSの実装にはCbCを用いている。
|
|
61 Gears OS では、プログラムの単位として Gear を用いる。
|
|
62 Gear は並列実行の単位、データの分割、Gear 間の接続等になる。
|
|
63 Code Gear はプログラムの処理そのものであり、任意の数の Data Gear を参照し、処理が完了すると任意の数の Data Gear に書き込む。
|
|
64 Code Gear は接続された Data Gear 以外にアクセスできない。
|
6
|
65 Code Segment と同じように Code Gear から次の Code Gear への処理の移動は goto の後に Code Gear の名前と引数を指定する事で実現できる。
|
2
|
66 Data Gearはデータそのものを表す。int や文字列などの Primitive Data Type を持っている。
|
6
|
67 Gear の特徴として処理やデータの構造が Code Gear、Data Gear に閉じている事にある。
|
|
68 これにより、実行時間、メモリ使用量などを予測可能なものにすることができる。
|
|
69 \cite{5}
|
2
|
70
|
5
|
71 \section{xv6 on Raspberry Pi}
|
2
|
72
|
|
73 \subsection{xv6}
|
|
74 xv6とは MIT のオペレーティングコースの教育目的で 2006 年に開発されたオペレーティングシステムである。
|
|
75 xv6 はオリジナルである v6 が非常に古い C 言語で書かれている為、 ANSI-C に書き換えられ x86 に再実装された。xv6 は read や write などの systemcall、プロセス、仮想メモリ、カーネルとユーザーの分離、割り込み、ファイルシステムなど Unix の基本的な構造を持っている。
|
|
76 xv6はRaspberry Piに移植することができ、ANSI-Cで書かれているxv6をCbCに書き直すことで、Raspberry Pi上でCbCを動かすことができる。
|
6
|
77 \cite{6}
|
2
|
78
|
5
|
79 \subsection{Cross Compile}
|
|
80 Cross Compileとは、別のOSで実行可能なコードを生成するコンパイル手法である。
|
6
|
81 Raspbian以外の以外のOS環境であるxv6であらかじめRaspberry Pi上でCbCが動くようにCross Compileを行い、そのコードをRaspberry Piに移すことで、実行できるようになる。\cite{7}
|
5
|
82
|
1
|
83
|
|
84 \section{今後の予定}
|
|
85 \subsection{現状}
|
2
|
86 現段階では、Raspberry Pi上にGears OSを搭載している。
|
|
87 また、Raspberry PiとMacをシリアル通信で繋げることができた。
|
|
88 これにより、Raspberry Pi上のxv6でCbCを書くことができる。
|
1
|
89 \subsection{研究計画}
|
2
|
90 今後の計画として本格的にDevice Driverを開発していく。
|
5
|
91 USB Driverを開発するためにRaspberry PiのUEFI BIOSをbootできるようにする。
|
|
92 UEFI BIOSとは、OSとプラットフォームウェアとの間のソフトウェアインターフェースを定義する使用である。
|
2
|
93 その後、xHCIを実装するために、そのUSBプロトコルをCbCで実装していきたい。
|
|
94 また、CbCのバージョンが上がったのでCross Compilerも新たに作成する必要がある。
|
0
|
95
|
|
96
|
|
97 \begin{thebibliography}{9}
|
6
|
98 \bibitem{1}福谷武司,小谷章二,高橋智.Linux による USB デバイスドライバ作成と制御インタフェース開発
|
|
99 \bibitem{2}城戸英之,吉田泰彦,大原茂之.Linux用USBデバイスドライバの開発支援に関する一提案(情報処理学会第67回全国大会,2005)
|
|
100 \bibitem{3}坂本昂弘,河野真治.xv6 kernel 上での CbC による interface の実装(2019)
|
|
101 \bibitem{4}桃原優,坂本昂弘,河野真治.継続を用いたxv6 kernelの書き換え(2019)
|
|
102 \bibitem{5}宮城光希, 河野真治,Code Gear と Data Gear を持つ Gears OS の設計(2018)
|
1
|
103 \bibitem{6}Russ Cox,Frans Kaashoek,Robert Morris. xv6
|
6
|
104 \bibitem{7}桃原優,河野真治.Gears OS on Raspberry Pi(2018)
|
0
|
105
|
|
106 \end{thebibliography}
|
1
|
107 \end{multicols*}
|
0
|
108 \end{document}
|