|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ ー : [ちょうおん] (n) long vowel mark (usually only used in katakana)
バスエラー(bus error)とは普通CPUが物理的に割り当てられないメモリにアクセスを試みると起きる。バスエラーはコンピュータが検出した一般的なデバイスが故障することが原因でも起きることがある。 バスエラーは、まれにコンピュータハードウェアが物理的に壊れたことを示すことがある。普通は、アクセスできない所にアクセスしようとするバグがあるソフトウェアによって引き起こされる。 バスエラーの原因としては主に2つある。 ; 存在しないアドレスへのアクセス: CPUはソフトウェアによってある特定の物理メモリアドレスに対して読み書きを行うよう命令される。従って、CPUはこの物理アドレスをアドレスバスに設定し、CPUに接続されている他のすべてのハードウェアに対して結果を返すように要求する。もし、この指定のアドレスに対してなんらかのハードウェアが返答するならばCPUは結果を受け取る。もし反応するハードウェアが何もなければCPUは例外を発生させ、要求された物理アドレスはコンピュータシステム全体として認識できないという合図を出す。これは単に「物理」メモリアドレスのみで機能されることに注意すること。ソフトウェアが未定義の仮想メモリアドレスに対してアクセスを試みると、CPUは通常バスエラーよりむしろセグメンテーション違反を発生させるだろう。 ; 不整列アクセス: たいていのCPUはバイト単位でアドレッシングを行い、それぞれ固有のメモリアドレス1バイトは8bitからなる。たいていのCPUは個々のメモリアドレスから単独のバイトデータにアクセスすることができるが、より大きな単位(16bitや32bit、64bitなど)を特別な境界、例えば、16bit(番地が0、2、4はアクセスできるが1、3、5は整列されていない)や32bit(番地が0、4、8、12の場合は整列されているが、その他は不整列である)に整列されることなしにアクセスすることは通常できない。 CPUは普通どんな時もデータバス幅いっぱいにデータをアクセスする。バイトデータにアクセスするために、CPUはデータバス幅いっぱいにメモリアクセスをして、ここのバイトをマスクしたりシフトしたりする。これは非効率的ではあるが、特に順番に処理を行うたいていのソフトウェアにとって本質的な特性だとして大目に見られている。バイトではなく、2つのアライメントにまたがる程より大きな単位のデータの場合は、データバスで2回以上データを取ってくる必要がある。CPUがサポートしていれば可能だが、この機能は機械語レベルで直接必要になることはめったにないので、CPU設計者は普通このような実装を避け、その代わり不整列メモリアクセスとしてバスエラーを発行する。CPUのメモリアクセス機構とコンパイラの進歩により、以前よりも問題として目立たなくなってきている。64bitCPUへの移行が行われ、ワード幅が増えた関係で、バスエラーが多発しやすくなっている。 ==例== これはC言語で書かれた不整列メモリアクセスの例である。 Note: すべてのアーキテクチャでテストしていないので、この例にはまずい所があるかもしれない。 #include int main (void) 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「バスエラー」の詳細全文を読む スポンサード リンク
|