# HG changeset patch # User menikon # Date 1581409808 -32400 # Node ID 14feebd2285cfc26d10d41845dddff16bcea6ef6 # Parent d393f08644e144fb3a0c989b11637acf3595d14c tweak diff -r d393f08644e1 -r 14feebd2285c final_main/chapter2.tex --- a/final_main/chapter2.tex Tue Feb 11 07:02:42 2020 +0900 +++ b/final_main/chapter2.tex Tue Feb 11 17:30:08 2020 +0900 @@ -1,7 +1,7 @@ \chapter{Continuation based C} %\label{chap:concept} \section{Continuation based Cの概要} -Continuation based C \cite{cbc} (以下CbC) は基本的な処理単位を CodeGear として定義し, CodeGea 間で遷移するようにプログラムを記述する C 言語と互換性のある当研究室で開発されたプログラミング言語である.図\ref{fig:codegear}はCodeGear間の継続する際の処理の流れを示している. +Continuation based C \cite{cbc} (以下CbC) は基本的な処理単位を CodeGear として定義し、CodeGea 間で遷移するようにプログラムを記述する C 言語と互換性のある当研究室で開発されたプログラミング言語である。図\ref{fig:codegear}はCodeGear間の継続する際の処理の流れを示している。 \begin{figure}[ht] \begin{center} @@ -11,15 +11,15 @@ \label{fig:codegear} \end{figure} -現在 CbC は C コンパイラであるGCC\cite{gcc} \cite{nobu-prosym}及びLLVM\cite{llvm} \cite{kaito-lola}をバックエンドとした clang 上で実装されている. -本研究ではこのプログラミング言語を用いて xv6 の Filesystemを書き換える. +現在 CbC は C コンパイラであるGCC\cite{gcc} \cite{nobu-prosym}及びLLVM\cite{llvm} \cite{kaito-lola}をバックエンドとした clang 上で実装されている。 +本研究では、このプログラミング言語を用いて xv6 の Filesystemを書き換える。 \section{CodeGear} -CodeGear は CbCにおける基本的な処理単位である. 以下のソースコード\ref{cbcexample}は CodeGear の継続の例である. +CodeGear は CbCにおける基本的な処理単位である。以下のソースコード\ref{cbcexample}は CodeGear の継続の例である。 \newpage \lstinputlisting[label=cbcexample, caption=CodeGearの継続の例]{src/cbc_example.cbc} -CodeGear は\_\_code CodeGear名 (引数) の形で記述される. -CodeGear は返り値を持たない為, 関数内で処理が終了すると呼び出し 元の関数に戻ることがなく別の CodeGear へ遷移する. -ソースコード\ref{cbcexample}の5行目のgoto cg1(c); や8行目のgoto cg2(c); などがこれにあたる.図\ref{fig:goto}はソースコード\ref{cbcexample}の状態遷移を表している. +CodeGear は\_\_code CodeGear名 (引数) の形で記述される。 +CodeGear は返り値を持たない為、関数内で処理が終了すると呼び出し元の関数に戻ることがなく別の CodeGear へ遷移する。 +ソースコード\ref{cbcexample}の5行目のgoto cg1(c); や8行目のgoto cg2(c); などがこれにあたる。図\ref{fig:goto}はソースコード\ref{cbcexample}の状態遷移を表している。 \begin{figure}[ht] \begin{center} @@ -29,11 +29,11 @@ \label{fig:goto} \end{figure} -また CbC における CodeGear 間の継続にはスタックが使用されず, 呼び出し元の環境などを持たない為軽量継続と呼ぶ. -この CbC における CodeGear 間の継続にスタックが使用されない性質は信頼性の高い OS の開発に適している. +また CbC における CodeGear 間の継続にはスタックが使用されず、呼び出し元の環境などを持たない為軽量継続と呼ぶ。 +この CbC における CodeGear 間の継続にスタックが使用されない性質は信頼性の高い OS の開発に適している。 \newpage \section{DataGear} -DataGear は CbCにおけるデータの基本的な単位である. CodeGear は Input DataGear, Output DataGear を引数に持ち,図\ref{fig:DataGear}で示したように遷移する際に任意のInput DataGearを参照し, Output DataGearを書き出す. +DataGear は CbCにおけるデータの基本的な単位である。CodeGear は Input DataGear、Output DataGear を引数に持ち、図\ref{fig:DataGear}で示したように遷移する際に任意のInput DataGearを参照し、Output DataGearを書き出す。 \begin{figure}[ht] \begin{center} diff -r d393f08644e1 -r 14feebd2285c final_main/chapter3.tex --- a/final_main/chapter3.tex Tue Feb 11 07:02:42 2020 +0900 +++ b/final_main/chapter3.tex Tue Feb 11 17:30:08 2020 +0900 @@ -1,26 +1,26 @@ \chapter{GearsOS} %\label{chap:poordirection} \section{GearsOS の概要} -Gears OS \cite{gears} は CbC によって記述されており, CodeGear と DataGear の単位を用いて開発されている OS である. -Gears OS は 一連の実行が行われる際に使用される CodeGear と DataGear を全て持っている Context と呼ばれるものを持っている.Gears OS は CodeGear 間の継続などの際,常に context を持ち歩いており CodeGear と DataGear の参照が必要になる場合,この Context を通して参照される. +Gears OS \cite{gears} は CbC によって記述されており、CodeGear と DataGear の単位を用いて開発されている OS である。 +Gears OS は 一連の実行が行われる際に使用される CodeGear と DataGear を全て持つ Context と呼ばれるものを持っている。Gears OS は CodeGear 間の継続などの際、常に context を持ち歩いており CodeGear と DataGear の参照が必要になる場合、この Context を通して参照される。 \section{Context} -context とは一連の実行が行われる際に使用される CodeGear と DataGear の集合である. 従来のスレッドやプロセスに対応する.Context は接続可能な CodeGear, Data Gear のリスト. Data Gear を確保するメモリ空間, 実行される Task への Code Gear 等を持っている. CodeGear が 別の CodeGear に遷移する際, 必ず context を参照し enum -で定義された CodeGear の番号を指定し遷移する. ノーマルレベルで見た際の CodeGar,DataGer および context の関係を以下の図\ref{fig:cbc} に簡潔に示す. +context とは一連の実行が行われる際に使用される CodeGear と DataGear の集合である。 従来のスレッドやプロセスに対応する。Context は接続可能な CodeGear、 Data Gear のリスト、 Data Gear を確保するメモリ空間、 実行される Task への Code Gear 等を持っている。 CodeGear が 別の CodeGear に遷移する際、 必ず context を参照し enum +で定義された CodeGear の番号を指定し遷移する。 ノーマルレベルで見た際の CodeGear、DataGear および context の関係を以下の図\ref{fig:cbc} に簡潔に示す。 %\vspace{10mm} \begin{figure}[ht] \begin{center} \includegraphics[width=100mm]{fig/context.pdf} \end{center} - \caption{CodeGear,DataGear,contxtの関係図} + \caption{CodeGear、DataGear、contxtの関係図} \label{fig:cbc} \end{figure} \section{Inetrface} -Interface は Gears OS のモジュール化の仕組みである. Interface は呼び出しの引数になる Data Gear の集合であり,そこで呼び出される Code Gear のエントリである.呼び出される Code Gear の引数となる Data Gear はここで全て定義される. Interface を定義することで複数の実装を持つことができる. -この Interface は, Java の Interface や Haskell の型クラスに対応し, 導入することで仕様と実装に分けて記述することが出来る. -図\ref{fig:interface} は Stack の Interface とその実装を表したものである. +Interface は Gears OS のモジュール化の仕組みである。 Interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。呼び出される Code Gear の引数となる Data Gear はここで全て定義される。Interface を定義することで複数の実装を持つことができる。 +この Interface は、 Java の Interface や Haskell の型クラスに対応し、導入することで仕様と実装に分けて記述することが出来る。 +図\ref{fig:interface} は Stack の Interface とその実装を表したものである。 \vspace{10mm} \begin{figure}[ht] diff -r d393f08644e1 -r 14feebd2285c final_main/chapter4.tex --- a/final_main/chapter4.tex Tue Feb 11 07:02:42 2020 +0900 +++ b/final_main/chapter4.tex Tue Feb 11 17:30:08 2020 +0900 @@ -1,17 +1,17 @@ \chapter{xv6} \section{xv6 の概要} -xv6 \cite{xv6} とは MIT のオペレーティングコースの教育目的で2006年に開発されたオペレーティングシステムである. xv6 はオリジナルである v6 が非常に古い C 言語で書かれてい る為, ANSI-C に書き換えられ x86 に再実装された. xv6 は read や write などの systemcall, プロセス, 仮想メモリ, カーネルとユーザーの分離, 割り込み, ファイルシステムなど Unix の基本的な構造を持っている. -本研究で使われているのは ARM\cite{arm} 上で動作する Raspberry Pi 用に改良されたxv6を使用する. +xv6 \cite{xv6} とは MIT のオペレーティングコースの教育目的で2006年に開発されたオペレーティングシステムである。xv6 はオリジナルである v6 が非常に古い C 言語で書かれてい る為、ANSI-C に書き換えられ x86 に再実装された。 xv6 は read や write などの systemcall、 プロセス、 仮想メモリ、 カーネルとユーザーの分離、 割り込み、 ファイルシステムなど Unix の基本的な構造を持っている。 +本研究で使われているのは ARM\cite{arm} 上で動作する Raspberry Pi 用に改良されたxv6を使用する。 \section{FileSystem} %どんなものか書く -FileSystem とは,コンピュータの資源を操作するための OS が持つ機能のことである.ファイルといえば記憶装置内に格納されている情報を指すが,デバイスやプロセス,カーネル内の処理をする際の情報などをファイルとして扱う FileSystem も存在する. OS ごとに利用している FileSystem は異なるが,一部の OS を除きほとんどの OS には FileSystem が存在する. +FileSystem とは、コンピュータの資源を操作するための OS が持つ機能のことである。ファイルといえば記憶装置内に格納されている情報を指すが、デバイスやプロセス、カーネル内の処理をする際の情報などをファイルとして扱う FileSystem も存在する。 OS ごとに利用している FileSystem は異なるが、一部の OS を除きほとんどの OS には FileSystem が存在する。 %記憶装置内に格納されているデータ,デバイスやプロセス,カーネル内の処理をする際の情報などファイルとして管理している. %processについて(軽く) \section{xv6 のFileSystem} -.xv6 の FileSystem は,デバイスやプロセス,カーネル内の処理をする際の情報などをファイルとして扱う FileSystem である. -xv6 の FileSystem は図\ref{fig:xv6filesystem} のように7つの階層によって構成されている. +.xv6 の FileSystem は、デバイスやプロセス、カーネル内の処理をする際の情報などをファイルとして扱う FileSystem を使用している。 +xv6 の FileSystem は図\ref{fig:xv6filesystem} のように7つの階層によって構成されている。 \newpage \begin{figure}[ht] @@ -22,72 +22,47 @@ \label{fig:xv6filesystem} \end{figure} -\begin{comment} -優先度が低いのでコメントアウト中説明するなら外す -\begin{itemize} - \item File descriptor 階層 - Unixの資源はファイルとして表現され,コンソールのようなデバイスはもちろん,実際のファイルもファイルとして表現されている. - File descriptor 階層はこの - - \item Pathname 階層 - \item Directory 階層 - \item Inode 階層 - \item Logging 階層 - \item Bffer cache 階層 - \item Disk 階層 -\end{itemize} - -\newpage -xv6 の FileSystem の Disk の割り当てを以下の図\ref{fig:filesystem}に示す. - -\begin{figure}[ht] - \begin{center} - \includegraphics[width=150mm]{fig/xv6filesystemlayout.pdf} - \end{center} - \caption{xv6 の FileSystem に関する Disk の割り当て} - \label{fig:filesystem} -\end{figure} - -\begin{itemize} - \item boot sector - \\boot sectorを保持しているだけで FileSystem はこのブロックを使用することはない. - - \item super block - \\ブロックのファイルサイズやデータブロックの数, inodeの数, log 中のブロック数などが格納されている. - - \item inodes - \\inodeが格納されている. - - \item block bitmap - \\block bitmap は使用しているブロックが記憶されている. - - \item data blocks - \\block bitmap において使用可能であることが記録されており,ファイルやディレクトリが保持されている. - - \item log - \\Logging 階層の log が格納されている. - -\end{itemize} -\end{comment} \section{FilleSystem の API} %関数や構造体などを解説しそのまま利用されているところをかく %FileSystemの構造よりも重要だからこっちの方のを優先的に説明したい! \begin{itemize} + \item readsb + \\ブロックのファイルサイズやデータブロックの数、inodeの数、log 中のブロック数などが格納されている super block を読み込む。 + \\log.c で呼び出されて使用している。 + \item iinit + \\main.c で呼び出されて使用している。 + \item ialloc + \\ + \item iupdate + \item idup + \item ilock + \item iunlock + \item iput + \item iunlockput + \item stati + \item readi + \item writei + \item namecmp + \item dirlookup + \item dirlink + \item namei + \item nameiparent + \end{itemize} diff -r d393f08644e1 -r 14feebd2285c final_main/chapter5.tex --- a/final_main/chapter5.tex Tue Feb 11 07:02:42 2020 +0900 +++ b/final_main/chapter5.tex Tue Feb 11 17:30:08 2020 +0900 @@ -11,7 +11,7 @@ \end{figure} %\newpage -FileSystem の Interface を記述したコードをソースコード\ref{fs_interface}に示す. +FileSystem の Interface を記述したコードをソースコード\ref{fs_interface}に示す。 \lstinputlisting[label=fs_interface, caption=FileSystem の Interface]{src/fs.dg} diff -r d393f08644e1 -r 14feebd2285c final_main/future.tex --- a/final_main/future.tex Tue Feb 11 07:02:42 2020 +0900 +++ b/final_main/future.tex Tue Feb 11 17:30:08 2020 +0900 @@ -1,4 +1,4 @@ \chapter{まとめと今後の課題} -今回の研究では xv6 の FileSystem 部分について CbC を用いて書き換えを行った.しかし, xv6 はGears OS を開発する前段階として開発しているので今後は書き換えた xv6 を Gears OS に適応した形に改良していく必要がある. -xv6 の FileSystem 部分書き換え後 make し build することはできたが,デバックをまだ行っていないため正常に動くかどうか確認することが求められる.また,動かなかった場合修正を行い OS として機能しているか再確認する必要がある. -後々は証明支援器 agda で証明できる OS として開発したい \ No newline at end of file +今回の研究では xv6 の FileSystem 部分について CbC を用いて書き換えを行った。しかし、 xv6 はGears OS を開発する前段階として開発しているので今後は書き換えた xv6 を Gears OS に適応した形に改良していく必要がある。 +xv6 の FileSystem 部分書き換え後 make し build することはできたが、デバックをまだ行っていないため正常に動くかどうか確認することが求められる。また、動かなかった場合修正を行い OS として機能しているか再確認する必要がある。 +%後々は証明支援器 agda で証明できる OS として開発したい \ No newline at end of file diff -r d393f08644e1 -r 14feebd2285c final_main/main.pdf Binary file final_main/main.pdf has changed diff -r d393f08644e1 -r 14feebd2285c rewrite_xv6_FileSystem_in_CbC.mm --- a/rewrite_xv6_FileSystem_in_CbC.mm Tue Feb 11 07:02:42 2020 +0900 +++ b/rewrite_xv6_FileSystem_in_CbC.mm Tue Feb 11 17:30:08 2020 +0900 @@ -2,8 +2,9 @@ - + + @@ -11,8 +12,9 @@ - + + @@ -23,8 +25,9 @@ - + + @@ -35,8 +38,9 @@ - + + @@ -65,12 +69,19 @@ - + + - + + + + + + + @@ -86,13 +97,20 @@ - + + + + + + + +