view final_main/chapter4.tex @ 16:b67e4c9f0374

tweak
author menikon
date Wed, 12 Feb 2020 19:54:53 +0900
parents c8adccdd011a
children 2d4c2f925cdb
line wrap: on
line source

\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を使用する。


\section{xv6 のFileSystem}
%どんなものか書く
FileSystem とは、コンピュータの資源を操作するための OS が持つ機能のことである。ファイルといえば記憶装置内に格納されている情報を指すが、xv6 の FileSystem は、デバイスやプロセス、カーネル内の処理をする際の情報などをファイルとして扱う。 OS ごとに利用している FileSystem は異なるが、一部の OS を除きほとんどの OS には FileSystem が存在する。
%記憶装置内に格納されているデータ,デバイスやプロセス,カーネル内の処理をする際の情報などファイルとして管理している.
%processについて(軽く)
xv6 の FileSystem は図\ref{fig:xv6filesystem} のように7つの階層によって構成されている。

\newpage
\begin{figure}[ht]
     \begin{center}
     \includegraphics[width=50mm]{fig/FileSystemLayout.pdf}
     \end{center}
     \caption{xv6 の FileSystem Layer}
    \label{fig:xv6filesystem}
\end{figure}


\section{FilleSystem の API} 
FileSystem について記述している fs.c ではファイルを操作、管理する際に様々な関数がプロセスやデバイスなどから呼び出され使用されている。
 fs.c に存在している関数とその挙動に関して具体的に以下に示す。
%関数や構造体などを解説しそのまま利用されているところをかく
%FileSystemの構造よりも重要だからこっちの方のを優先的に説明したい!
\begin{itemize}
  \item readsb
  \\ブロックのファイルサイズやデータブロックの数、inodeの数、log 中のブロック数などが格納されている super block を読み込む。
  
  \item iinit

  \item ialloc
  \\デバイスで指定されたタイプを新しい inode に割り当てる。
    
  \item iupdate
  \\変更されたメモリ内の inode をディスクにコピーする。
  
  \item idup
  \\IPの参照カウントをインクリメントする。
  
  \item ilock 
  \\指定した inode をロックする。またその際に必要であるならば、ディスクから inode を読み込む。
  
  \item iunlock
  \\指定された inode のロックを解除する。
  
  \item iput
  \\メモリ内の inode への参照を削除する。
  %それが最後の参照であった場合、iノードキャッシュエントリはリサイクルできます。それが最後の参照であり、iノードにリンクがない場合、ディスク上のiノード(およびそのコンテンツ)を解放します。
  
  \item iunlockput
  \\指定された inode のロックを解除してから iput を実行する。
  %後でまとめる
  
  \item stati
  \\inode から ファイルに関する統計情報を複製する。
  
  \item readi
  \\inode からデータを読み込む。
   
  \item writei
  \\inode へデータを書き込む。

  \item namecmp
  
  
  \item dirlookup
  \\ディレクトリ内のディレクトリエントリを探す。
%見つかった場合は、* poffをエントリのバイトオフセットに設定します。
  
  \item dirlink
  \\新しいディレクトリエントリ(名前、inum)をディレクトリdpに書き込む。
  
  \item namei

  
  \item nameiparent

  
\end{itemize}