changeset 8:737421115770

chapter cbc_interface and impl_paging
author tobaru
date Fri, 31 Jan 2020 18:02:14 +0900
parents 6e1a4452265e
children dfb52a12c5a1
files paper/Paging.tex paper/cbc_interface.tex paper/impl_paging.tex paper/master_paper.aux paper/master_paper.log paper/master_paper.lol paper/master_paper.pdf paper/master_paper.synctex.gz paper/master_paper.tex paper/master_paper.toc thsis_paging.mm thsis_paging.pdf
diffstat 12 files changed, 546 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- a/paper/Paging.tex	Thu Jan 30 20:15:10 2020 +0900
+++ b/paper/Paging.tex	Fri Jan 31 18:02:14 2020 +0900
@@ -1,9 +1,10 @@
-\chapter{CbCXv6 での Paging の書き換え} 
+\chapter{CbCXv6 での Paging} 
  OS の信頼性の基本である メモリ管理 の書き換えについて説明する。
 
 
 \section{Xv6 を元にした Gears OS の実装}
-Gears OS ではハードウェア上でメタレベルの計算や並列実行を行いたいので、Raspberry Pi でもバイナリを>出力できる Xv6 を CbC で書き換える。
+Gears OS ではハードウェア上でメタレベルの計算や並列実行を行いたいので、
+Raspberry Pi でもバイナリを出力できる Xv6 を CbC で書き換える。
 ANSI-C で書かれている Xv6 を CbC に書き直し、それを元に Gears OS を実装していく。
 
 \section{Paging}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/cbc_interface.tex	Fri Jan 31 18:02:14 2020 +0900
