どなたか64bitVLM機能の利用の仕方をご存じの方
いないでしょうか?
実は次の状況で困っております。
150MByteくらいの共有メモリをアロケートする
アプリですが、今までは32ビットP2セクションにセクションファイルと共に
アロケートしていたのですが、新機能64bitVLMにしようかと思って
★PAGE-FILEを用いない
★DEMAND-ZERO
★共有ページテーブル使用
を試みたんですが、、、
1プログラム修正
2予約メモリリスト登録
3AUTOGEN実行
4リブート
5アプリ実行
6 SYS$CREATE_REGION_64 OK
7しかし次のコードが
yulCRMPSCFlags = SEC$M_DZRO | SEC$M_EXPREG | SEC$M_GBL | SEC$M_PERM |
SEC$M_MRES | SEC$M_WRT;
yulSStatus = SYS$CRMPSC_GDZRO_64
( &zsSecNameDesc // section_name
, (uint64)SEC$K_MATALL // (R)Section
ID.
, (uint32)0 //
(R)Protection.
, (uint64)(zuePage_size*zuePage_cnt) // (R)Length.
, &zueRegion_id // Region ID.
, (uint64)0 // byte offset.
, (uint32)(PSL$C_USER) // Access mode.
, yulCRMPSCFlags //(R) Mask
flags.
, &zpvSection_start
, &zueSection_size
, (uint64)NULL
, (uint64)0 );
%SYSTEM-F-INSFLPGS, insufficient Fluid Pages available
%TRACE-F-TRACEBACK, symbolic stack dump follows
image module routine line rel PC abs PC
XDBS_SHARE MEMALIB MemCreate 33414 00000000000003B0 00000000004C2E60
XDBS_SHARE PRCALIB PrcCreate 13892 000000000000009C 00000000004C33DC
SYSADM MAIN initLib 27921 0000000000000C80 0000000000041ED0
SYSADM MAIN main 27596 0000000000000368 00000000000415B8
SYSADM MAIN __main 0 000000000000006C 00000000000412BC
0 FFFFFFFF818F50D8 FFFFFFFF818F50D8
XDBS job terminated at 2-OCT-1999 11:53:34.28
Accounting information:
Buffered I/O count: 81 Peak working set size: 3376
Direct I/O count: 36 Peak virtual size: 177632
Page faults: 513 Mounted volumes: 0
Charged CPU time: 0 00:00:00.36 Elapsed time: 0 00:00:01.13
となって落ちちゃいます。・゜゜・(>_<)・゜゜・。
Fluid Pagesが足りないというのですがどうしたらいいのでしょう???
--
□■ Akira Fujiwara
■□ <fuji...@mdcnet.co.jp>
(原文の引用省略)
このエラーが出るということは、使える物理メモリの量が足りないという
ことではないでしょうか?しかし予約メモリレジストリを使用されている
ところを見ると、それはありえない?のかもしれませんけれど。
まずは、問題点をクリアーにする意味で、予約メモリレジストリを使わず
に実行してみてはいかがでしょう?それでもダメならメモリ常駐グローバ
ルセクションの作成に問題があるのでしょうし、OKなら予約メモリレジス
トリの設定に問題があると切り分けられると思います。
メモリ常駐グローバルセクション作成時に問題があるのならば、まずは利用
できる物理メモリのサイズの確認をしてみるといいかと思います。
$ ANA/SYS
SDA> EVAL @pfn$gl_phypgcnt
で出てきたページ(8192単位)が使える量の目安となると思います。
予約メモリレジストリに問題があるのならば、SYSMANのコマンドでサイズ
やらなんやら修飾子での指定があっているか再度確認してみてはいかがで
しょうか?
間違ってたらごめんなさい。
ちわっ、どうもです。
報告が遅れました。解決しました。((((((^_^;)
こぞうさんのいうとおりです。
もう、いろいろ試して『VMSのオバカー!!』と叫びそうになりましたが。。。
オバカは私でした。
原因は、予約メモリレジストリに登録したとき/group=オプションをつけなかった
のでSYSGBLに予約されていたところ。。。
マップ時には SEC$M_SYSGBLフラグビットをつけなかったためにgroupTBLから
アロケートしようとし、insufficient memory でした。(x_x) ☆\(^^;)
修正し、動くようになりましたが、さすがに192MB中150MBを/allocate
でメモリ常駐共有メモリにして50プロセスほど起動したら。。。
動かなくなりました。
#/faultオプションで共有するようにしたらOKです。
追伸:でも64bit化したらシステムコールの修正が大変でした。(T_T)
ではでは!
--
□■ Akira Fujiwara
■□ <fuji...@mdcnet.co.jp>