国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux2.6對新型CPU的支持

2020-10-28 18:54:12
字體:
來源:轉載
供稿:網友

文章分析了在 Linux 2.6 中引入的對 Intel CPU 快速系統調用指令 SYSENTER/SYSEXIT 支持的實現。Linux 驅動及內核開發者通過了解快速系統調用指令的機制,可以在自己的代碼中通過利用這一機制,提高系統性能,并避開由快速系統調用方式帶來的一些局限(如系統調用中嵌套系統調用)。 前言在 Linux 2.4 內核中,用戶態 Ring3 代碼請求內核態 Ring0 代碼完成某些功能是通過系統調用完成的,而系統調用的是通過軟中斷指令(int 0x80)實現的。在 x86 保護模式中,處理 INT 中斷指令時,CPU 首先從中斷描述表 IDT 取出對應的門描述符,判斷門描述符的種類,然后檢查門描述符的級別 DPL 和 INT 指令調用者的級別 CPL,當 CPL<=DPL 也就是說 INT 調用者級別高于描述符指定級別時,才能成功調用,最后再根據描述符的內容,進行壓棧、跳轉、權限級別提升。內核代碼執行完畢之后,調用 IRET 指令返回,IRET 指令恢復用戶棧,并跳轉會低級別的代碼。其實,在發生系統調用,由 Ring3 進入 Ring0 的這個過程浪費了不少的 CPU 周期,例如,系統調用必然需要由 Ring3 進入 Ring0(由內核調用 INT 指令的方式除外,這多半屬于 Hacker 的內核模塊所為),權限提升之前和之后的級別是固定的,CPL 肯定是 3,而 INT 80 的 DPL 肯定也是 3,這樣 CPU 檢查門描述符的 DPL 和調用者的 CPL 就是完全沒必要。正是由于如此,Intel x86 CPU 從 PII 300(Family 6,Model 3,Stepping 3)之后,開始支持新的系統調用指令 sysenter/sysexit。sysenter 指令用于由 Ring3 進入 Ring0,SYSEXIT 指令用于由 Ring0 返回 Ring3。由于沒有特權級別檢查的處理,也沒有壓棧的操作,所以執行速度比 INT n/IRET 快了不少。不同系統調用方式的性能比較:下面是一些來自互聯網的有關 sysenter/sysexit 指令和 INT n/IRET 指令在 Intel Pentium CPU 上的性能對比:

1:系統調用性能測試測試硬件:

Intel? Pentium? III CPU, 450 MHz Processor Family: 6 Model: 7 Stepping: 2用戶模式花費的時間核心模式花費的時間
基于 sysenter/sysexit 指令的系統調用9.833 microseconds6.833 microseconds
基于中斷 INT n 指令的系統調用 17.500 microseconds 7.000 microseconds 2:各種 CPU 上 INT 0x80 和 SYSENTER 執行速度的比較CPU Int0x80 sysenter
Athlon XP 1600+ 277 169
800MHz mode 1 athlon279 170
2.8GHz p4 northwood ht1152442 上述數據為對 100000 次 getppid() 系統調用所花費的 CPU 時鐘周期取的平均值自這種技術推出之后,人們一直在考慮在 Linux 中加入對這種指令的支持,在 Kernel.org 的郵件列表中,主題為 "Intel P6 vs P7 system call performance" 的大量郵件討論了采用這種指令的必要性,郵件中列舉的理由主要是 Intel 在 Pentium 4 的設計上存在問題,造成 Pentium 4 使用中斷方式執行的系統調用比 Pentium 3 以及 AMD Athlon 所耗費的 CPU 時鐘周期多上 5~10 倍。因此,在 Pentium 4 平臺上,通過 sysenter/sysexit 指令來執行系統調用已經是刻不容緩的需求。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东台市| 五河县| 吉首市| 普格县| 舞阳县| 宁乡县| 上饶县| 栾川县| 湘西| 井冈山市| 盐源县| 饶阳县| 泗水县| 滁州市| 长寿区| 台南县| 怀远县| 尚义县| 敖汉旗| 托克托县| 全南县| 漳平市| 元氏县| 沽源县| 大宁县| 哈巴河县| 新龙县| 东明县| 迁西县| 调兵山市| 景洪市| 四平市| 离岛区| 香河县| 宁安市| 调兵山市| 迭部县| 萨嘎县| 饶阳县| 新丰县| 河东区|