@@ -0,0 +1,440 @@
+\chapter{CbC インターフェース}
+
+構造図書く(今のcbcxv6と同じか確認してから)
+\par
+
+
+ Gears OS では Meta Code Gear で Context から値を取り出し、ノーマルレベルの Code Gear に値を渡す。
+しかし、Code Gaer がどの Data Gear の番号に対応するかを指定する必要があったり、 % ぱるすさんコード必要?
+ノーマルレベルとメタレベルで見え方が異なる Data Gear を Meta Code Gear によって 調整する必要があったりと、 % みつきさん
+メタレベルからノーマルレベルの継続の記述が煩雑になるため、Interface 化をしている。
+Interface は Data Gear に対しての操作を行う Code Gear であり、実装は別で定義する。
+% Interface で定義した Code Gear に
+
+
+%  Xv6 の書き換えは Interface を用いてモジュール化する。
+そうすることで Gears OS の機能を置き換えることできるようになる。
+
+
+
+\section{インターフェースの定義}
+ インターフェースはある Data Gear の定義と、
+それに対する操作を行う Code Gear の集合を表現する Meta Data Gear である。
+Context では全ての Code Gaer と Data Gear の集合を表現していることに対し、
+インターフェースは一部の Code Gear と一部の Data Gear の集合を表現する。
+\par 
+インターフェースを記述することによってノーマルレベルとメタレベルの分離が可能となる。
+
+Paging のインターフェースを記述したコードを \ref{interface} に示す。
+
+
+\begin{lstlisting}[frame=lrbt,label=interface,caption={\footnotesize vm のインターフェース}]
+typedef struct vm<Type,Impl> {
+    union Data* vm;
+    uint low;
+    uint hi;
+    struct proc* p;
+    pde_t* pgdir;
+    char* init;
+    uint sz;
+    char* addr;
+    struct inode* ip;
+    uint offset;
+    uint oldsz;
+    uint newsz;
+    char* uva;
+    uint va;
+    void* pp;
+    uint len;
+    uint phy_low;
+    uint phy_hi;
+    __code init_vmm(Impl* vm, __code next(...));
+    __code kpt_freerange(Impl* vm, uint low, uint hi, __code next(...));
+    __code kpt_alloc(Impl* vm ,__code next(...));
+    __code switchuvm(Impl* vm ,struct proc* p, __code next(...));
+    __code init_inituvm(Impl* vm, pde_t* pgdir, char* init, uint sz, __code next(...));
+    __code loaduvm(Impl* vm,pde_t* pgdir, char* addr, struct inode* ip, uint offset, uint sz,  __code next(...));
+    __code allocuvm(Impl* vm, pde_t* pgdir, uint oldsz, uint newsz, __code next(...));
+    __code clearpteu(Impl* vm, pde_t* pgdir, char* uva,  __code next(...));
+    __code copyuvm(Impl* vm, pde_t* pgdir, uint sz, __code next(...));
+    __code uva2ka(Impl* vm, pde_t* pgdir, char* uva, __code next(...));
+    __code copyout(Impl* vm, pde_t* pgdir, uint va, void* pp, uint len, __code next(...));
+    __code paging_int(Impl* vm, uint phy_low, uint phy_hi, __code next(...));
+    __code void_ret(Impl* vm);
+    __code next(...);
+} vm;
+\end{lstlisting}
+
+
+\par
+2行目から19行目で引数の Data Gear 郡を定義している。
+初期化された Data Gear が Code Gear の引数として扱われる。
+例として、2行目で定義された vm が21行目から32行目までの引数と対応している。
+\par
+% インターフェースの Code Gear の goto による継続先は基本的に不定となっており、継続元から渡される。
+\_\_code next(...) の引数 ... は複数の Input Data Gear を持つという意味である。
+後述する実装によって条件分岐によって複数の継続先が設定されることがある。
+\par
+ Code Gaer は 20行目から33行目のように "\_\_code [Code Gear名]([引数])"で定義する。
+この引数が input Data Gear になる。
+
+
+% 実装側に書く
+% 引数の Data Gear はその Code Gear の Input Data Gear になり、引数の Code Gear の中の引 数が Output Data Gear になる。Code Gear の第一引数には Interface を実装した Data Gear を渡す。これは、Code Gear の操作の対象となる Data Gear を設定し ており、後述する継続構文では引数として記述を行わない。
+
+
+\section{インターフェースの実装}
+ インターフェースは Data Gear に対しての Code Gear とその Code Gear で扱われている Data Gear の集合を抽象化した Meta Data Gear で、vm.c に対応する実装は別で定義する。
+\par
+
+
+
+
+\begin{lstlisting}[frame=lrbt,label=impl_vm,caption={\footnotesize vm インターフェースの実装}]
+#include "../../context.h"
+#interface "vm.h"
+
+vm* createvm_impl(struct Context* cbc_context) {
+    struct vm* vm  = new vm();
+    struct vm_impl* vm_impl = new vm_impl();
+    vm->vm = (union Data*)vm_impl;
+    vm_impl->vm_impl = NULL;
+    vm_impl->i  = 0;
+    vm_impl->pte = NULL;
+    vm_impl->sz  = 0;
+    vm_impl->loaduvm_ptesize_check = C_loaduvm_ptesize_checkvm_impl;
+    vm_impl->loaduvm_loop = C_loaduvm_loopvm_impl;
+    vm_impl->allocuvm_check_newsz = C_allocuvm_check_newszvm_impl;
+    vm_impl->allocuvm_loop = C_allocuvm_loopvm_impl;
+    vm_impl->copyuvm_check_null = C_copyuvm_check_nullvm_impl;
+    vm_impl->copyuvm_loop = C_copyuvm_loopvm_impl;
+    vm_impl->uva2ka_check_pe_types = C_uva2ka_check_pe_types;
+    vm_impl->paging_intvm_impl = C_paging_intvmvm_impl;
+    vm_impl->copyout_loopvm_impl = C_copyout_loopvm_impl;
+    vm_impl->switchuvm_check_pgdirvm_impl = C_switchuvm_check_pgdirvm_impl;
+    vm_impl->init_inituvm_check_sz = C_init_inituvm_check_sz;
+    vm->void_ret  = C_vm_void_ret;
+    vm->init_vmm = C_init_vmmvm_impl;
+    vm->kpt_freerange = C_kpt_freerangevm_impl;
+    vm->kpt_alloc = C_kpt_allocvm_impl;
+    vm->switchuvm = C_switchuvmvm_impl;
+    vm->init_inituvm = C_init_inituvmvm_impl;
+    vm->loaduvm = C_loaduvmvm_impl;
+    vm->allocuvm = C_allocuvmvm_impl;
+    vm->clearpteu = C_clearpteuvm_impl;
+    vm->copyuvm = C_copyuvmvm_impl;
+    vm->uva2ka = C_uva2kavm_impl;
+    vm->copyout = C_copyoutvm_impl;
+    vm->paging_int = C_paging_intvm_impl;
+    return vm;
+}
+extern struct {
+    struct spinlock lock;
+    struct run *freelist;
+} kpt_mem;
+
+__code init_vmmvm_impl(struct vm_impl* vm,__code next(...)) {
+    initlock(&kpt_mem.lock, "vm");
+    kpt_mem.freelist = NULL;
+
+    goto next(...);
+}
+
+extern struct run {
+    struct run *next;
+};
+
+static void _kpt_free (char *v)
+{   
+    struct run *r;
+    
+    r = (struct run*) v;
+    r->next = kpt_mem.freelist;
+    kpt_mem.freelist = r;
+}
+
+__code kpt_freerangevm_impl(struct vm_impl* vm, uint low, uint hi, __code next(...)) {
+
+   if (low < hi) {
+     _kpt_free((char*)low);
+     goto kpt_freerangevm_impl(vm, low + PT_SZ, hi, next(...));
+
+   }
+  goto next(...);
+}
+
+__code kpt_allocvm_impl(struct vm_impl* vm, __code next(...)) {
+  acquire(&kpt_mem.lock);
+
+  goto kpt_alloc_check_impl(vm_impl, next(...));
+}
+
+typedef struct proc proc;
+__code switchuvmvm_impl(struct vm_impl* vm , struct proc* p, __code next(...)) { //:skip
+
+    goto switchuvm_check_pgdirvm_impl(...);
+}
+
+__code init_inituvmvm_impl(struct vm_impl* vm, pde_t* pgdir, char* init, uint sz, __code next(...)) {
+
+    Gearef(cbc_context, vm_impl)->pgdir = pgdir;
+    Gearef(cbc_context, vm_impl)->init = init;
+    Gearef(cbc_context, vm_impl)->sz = sz;
+    Gearef(cbc_context, vm_impl)->next = next;
+    goto init_inituvm_check_sz(vm, pgdir, init, sz, next(...));
+}
+
+__code loaduvmvm_impl(struct vm_impl* vm, pde_t* pgdir, char* addr, struct inode* ip, uint offset, uint sz,  __code next(...)) {
+    Gearef(cbc_context, vm_impl)->pgdir = pgdir;
+    Gearef(cbc_context, vm_impl)->addr = addr;
+    Gearef(cbc_context, vm_impl)->ip = ip;
+    Gearef(cbc_context, vm_impl)->offset = offset;
+    Gearef(cbc_context, vm_impl)->sz = sz;
+    Gearef(cbc_context, vm_impl)->next = next;
+
+    goto loaduvm_ptesize_checkvm_impl(vm, next(...));
+}
+
+__code allocuvmvm_impl(struct vm_impl* vm, pde_t* pgdir, uint oldsz, uint newsz, __code next(...)) {
+
+    goto allocuvm_check_newszvm_impl(vm, pgdir, oldsz, newsz, next(...));
+}
+
+__code clearpteuvm_impl(struct vm_impl* vm, pde_t* pgdir, char* uva,  __code next(...)) {
+
+    goto clearpteu_check_ptevm_impl(vm, pgdir, uva, next(...));
+}
+
+__code copyuvmvm_impl(struct vm_impl* vm, pde_t* pgdir, uint sz, __code next(...)) {
+
+    goto copyuvm_check_nullvm_impl(vm, pgdir, sz, __code next(...));
+}
+
+__code uva2kavm_impl(struct vm_impl* vm, pde_t* pgdir, char* uva, __code next(...)) {
+
+    goto uva2ka_check_pe_types(vm, pgdir, uva, next(...));
+}
+
+__code copyoutvm_impl(struct vm_impl* vm, pde_t* pgdir, uint va, void* pp, uint len, __code next(...)) {
+
+    vm->buf = (char*) pp;
+
+    goto copyout_loopvm_impl(vm, pgdir, va, pp, len, va0, pa0, next(...));
+}
+
+__code paging_intvm_impl(struct vm_impl* vm, uint phy_low, uint phy_hi, __code next(...)) {
+
+    goto paging_intvmvm_impl(vm, phy_low, phy_hi, next(...));
+}
+
+__code vm_void_ret(struct vm_impl* vm) {
+    return;
+}
+
+
+\end{lstlisting}
+
+
+\section{インターフェース内の private メソッド}
+インターフェースで定義した Code Gear 以外の Code Gaer も記述することができる。
+この Code Gear は基本的にインターフェースで指定された Code Gear 内からのみ継続されるため、
+Java の private メソッドのように扱われる。
+
+
+
+\begin{lstlisting}[frame=lrbt,label=impl_vm_privateh,caption={\footnotesize vm private のヘッダーファイル}]
+
+typedef struct vm_impl<Impl, Isa> impl vm{
+    union Data* vm_impl;
+    uint i;
+    pte_t* pte;
+    uint sz;
+    pde_t* pgdir;
+    char* addr;
+    struct inode* ip;
+    uint offset;
+    uint pa;
+    uint n;
+    uint oldsz;
+    uint newsz;
+    uint a;
+    int ret;
+    char* mem;
+    char* uva;
+    pde_t* d;
+    uint ap;
+    uint phy_low;
+    uint phy_hi;
+    uint va;
+    void* pp;
+    uint len;
+    char* buf;
+    char* pa0;
+    uint va0;
+    proc_struct* p;
+    char* init;
+
+    __code kpt_alloc_check_impl(Type* vm_impl, __code next(...));
+    __code loaduvm_ptesize_check(Type* vm_impl, __code next(int ret, ...));
+    __code loaduvm_loop(Type* vm_impl, uint i, pte_t* pte, uint sz, __code next(int ret, ...));
+    __code allocuvm_check_newsz(Type* vm_impl, pde_t* pgdir, uint oldsz, uint newsz, __code next(...));
+    __code allocuvm_loop(Type* vm_impl, pde_t* pgdir, uint oldsz, uint newsz, uint a, __code next(...));
+    __code copyuvm_check_null(Type* vm_impl, pde_t* pgdir, uint sz, __code next(...));
+    __code copyuvm_loop(Type* vm_impl,pde_t* pgdir, uint sz, pde_t* d, pte_t* pte, uint pa, uint i, uint ap, char* mem, __code next(int ret, ...));
+    __code clearpteu_check_ptevm_impl(Type* vm_impl, pde_t* pgdir, char* uva,  __code next(...));
+    __code uva2ka_check_pe_types(Type* vm_impl, pde_t* pgdir, char* uva, __code next(...));
+    __code paging_intvm_impl(Type* vm_impl, uint phy_low, uint phy_hi, __code next(...));
+    __code copyout_loopvm_impl(Type* vm_impl, pde_t* pgdir, uint va, void* pp, uint len, __code next(...));
+    __code switchuvm_check_pgdirvm_impl(struct vm_impl* vm_impl, struct proc* p, __code next(...));
+    __code init_inituvm_check_sz(struct vm_impl* vm_impl, pde_t* pgdir, char* init, uint sz, __code next(...));
+    __code void_ret(Type* vm_impl);
+    __code next(...);
+} vm_impl;
+
+\end{lstlisting}
+
+\begin{lstlisting}[frame=lrbt,label=impl_vm_private,caption={\footnotesize vm private の実装}]
+#include "../../context.h"
+#interface "vm.h"
+
+vm* createvm_impl(struct Context* cbc_context) {
+    struct vm* vm  = new vm();
+    struct vm_impl* vm_impl = new vm_impl();
+    vm->vm = (union Data*)vm_impl;
+    vm_impl->vm_impl = NULL;
+    vm_impl->i  = 0;
+    vm_impl->pte = NULL;
+    vm_impl->sz  = 0;
+    vm_impl->loaduvm_ptesize_check = C_loaduvm_ptesize_checkvm_impl;
+    vm_impl->loaduvm_loop = C_loaduvm_loopvm_impl;
+    vm_impl->allocuvm_check_newsz = C_allocuvm_check_newszvm_impl;
+    vm_impl->allocuvm_loop = C_allocuvm_loopvm_impl;
+    vm_impl->copyuvm_check_null = C_copyuvm_check_nullvm_impl;
+    vm_impl->copyuvm_loop = C_copyuvm_loopvm_impl;
+    vm_impl->uva2ka_check_pe_types = C_uva2ka_check_pe_types;
+    vm_impl->paging_intvm_impl = C_paging_intvmvm_impl;
+    vm_impl->copyout_loopvm_impl = C_copyout_loopvm_impl;
+    vm_impl->switchuvm_check_pgdirvm_impl = C_switchuvm_check_pgdirvm_impl;
+    vm_impl->init_inituvm_check_sz = C_init_inituvm_check_sz;
+    vm->void_ret  = C_vm_void_ret;
+    vm->init_vmm = C_init_vmmvm_impl;
+    vm->kpt_freerange = C_kpt_freerangevm_impl;
+    vm->kpt_alloc = C_kpt_allocvm_impl;
+    vm->switchuvm = C_switchuvmvm_impl;
+    vm->init_inituvm = C_init_inituvmvm_impl;
+    vm->loaduvm = C_loaduvmvm_impl;
+    vm->allocuvm = C_allocuvmvm_impl;
+    vm->clearpteu = C_clearpteuvm_impl;
+    vm->copyuvm = C_copyuvmvm_impl;
+    vm->uva2ka = C_uva2kavm_impl;
+    vm->copyout = C_copyoutvm_impl;
+    vm->paging_int = C_paging_intvm_impl;
+    return vm;
+}
+
+extern struct {
+    struct spinlock lock;
+    struct run *freelist;
+} kpt_mem;
+
+__code init_vmmvm_impl(struct vm_impl* vm,__code next(...)) {
+    initlock(&kpt_mem.lock, "vm");
+    kpt_mem.freelist = NULL;
+
+    goto next(...);
+}
+
+extern struct run {
+    struct run *next;
+};
+
+static void _kpt_free (char *v)
+{
+    struct run *r;
+
+    r = (struct run*) v;
+    r->next = kpt_mem.freelist;
+    kpt_mem.freelist = r;
+}
+
+__code kpt_freerangevm_impl(struct vm_impl* vm, uint low, uint hi, __code next(...)) {
+
+   if (low < hi) {
+     _kpt_free((char*)low);
+     goto kpt_freerangevm_impl(vm, low + PT_SZ, hi, next(...));
+
+   }
+  goto next(...);
+}
+__code kpt_allocvm_impl(struct vm_impl* vm, __code next(...)) {
+  acquire(&kpt_mem.lock);
+
+  goto kpt_alloc_check_impl(vm_impl, next(...));
+}
+
+typedef struct proc proc;
+__code switchuvmvm_impl(struct vm_impl* vm , struct proc* p, __code next(...)) { //:skip
+
+    goto switchuvm_check_pgdirvm_impl(...);
+}
+
+__code init_inituvmvm_impl(struct vm_impl* vm, pde_t* pgdir, char* init, uint sz, __code next(...)) {
+
+    Gearef(cbc_context, vm_impl)->pgdir = pgdir;
+    Gearef(cbc_context, vm_impl)->init = init;
+    Gearef(cbc_context, vm_impl)->sz = sz;
+    Gearef(cbc_context, vm_impl)->next = next;
+    goto init_inituvm_check_sz(vm, pgdir, init, sz, next(...));
+}
+
+__code loaduvmvm_impl(struct vm_impl* vm, pde_t* pgdir, char* addr, struct inode* ip, uint offset, uint sz,  __code next(...)) {
+    Gearef(cbc_context, vm_impl)->pgdir = pgdir;
+    Gearef(cbc_context, vm_impl)->addr = addr;
+    Gearef(cbc_context, vm_impl)->ip = ip;
+    Gearef(cbc_context, vm_impl)->offset = offset;
+    Gearef(cbc_context, vm_impl)->sz = sz;
+    Gearef(cbc_context, vm_impl)->next = next;
+
+    goto loaduvm_ptesize_checkvm_impl(vm, next(...));
+}
+
+__code allocuvmvm_impl(struct vm_impl* vm, pde_t* pgdir, uint oldsz, uint newsz, __code next(...)) {
+
+    goto allocuvm_check_newszvm_impl(vm, pgdir, oldsz, newsz, next(...));
+}
+
+__code clearpteuvm_impl(struct vm_impl* vm, pde_t* pgdir, char* uva,  __code next(...)) {
+
+    goto clearpteu_check_ptevm_impl(vm, pgdir, uva, next(...));
+}
+
+__code copyuvmvm_impl(struct vm_impl* vm, pde_t* pgdir, uint sz, __code next(...)) {
+
+    goto copyuvm_check_nullvm_impl(vm, pgdir, sz, __code next(...));
+}
+
+__code uva2kavm_impl(struct vm_impl* vm, pde_t* pgdir, char* uva, __code next(...)) {
+
+    goto uva2ka_check_pe_types(vm, pgdir, uva, next(...));
+}
+
+__code copyoutvm_impl(struct vm_impl* vm, pde_t* pgdir, uint va, void* pp, uint len, __code next(...)) {
+
+    vm->buf = (char*) pp;
+
+    goto copyout_loopvm_impl(vm, pgdir, va, pp, len, va0, pa0, next(...));
+}
+
+__code paging_intvm_impl(struct vm_impl* vm, uint phy_low, uint phy_hi, __code next(...)) {
+
+    goto paging_intvmvm_impl(vm, phy_low, phy_hi, next(...));
+}
+
+__code vm_void_ret(struct vm_impl* vm) {
+    return;
+}
+
+\end{lstlisting}
+
+
+\section{dummy による実行}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/impl_paging.tex	Fri Jan 31 18:02:14 2020 +0900
@@ -0,0 +1,6 @@
+\chapter{Paging の書き換え}
+
+\section{Paging の書き換え} 
+ Xv6 では実メモリ(Physical memory) から仮想メモリ(Virtual memory)の変換を vm.c で行なっている。 
+vm.c を CbC で書き換えていく。 
+
--- a/paper/master_paper.aux	Thu Jan 30 20:15:10 2020 +0900
+++ b/paper/master_paper.aux	Fri Jan 31 18:02:14 2020 +0900
@@ -21,20 +21,26 @@
 \@writefile{toc}{\contentsline {section}{\numberline {3.2}system call}{8}\protected@file@percent }
 \newlabel{syscall_list}{{3.1}{8}}
 \@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}\footnotesize  xv6 のシステムコールのリスト}{8}\protected@file@percent }
