成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

系統 Linux
math_emulate.c程序中的所有函數可分為3部分:第一類是設備不存在異常處理程序接口函數math_emulate(),只有這一個函數;第二類是浮點指令仿真處理主函數do_emu()......

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開始部分。

  

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

do_emu()函數(第52行)首先根據狀態字來判斷有沒有發生仿真的協處理器內部異常。若有則設置狀態字的忙位B(位15),否則就復位忙位B。然后從上述info結構中EIP字段處取得產生協處理器異常的二字節浮點指令代碼code,并在屏蔽掉每條浮點指令碼中都相同的ESC碼(二進制11011)位部分后,根據此時的code值對具體的浮點指令進行軟件仿真運算處理。為便于處理,該函數按5種類型浮點指令碼分別使用了五個switch語句進行處理。例如,第一個switch語句(第75行)用于處理那些不涉及尋址內存操作數的浮點指令。而最后兩個switch語句(第419、432行)則專門用來處理操作數與內存相關的指令。對于后一種類型的指令,其處理過程的基本流程是首先根據指令代碼中的尋址模式字節取得內存操作數的有效地址,然后從該有效地址處讀取相應的數據(整型數、實數或BCD碼數值)。接著把讀取的值轉換成80387內部處理使用的臨時實數格式。在計算完畢后,再把臨時實數格式的數值轉換為原數據類型,最后保存到用戶數據區中。

另外,在具體仿真一條浮點指令時,若發現浮點指令無效,則程序會立刻調用放棄執行函數__math_abort()。該函數會向當前執行進程發送指定的信號,同時修改棧指針esp指向中斷過程中調用math_emulate()函數的返回地址(___math_ret),并立刻返回到中斷處理過程中去。

【編輯推薦】

  1. Linux下隱藏網絡連接的另一種方法
  2. Linux中學會靈活使用shell下的特殊字符
  3. Linux下查看用戶登陸后的操作記錄
責任編輯:趙寧寧 來源: IT專家網
相關推薦

2009-06-17 17:00:03

2009-06-17 13:03:42

Linux內核

2010-01-07 13:44:54

Linux內核代碼

2010-01-07 10:22:49

Linux內核

2020-11-20 07:55:55

Linux內核映射

2011-06-15 11:03:54

Linux內核Xen

2025-04-02 00:33:00

2025-04-01 02:00:22

2025-04-18 04:05:00

2011-09-09 10:31:40

Xen虛擬化linux內核

2022-08-03 11:00:20

Linux內核

2020-04-01 10:28:12

Apache HBas數據結構算法

2010-01-26 17:16:33

C++應用程序

2009-09-03 17:36:13

C#創建Web應用程序

2010-01-11 17:43:23

C++程序設計

2009-03-10 17:15:07

Linux兼容內核Win程序

2023-01-03 15:47:09

Linux內核C語言

2013-10-31 16:29:10

Linux內核

2010-01-14 17:42:47

CC++

2021-02-20 06:08:07

LinuxWindows內核
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美福利视频 | 99久热| 国产激情在线 | 精品国产成人 | 精品久久久久一区二区国产 | 巨大黑人极品videos精品 | 黄色男女网站 | 天天草av | 亚洲性在线 | 久久久久久综合 | 成人高潮片免费视频欧美 | 二区三区av | 亚洲一区成人 | 中文字幕精品一区 | 久久精品国产一区二区电影 | 亚洲 成人 在线 | 免费看国产一级特黄aaaa大片 | 国产精品无码专区在线观看 | 亚洲黄色av | 欧美激情va永久在线播放 | 欧美中文字幕在线观看 | 亚洲国产精品自拍 | 午夜影院在线播放 | 在线观看视频一区 | 日韩免费看片 | 久久精品国产一区 | 一区二区三区av夏目彩春 | 蜜桃av人人夜夜澡人人爽 | 日韩一区中文字幕 | 日韩综合在线 | 亚洲一区二区久久 | 免费在线观看成年人视频 | 国产精品中文字幕在线 | 日韩精品久久 | 特级生活片 | www.久久精品| 日本福利视频 | 91视频在线| 一区二区三区视频 | 日韩精品一区在线 | 欧美日韩a |