坂井です.
①割込みを禁止にしているのにトラップ命令は実行されるのですか?
→ はい,実行されます.
「割込み禁止」とはよく言われるのですが,これは通常は「外部割込み禁止」
という意味です.つまりデバイスからの割込みを禁止するものです.
システムコールは禁止されません.
システムコールなどは外部割込みではなく,CPUの内部で発生する割込みです.
内部割込みとでも言うべきもので,これは割込み禁止にしても発生します.
(これはH8に限らずたいていのCPUでは,そのようになっています)
外部割込みとは区別して,「例外」「ソフトウェア割込み」などと呼ぶ場合も
あります.(CPUによって異なりますが,むしろ「例外」と呼ぶほうが普通かも…)
8thで INTR_ENABLE を行っていないのは,タスクが割込みを利用せずに
ポーリングベースで動いているため不要だからです.
9thも実は不要なのですが,以下の理由のために INTR_ENABLE を入れています.
・初期スレッドが複数スレッドを起動してからアイドルスレッドに成る,
というひとつの流れをここでハッキリさせたい
・INTR_ENABLE が必要になるのは実は12thで,9th~11thまでは不要なのだが,
12thでようやく INTR_ENABLE を追加すると修正の差分が増えるので,9thで
start_threads() の概形を作るときに初めから入れておきたい
②トラップ命令が実行されないのであれば、トラップ命令は割込み有効になるまで保留されているのですか?
→ こういう動作は,普通は無いです.というのはCPUの内部での割込み管理は
おそらく単にフリップフロップの1ビット保持で行われており,複数の
トラップを保持するとしたらキューのような複雑な構造が必要になってしまいます.
またたとえ保持できたとしても,システムコールのパラメータはレジスタ経由で
渡されるため,そちらが新しいシステムコールによって上書きされてしまったら
パラメータを受け取れないことになってしまいます.つまり,回路的に無理が
あります.
<
38dcbfb8-6d46-4ec2...@googlegroups.com>の記事において
jyunp...@gmail.comさんは書きました。
>> 組込みOS自作入門でOSの仕組みについて勉強している者です。
>> 組込みOS自作入門8th&9thにて質問があります。もしかしたら自分の勉強不足のため
>> 変な質問をしてしまったら申し訳ありません。宜しくお願い致します。
>>
>> リスト9.14のmain.cで
>> INTR_DISABLE
>> 割込み無効にしてから
>> INTR_ENABLE(8thでは記載なし??)
>> 割込み有効にするまでの間にスレッドを作成するトラップ命令(割込み)が行われていると思います。
>>
>> ここで二点質問です。
>> ①割込みを禁止にしているのにトラップ命令は実行されるのですか?
>> ②トラップ命令が実行されないのであれば、トラップ命令は割込み有効になるまで保留されているのですか?
>> その場合どのタイミングで保留されていた割込みが実行されるのでしょうか?
>>
>> 以上、宜しくお願い致します。
>>
>> --
>> このメールは Google グループのグループ「KOZOS友の会」の登録者に送られています。
>> このグループから退会し、メールの受信を停止するには、
kozos_tomonok...@googlegroups.com にメールを送信します。
>> その他のオプションについては、
https://groups.google.com/groups/opt_out にアクセスしてください。
>>