Mercurial > hg > Papers > 2020 > menikon-thesis
changeset 19:2d4c2f925cdb
tweak
author | menikon |
---|---|
date | Fri, 14 Feb 2020 02:24:42 +0900 |
parents | 18edad46e821 |
children | ed839cf0e364 |
files | final_main/chapter4.tex final_main/chapter5.tex final_main/main.pdf |
diffstat | 3 files changed, 30 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/final_main/chapter4.tex Thu Feb 13 04:06:29 2020 +0900 +++ b/final_main/chapter4.tex Fri Feb 14 02:24:42 2020 +0900 @@ -1,13 +1,12 @@ \chapter{xv6} \section{xv6 の概要} -xv6 \cite{xv6} とは MIT のオペレーティングコースの教育目的で2006年に開発されたオペレーティングシステムである。xv6 はオリジナルである v6 が非常に古い C 言語で書かれてい る為、ANSI-C に書き換えられ x86 に再実装された。 xv6 は read や write などの systemcall、 プロセス、 仮想メモリ、 カーネルとユーザーの分離、 割り込み、 ファイルシステムなど Unix の基本的な構造を持っている。 +xv6 \cite{xv6} とは MIT のオペレーティングコースの教育目的で2006年に開発されたオペレーティングシステムである。xv6 はオリジナルである v6 が非常に古い C 言語で書かれてい る為、ANSI-C に書き換えられ x86 に再実装された。 xv6 は read や write などの systemcall、プロセス、仮想メモリ、カーネルとユーザーの分離、割り込み、ファイルシステムなど Unix の基本的な構造を持っている。 本研究で使われているのは ARM\cite{arm} 上で動作する Raspberry Pi 用に改良されたxv6を使用する。 \section{xv6 のFileSystem} %どんなものか書く FileSystem とは、コンピュータの資源を操作するための OS が持つ機能のことである。ファイルといえば記憶装置内に格納されている情報を指すが、xv6 の FileSystem は、デバイスやプロセス、カーネル内の処理をする際の情報などをファイルとして扱う。 OS ごとに利用している FileSystem は異なるが、一部の OS を除きほとんどの OS には FileSystem が存在する。 -%記憶装置内に格納されているデータ,デバイスやプロセス,カーネル内の処理をする際の情報などファイルとして管理している. %processについて(軽く) xv6 の FileSystem は図\ref{fig:xv6filesystem} のように7つの階層によって構成されている。 @@ -20,6 +19,27 @@ \label{fig:xv6filesystem} \end{figure} +%図\ref{fig:xv6filesystem} の各階層について説明する。 +Disk 階層は、IDEハードドライブ上のブロックを読み書きする。 +Buffer cache 階層はディスクブロックをキャッシュし、ブロックのアクセスの同期を取り、データが格納されている特定のブロックについて、複数のブロックが同時に変更を行っていないことを保証する。つまり、プロセス間の調停を行なっている。 +Logging 階層は高位の階層のいくつかのブロックの更新操作をトランザクションとしてラップし、またクラッシュが発生した場合でも、ブロックがシステムの他の部分から見てそれらがひとつの操作に見えるように更新されるようにする。 +inode階層は個々のファイルを提供している。各ファイルは一意の i-number とファイルのデータを保持するいくつかのブロックを持つ inode として表されている。 +Directory 階層はいくつかのディレクトリを構成している。ディレクトリのinodeはディレクトリのエントリ列が含まれており、各エントリにはファイル名とi-numberが入っている。 +Pathname 階層は、/usr/rtm/xv6/fs.cのような階層的なパスを構成している。 +File descriptor 階層は Unixの資源をファイルとして表現し、コンソールのようなデバイスはもちろん、実際のファイルもファイルとして表現している。 + +\newpage +FileSytem は処理の際に Disk 階層のブロックを利用している。Disk 階層のブロックがどのように割り当てられているか図\ref{fig:filesystem}に示す。 + +\begin{figure}[ht] + \begin{center} + \includegraphics[width=150mm]{fig/xv6filesystemlayout.pdf} + \end{center} + \caption{Disk 階層 のブッロク割り当て} + \label{fig:filesystem} +\end{figure} + +boot sector はシステムを起動するためのものであるが、FileSystem がこのブロックを使用することはない。super block はブロックのファイルサイズやデータブロックの数,、inode の数,、log 中のブロック数などが格納されている。 inodes は inode に関するリストが格納されている。block bitmap は使用しているブロックが記憶されている。data blocks は block bitmap において使用可能であることが記録されており、ファイルやディレクトリが保持されている。Logging 階層の log が格納されている。 \section{FilleSystem の API} FileSystem について記述している fs.c ではファイルを操作、管理する際に様々な関数がプロセスやデバイスなどから呼び出され使用されている。 @@ -81,3 +101,5 @@ \end{itemize} + +これらの API の CbC による書き換えを次章で説明する。
--- a/final_main/chapter5.tex Thu Feb 13 04:06:29 2020 +0900 +++ b/final_main/chapter5.tex Fri Feb 14 02:24:42 2020 +0900 @@ -1,14 +1,15 @@ \chapter{CbCによるFileSystemの書き換え} \section{書き換え方針} -FileSystem の処理は複雑である。 +FileSystem の処理は複雑である。FileSystem が記述されている fs.c で定義されている関数を CbC によって書き換えることにより処理の明確化と信頼性の保証をしたい。 +そのために if 文の中に if文がある場合や for 文がある場合には処理を細かく分離してやり分かりやすくする。また、CbC の Interface を用いることにより仕様と実装を分離し拡張性を実現する。 %xv6 を CbC で書き換え、Gears OS の機能と置き換えることで Gears OS に OS の基本構造を持たせたい。 %このためには xv6 をモジュール化することで、xv6 の機能を明らかにする必要がある。 %xv6 の Interface を定義し、Gears OS の機能をこれに合わせることによって実現したい。 %\newpage \section{FileSystem の Interface の定義} -インターフェースはある Data Gear の定義と、それに対する操作を行う Code Gear の 集合を表現する Meta Data Gear である。Context では全ての Code Gaer と Data Gear の集合を表現していることに対し、インターフェースは一部の Code Gear と一部の Data Gear の集合を表現する。 -インターフェースを記述することによってノーマルレベルとメタレベルの分離が可能となる。 +Interface はある Data Gear の定義と、それに対する操作を行う Code Gear の 集合を表現する Meta Data Gear である。Context では全ての Code Gaer と Data Gear の集合を表現していることに対し、Interface は一部の Code Gear と一部の Data Gear の集合を表現する。 +図\ref{fig:fsfilesystem}で表されている通り、FileSystem においても Interface で定義した CodeGear と実装側の CodeGear は対応している。 \begin{figure}[ht] \begin{center} @@ -56,3 +57,5 @@ \caption{allocinode の ループによる遷移図} \label{fig:iallocloop} \end{figure} + +今回は ialloc\_impl という関数を取り上げて説明したが、FileSystem が記述されている fs.c で定義されている関数に関しては全て CbCを用いることにより状態遷移ベースに書き変え挙動を明確化した。 \ No newline at end of file