添加的内容 删除的内容
(修改自此处;原许可:CC BY-SA 3.0[网站升级迁移]) |
无编辑摘要 |
||
(未显示2个用户的4个中间版本) | |||
第2行: | 第2行: | ||
|G1=IT |
|G1=IT |
||
}} |
}} |
||
在[[ |
在[[电脑运算|计算机]]领域,'''总线错误'''('''bus error''')是一种硬件{{tsl|en|Fault (computing)||故障}},为通知[[操作系统]]一个进程正尝试访问[[中央处理器|CPU]]无法访问的物理地址,即一个无效的[[位址汇流排]]地址,它由此得名。在现代的大多数架构中,这比[[记憶体区段錯误]](段错误)更罕见,而那主要由于内存访问冲突所造成:即[[逻辑地址]]或权限的问题。 |
||
在[[POSIX]]兼容平台上,总线错误通常导致发送SIGBUS信号到导致错误的进程。SIGBUS也可能因计算机检测到的任何常规设备故障引发。 |
在[[POSIX]]兼容平台上,总线错误通常导致发送SIGBUS信号到导致错误的进程。SIGBUS也可能因计算机检测到的任何常规设备故障引发。 |
||
第10行: | 第10行: | ||
=== 不存在的地址 === |
=== 不存在的地址 === |
||
软件令CPU读写特定的物理[[ |
软件令CPU读写特定的物理[[记憶体位址|内存地址]]时,CPU会将这个物理内存地址填入[[位址汇流排|地址总线]],并等待所有其他连接着CPU的硬件来认领并响应这个请求。当没有任何硬件响应CPU时,CPU会触发一个[[异常处理|异常]],表示整个计算机系统都无法识别上述请求的物理内存地址。需要注意的是,这里仅涉及到''物理''内存地址。如果访问一个未定义的[[虚拟内存]]地址,一般会产生一个段错误而不是总线错误,尽管对于[[内存管理单元|MMU]]与CPU分离的计算机来说,CPU无法区分这两种情况。 |
||
=== 未对齐的访问 === |
=== 未对齐的访问 === |
||
第16行: | 第16行: | ||
=== 不存在段(x86) === |
=== 不存在段(x86) === |
||
[[x86]]上存在一种较旧的称为[[x86 |
[[x86]]上存在一种较旧的称为[[x86记憶体区段]]的内存管理机制。 |
||
如果应用程序使用不存在段的选择器加载段寄存器(在POSIX兼容的操作系统下只能使用[[汇编语言]]完成),则会生成异常。 |
如果应用程序使用不存在段的选择器加载段寄存器(在POSIX兼容的操作系统下只能使用[[汇编语言]]完成),则会生成异常。 |
||
第27行: | 第27行: | ||
[[Category:计算机总线]] |
[[Category:计算机总线]] |
||
[[Category:计算机错误]] |
[[Category:计算机错误]] |
||
[[Category: |
[[Category:内存管理]] |