ページへ戻る

− Links

 印刷 

tek​/rjc のバックアップ差分(No.3) :: OSASK計画

osaskwiki:tek/rjc のバックアップ差分(No.3)

« Prev[4]  Next »[5]
2: 2008-12-09 (火) 14:47:59 ソース[6] 3: 2008-12-09 (火) 18:01:33 ソース[7]
Line 11: Line 11:
--「はりぼてOS」およびその発展型OS(tek1/tek2/tek5) --「はりぼてOS」およびその発展型OS(tek1/tek2/tek5)
--MonaOSでのtek5圧縮のアプリ --MonaOSでのtek5圧縮のアプリ
---おれんじぺこでのtek1圧縮のアプリ、おれんじぺこでのtek1/tek2/tek5展開APIの採用+--おれんじぺこでのtek1圧縮のアプリ、おれんじぺこでの(正確にはCOM64-GREでの)tek1/tek2/tek5展開APIの採用
--次期NWSOSでのOS本体のtek5圧縮(予定) --次期NWSOSでのOS本体のtek5圧縮(予定)
~ ~
Line 20: Line 20:
-またrjcに相当するフィルタは、LZMA(7z)やUPXでも当然のように利用されていて、rjcを使わないtek5とこれらを比較すると場合によっては圧縮率で逆転します。それじゃあtek5の実力が誤解されかねません。それは僕としては不本意です。もちろんrjcはtek5以外のtek圧縮とも併用できますし、相性もいいです。 -またrjcに相当するフィルタは、LZMA(7z)やUPXでも当然のように利用されていて、rjcを使わないtek5とこれらを比較すると場合によっては圧縮率で逆転します。それじゃあtek5の実力が誤解されかねません。それは僕としては不本意です。もちろんrjcはtek5以外のtek圧縮とも併用できますし、相性もいいです。
-rjcを使わずにtek5した場合と、rjcしてからtek5した場合のサイズの差は、たいてい1割前後です。この差はかなり大きいです。tek5の改良だけで(たいした速度低下もなく)1割も圧縮率を改善するというのはほぼ不可能といっていいレベルだと思います。 -rjcを使わずにtek5した場合と、rjcしてからtek5した場合のサイズの差は、たいてい1割前後です。この差はかなり大きいです。tek5の改良だけで(たいした速度低下もなく)1割も圧縮率を改善するというのはほぼ不可能といっていいレベルだと思います。
--rjcは極めて処理時間が短く、コードもとても小さい簡単なフィルタです。処理内容を簡単に説明するとIA-32のコードは相対ジャンプ命令(near-callも該当)が中心で、同じオフセットへのジャンプであってもそれぞれ違う機械語になっています。つまり同じ場所へのジャンプ命令であるにもかかわらず、それは何度出てきても初出の命令列になり、スライド辞書圧縮がほとんどききません。こういうコードはIA-32の一般的なプログラムでは頻出するので、これをrjcエンコードフィルタによってスライド辞書法が適用しやすい形式に変換してから圧縮してやろうというわけです。また展開時には通常のtek展開の後にrjcのデコードフィルタをかけることで、展開処理を完了します。+-rjcは極めて処理時間が短く、コードもとても小さい簡単なフィルタです。rjcによってサイズが増えたり減ったりすることはありません。処理内容を簡単に説明するとIA-32のコードは相対ジャンプ命令(near-callも該当)が中心で、同じオフセットへのジャンプであってもそれぞれ違う機械語になっています。つまり同じ場所へのジャンプ命令であるにもかかわらず、それは何度出てきても初出の命令列になり、スライド辞書圧縮がほとんどききません。こういうコードはIA-32の一般的なプログラムでは頻出するので、これをrjcエンコードフィルタによってスライド辞書法が適用しやすい形式に変換してから圧縮してやろうというわけです。また展開時には通常のtek展開の後にrjcのデコードフィルタをかけることで、展開処理を完了します。
*** (2) *** (2)
-rjcは以下のような簡単な関数で、エンコード・デコードできます。この関数が返す値は、rjcが変換した箇所の個数です。以下はabcdw006で採用されているrjcです。 -rjcは以下のような簡単な関数で、エンコード・デコードできます。この関数が返す値は、rjcが変換した箇所の個数です。以下はabcdw006で採用されているrjcです。
Line 73: Line 73:
-このフィルタを実行ファイル全体にかけても十分に効果は出ますが、コードセクションがファイル内のどこなのか分かっているのなら、コードセクションにのみrjcしたほうが、rjc時間が短くなりますし(といっても些細な差ですが)、圧縮率も若干改善します(微々たる差でしかないことも多いですが)。 -このフィルタを実行ファイル全体にかけても十分に効果は出ますが、コードセクションがファイル内のどこなのか分かっているのなら、コードセクションにのみrjcしたほうが、rjc時間が短くなりますし(といっても些細な差ですが)、圧縮率も若干改善します(微々たる差でしかないことも多いですが)。
*** (3) *** (3)
--参考までに、NWSOS0034-IMG内のNWSA.EXEとNWSC.EXEについてrjcの効果を挙げておきます(2ちゃんねるのスレッドで話題になっていたので)。僕にはコードセクションの位置は分からないので、とりあえずrjcはファイル全体にかけています。+-参考までに、NWSOS0034-IMG内のNWSA.EXEとNWSC.EXEについてrjcの効果を挙げておきます(2ちゃんねるで話題になっていたので)。僕にはコードセクションの位置は分からないので、とりあえずrjcはファイル全体にかけています。
|        |圧縮なし    |tek5だけ    |最高パラメタtek5だけ|rjc+tek5    |rjc+最高パラメタtek5| |        |圧縮なし    |tek5だけ    |最高パラメタtek5だけ|rjc+tek5    |rjc+最高パラメタtek5|
|NWSA.EXE|RIGHT:121,040|RIGHT:50,041|RIGHT:49,414        |RIGHT:46,678|RIGHT:46,107| |NWSA.EXE|RIGHT:121,040|RIGHT:50,041|RIGHT:49,414        |RIGHT:46,678|RIGHT:46,107|
« Prev[4]  Next »[5]