changeset 4:c0d369375b21

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 17 Apr 2023 13:26:48 +0900
parents 42df4feebde2
children 890dcb9acc8b
files code-mangement.ind main.tex
diffstat 2 files changed, 156 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/code-mangement.ind	Sat Apr 15 16:30:15 2023 +0900
+++ b/code-mangement.ind	Mon Apr 17 13:26:48 2023 +0900
@@ -94,6 +94,66 @@
 この大域のcodeGear DBは、kernelを含めたすべてのcodeGearに対するもので全部で共有される。つまり、
 あらゆるversionを含む共有ライブラリとなる。これは全世界でuniqueなDBとしても良い。
 
+--CbCのcodeGear と GearsAgdaの違い
+
+CbCのcodeGearとdataGearは、普通のCの関数と構造体であり、その意味で不思議なところはない。しかし、
+normal levelではpointerが出てこないのが望ましい。なぜなら、メモリ配置は meta levelの問題で
+プログラムの正しさとは直接関係しないからである。つまり、normal levelでの構造体は List や 木
+など以外の再帰的構造でも直接的なポインタ操作は行わない。meta levelでは、メモリの直接操作
+例えば mallocやfree、あるいは共有データの扱いなどをポインタを通して行う。
+
+meta levelでのポインタ操作は、データ構造に対する操作であり、そのlevelに閉じる限り、
+プログラムの正しさはポインタの実装に依存しない。その意味で、meta codeGear も単なる
+noraml level のcodeGear に過ぎない。meta codeGearの証明あるいは、実装をさらにmeta level
+で行うこともできる。
+
+GearsAgda では、すべてはAgdaの構造体で表現される。これらは変数と項であり、基本的に複製可能
+な項である。その意味で、ポインタを持たないと言ってよい。Listや木の実装を配列と番号で行う
+ことはまったく実用的ではないので、普通に再帰的なデータ構造を使ってよい。ただし、それを
+自分自身の codeGear の再帰呼び出しで行うと、codeGearの実行が有界な時間に閉じなくなる。
+なので、loop は軽量継続を用いて、一旦、外にでることになる。これは、この段階でmeta level的に処理が
+割り込まれることも意味している。
+
+GearsAgda で処理された項は、ContextのdataGearに格納される。また、GearsAgdaのcodeGearは、
+Contextのcode tableに格納される。どちらも、メモリ的には番号で管理されることになる。
+GearsAgda の Context は、その意味で、プロセスのメモリ空間そのものを抽象化したものになっている。
+
+
+つまり、CbCのcodeGearと GearsAgdaは、normal level ではポインタを使わないのだが、
+その意味は、CbCと GearsAgda で若干異なる。CbCでの実装は、GearsAgdaでの実装の持つ
+性質を保存する必要がある。
+
+--Contextを通した dataGearとcodeGearの連携
+
+Gears OSでは、Context はCの構造体であり、一つのContextで使用するdataGearとcodeGearは、そこに格納される。
+複数のContextから、dataGearもcodeGearも共有されることがある。その排他制御は、Gears OSのmeta codeGearに
+よって行われる。
+
+Gears OSは、interfaceという構造体でオブジェクト表現していて、これらには、メソッドを格納する配列がある。
+この配列の添字を他のinterfaceが使用する。なので、interface間の呼び出しは、interfaceを表すdataGearと
+そのメソッドの番号で決定される。
+
+引数は、interface毎に Contextに決まった場所が確保される。これは、通常ではstack上に場所を確保する。
+しかし、CbCでは関数呼び出しはstackを使わないので、このようにする必要がある。これは、もちろん、
+マルチスレッドな実行では破壊されるおそれがあるが、Contextはシングルスレッドで実行することになっている
+ので問題ない。
+
+Contextの切り替えは、codeGearの境目で行われるので、Contextと実行しているcodeGearのcode tableの番号で
+状態が決定する。つまり、Gears OSでは、Task Switchにはレジスタは関係しない。割り込みなどは、codeGearの
+境界と独立に起きるが、それをmeta codeGearが境界で Context switchが起きたのと同じようにすることを
+保証する。これは一種の遅延処理となる。もちろん、影響がないなら、割り込み中にmetaな処理を行ってもよい。
+これは、本来はCPUなどのハードウェアでサポートされるべきかもしれない。
+
+dataGearは、metaな情報として、dataGearの構造定義を番号として持っている。これを使うことにより
+任意のdataGearの表示を正しく行うことができる。この情報を取り扱うことは meta level からでしか
+許されないが、CbC的には特に制限はない。
+
+引数として呼び出される dataGearは、Context上に前もって確保されているが、実行時にallocateされる
+dataGearもContextから参照される pool に確保される。これの管理は meta dataGear (Gears OSのkernel)
+が行う。GearsAgda は、この部分はAgdaが管理するので meta的な管理は行われない。しかし、
+Context を用いた並行実行の場合は、Context上での管理の問題が生じる。
+
+
 --codeGearのlinkage
 
 Gears OSのあらゆるコードは、codeGear DBのコードの組み合わせになる。しかし、そのためには、
