• ベストアンサー

はじめて読む486の割り込み関係を読んで

割込みが発生した時の特権レベルとスタックポインタの動きがよくわかりませんでした。 特権レベルが上がるとTSSのesp0が新たなスタックポインタになる のはわかりましたが、割り込みが発生した時、 1)割り込みハンドラのあるセグメントの特権レベルが0だから 2)割り込み自体で特権レベルが0になるから のどちらの理由で特権レベルが上がるのでしょうか?仮に1)だとすると 特権レベルを上げないで割り込みハンドラを作る事ができ、そうすると 割り込みでTSSのesp0を使わないというコードも作れそうです。

質問者が選んだベストアンサー

  • ベストアンサー
  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.1

外部割込み等で特権レベルが変化する場合は、 2)割り込み自体で(HW機能により)特権レベルが0になるからです。 関連する情報はインテルのマニュアルに書かれていますので、例えば次のようにサーチして調べて下さい。 "intel 486 割り込み マニュアル" ==> http://download.intel.com/jp/developer/jpdoc/ia32_arh_dev_man_vol3_i.pdf IA-32 インテル アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル 次を参照下さい。 第 5 章 割り込みと例外の処理 >仮に1)だとすると 特権レベルを上げないで割り込みハンドラを作る事ができ、そうすると 割り込みでTSSのesp0を使わないというコードも作れそうです。 OSやITルーチン等のアドレス空間は一般のユーザーからは参照できないようにされています。 (4kB/1MB単位のマッピングテーブルでユーザーからはアクセス不可とされています) 次を参照下さい。 http://www.intel.com/jp/download/index.htm http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol3_i.pdf 第 3 章 保護モードにおけるメモリ管理

Skynetwork
質問者

お礼

とても詳しくありがとうございます。 疑問点がほぼ解消しました。 インテルのマニュアルとにらみっこして更に勉強したいと思います。 ありがとうございました。

関連するQ&A