-\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}CbC インターフェース}{10}\protected@file@percent }
+\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}CbCXv6 での Paging}{10}\protected@file@percent }
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {section}{\numberline {4.1}Xv6 を元にした Gears OS の実装}{10}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {4.2}Paging}{10}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {4.3}User Space で Paging をする利点}{10}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {4.4}Paging の書き換え}{10}\protected@file@percent }
+\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}CbC インターフェース}{11}\protected@file@percent }
 \@writefile{lof}{\addvspace {10\p@ }}
 \@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {4.1}インターフェースの定義}{10}\protected@file@percent }
-\newlabel{syscall_list}{{4.1}{10}}
-\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.1}\footnotesize  vm のインターフェース}{10}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{\numberline {4.2}インターフェースの実装}{11}\protected@file@percent }
-\newlabel{syscall_list}{{4.2}{11}}
-\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.2}\footnotesize  vm のインターフェース}{11}\protected@file@percent }
-\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}CbCXv6 での Paging の書き換え}{15}\protected@file@percent }
-\@writefile{lof}{\addvspace {10\p@ }}
-\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {5.1}Xv6 を元にした Gears OS の実装}{15}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{\numberline {5.2}Paging}{15}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{\numberline {5.3}User Space で Paging をする利点}{15}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{\numberline {5.4}Paging の書き換え}{16}\protected@file@percent }
-\@writefile{toc}{\contentsline {chapter}{付録}{16}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {5.1}インターフェースの定義}{11}\protected@file@percent }
+\newlabel{interface}{{5.1}{11}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.1}\footnotesize  vm のインターフェース}{11}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {5.2}インターフェースの実装}{12}\protected@file@percent }
+\newlabel{impl_vm}{{5.2}{12}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.2}\footnotesize  vm インターフェースの実装}{12}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {5.3}インターフェース内の private メソッド}{15}\protected@file@percent }
+\newlabel{impl_vm_privateh}{{5.3}{15}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.3}\footnotesize  vm private のヘッダーファイル}{15}\protected@file@percent }
+\newlabel{impl_vm_private}{{5.4}{17}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.4}\footnotesize  vm private の実装}{17}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {5.4}dummy による実行}{20}\protected@file@percent }
+\@writefile{toc}{\contentsline {chapter}{付録}{20}\protected@file@percent }
--- a/paper/master_paper.log	Thu Jan 30 20:15:10 2020 +0900
+++ b/paper/master_paper.log	Fri Jan 31 18:02:14 2020 +0900
@@ -1,4 +1,4 @@
-This is e-pTeX, Version 3.14159265-p3.8.2-190131-2.6 (utf8.euc) (TeX Live 2019) (preloaded format=platex 2020.1.16)  30 JAN 2020 19:56
+This is e-pTeX, Version 3.14159265-p3.8.2-190131-2.6 (utf8.euc) (TeX Live 2019) (preloaded format=platex 2020.1.16)  31 JAN 2020 16:55
 entering extended mode
  restricted \write18 enabled.
  file:line:error style messages enabled.
