Mercurial > hg > Papers > 2019 > mitsuki-master
changeset 33:a531f74c8ec6
update
author | mir3636 |
---|---|
date | Wed, 06 Feb 2019 20:54:15 +0900 |
parents | 2c3f12ef8f76 |
children | ed7a29ed96b7 |
files | paper/master_paper.pdf paper/xv6.tex |
diffstat | 2 files changed, 22 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/xv6.tex Wed Feb 06 15:56:47 2019 +0900 +++ b/paper/xv6.tex Wed Feb 06 20:54:15 2019 +0900 @@ -1,14 +1,14 @@ \chapter{xv6 の CbC への書き換え} Gears OS をハードウェア上で実装するために、ARM\cite{arm} プロセッサを搭載したシングルボードコンピュータである Raspberry Pi\cite{rpi} 上で Gears OS 実装したい。 -ハードウェア上でのメタレベルの計算や並列実行を行うために、Linax 等に比べてシンプルである Xv6 の機能の一部を Gears OS に置き換えることで実現させる。 +ハードウェア上でのメタレベルの計算や並列実行を行うために、Linax 等に比べてシンプルである xv6 の機能の一部を Gears OS に置き換えることで実現させる。 xv6 は UNIX V6 を x86 へ再実装したものであるが、 -ここでは Xv6 を Raspberry pi 用に移植した xv6\_rpi\cite{xv6rpi} を用いて実装する。 +ここでは xv6 を Raspberry pi 用に移植した xv6\_rpi\cite{xv6rpi} を用いて実装する。 Xv6 は 2006 年に MIT のオペレーティングシステムコースで教育用の目的として開発されたオペレーティングシステムである。 Xv6 はプロセス、仮想メモリ、カーネルとユーザの分離、割り込み、ファイルシステムなどの基本的な Unix の構造を持つにも関わらず、 シンプルで学習しやすい。 -\section{Xv6 の構成要素} +\section{xv6 の構成要素} xv6 はカーネルと呼ばれる形式をとっている。 カーネルは OS にとって中核となるプログラムである。 xv6 ではカーネルとユーザープログラムは分離されており、カーネルはプログラムにプロセス管理、メモリ管理、I/O やファイルの管理などのサービスを提供する。 @@ -17,7 +17,7 @@ ユーザープログラムがシステムコールを呼び出すと、ハードウェアが特権レベルを上げ、カーネルのプログラムが実行される。 この特権レベルを持つプロセッサの状態をカーネルモード、特権のない状態をユーザーモードという。 -\subsubsection{プロセス} +\subsection{プロセス} プロセスとは、カーネルが実行するプログラムの単位である。 xv6 のプロセスは、ユーザー空間メモリとカーネル用のプロセスの状態を持つ空間で構成されている。 プロセスは独立しており、他のプロセスからメモリを破壊されたりすることはない。 @@ -33,10 +33,25 @@ ファイルには命令、データなどの配置が指定されたフォーマット通りになっていなければならない。 xv6 は ELF と呼ばれるフォーマットを扱う。 -\subsubsection{ファイルディスクリプタ} +\subsection{ファイルディスクリプタ} ファイルディスクリプタは、カーネルが管理するプロセスが読み書きを行うオブジェクトを表す整数値である。 プロセスは、ファイル、ディレクトリ、デバイスを開く、または既存のディスクリプタを複製することによって、 ファイルディスクリプタを取得する。 +xv6 はプロセス毎にファイルディスクリプタのテーブルを持っている。 +ファイルディスクリプタは普通、0 が標準入力、1 が標準出力、2 がエラー出力として使われる。 +ファイルディスクリプタのテーブルのエントリを変更することで入出力先を変更することができる。 +1 の標準出力を close し、ファイルを open することでプログラムはファイルに出力することになる。 +ファイルディスクリプタはファイルがどのように接続するか隠すことでファイルへの入出力を容易にしている。 + +\subsection{ファイルシステム} +xv6 のファイルシステムはバイト配列であるデータファイルとデータファイルおよび他のディレクトリの参照を含むディレクトリを提供する。 +ディレクトリは root と呼ばれる特別なディレクトリから始まるツリーを形成している。 +絶対パスである "/dir1/dir2/file1" というパスは root ディレクトリ内の dir1 という名前のディレクトリ内の dir2 という名前のディレクトリ内の file というデータファイルを指す。 +相対パスである "dir2/file2" のようなパスは、現在のディレクトリ内の dir2 という名前のディレクトリ内の file というデータファイルを指す。 + +\subsection{システムコール} + +ユーザープログラムがカーネルの提供するサービスを呼び出す際にはシステムコールを用いる。 \section{xv6-rpi の CbC 対応} @@ -47,5 +62,7 @@ GCC 上で実装した CbC コンパイラを ARM 向けに build し xv6-rpi のクロスコンパイルを行い、 QEMU 上で動作させた。 + + \section{システムコールの書き換え}