自分が書いたスケジューラーをテストしようとしています。2つのプロセスをスケジュールします。どちらも無限のwhileループです(while(1)ステートメントのみ)。プログラムを実行すると、10秒(場合によっては5秒、場合によっては15秒以上)後にsegfaultが発生することがあります。場合によっては、セグメンテーション違反がまったく発生せず、期待どおりに実行されることがあります。セグメンテーション違反が発生する前に、両方のプロセスが期待どおりにスケジュールされていることを示すログファイルがあります。gdbを使用してエラーをデバッグしようとしていますが、あまり役に立ちません。これが私がバックトレースで得たものです:
#0 0x00007ffff7ff1000 in ?? ()
#1 0x000000000000002b in ?? ()
#2 0x00007ffff78b984a in new_do_write () from /lib64/libc.so.6
#3 0x000000000061e3d0 in ?? ()
#4 0x0000000000000000 in ?? ()
#2はよくわかりません。
これはスタックオーバーフロー関連のエラーかもしれないと思います。ただし、プロセス全体で2回だけmallocします。2つのプロセスを設定するときはどちらも、作成したpcbテーブルのpcbブロックをmallocします。誰かが以前に同様の問題に遭遇したことがありますか?これは、スケジューラーでコンテキストを設定/交換する方法と関係がありますか?なぜそれは時々、そして時々そうではないセグメンテーション違反ですか?