@@ -216,11 +216,7 @@
 
 
 Writing index file master_paper.idx
-(./master_paper.aux
-
-LaTeX Warning: Label `syscall_list' multiply defined.
-
-)
+(./master_paper.aux)
 \openout1 = `master_paper.aux'.
 
 LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 65.
@@ -393,30 +389,27 @@
 第 3 章(8ページ)
 [8
 
-]) (./cbc_interface.tex [9]
+]) (./Paging.tex [9]
 第 4 章(10ページ)
-[10
+) (./cbc_interface.tex [10
 
-] [11] [12] [13]) (./Paging.tex [14]
-第 5 章(15ページ)
-) [15
+]
+第 5 章(11ページ)
+[11
 
-] [16] (./master_paper.aux)
+] [12] [13] [14] [15] [16] [17] [18]) [19] [20] (./master_paper.aux)
 
 LaTeX Font Warning: Size substitutions with differences
 (Font)              up to 1.28pt have occurred.
 
-
-LaTeX Warning: There were multiply-defined labels.
-
  ) 
 Here is how much of TeX's memory you used:
- 6309 strings out of 493985
- 89411 string characters out of 6166648
- 330160 words of memory out of 5000000
- 10628 multiletter control sequences out of 15000+600000
+ 6313 strings out of 493985
+ 89466 string characters out of 6166648
+ 368164 words of memory out of 5000000
+ 10632 multiletter control sequences out of 15000+600000
  16577 words of font info for 84 fonts, out of 8000000 for 9000
  107 hyphenation exceptions out of 8191
  38i,11n,36p,411b,1817s stack positions out of 5000i,500n,10000p,200000b,80000s
 
