memo0001
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Kの開発メモ #0001
-(by [[K]], 2013.03.12)
-ここは川合の開発の進捗などをレポートするところです。
--当初はその予定だったが、今ではむしろ主たる目的は[[K]]の...
** 2013.03.12 Tue
-諸事情により、このプロジェクトを早期に立ち上げる必要が出...
-以下のページは内容が難しすぎるので、読まないでください o...
--[[page0001]], [[page0002]], [[page0004]]
-ええとそれで、freeしたメモリを再利用できてしまう問題はど...
--よし、こうしよう → [[page0006]]
-基本的な考え方として、たとえばGCみたいに、「メモリなんて...
-僕としては、「プログラマのやることを減らす」方向ではなく...
-関数呼び出しについても考え始めました。 → [[page0007]]
** 2013.03.16 Sat
-やっぱり最初からJITしようかなと思案中・・・。
-インタプリタだと作りやすいけど、すごく遅くなってそれで可...
** 2013.03.19 Tue
-クラックするプログラムの多くは、まずみんなシェルを取って...
-いやもちろん、これは出発点だ。本当にルートになってやりた...
-もう少し考えた!
-唐突だけど、ブラウザのプラグインみたいなものを考えてみる...
-そうすると問題が出てくる。プラグインが悪さをしたらどうし...
-しかしきっとどこかでミスる。・・・そしてそこがセキュリテ...
-これを防ぐにはどうしたらいいだろう。そう、独自の言語処理...
-しかし僕は逆で行く。子プロセスでいいんだ。子プロセスがい...
-僕は独自言語を作ることそのものは否定しない。プログラム言...
-つまり何が言いたいのかと言えば、「プラグイン機構は子プロ...
-親プロセスは以下のことを制御できれば、プラグイン機構を子...
--関数ポインタを渡せる(親プロセスの機能を呼び出すため)。
--渡していないオブジェクトには絶対にアクセスできない。
--システムコールが使えないか、もしくは使えるんだけど制限...
---使ってもよいシステムコール、呼び出し回数、アクセス権など
--タイムアウト的なものがあり、いつまでも帰ってこないよう...
---これは実時間などではなく、分岐命令の実行回数を使いたい
--使用できるリソース量も上限がある。
---メモリ、ファイル、など
-ディレクトリパスについて。
--フルパスを許さない。これを許してしまえばどこへでも行け...
--相対パスについて、..で親に戻る処理はAPIで行い、APIはど...
-システムコールについて。
--システムコールするにはハンドルが必須。まずハンドルがも...
#br
-とりあえず、JITできるプログラムを作ってみた。まだNOPと整...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu000a.zip
---x86アセンブラとか第二世代OSASKとかいろいろ余計なものが...
** 2013.03.21 Thu
-(1) neriさんがJavaやC++の例外(try-catch)について書いて...
--http://nerry.hatenablog.com/entry/2013/03/20/192613
-僕は[[page0009]]の(9)でmallocやfopenなどのエラー処理につ...
-「例外」は結局、プログラマにエラー処理を忘れさせないため...
-一方で僕が今回考えた方法はどうでしょうか。まず出発点とし...
-このmy_fopenを使っている限り、僕はこいつがもしかしたらNU...
-これで思ったのは、実はmy_fopenこそデフォルトで、fopenの...
-そもそもみんなそんなにエラー処理をしたいのでしょうか?理...
-僕のやっていることは、昔のBASICの「ON ERROR GOTO」命令を...
-結局僕は何も新しいことを考えたわけではなくて、昔のやり方...
#br
-(2) 現状のOSECPUは実レジスタを仮想レジスタに一つも割り当...
-JITにするかしないかは多分10倍くらいの性能差があると思い...
#br
-(3) OSECPUの開発に費やせる当面の時間がどのくらいあるかを...
#br
-(4) 今日はもう少し作って、条件分岐ができるようになった。...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu001a.zip
-アセンブラなしでプログラミングするのがつらくなってきたの...
#include "osecpu_asm.h"
/* 0から1万までの和を100万回繰り返す */
OSECPU_HEADER(1);
#define sum R00
#define i R01
#define j R02
#define const0 R30
#define const1 R31
#define const10001 R32
#define const1000000 R33
LOADINT(const0, 0);
LOADINT(const1, 1);
LOADINT(const10001, 10001);
LOADINT(const1000000, 1000000);
FOR(0, j, const0); /* label:0, conter:j, init:const0...
COPYINT(sum, const0);
FOR(1, i, const0);
ADDINT2(sum, i);
NEXT(1, i, const1, const10001); /* label:1, cont...
NEXT(0, j, const1, const1000000);
#if 0 /* 以下のように書いてもよい */
COPYINT(j, const0);
LABEL(0);
COPYINT(sum, const0);
COPYINT(i, const0);
LABEL(1);
ADDINT2(sum, i);
ADDINT2(i, const1);
CMPJNE(i, const10001, 1); /* if (i != const10001) go...
ADDINT2(j, const1);
CMPJNE(j, const1000000, 0); /* if (j != const1000000...
#endif
-さらにもう少しだけ改良して、フラグレジスタ+条件ジャンプ...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu002a.zip
-次はいよいよメモリアクセスかな。これはいろいろ鬼門。・・...
** 2013.03.22 Fri
-アドレスレジスタって64本も必要かな?さすがにそんなには使...
-pregにはポインタの型も記録されているが、高速危険モードで...
-ポインタの比較にあっては、同型かつ同域であることを確認で...
** 2013.03.23 Sat
-早くメモリアクセスをできるようになりたい。そうすればneri...
** 2013.03.24 Sun
-上記訂正。CLEはARM版やx64版も既にあるんだった。というかW...
--まあもちろんまともに対抗してFPU対応とかARM対応とかDOS(...
-CONDN(Rxx); /* 05 [Rxx] 2バイトプリフィクス */ この命令...
-R3C~R3Eの一時定数レジスタの考え方はわれながら面白い。そ...
--じゃあ、R28~R2FとP1C~P1Fを割り当てよう。
-/* 0D: 0D [imm8] テストコンディションプリフィクス */ こ...
** 2013.03.25 Mon
-(1) neriさんがゼロレジスタについて書いてくれています。
--http://nerry.hatenablog.com/entry/2013/03/22/190030
-これを読んで、ゼロレジスタのことを思い出しました。今まで...
-それでOSECPUにゼロレジスタを導入するかどうか悩んでいます。
--メリット:命令を3個削減できる。命令フォーマットの種類を...
--デメリット:COPYINTの命令長が長くなる。
-いろいろ考えた末、osecpu.cのコードが短くなるようなら採用...
--で、短くなったので採用。
#br
-(2) neriさんがバイトコードのフロントエンド・バックエンド...
--http://nerry.hatenablog.com/entry/2013/03/23/203638
-これについてOSECPUの考え方を書いておきます。OSECPUには内...
-そしてこのOSECPUの上にバイトコード変換プログラムを乗っけ...
--というかそれくらい割り切っておかないと、バイトコード体...
-つまりneriさんはすでに上位層まで作っているということです...
#br
-(3) とりあえず今日もがんばった。メモリアクセスつけた。そ...
--003a: 命令を追加した後でosecpu.cを少し整理。411行になる...
--004a: バイトコードのリビジョンを0002にアップ。osecpu.c...
--005a: メモリアクセス命令を突貫工事で追加。仮のAPIも付け...
--006a: cas2nasの存在を前提にアプリを書き直し。すっきりし...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu003a.zip
--http://osecpu.osask.jp/download/osecpu004a.zip
--http://osecpu.osask.jp/download/osecpu005a.zip
--http://osecpu.osask.jp/download/osecpu006a.zip
-もう少し詳しい説明:
--cas2nasというのは、
DB(1,2,3); DB(4,5,6); DB(7,8,9);
--というファイルを
DB 1,2,3
DB 4,5,6
DB 7,8,9
--の3行に書き換えるだけのツールです。本当に大したことはな...
/* 006aのosecpu_asm.hの一部 */
#define DDBE(i) DB(((i)>>24)&0xff,((i)>>1...
#define LABEL(imm) DB(0x01,0x00); DDBE(imm)
#define LOADINT(reg, imm) DB(0x02,reg); DDBE(imm)
#define LOADLBL(preg, imm) DB(0x03,preg); DDBE(imm)
/* 005aのosecpu_asm.hの一部 */
#define LABEL(imm) DB 0x01,0x00,((imm)>>24)&...
#define LOADINT(reg, imm) DB 0x02,reg,((imm)>>24)&0...
#define LOADLBL(preg, imm) DB 0x03,preg,((imm)>>24)&...
--005aがひどいことになっていたのは、アセンブラでは一行にD...
--ちなみにこんな簡単な処理しかしてないのに、cas2nas00a.os...
-(4) プログラムを書いて思ったこと:
--レジスタがたくさんあるっていいなー。x86でスタックを使っ...
--3項形式は、あまり使わないなーと実感。でも僕は3項形式が...
** こめんと欄
#comment
終了行:
* Kの開発メモ #0001
-(by [[K]], 2013.03.12)
-ここは川合の開発の進捗などをレポートするところです。
--当初はその予定だったが、今ではむしろ主たる目的は[[K]]の...
** 2013.03.12 Tue
-諸事情により、このプロジェクトを早期に立ち上げる必要が出...
-以下のページは内容が難しすぎるので、読まないでください o...
--[[page0001]], [[page0002]], [[page0004]]
-ええとそれで、freeしたメモリを再利用できてしまう問題はど...
--よし、こうしよう → [[page0006]]
-基本的な考え方として、たとえばGCみたいに、「メモリなんて...
-僕としては、「プログラマのやることを減らす」方向ではなく...
-関数呼び出しについても考え始めました。 → [[page0007]]
** 2013.03.16 Sat
-やっぱり最初からJITしようかなと思案中・・・。
-インタプリタだと作りやすいけど、すごく遅くなってそれで可...
** 2013.03.19 Tue
-クラックするプログラムの多くは、まずみんなシェルを取って...
-いやもちろん、これは出発点だ。本当にルートになってやりた...
-もう少し考えた!
-唐突だけど、ブラウザのプラグインみたいなものを考えてみる...
-そうすると問題が出てくる。プラグインが悪さをしたらどうし...
-しかしきっとどこかでミスる。・・・そしてそこがセキュリテ...
-これを防ぐにはどうしたらいいだろう。そう、独自の言語処理...
-しかし僕は逆で行く。子プロセスでいいんだ。子プロセスがい...
-僕は独自言語を作ることそのものは否定しない。プログラム言...
-つまり何が言いたいのかと言えば、「プラグイン機構は子プロ...
-親プロセスは以下のことを制御できれば、プラグイン機構を子...
--関数ポインタを渡せる(親プロセスの機能を呼び出すため)。
--渡していないオブジェクトには絶対にアクセスできない。
--システムコールが使えないか、もしくは使えるんだけど制限...
---使ってもよいシステムコール、呼び出し回数、アクセス権など
--タイムアウト的なものがあり、いつまでも帰ってこないよう...
---これは実時間などではなく、分岐命令の実行回数を使いたい
--使用できるリソース量も上限がある。
---メモリ、ファイル、など
-ディレクトリパスについて。
--フルパスを許さない。これを許してしまえばどこへでも行け...
--相対パスについて、..で親に戻る処理はAPIで行い、APIはど...
-システムコールについて。
--システムコールするにはハンドルが必須。まずハンドルがも...
#br
-とりあえず、JITできるプログラムを作ってみた。まだNOPと整...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu000a.zip
---x86アセンブラとか第二世代OSASKとかいろいろ余計なものが...
** 2013.03.21 Thu
-(1) neriさんがJavaやC++の例外(try-catch)について書いて...
--http://nerry.hatenablog.com/entry/2013/03/20/192613
-僕は[[page0009]]の(9)でmallocやfopenなどのエラー処理につ...
-「例外」は結局、プログラマにエラー処理を忘れさせないため...
-一方で僕が今回考えた方法はどうでしょうか。まず出発点とし...
-このmy_fopenを使っている限り、僕はこいつがもしかしたらNU...
-これで思ったのは、実はmy_fopenこそデフォルトで、fopenの...
-そもそもみんなそんなにエラー処理をしたいのでしょうか?理...
-僕のやっていることは、昔のBASICの「ON ERROR GOTO」命令を...
-結局僕は何も新しいことを考えたわけではなくて、昔のやり方...
#br
-(2) 現状のOSECPUは実レジスタを仮想レジスタに一つも割り当...
-JITにするかしないかは多分10倍くらいの性能差があると思い...
#br
-(3) OSECPUの開発に費やせる当面の時間がどのくらいあるかを...
#br
-(4) 今日はもう少し作って、条件分岐ができるようになった。...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu001a.zip
-アセンブラなしでプログラミングするのがつらくなってきたの...
#include "osecpu_asm.h"
/* 0から1万までの和を100万回繰り返す */
OSECPU_HEADER(1);
#define sum R00
#define i R01
#define j R02
#define const0 R30
#define const1 R31
#define const10001 R32
#define const1000000 R33
LOADINT(const0, 0);
LOADINT(const1, 1);
LOADINT(const10001, 10001);
LOADINT(const1000000, 1000000);
FOR(0, j, const0); /* label:0, conter:j, init:const0...
COPYINT(sum, const0);
FOR(1, i, const0);
ADDINT2(sum, i);
NEXT(1, i, const1, const10001); /* label:1, cont...
NEXT(0, j, const1, const1000000);
#if 0 /* 以下のように書いてもよい */
COPYINT(j, const0);
LABEL(0);
COPYINT(sum, const0);
COPYINT(i, const0);
LABEL(1);
ADDINT2(sum, i);
ADDINT2(i, const1);
CMPJNE(i, const10001, 1); /* if (i != const10001) go...
ADDINT2(j, const1);
CMPJNE(j, const1000000, 0); /* if (j != const1000000...
#endif
-さらにもう少しだけ改良して、フラグレジスタ+条件ジャンプ...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu002a.zip
-次はいよいよメモリアクセスかな。これはいろいろ鬼門。・・...
** 2013.03.22 Fri
-アドレスレジスタって64本も必要かな?さすがにそんなには使...
-pregにはポインタの型も記録されているが、高速危険モードで...
-ポインタの比較にあっては、同型かつ同域であることを確認で...
** 2013.03.23 Sat
-早くメモリアクセスをできるようになりたい。そうすればneri...
** 2013.03.24 Sun
-上記訂正。CLEはARM版やx64版も既にあるんだった。というかW...
--まあもちろんまともに対抗してFPU対応とかARM対応とかDOS(...
-CONDN(Rxx); /* 05 [Rxx] 2バイトプリフィクス */ この命令...
-R3C~R3Eの一時定数レジスタの考え方はわれながら面白い。そ...
--じゃあ、R28~R2FとP1C~P1Fを割り当てよう。
-/* 0D: 0D [imm8] テストコンディションプリフィクス */ こ...
** 2013.03.25 Mon
-(1) neriさんがゼロレジスタについて書いてくれています。
--http://nerry.hatenablog.com/entry/2013/03/22/190030
-これを読んで、ゼロレジスタのことを思い出しました。今まで...
-それでOSECPUにゼロレジスタを導入するかどうか悩んでいます。
--メリット:命令を3個削減できる。命令フォーマットの種類を...
--デメリット:COPYINTの命令長が長くなる。
-いろいろ考えた末、osecpu.cのコードが短くなるようなら採用...
--で、短くなったので採用。
#br
-(2) neriさんがバイトコードのフロントエンド・バックエンド...
--http://nerry.hatenablog.com/entry/2013/03/23/203638
-これについてOSECPUの考え方を書いておきます。OSECPUには内...
-そしてこのOSECPUの上にバイトコード変換プログラムを乗っけ...
--というかそれくらい割り切っておかないと、バイトコード体...
-つまりneriさんはすでに上位層まで作っているということです...
#br
-(3) とりあえず今日もがんばった。メモリアクセスつけた。そ...
--003a: 命令を追加した後でosecpu.cを少し整理。411行になる...
--004a: バイトコードのリビジョンを0002にアップ。osecpu.c...
--005a: メモリアクセス命令を突貫工事で追加。仮のAPIも付け...
--006a: cas2nasの存在を前提にアプリを書き直し。すっきりし...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu003a.zip
--http://osecpu.osask.jp/download/osecpu004a.zip
--http://osecpu.osask.jp/download/osecpu005a.zip
--http://osecpu.osask.jp/download/osecpu006a.zip
-もう少し詳しい説明:
--cas2nasというのは、
DB(1,2,3); DB(4,5,6); DB(7,8,9);
--というファイルを
DB 1,2,3
DB 4,5,6
DB 7,8,9
--の3行に書き換えるだけのツールです。本当に大したことはな...
/* 006aのosecpu_asm.hの一部 */
#define DDBE(i) DB(((i)>>24)&0xff,((i)>>1...
#define LABEL(imm) DB(0x01,0x00); DDBE(imm)
#define LOADINT(reg, imm) DB(0x02,reg); DDBE(imm)
#define LOADLBL(preg, imm) DB(0x03,preg); DDBE(imm)
/* 005aのosecpu_asm.hの一部 */
#define LABEL(imm) DB 0x01,0x00,((imm)>>24)&...
#define LOADINT(reg, imm) DB 0x02,reg,((imm)>>24)&0...
#define LOADLBL(preg, imm) DB 0x03,preg,((imm)>>24)&...
--005aがひどいことになっていたのは、アセンブラでは一行にD...
--ちなみにこんな簡単な処理しかしてないのに、cas2nas00a.os...
-(4) プログラムを書いて思ったこと:
--レジスタがたくさんあるっていいなー。x86でスタックを使っ...
--3項形式は、あまり使わないなーと実感。でも僕は3項形式が...
** こめんと欄
#comment
ページ名: