現在uClinux上のソフト開発をしている者です。

開発中のソフトを長時間実行すると、

Allocation of length 69632 from process 7238 (cut) failed

などと言うカーネルメッセージ(dmesg)が出力され、最終的にOSごとクラッシュしてしまいます。

色々とハックした結果、どうやら新たなプロセスにメモリを割り付けようとしたが、利用可能な連続領域が足りなくなったことが原因のようだと推定しています。

そこで、ページ情報(struct
page)を可視化するツールを作成し、中身を見たところ、flagsが0で、_countが非0(具体的には1)のページが多数見られました。

カーネルのメモリ管理上、このような状態はありうるのでしょうか?または、flagsが0の場合、_countのフィールドは無視されるのでしょうか?

カーネルのソースを追っていけばわかるのでしょうが、ご存知の方がいらっしゃればご教示いただきたく。

よろしくお願いします。
CC BY-SA 3.0
2016-02-01T01:57:00.403
21552
2016-11-16T04:32:46.767
14207
question
linux メモリ管理
uClinuxにおけるメモリ割り当て
質問者です。

質問後、いろんな文献を当たったところ、どうやら、使用中か否かはまずフリーリストにつながっているかどうかで判断し、各要素の属性(flagsや_count)は、先頭のページ情報で管理されているようだと理解しました。

従って、直にページ情報を見ても、意味が無いことがわかりました。

と言うことで、本件はクローズとします。

ありがとうございました。
CC BY-SA 3.0
2016-03-04T02:18:47.200
22781
2016-03-04T02:18:47.200
14207
21552
answer