网站地图    收藏   

主页 > 系统 > linux系统 >

Linux内核完全剖析---math_emulate.c程序 - linux教程

来源:自学PHP网    时间:2014-11-28 23:07 作者: 阅读:

[导读] math_emulate c程序中的所有函数可分为3部分:第一类是设备不存在异常处理程序接口函数math_emulate(),只有这一个函数;第二类是浮点指令仿...

Linux内核完全剖析---math_emulate.c程序

math_emulate.c程序中的所有函数可分为3部分:第一类是设备不存在异常处理程序接口函数math_emulate(),只有这一个函数;第二类是浮点指令仿真处理主函数do_emu(),也只有一个函数;另外所有函数都是仿真运算辅助类函数,包括其余几个C语言程序中的函数。

在一台不包含80387协处理器芯片的PC中,如果内核初始化时在CR0中设置了仿真标志EM = 1,那么当CPU遇到一条浮点指令时就会引起CPU产生异常中断int 7,并且在该中断处理过程中调用本程序中第476行处的math_emulate(long ___false)函数。

在math_emulate()函数中,若判断出当前进程还没有使用过仿真的协处理运算时就会对仿真的80387控制字、状态字和特征字(Tag Word)进行初始化操作,设置控制字中所有6种协处理器异常屏蔽位并复位状态字和特征字,然后调用仿真处理主函数do_emu(),使用的参数是作为如下info结构的中断处理过程中调用math_emulate()函数的返回地址指针,info结构实际上就是栈中自从CPU产生中断int7后逐渐入栈的一些数据构成的一个结构,因此它与系统调用时内核栈中数据的分布情况基本相同,参见include/linux/math_emu.h文件第 11 行和kernel/sys_call.s开始部分。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论