view final_main/chapter4.tex @ 15:c8adccdd011a

add src and slide
author menikon
date Wed, 12 Feb 2020 11:28:11 +0900
parents 14feebd2285c
children b67e4c9f0374
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{FileSystem}
%どんなものか書く
FileSystem とは、コンピュータの資源を操作するための OS が持つ機能のことである。ファイルといえば記憶装置内に格納されている情報を指すが、デバイスやプロセス、カーネル内の処理をする際の情報などをファイルとして扱う FileSystem も存在する。 OS ごとに利用している FileSystem は異なるが、一部の OS を除きほとんどの OS には FileSystem が存在する。
%記憶装置内に格納されているデータ,デバイスやプロセス,カーネル内の処理をする際の情報などファイルとして管理している.
%processについて(軽く)
\section{xv6 のFileSystem}
.xv6 の FileSystem は、デバイスやプロセス、カーネル内の処理をする際の情報などをファイルとして扱う FileSystem を使用している。
xv6 の FileSystem は図\ref{fig:xv6filesystem} のように7つの階層によって構成されている。

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


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

  \item ialloc
  \\デバイスで指定されたタイプを新しい inode に割り当てる。
  \\mkfs.c で呼び出されて使用している。
    
  \item iupdate
  \\変更されたメモリ内の inode をディスクにコピーする。
  \\fs.c で呼び出されて使用している。
  
  \item idup
  \\fs.c で呼び出されて使用している。
   
  \item ilock 
  \\指定した inode をロックする。またその際に必要であるならば、ディスクから inode を読み込む。
  \\fs.c と exec.c で呼び出されて使用している。
  
  \item iunlock
  \\指定された inode のロックを解除する。
  \\fs.c と exec.c で呼び出されて使用している。
  
  \item iput
  \\メモリ内の inode への参照を削除する。
  %それが最後の参照であった場合、iノードキャッシュエントリはリサイクルできます。それが最後の参照であり、iノードにリンクがない場合、ディスク上のiノード(およびそのコンテンツ)を解放します。
  \\fs.c で呼び出されて使用している。
  
  \item iunlockput
  \\指定された inode のロックを解除してから iput を実行する。
  %後でまとめる
  \\fs.c と exec.c で呼び出されて使用している。
  
  \item stati
  \\inode から ファイルに関する統計情報を複製する。
  \\fs.c で呼び出されて使用している。
  
  \item readi
  \\inode からデータを読み込む。
  \\fs.c と exec.c とvm.c で呼び出されて使用している。
  
  \item writei
  \\inode へデータを書き込む。
  \\fs.c で呼び出されて使用している。
  
  \item namecmp
  \\fs.c で呼び出されて使用している。
  
  \item dirlookup
  \\fs.c で呼び出されて使用している。
  
  \item dirlink
  \\fs.c で呼び出されて使用している。
  
  \item namei
  \\fs.c と exec.c で呼び出されて使用している。
  %src/usr/usertests.cでも呼び出されてる?要質問
  
  \item nameiparent
  \\fs.c で呼び出されて使用している。
  
\end{itemize}