-Output written on master_paper.dvi (23 pages, 65180 bytes).
+Output written on master_paper.dvi (27 pages, 96688 bytes).
--- a/paper/master_paper.lol	Thu Jan 30 20:15:10 2020 +0900
+++ b/paper/master_paper.lol	Fri Jan 31 18:02:14 2020 +0900
@@ -1,4 +1,6 @@
 \contentsline {lstlisting}{./src/context.h}{4}%
 \contentsline {lstlisting}{\numberline {3.1}\footnotesize xv6 のシステムコールのリスト}{8}%
-\contentsline {lstlisting}{\numberline {4.1}\footnotesize vm のインターフェース}{10}%
-\contentsline {lstlisting}{\numberline {4.2}\footnotesize vm のインターフェース}{11}%
+\contentsline {lstlisting}{\numberline {5.1}\footnotesize vm のインターフェース}{11}%
+\contentsline {lstlisting}{\numberline {5.2}\footnotesize vm インターフェースの実装}{12}%
+\contentsline {lstlisting}{\numberline {5.3}\footnotesize vm private のヘッダーファイル}{15}%
+\contentsline {lstlisting}{\numberline {5.4}\footnotesize vm private の実装}{17}%
Binary file paper/master_paper.pdf has changed
Binary file paper/master_paper.synctex.gz has changed
--- a/paper/master_paper.tex	Thu Jan 30 20:15:10 2020 +0900
+++ b/paper/master_paper.tex	Fri Jan 31 18:02:14 2020 +0900
@@ -97,8 +97,8 @@
  \input{memory_manage.tex}
 \input{GearsOS.tex}
 \input{Xv6.tex}
