Mercurial > hg > Papers > 2020 > anatofuz-sigos
comparison paper/anatofuz-sigos.md @ 40:a91592fafeb1
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 06 May 2020 15:56:16 +0900 |
parents | 32453ef823d9 |
children | 7bba4d91db3b |
comparison
equal
deleted
inserted
replaced
39:228d350be33e | 40:a91592fafeb1 |
---|---|
220 struct Err* err = createKernelError(&proc->cbc_context); | 220 struct Err* err = createKernelError(&proc->cbc_context); |
221 goto err->panic(msg); | 221 goto err->panic(msg); |
222 } | 222 } |
223 ``` | 223 ``` |
224 | 224 |
225 Code\ref{src:allocinode_loopcheck}ではループ条件の成立を`if`文で確認し、ループ処理に移行する場合は `allocinode_loop`へ遷移する。 | |
226 ループ条件が満たされなかった場合は、 コンテキストから`panic`に関するCodeGearの集合を取り出し、 集合中の`panic` CodeGearへと遷移する。 | |
227 オリジナルの処理では、 ループ中に`dip->type == 0`が満たされた場合は関数から`return`文により関数から復帰する。 | |
228 CodeGearではCode\ref{src:alloc_loop}内で、 状態が分けられる。 | |
229 この先の継続は、 復帰用のCodeGearかループの先頭である`allocinode_loopcheck`に再帰的に遷移するかになる。 | |
230 | |
231 ``` lab:src:alloc_loop, cap:ループ中に復帰するかどうかの確認をするCodeGear | |
232 __code allocinode_loop(struct fs_impl* fs_impl, uint inum, uint dev, short type, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(...)){ | |
233 bp = bread(dev, IBLOCK(inum)); | |
234 dip = (struct dinode*) bp->data + inum % IPB; | |
235 if(dip->type = 0){ | |
236 goto allocinode_loopexit(fs_impl, inum, dev, sb, bp, dip, next(...)); | |
237 } | |
238 | |
239 brelse(bp); | |
240 inum++; | |
241 goto allocinode_loopcheck(fs_impl, inum, dev, type, sb, bp, dip, next(...)); | |
242 } | |
243 ``` | |
244 | |
245 この継続の分析方法の利点として、 既存のコードのBasic Block単位でCodeGearに変換可能であるため機械的にCodeGearへの変更が可能となる。 | |
246 既存の関数上のアルゴリズムや処理に殆ど変更がなく変更可能であるために、 CodeGearで細分化して表現することは容易となる。 | |
247 しかし従来のxv6の関数呼び出しを元にしたAPIの中でCodeGearに分割しているために、 API内の処理の細分化は可能であるがAPIをつかった処理をCodeGearで適した形で表現できていない。 | |
248 | |
225 | 249 |
226 # CbCを用いた部分的なxv6の書き換え | 250 # CbCを用いた部分的なxv6の書き換え |
227 | 251 |
228 CbCではCodeGear、 DataGearからなる単位を基本とし、 それぞれにメタなGearが付随する。 | 252 CbCではCodeGear、 DataGearからなる単位を基本とし、 それぞれにメタなGearが付随する。 |
229 また実行に必要なCodeGearとDataGearをまとめたcontextというMetaDataGearが存在する。 | 253 また実行に必要なCodeGearとDataGearをまとめたcontextというMetaDataGearが存在する。 |