# HG changeset patch # User Kaito Tokumori # Date 1398168892 -32400 # Node ID 911929089c1975f8b02182e628c4941e751ea77b # Parent 4025f8246a05bc599234b44d5726c8d4d8b20d0f cut some unnecessary words diff -r 4025f8246a05 -r 911929089c19 2014_sigos.pdf Binary file 2014_sigos.pdf has changed diff -r 4025f8246a05 -r 911929089c19 2014_sigos.tex --- a/2014_sigos.tex Tue Apr 22 19:48:01 2014 +0900 +++ b/2014_sigos.tex Tue Apr 22 21:14:52 2014 +0900 @@ -439,11 +439,9 @@ \section{まとめと今後の課題} 今回の実装により, LLVM/clang を CbC のコンパイルに利用できるようになった. また, 環境付き継続を GCC の拡張構文である nested function でなく, setjmp/longjmp を用いて実装することに成功した. これより, 今後 nested function をサポートしないコンパイル上に CbC コンパイラを実装する必要がでてきた場合でも実装可能である. -今後は, data segment の設計及び実装がある. code segment が処理を表す単位であるのに対し, data segment は処理に必要なデータに対応する. 我々は code segment と data segment の組みがひとつの task に相当すると考えており, data segment は, 内部表現と外部表現を持つ, priority を持ち処理順序の切り替えが可能, task の待ち合わせ制御に依存される, といった要件を満たすように設計されるべきであると考えている. +今後の課題の課題として, data segment の設計及び実装と環境付き継続の実装をアセンブリコードを用いて行うことに二つがある. data segment について, code segment が処理を表す単位であるのに対し data segment は処理に必要なデータに対応する. 我々は code segment と data segment の組みがひとつの task に相当すると考えており, data segment は, 内部表現と外部表現を持つ, priority を持ち処理順序の切り替えが可能, task の待ち合わせ制御に依存される, といった要件を満たすように設計されるべきであると考えている. -二つ目の課題として, 環境付き継続の実装をアセンブリコードを用いて行うというものがある. 今回の実装では setjmp/longjmp を用いたが, インラインアセンブリを用いてアセンブリコードを直接書き出すことで速度の向上が見込めるのではないかと考えている. GCC, LLVM はそれぞれ nested function, setjmp/longjmp と言った機能を利用して環境付き継続を実装しているが, Micro-C では直接対応するアセンブリコードを出力する. -%Micro-Cでは環境付き継続を用いると元の環境のアドレスをベースポインタに代入する mov 命令, ベースポインタの値をスタックポインタに代入する mov 命令, そして元の環境に帰るための jmp 命令の三つで済む. -この方法だと各アーキテクチャ毎に対応しなければならないという欠点はあるが, 他の実装方法よりも楽に実装でき, 速度も勝るだろうと考えている. +環境付き継続のアセンブリコードを用いた実装について, 今回の実装では setjmp/longjmp を用いたが, インラインアセンブリを用いてアセンブリコードを直接書き出すことで速度の向上が見込めるのではないかと考えている. GCC, LLVM はそれぞれ nested function, setjmp/longjmp と言った機能を利用して環境付き継続を実装しているが, Micro-C では直接対応するアセンブリコードを出力する. この方法だと各アーキテクチャ毎に対応しなければならないという欠点はあるが, 他の実装方法よりも楽に実装でき, 速度も勝るだろうと考えている. \nocite{yogi:2008a, nobu:2011a, LLVMIR, LLVM, clang, clangAPI} \bibliographystyle{junsrt}