+\input{Paging.tex}
 \input{cbc_interface.tex}
-\input{Paging.tex}
 
 
 % 
--- a/paper/master_paper.toc	Thu Jan 30 20:15:10 2020 +0900
+++ b/paper/master_paper.toc	Fri Jan 31 18:02:14 2020 +0900
@@ -6,12 +6,14 @@
 \contentsline {chapter}{\numberline {第3章}Xv6}{8}%
 \contentsline {section}{\numberline {3.1}Kernel Space と User Space}{8}%
 \contentsline {section}{\numberline {3.2}system call}{8}%
-\contentsline {chapter}{\numberline {第4章}CbC インターフェース}{10}%
-\contentsline {section}{\numberline {4.1}インターフェースの定義}{10}%
-\contentsline {section}{\numberline {4.2}インターフェースの実装}{11}%
-\contentsline {chapter}{\numberline {第5章}CbCXv6 での Paging の書き換え}{15}%
-\contentsline {section}{\numberline {5.1}Xv6 を元にした Gears OS の実装}{15}%
-\contentsline {section}{\numberline {5.2}Paging}{15}%
-\contentsline {section}{\numberline {5.3}User Space で Paging をする利点}{15}%
-\contentsline {section}{\numberline {5.4}Paging の書き換え}{16}%
-\contentsline {chapter}{付録}{16}%
+\contentsline {chapter}{\numberline {第4章}CbCXv6 での Paging}{10}%
+\contentsline {section}{\numberline {4.1}Xv6 を元にした Gears OS の実装}{10}%
+\contentsline {section}{\numberline {4.2}Paging}{10}%
+\contentsline {section}{\numberline {4.3}User Space で Paging をする利点}{10}%
+\contentsline {section}{\numberline {4.4}Paging の書き換え}{10}%
+\contentsline {chapter}{\numberline {第5章}CbC インターフェース}{11}%
+\contentsline {section}{\numberline {5.1}インターフェースの定義}{11}%
+\contentsline {section}{\numberline {5.2}インターフェースの実装}{12}%
+\contentsline {section}{\numberline {5.3}インターフェース内の private メソッド}{15}%
+\contentsline {section}{\numberline {5.4}dummy による実行}{20}%
+\contentsline {chapter}{付録}{20}%
--- a/thsis_paging.mm	Thu Jan 30 20:15:10 2020 +0900
+++ b/thsis_paging.mm	Fri Jan 31 18:02:14 2020 +0900
@@ -4,44 +4,73 @@
 <node CREATED="1580207637653" ID="ID_721168585" MODIFIED="1580207641017" POSITION="right" TEXT="&#x82f1;&#x6587;&#x30bf;&#x30a4;&#x30c8;&#x30eb;">
 <node CREATED="1580207641694" ID="ID_182987953" MODIFIED="1580207649805" TEXT="Rewriting CbCXv6 by CbC interface "/>
 </node>
