Mercurial > hg > Papers > 2020 > tobaru-master
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}%
--- 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="英文タイトル"> <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 のメモリ管理"/> -<node CREATED="1578979768846" ID="ID_738890313" MODIFIED="1580292293845" POSITION="right" TEXT="CbC を使った Gears OS の開発"> -<node CREATED="1580108790756" ID="ID_1503553728" MODIFIED="1580108794363" TEXT="CbC"> +<node CREATED="1578979732696" ID="ID_457372106" MODIFIED="1580108656805" POSITION="right" TEXT="OS のメモリ管理"> +<node CREATED="1580460373935" ID="ID_1062193517" MODIFIED="1580460419393" TEXT="タイトル的にメモリ管理よりインターフェースの説明するべき?"> +<icon BUILTIN="help"/> +</node> +</node> +<node CREATED="1578979768846" ID="ID_738890313" MODIFIED="1580457375399" POSITION="right" TEXT="CbC による Gears OS の開発"> +<node CREATED="1580108790756" ID="ID_1503553728" MODIFIED="1580460450005" TEXT="CbC"> +<icon BUILTIN="idea"/> <node CREATED="1580112360401" ID="ID_614891804" MODIFIED="1580112368387" TEXT="記述例"/> <node CREATED="1580112406576" ID="ID_174277035" MODIFIED="1580112413544" TEXT="Code Gear の継続遷移図"/> </node> <node CREATED="1580108797610" ID="ID_1365788482" MODIFIED="1580108810835" TEXT="Code Gear, Data Gear"/> <node CREATED="1580107798502" ID="ID_1870725834" MODIFIED="1580107827464" TEXT="Meta の説明と遷移図"/> <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="構造図今とズレあるか確認"> +<node CREATED="1580457293680" ID="ID_740048501" MODIFIED="1580460460858" TEXT="Xv6の構成"> +<icon BUILTIN="idea"/> +<node CREATED="1580284555449" ID="ID_1964121459" MODIFIED="1580457956745" TEXT="構造図今とズレあるか確認"> <node CREATED="1580284570046" ID="ID_1019548823" MODIFIED="1580284574054" TEXT="図を乗っける"/> </node> +</node> <node CREATED="1580292692205" ID="ID_943689954" MODIFIED="1580292710340" TEXT="Kernel と User Space"/> <node CREATED="1580107690139" ID="ID_749171993" MODIFIED="1580107697425" TEXT="System call"/> -<node CREATED="1580107648436" ID="ID_422947198" MODIFIED="1580108849848" TEXT="Raspberry Pi は必要ない??"> +<node CREATED="1580107648436" ID="ID_422947198" MODIFIED="1580460464678" TEXT="Raspberry Pi は必要ない??"> +<icon BUILTIN="idea"/> <node CREATED="1580206122141" ID="ID_263443526" MODIFIED="1580206132135" TEXT="Console 接続書く"/> </node> </node> +<node CREATED="1578979785550" ID="ID_1231580257" MODIFIED="1580292616993" POSITION="right" TEXT="CbCXv6での Pagingの書き換え"> +<node CREATED="1580207017522" ID="ID_151270407" MODIFIED="1580207022173" TEXT="ここを中心に書く"/> +<node CREATED="1580292626674" ID="ID_1799470435" MODIFIED="1580458028287" TEXT="Xv6を元にした Geas OS の実装"/> +<node CREATED="1580108224152" ID="ID_1755476855" MODIFIED="1580108236817" TEXT="pagingとは"> +<node CREATED="1580125177715" ID="ID_1450928772" MODIFIED="1580460468484" TEXT="図"> +<icon BUILTIN="idea"/> +</node> +</node> +<node CREATED="1580108238553" ID="ID_824612440" MODIFIED="1580108266050" TEXT="User Space でPagingをする利点"/> +<node CREATED="1580108966482" ID="ID_509498115" MODIFIED="1580458046578" TEXT="Pagingの書き換え書き換えの利点"/> +</node> <node CREATED="1580365409191" ID="ID_421799143" MODIFIED="1580365426704" POSITION="right" TEXT="CbC インターフェース"> <node CREATED="1580206394524" ID="ID_1210911937" MODIFIED="1580206405182" TEXT="みつきさんの時は実装されてない"/> +<node CREATED="1580458062566" ID="ID_379379906" MODIFIED="1580458068975" TEXT="インターフェースの定義"/> +<node CREATED="1580458070270" ID="ID_1048176895" MODIFIED="1580458083599" TEXT="インターフェースの実装"/> +<node CREATED="1580458084768" ID="ID_934597036" MODIFIED="1580458094443" TEXT="Private メソッド"> +<node CREATED="1580460247324" ID="ID_770535617" MODIFIED="1580460481760" TEXT="private メソッドって名前でいいのか"> +<icon BUILTIN="idea"/> </node> -<node CREATED="1578979785550" ID="ID_1231580257" MODIFIED="1580292616993" POSITION="right" TEXT="CbCXv6での Pagingの書き換え"> -<node CREATED="1580207017522" ID="ID_151270407" MODIFIED="1580207022173" TEXT="ここを中心に書く"/> -<node CREATED="1580292626674" ID="ID_1799470435" MODIFIED="1580292634582" TEXT="Xv6のインターフェース"/> -<node CREATED="1580108224152" ID="ID_1755476855" MODIFIED="1580108236817" TEXT="pagingとは"> -<node CREATED="1580125177715" ID="ID_1450928772" MODIFIED="1580125182834" TEXT="図"/> +<node CREATED="1580460228146" ID="ID_1863450740" MODIFIED="1580460488099" TEXT="コードの説明"> +<icon BUILTIN="idea"/> +</node> </node> -<node CREATED="1580108238553" ID="ID_824612440" MODIFIED="1580108266050" TEXT="User Space でPagingをする利点"/> -<node CREATED="1580108966482" ID="ID_509498115" MODIFIED="1580206141343" TEXT="設計"/> +<node CREATED="1580205101060" ID="ID_1917641207" MODIFIED="1580460473287" TEXT="dummy "> +<icon BUILTIN="idea"/> +</node> +<node CREATED="1580459534075" ID="ID_1367211336" MODIFIED="1580460478171" TEXT="今後の書き換え方針"> +<icon BUILTIN="idea"/> +</node> </node> -<node CREATED="1578979824759" ID="ID_158250428" MODIFIED="1580205099667" POSITION="right" TEXT="Paging の実装"> -<node CREATED="1580205068380" ID="ID_107594287" MODIFIED="1580205098704" TEXT="Interface部分"/> -<node CREATED="1580205101060" ID="ID_1917641207" MODIFIED="1580207372863" TEXT="dummy "/> +<node CREATED="1578979830870" ID="ID_251771531" MODIFIED="1580460517354" POSITION="right" TEXT="Paging の評価"> +<icon BUILTIN="idea"/> </node> -<node CREATED="1578979830870" ID="ID_251771531" MODIFIED="1580108616451" POSITION="right" TEXT="Paging の評価"/> -<node CREATED="1578979834269" ID="ID_614747960" MODIFIED="1580108630937" POSITION="right" TEXT="結論"/> +<node CREATED="1578979834269" ID="ID_614747960" MODIFIED="1580460520536" POSITION="right" TEXT="結論"> +<icon BUILTIN="idea"/> +</node> </node> </map>