0

これは、データのシリアル化と Windows の休止状態との類似性について考えていたときに思い浮かびました。システムを休止状態にすると、OS は個々のプログラムや、プログラムがデータをシリアル化/逆シリアル化できるかどうかを気にしません。すべてをディスクにダンプするだけで、後で何をしていても再開できます。

質問は次のとおりです。個々のプログラムを気にせずに、Windows はどのようにこれを行うのですか? コードでこれを何らかの方法でエミュレートして、シリアル化/逆シリアル化メソッドをわざわざ記述せずにディスクに「ダンプ」し、後で再開できるようにすることは可能ですか?

4

1 に答える 1

1

Windows は、すべてのプロセスの実行を中断し、アクティブな (割り当てられた) メモリ ページをディスクに書き出すことによってこれを行います。このメモリが後で復元され、カーネルがキックスタートすると、中断したところからすべてを再開できます。これは、その観点からは、メモリは実際には変更されていないためです。まるで長い間凍っていたかのようです。

独自のプロセスの 1 つでこれを行う唯一の方法は、他の監視コードをカーネルで実行することです。プロセスのメモリ マップを取得し、実際のメモリ ページと一緒に保存する方法が必要です。これにより、後でページが復元されたときに、アプリケーションのメモリ内のすべての既存のポインターが有効なままになります。また、他のデータ (開いているファイル記述子など) を永続化して復元できるようにする方法も必要です。

これは、ほとんどのアプリケーションにとって実用的ではありません。

于 2012-10-03T18:59:03.307 に答える