- ベストアンサー
セグメント・ディスクリプタについて
セグメント・ディスクリプタについて質問なのですが、これはスタックセグメントやデータセグメント、テキストセグメントを指しているのでしょうか?いまいちわかりません。分かる方いらしたらわかりやすいようご教授ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
No.1 です。 > >・アクセス可能の種類(リードオンリーなど) > これはどういった場合のことをいうのでしょうか? 例えば、システム上重要な情報を、下位のアプリなどから参照する時、 読むのはいいけど 書き換えられると困る(故意か事故かはともかく)ので 「リードオンリー」に設定しておくわけです。 ディスクリプタにはそのような設定を行うフィールドがあります。 R/W とか RO とか表現されてると思います。 リードオンリーなセグメントに対して書き込みを行うと、 メモリに書き込みを行わせないのも当然ですが、エクセプション(割り込みの一種)を発生し システムに引き戻しその原因を伝え、 「リードオンリーな領域に書き込もうとしたエラー」を表示して注意を促したりします。 システムの作りにもよりますが、あまりに何度も発生するようなら、 危険なタスクと判定しタスクごと切り離すような処置を行うことも可能です。 > 本で読んだのですがこれには実行用(プログラム用)とかあるみたいなのですが、 > これはどういう時のことをいうのでしょうか? セグメントとしてメモリ上に展開されたものの内訳として、 「プログラム」の場合もあるし、何らかの「データ」の場合もあるわけです。 「データ」のセグメントのはずなのにそこを実行しようとしたり、 「プログラム」のセグメントのはずなのに中身を書き換えようという動きがあれば それをシステムが検出し「ちょっと待て何しようとしてる?」と警告したり 同時にそのセグメントを保護することができます。 プログラムが必要ある毎に自分自身の一部を書き換えつつ実行するという 特殊なテクニックもあることはありますが、理解もメンテもしづらいので このようなテクニックは使わないのが前提です。
その他の回答 (1)
> セグメント・ディスクリプタ Intel 製 CPU の件と解釈します。 随分ムカシに勉強しました。 セグメントについて記述したもので、大抵テーブルのように複数のディスクリプタが並べられ、必要なものが使われます。 記述内容としては ・セグメントの種類(コード(命令)、データ、スタック、など) ・物理アドレス範囲 ・特権レベル(使える命令などの制限) ・アクセス可能の種類(リードオンリーなど) ユーザやタスクが切り替えられるとそれようのディスクリプタを参照して それ用のセグメントを使用可能にします。
お礼
回答有難うございます。 >・アクセス可能の種類(リードオンリーなど) これはどういった場合のことをいうのでしょうか?初歩的な質問ですみません。
補足
本で読んだのですがこれには実行用(プログラム用)とかあるみたいなのですが、これはどういう時のことをいうのでしょうか?
お礼
とてもわかりやすい回答ありがとうございました。