图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片

在缺页异常处理过程中,进程可以因为收到 SIG_BUS 信号而 SegmentFault 异常退出,进而出现上图的异常信息. 上图是一个标准由 SIG_BUS 引起的 Segmentfault, 其各字段的含义如下:

  • BiscuitOS-PAGIN[197]: 应用程序的名字和进程 ID, 可以发生异常的进程名字是 BiscuitOS-PAGIN,名字并没有完整显示截取其中一部分,197 则是进程 PID.
  • segfault at 6000000000: 表示发生非法内存行为的虚拟地址是 0x6000000000
  • ip 00005586faab228b: 表示发生非法内存行为时的指令指针为 0x00005586faab228b
  • sp 00007ffe8a008380: 表示发生非法内存行为时的堆栈指针是 0x00007ffe8a008380
  • error 7: 表示发生缺页的原因是 0x7
  • in BiscuitOS-PAGING-PF-ANON-RO-default[5586faab2000+1000]: 表示发生非法内存行为时指令正在执行代码的位置
  • Code: 00 00 00 e8 …: 表示发生非法内存行为时出错位置前 2/3 的二进制代码和后 1/3 的二进制代码, 其通过 <> 进行分割
  • Segmentation fault: 表示进程发生了 SegmentFault

在 Linux 和许多其他 UNIX-like 操作系统中,SIGBUS 是一个信号, 信号是软件中断的一种,用于通知进程某些类型的事件已经发生。每种信号都有一个与之关联的默认动作,但进程也可以捕获信号并定义自己的处理逻辑。SIGBUS 信号通常指示某种非法的内存访问,其原因与 SIGSEGV(段错误) 略有不同。这两个信号都是由于进程试图访问其不应该访问的内存而被触发的,但它们的具体场景和原因不同,具体不同如下:

图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片