私はユーザーモードを知っています。ss/espは、後で復元するためにカーネルモードスタックに保存する必要があります。システムコールを開始するとき、どのようにユーザモードのssとespが保存されますか? Linuxで?
問題は、カーネルモードのスタックを見つけるためには、まずss/espに対応するカーネルモードの値をロードする必要があるということです。今では、ユーザーモードのss/espがフラッシュされているようです。次に、ハードウェア/システムがユーザーモードss/espをどのように取得しますか?
いくつかの一時的な場所にユーザーモードとespが保存されていますか?または、動作はx86回路でサポートされていますか?
私には意味があります。 CS/EIPについては、ハードウェアのサポートもあるはずです。障害が発生すると、現在のCS/EIPはすでに「次の」命令を指していますが、障害処理後に同じ命令を再実行するには、元の障害CS/EIPを取得してケルネルモードスタックに保存する必要があります。元のCS/EIPを取得するには、ハードウェアのサポートも必要です。 – Infinite
@SetTimer:どのように動作するのかが完全にはわかりませんが、EIPはパイプラインを通じて他の必要なデータと共に運ばれる可能性が高いです。私はCSが同じように扱われることに疑念を抱いています。それを実行するには多くのトランジスタが必要になりますが、変更するのは非常に一般的なケースではありませんので、CSを変更すると、分岐予測ミスに類似している。しかし、現代のプロセッサーは非常に複雑で、私は確かにどちらかの方法を知らない。 –