@@ -136,6 +196,18 @@
 
 このContext内での offsetと呼び出すcodeGearの番号が一致すれば、Kernel側で整合性の問題はない。
 
+--codeGearのコンパイル方法
+
+現在の Gears OSのcodeGearは、interfaceを含む記述を .cbc に書き、それを CbC に変換している。
+この時に、meta codeGear として stub そして、meta dataGearとして Context の定義が生成される。
+
+Context の定義は Application 毎に異なっているが、全部をそろえることも可能である。この変換は
+Perl script で記述されていて、煩雑になっている。これを codeGear / interface 単位で .o と
+meta dataGearにできれば、全体の構成と、interfaceのコンパイルが簡単になると期待される。
+
+ただし、この場合は、Context の中での引数領域のoffset管理、code tableの初期化、code間の
+遷移を扱う codeGearの番号の指定の書き換えなどが必要となる。
+
 --static linkage
 
 コンパイル時に codeGearの結合が明らかならば、それは一つのcodeGearとしてまとめてよい。Contextへの書き込みもさぼることが
@@ -154,4 +226,14 @@
 
 codeGear DBを実装すれば、かなりの部分を後からロードすることが可能になる。
 
+
 --まとめ
+
+Gears OS と GearsAgda における codeGear の管理方法について考察した。将来的には GearsAgda で記述された
+証明付きinterfaceのコードを CbC に変換し、それを Gears OSで正しさを確認しながら組み合わせて、meta計算の
+変更を可能にしながら実行するシステムを作りたい。
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.tex	Mon Apr 17 13:26:48 2023 +0900
@@ -0,0 +1,74 @@
+\documentclass[twocolumn]{article}
+\usepackage{luatexja}
+\usepackage{fontspec}
+\usepackage{graphicx}
+\usepackage{float}
+\restylefloat{figue}
+\pagestyle{empty}
+
+%\hoffset -1in \addtolength{\hoffset}{20mm}
+%\voffset -1in \addtolength{\voffset}{20mm}
+%\oddsidemargin 0mm
+\topmargin -4mm
+%\headheight 13pt
+%\headsep 15mm
+%\textheight 43\baselineskip \addtolength{\textheight}{\topskip}
+%\textwidth 160mm
+%\marginparsep 3mm
+%\marginparwidth 15mm
+%\footskip \headsep
+\input usepackage.tex
+\begin{document}
+\setmainfont{STIX Math}%
+\setmonofont{STIXGeneralBol}[
+  Scale=MatchLowercase
+] % or whatever font you prefer
+
+\ltjsetparameter{jacharrange={-3}}
+
+% \input tgrindfig.tex
+\bibliographystyle{plain} % for bibliography
+%
+\include{title}
+%\title{}
+% 英文のみのタイトルならば,\title{ ... } とする.
+
+\date{}
+
+% 所属ラベルの定義
+
+% 和文著者名
+\author{
+{河野真治} \\
+琉球大学工学部\\
+{Shinji KONO} \\
+Faculty of Engineering, University of the Ryukyus\\
+}
+
+\maketitle{}
+\thispagestyle{empty}
+\begin{abstract}
+\input{abstract}
+\input{abstract-e}
+\end{abstract}
+
+% {\em 概要 \vspace{0.5cm}}\
+%\begin{center}
+%{\Large
+%\include{title-e}\
+%\include{author-e}} % \hspace{0.7cm}
+%\end{center}
+
+% {     t \Large Abstract}\
+%\include{abstract-e}
+% \\
+% \hspace{0.5cm}
+
+%
+\input 0.tex
+%
+% \input reference.tex
+
+\bibliography{ref}
+\end{document}
+