アダルト・ヴァイオリン May the force be with you..

2009年9月16日

Linuxのファイルディスクリプタ

Filed under: Weblog — い~ぐる @ 5:16 AM

ubuntuで、sfl2vlの動作確認中、ライセンスファイルを用意しているにも関わらず、ライン数オーバーのエラーが出た。

straceで解析すると、どうやら、openしたファイルをクロースしても、ファイルディスクリプタが解放されていない気がする。

ファイルディスクリプタ番号がクロース後も増え続け、too many open fileでオープンが失敗する。手元の他のシステムでは問題ないので、AMD64上でia32プログラムを実行したときだけ?

今日はマシンに触れないので、確認できないが、考えてみれば、x86_64用のsfl2vlも用意していたのであった。これと動作を比較すれば、もう少し解明できそうだ。

う~む・・・

とりあえず、商用ライセンス時には、毎行ごとのライセンスファイル確認を停止し、回避するが、クロースしているのに、too many open fileってあんまりな実装だよな。

それとも、細かくopen/closeはするなってこと?

PDP11互換CPU

Filed under: Weblog — い~ぐる @ 12:19 AM


このところ、大規模なコード変更中の、sfl2vlのデバグのため、昔の大き目のパッケージで動作確認中。

今日確認していた、PDP11互換CPUは、2002年にI氏作成のもの。数千行になる大規模パッケージで、過去との互換性チェックにちょうどよい。

といっても、さくっと試すと当然のようにハザードストップであった。

まずは、出力端子のデータ候補にハイインピーダンスがあることのチェックルーチンで、なぜか文字列検索が停止しない不具合。停止しなければ暴走尾するかというと、システム中のどこかにZの文字を見つけるとそこで停止するので、特定の場合にのみ出力端子を3ステート対応に変更してしまう。このコアは、while(*c) という典型的な文字列検索であり、普通に動きそうなのに、動かない理由は不明だが、文字列長は既知だし、急ぎの修正のため、for文に変更。

これを対策しても、まだどこかでハザードになる?

追いかけていくと、実は、PDP11互換CPUのシミュレーションパッケージは、Verilogとのつなぎのインスタンス生成に、名前なしの引数形式の端子接続をしていて、今回、端子順序を変更したことにより、接続が間違ってしまっていた。
これは、名前指定の接続にPDP11パッケージ側を修正。ついでに、ZIP形式のアーカアイブにした上で、IP ARCHからも配布することにした。(実行には、non-profitライセンスが必須)

まだシミュレーション実行中だが、とりあえず、UNIXを擬似ハードディスクからコールドブートして、
login:
のメッセージがでるところまで来たので、動作としては完璧だろう。

20090915版は、もう少し確認したら、正式リリース版にする予定。

Powered by WordPress