過去問解きまくり研究所 ホーム

令和2年度 10月 午前Ⅱ 問1

オペレーティングシステム

メモリマップドI/Oの問題

メモリマップドI/OのI/OポートにアクセスするプログラムをC言語で記述するときの注意点として,適切なものはどれか。

答えと解説を見る

✓ これが正解イコンパイラによる最適化を抑止するために,volatile型修飾子を付けて宣言した変数へのポインタとしてアドレスを指定して,アクセスする。

解説

volatile修飾子を付けた変数へのポインタでアドレスを指定します。

メモリマップドI/Oでは、I/Oポートが主記憶と同じアドレス空間に割り当てられているので、C言語ではポインタでそのアドレスを指してアクセスします。注意すべきはコンパイラの最適化です。I/Oポートの値はプログラムとは無関係に外部の状態で変わりますが、コンパイラはそれを知らないため、同じアドレスを続けて読む処理を1回にまとめたり、書込みを省いたりすることがあります。volatile型修飾子を付けると、その変数へのアクセスが毎回実際に行われるようになり、こうした最適化を抑止できます。外から値が変わるものにはvolatile、と結び付けて覚えると見分けられます。

ほかの選択肢はなぜ違うのか

出典:令和2年度 10月 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問1

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)