-<node CREATED="1578979732696" ID="ID_457372106" MODIFIED="1580108656805" POSITION="right" TEXT="OS &#x306e;&#x30e1;&#x30e2;&#x30ea;&#x7ba1;&#x7406;"/>
-<node CREATED="1578979768846" ID="ID_738890313" MODIFIED="1580292293845" POSITION="right" TEXT="CbC &#x3092;&#x4f7f;&#x3063;&#x305f; Gears OS &#x306e;&#x958b;&#x767a;">
-<node CREATED="1580108790756" ID="ID_1503553728" MODIFIED="1580108794363" TEXT="CbC">
+<node CREATED="1578979732696" ID="ID_457372106" MODIFIED="1580108656805" POSITION="right" TEXT="OS &#x306e;&#x30e1;&#x30e2;&#x30ea;&#x7ba1;&#x7406;">
+<node CREATED="1580460373935" ID="ID_1062193517" MODIFIED="1580460419393" TEXT="&#x30bf;&#x30a4;&#x30c8;&#x30eb;&#x7684;&#x306b;&#x30e1;&#x30e2;&#x30ea;&#x7ba1;&#x7406;&#x3088;&#x308a;&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30d5;&#x30a7;&#x30fc;&#x30b9;&#x306e;&#x8aac;&#x660e;&#x3059;&#x308b;&#x3079;&#x304d;&#xff1f;">
+<icon BUILTIN="help"/>
+</node>
+</node>
+<node CREATED="1578979768846" ID="ID_738890313" MODIFIED="1580457375399" POSITION="right" TEXT="CbC &#x306b;&#x3088;&#x308b; Gears OS &#x306e;&#x958b;&#x767a;">
+<node CREATED="1580108790756" ID="ID_1503553728" MODIFIED="1580460450005" TEXT="CbC">
+<icon BUILTIN="idea"/>
 <node CREATED="1580112360401" ID="ID_614891804" MODIFIED="1580112368387" TEXT="&#x8a18;&#x8ff0;&#x4f8b;"/>
 <node CREATED="1580112406576" ID="ID_174277035" MODIFIED="1580112413544" TEXT="Code Gear &#x306e;&#x7d99;&#x7d9a;&#x9077;&#x79fb;&#x56f3;"/>
 </node>
 <node CREATED="1580108797610" ID="ID_1365788482" MODIFIED="1580108810835" TEXT="Code Gear, Data Gear"/>
 <node CREATED="1580107798502" ID="ID_1870725834" MODIFIED="1580107827464" TEXT="Meta &#x306e;&#x8aac;&#x660e;&#x3068;&#x9077;&#x79fb;&#x56f3;"/>
 <node CREATED="1580107483687" ID="ID_1285374455" MODIFIED="1580107511777" TEXT="Context"/>
-<node CREATED="1580188243030" ID="ID_1781662530" MODIFIED="1580188249498" TEXT="Meta Computation"/>
+<node CREATED="1580188243030" ID="ID_1781662530" MODIFIED="1580460456622" TEXT="Meta Computation">
+<icon BUILTIN="idea"/>
+</node>
 </node>
 <node CREATED="1580107585579" ID="ID_1626415670" MODIFIED="1580292597646" POSITION="right" TEXT="Xv6">
-<node CREATED="1580284555449" ID="ID_1964121459" MODIFIED="1580284568230" TEXT="&#x69cb;&#x9020;&#x56f3;&#x4eca;&#x3068;&#x30ba;&#x30ec;&#x3042;&#x308b;&#x304b;&#x78ba;&#x8a8d;">
+<node CREATED="1580457293680" ID="ID_740048501" MODIFIED="1580460460858" TEXT="Xv6&#x306e;&#x69cb;&#x6210;">
+<icon BUILTIN="idea"/>
+<node CREATED="1580284555449" ID="ID_1964121459" MODIFIED="1580457956745" TEXT="&#x69cb;&#x9020;&#x56f3;&#x4eca;&#x3068;&#x30ba;&#x30ec;&#x3042;&#x308b;&#x304b;&#x78ba;&#x8a8d;">
 <node CREATED="1580284570046" ID="ID_1019548823" MODIFIED="1580284574054" TEXT="&#x56f3;&#x3092;&#x4e57;&#x3063;&#x3051;&#x308b;"/>
 </node>
+</node>
 <node CREATED="1580292692205" ID="ID_943689954" MODIFIED="1580292710340" TEXT="Kernel &#x3068; User Space"/>
 <node CREATED="1580107690139" ID="ID_749171993" MODIFIED="1580107697425" TEXT="System call"/>
-<node CREATED="1580107648436" ID="ID_422947198" MODIFIED="1580108849848" TEXT="Raspberry Pi &#x306f;&#x5fc5;&#x8981;&#x306a;&#x3044;??">
+<node CREATED="1580107648436" ID="ID_422947198" MODIFIED="1580460464678" TEXT="Raspberry Pi &#x306f;&#x5fc5;&#x8981;&#x306a;&#x3044;??">
+<icon BUILTIN="idea"/>
 <node CREATED="1580206122141" ID="ID_263443526" MODIFIED="1580206132135" TEXT="Console &#x63a5;&#x7d9a;&#x66f8;&#x304f;"/>
 </node>
 </node>
+<node CREATED="1578979785550" ID="ID_1231580257" MODIFIED="1580292616993" POSITION="right" TEXT="CbCXv6&#x3067;&#x306e; Paging&#x306e;&#x66f8;&#x304d;&#x63db;&#x3048;">
+<node CREATED="1580207017522" ID="ID_151270407" MODIFIED="1580207022173" TEXT="&#x3053;&#x3053;&#x3092;&#x4e2d;&#x5fc3;&#x306b;&#x66f8;&#x304f;"/>
+<node CREATED="1580292626674" ID="ID_1799470435" MODIFIED="1580458028287" TEXT="Xv6&#x3092;&#x5143;&#x306b;&#x3057;&#x305f; Geas OS &#x306e;&#x5b9f;&#x88c5;"/>
+<node CREATED="1580108224152" ID="ID_1755476855" MODIFIED="1580108236817" TEXT="paging&#x3068;&#x306f;">
+<node CREATED="1580125177715" ID="ID_1450928772" MODIFIED="1580460468484" TEXT="&#x56f3;">
+<icon BUILTIN="idea"/>
+</node>
+</node>
+<node CREATED="1580108238553" ID="ID_824612440" MODIFIED="1580108266050" TEXT="User Space &#x3067;Paging&#x3092;&#x3059;&#x308b;&#x5229;&#x70b9;"/>
+<node CREATED="1580108966482" ID="ID_509498115" MODIFIED="1580458046578" TEXT="Paging&#x306e;&#x66f8;&#x304d;&#x63db;&#x3048;&#x66f8;&#x304d;&#x63db;&#x3048;&#x306e;&#x5229;&#x70b9;"/>
+</node>
 <node CREATED="1580365409191" ID="ID_421799143" MODIFIED="1580365426704" POSITION="right" TEXT="CbC &#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30d5;&#x30a7;&#x30fc;&#x30b9;">
 <node CREATED="1580206394524" ID="ID_1210911937" MODIFIED="1580206405182" TEXT="&#x307f;&#x3064;&#x304d;&#x3055;&#x3093;&#x306e;&#x6642;&#x306f;&#x5b9f;&#x88c5;&#x3055;&#x308c;&#x3066;&#x306a;&#x3044;"/>
