# HG changeset patch # User mir3636 # Date 1549502541 -32400 # Node ID ed7a29ed96b77467aaec9a5961d5c1c02bc03b71 # Parent a531f74c8ec632d31c606447ad6777a2688ca753 update diff -r a531f74c8ec6 -r ed7a29ed96b7 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r a531f74c8ec6 -r ed7a29ed96b7 paper/xv6.tex --- a/paper/xv6.tex Wed Feb 06 20:54:15 2019 +0900 +++ b/paper/xv6.tex Thu Feb 07 10:22:21 2019 +0900 @@ -17,6 +17,39 @@ ユーザープログラムがシステムコールを呼び出すと、ハードウェアが特権レベルを上げ、カーネルのプログラムが実行される。 この特権レベルを持つプロセッサの状態をカーネルモード、特権のない状態をユーザーモードという。 +\subsection{システムコール} + +ユーザープログラムがカーネルの提供するサービスを呼び出す際にはシステムコールを用いる。 +ユーザープログラムがシステムコールを呼び出すと、トラップが発生する。 +トラップが発生すると、ユーザープログラムは中断され、カーネルに切り替わり処理を行う。 +ソースコード \ref{syscall} は xv6 のシステムコールのリストである。 + +\begin{lstlisting}[frame=lrbt,label=syscall,caption={\footnotesize xv6 のシステムコールのリスト}] +static int (*syscalls[])(void) = { + [SYS_fork] =sys_fork, + [SYS_exit] =sys_exit, + [SYS_wait] =sys_wait, + [SYS_pipe] =sys_pipe, + [SYS_read] =sys_read, + [SYS_kill] =sys_kill, + [SYS_exec] =sys_exec, + [SYS_fstat] =sys_fstat, + [SYS_chdir] =sys_chdir, + [SYS_dup] =sys_dup, + [SYS_getpid] =sys_getpid, + [SYS_sbrk] =sys_sbrk, + [SYS_sleep] =sys_sleep, + [SYS_uptime] =sys_uptime, + [SYS_open] =sys_open, + [SYS_write] =sys_write, + [SYS_mknod] =sys_mknod, + [SYS_unlink] =sys_unlink, + [SYS_link] =sys_link, + [SYS_mkdir] =sys_mkdir, + [SYS_close] =sys_close, +}; +\end{lstlisting} + \subsection{プロセス} プロセスとは、カーネルが実行するプログラムの単位である。 xv6 のプロセスは、ユーザー空間メモリとカーネル用のプロセスの状態を持つ空間で構成されている。 @@ -49,10 +82,6 @@ 絶対パスである "/dir1/dir2/file1" というパスは root ディレクトリ内の dir1 という名前のディレクトリ内の dir2 という名前のディレクトリ内の file というデータファイルを指す。 相対パスである "dir2/file2" のようなパスは、現在のディレクトリ内の dir2 という名前のディレクトリ内の file というデータファイルを指す。 -\subsection{システムコール} - -ユーザープログラムがカーネルの提供するサービスを呼び出す際にはシステムコールを用いる。 - \section{xv6-rpi の CbC 対応} オリジナルの Xv6 は x86 アーキテクチャで実装されたものだが、xv6-rpi は Raspberry Pi 用に実装されたものである。