+<node CREATED="1580458062566" ID="ID_379379906" MODIFIED="1580458068975" TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30d5;&#x30a7;&#x30fc;&#x30b9;&#x306e;&#x5b9a;&#x7fa9;"/>
+<node CREATED="1580458070270" ID="ID_1048176895" MODIFIED="1580458083599" TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30d5;&#x30a7;&#x30fc;&#x30b9;&#x306e;&#x5b9f;&#x88c5;"/>
+<node CREATED="1580458084768" ID="ID_934597036" MODIFIED="1580458094443" TEXT="Private &#x30e1;&#x30bd;&#x30c3;&#x30c9;">
+<node CREATED="1580460247324" ID="ID_770535617" MODIFIED="1580460481760" TEXT="private &#x30e1;&#x30bd;&#x30c3;&#x30c9;&#x3063;&#x3066;&#x540d;&#x524d;&#x3067;&#x3044;&#x3044;&#x306e;&#x304b;">
+<icon BUILTIN="idea"/>
 </node>
-<node CREATED="1578979785550" ID="ID_1231580257" MODIFIED="1580292616993" POSITION="right" TEXT="CbCXv6&#x3067;&#x306e; Paging&#x306e;&#x66f8;&#x304d;&#x63db;&#x3048;">
-<node CREATED="1580207017522" ID="ID_151270407" MODIFIED="1580207022173" TEXT="&#x3053;&#x3053;&#x3092;&#x4e2d;&#x5fc3;&#x306b;&#x66f8;&#x304f;"/>
-<node CREATED="1580292626674" ID="ID_1799470435" MODIFIED="1580292634582" TEXT="Xv6&#x306e;&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30d5;&#x30a7;&#x30fc;&#x30b9;"/>
-<node CREATED="1580108224152" ID="ID_1755476855" MODIFIED="1580108236817" TEXT="paging&#x3068;&#x306f;">
-<node CREATED="1580125177715" ID="ID_1450928772" MODIFIED="1580125182834" TEXT="&#x56f3;"/>
+<node CREATED="1580460228146" ID="ID_1863450740" MODIFIED="1580460488099" TEXT="&#x30b3;&#x30fc;&#x30c9;&#x306e;&#x8aac;&#x660e;">
+<icon BUILTIN="idea"/>
+</node>
 </node>
-<node CREATED="1580108238553" ID="ID_824612440" MODIFIED="1580108266050" TEXT="User Space &#x3067;Paging&#x3092;&#x3059;&#x308b;&#x5229;&#x70b9;"/>
-<node CREATED="1580108966482" ID="ID_509498115" MODIFIED="1580206141343" TEXT="&#x8a2d;&#x8a08;"/>
+<node CREATED="1580205101060" ID="ID_1917641207" MODIFIED="1580460473287" TEXT="dummy ">
+<icon BUILTIN="idea"/>
+</node>
+<node CREATED="1580459534075" ID="ID_1367211336" MODIFIED="1580460478171" TEXT="&#x4eca;&#x5f8c;&#x306e;&#x66f8;&#x304d;&#x63db;&#x3048;&#x65b9;&#x91dd;">
+<icon BUILTIN="idea"/>
+</node>
 </node>
-<node CREATED="1578979824759" ID="ID_158250428" MODIFIED="1580205099667" POSITION="right" TEXT="Paging &#x306e;&#x5b9f;&#x88c5;">
-<node CREATED="1580205068380" ID="ID_107594287" MODIFIED="1580205098704" TEXT="Interface&#x90e8;&#x5206;"/>
-<node CREATED="1580205101060" ID="ID_1917641207" MODIFIED="1580207372863" TEXT="dummy "/>
+<node CREATED="1578979830870" ID="ID_251771531" MODIFIED="1580460517354" POSITION="right" TEXT="Paging &#x306e;&#x8a55;&#x4fa1;">
+<icon BUILTIN="idea"/>
 </node>
-<node CREATED="1578979830870" ID="ID_251771531" MODIFIED="1580108616451" POSITION="right" TEXT="Paging &#x306e;&#x8a55;&#x4fa1;"/>
-<node CREATED="1578979834269" ID="ID_614747960" MODIFIED="1580108630937" POSITION="right" TEXT="&#x7d50;&#x8ad6;"/>
+<node CREATED="1578979834269" ID="ID_614747960" MODIFIED="1580460520536" POSITION="right" TEXT="&#x7d50;&#x8ad6;">
+<icon BUILTIN="idea"/>
+</node>
 </node>
 </map>
Binary file thsis_paging.pdf has changed