日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux x86 关机 过程,linux在x86上的中断处理过程(详细)

發布時間:2025/3/8 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux x86 关机 过程,linux在x86上的中断处理过程(详细) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux在x86上的中斷處理過程

一:引言

在Intel的文檔中,把中斷分為兩種。一種是異常,也叫同步同斷。一種稱之為中斷,也叫異常中斷。同步中斷指的是由CPU控制單元產生,之所以稱之為同步,是因為只有一條指令執行完畢后才會發出中斷。例如除法運算中,除數為零的時候,就會產生一個異常。異步中斷是由外部設備按照CPU的時鐘隨機產生的。例如,網卡檢測到一個數據到來就會產生一個中斷。

二:x86的中斷處理過程

由于中斷是開著的,所以當執行完一條指令后,cs和eip這對寄存器中已經包含了下一條將要執行的指令的邏輯地址。在處理那條指令之前,控制單元會檢查在運行前一條指令時是否發生了一個中斷或異常。如果發生了一個中斷和異常,那么控制單元執行下列操作:

1. 確定與中斷或異常關聯的向量i(0≤ i ≤255)

2. 讀由idtr寄存器指向的IDT表中的第i項。

3. 從gdtr寄存器獲得GDT的基地址,并在GDT中查找,以讀取IDT表項中的選擇符標識的段描述符。這個描述符指定中斷或異常處理程序所在的段的基地址。

4. 確信中斷是由授權的(中斷)發生源發出的。首先將當前特權級CPL(存放在cs寄存器的低兩位)與段描述符(存放在GDT中)的描述符特權級DPL比較。如果CPL小于DPL,就產生一個“通常保護”異常,因為中斷處理程序的特權級不能低于引起中斷的程序的特權。對于編程異常,則做進一步的安全檢查:比較CPL與處于IDT中的門描述符的DPL,如果DPL小于CPL,就產生一個“通常保護”異常,這最后一個檢查可以避免用戶應用程序訪問特殊的陷阱門和中斷門。

5. 檢查是否發生了特權級的變化,也就是說,CPL是否不同于所選擇的段描述符的DPL。如果是,控制單元必須開始使用與新的特權級相關的棧,通過執行以下步驟來保證這一點:

A. 讀tr寄存器,以訪問運行進程的TSS段。

B. 用與新特權級相關的棧段和棧指針的正確值裝載ss和esp寄存器。這些值可以在TSS中找到。

C. 在新的棧中保存ss和esp以前的值,這些值定義了與舊特權級相關的棧的邏輯地址。

6. 如果故障已發生,用引起異常的指令地址裝載cs和eip寄存器,從而使得這條指令能再次被執行。

7. 在棧中保存eflag、cs和eip的內容。

8. 如果異常產生了一個硬件出錯碼,則將它保存在棧中。

9. 裝載cs和eip寄存器,其值分別是IDT表中第i項門描述符的段選擇符和偏移量字段。這些值給出了中斷或者異常處理程序的第一條指令的邏輯地址。控制單元所執行的最后一步就是跳轉到中斷或異常處理程序。換句話說,處理完中斷信號后,控制單元所執行的指令就是被選中處理程序的第一條指令。

上面的處理過程的描述摘自<>,其中有幾點值得注意的地方:

1:通過門后,只能提高運行級別。就像上面所述的 “當前特權級CPL(存放在cs寄存器的低兩位)與段描述符(存放在GDT中)的描述符特權級DPL比較。如果CPL小于DPL,就產生一個“通常保護”異常”。在中斷處理中,通常把IDT中的相應段選擇符設為__KERNEL_CS。即最高的運行級別

2:上面C所述:“在新的棧中保存ss和esp以前的值,這些值定義了與舊特權級相關的棧的邏輯地址”,那ss,esp以前的值是如何找到的呢?應該是從TSS中。在中斷發生的時候,如果檢測到運行級別發生了改了,將寄存器SS,ESP中的值保存進TSS的相應級別位置。再加載新的SS,ESP的值,然后從TSS中取出舊的SS,ESP值,再壓棧。

3:堆棧的改變,如下圖所示:

從上圖中可以看到,硬件自動保存的硬件環境是非常少,要在中斷后恢復到以前的環境,還需要保存更多的寄存器值,這是由操作系統完成的。這在內核的代碼中可以看到中斷和異常被處理完畢后,相應的處理程序必須產生一條iret指令,把控制權轉交給被中斷的進程,這將迫使控制單元:

1. 用保存在棧中的值裝載cs、eip和eflag寄存器。如果一個硬件出錯碼曾被壓入棧中,并且在eip內容的上面,那么,執行iret指令前必須先彈出這個硬件出錯碼。

2. 檢查處理程序的CPL是否等于cs中的低兩位的值。如果是,iret終止返回;否則,轉入下一步。

3. 從棧中轉載ss和esp寄存器,因此,返回到與舊特權級相關的棧。

4. 檢查ds、es、fs及gs段寄存器的內容,如果其中一個寄存器包含的選擇符是一個段描述符,并且其DPL值小于CPL,那么,清相關的段寄存器。控制單元這么做是為了禁止用戶態的程序利用內核以前所用的段寄存器。如果不清除這些寄存器的話,惡意的用戶程序就會利用他們來訪問內核地址空間。

注意到4:舉例說明一下。如果通過系統調用進入內核態。然后將DS,ES的值賦為__KERNEL_DS(在2。4的內核里),處理完后(調用iret后),恢復CS,EIP的值,此時CS的CPL是3。因為DS,ES被設為了__KERNEL_DS,所以其DPL是0,所以要將DS,ES中的值清除。在2。6內核中,發生中斷或異常后,將DS,ES的值設為了__USER_DS,避免了上述的清除過程,提高了效率。

總結

以上是生活随笔為你收集整理的linux x86 关机 过程,linux在x86上的中断处理过程(详细)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 爆操巨乳 | 国产精品宾馆在线 | 非洲黄色一级片 | 精品少妇 | 日韩亚洲精品在线 | 成人影 | 牛牛超碰| 九九热精品在线观看 | 校园春色自拍偷拍 | 欧美一区免费观看 | 久久精品亚洲天堂 | 国产无遮挡一区二区三区毛片日本 | 夜色资源网 | www.国产成人 | 在线观看的毛片 | 久久精品999| 久久影院午夜理论片无码 | 亚洲精品视频在线 | 久久综合社区 | 狠狠综合网| av在哪里看| 美女自卫网站 | 久久综合五月婷婷 | 国产精品久久久久久久久动漫 | 亚洲av综合色区 | 婷婷国产精品 | 国产日韩欧美精品 | 91精品视频免费观看 | 午夜婷婷色 | 欧美在线播放一区 | 久久99精品久久久久久噜噜 | 欧美日韩一二三 | 麻豆日产六区 | 校霸被c到爽夹震蛋上课高潮 | 91精品久久久久久久99蜜桃 | 色香蕉视频 | 夜夜夜撸| 久久精品99国产精品日本 | 麻豆疯狂做受xxxx高潮视频 | 中文字幕 视频一区 | 日韩激情网 | 欧美搞逼视频 | 成人网免费 | 成人网站在线进入爽爽爽 | 秋霞欧洲| 一区三区在线 | 精品二区在线观看 | 成人免费久久 | 久久成人av | 国产91久久精品一区二区 | 国产福利片在线观看 | 国产福利精品在线 | 大粗鳮巴久久久久久久久 | 夜夜操女人 | www.日韩在线 | 好吊色一区二区三区 | 丝袜性爱视频 | 久久99热人妻偷产国产 | 亚洲AV无码一区二区三区少妇 | 亚洲色图欧洲色图 | 国产成人一区二区三区电影 | 国产99热| 天天干夜夜骑 | 青青草久久久 | 欧美aa视频 | 亚洲精品偷拍视频 | 欧美理论在线观看 | 加勒比成人av | 午夜视频久久久 | 不卡精品视频 | 免费看黄在线网站 | 先锋资源一区 | 91在线观看. | 五月婷婷狠狠 | 综合性色 | 国产精选在线观看 | 中文无码日韩欧 | 欧美a级网站 | 综合婷婷久久 | 特级黄色一级片 | 国产乱淫av片免费看 | 污污视频在线观看网站 | 国产精品 欧美激情 | 国产农村熟妇videos | 亚洲激情图片区 | 免费91看片 | 午夜影院入口 | 欧美视频区 | 欧美精产国品一二三 | 亚洲第一成肉网 | 乱妇乱女熟妇熟女网站 | 亚洲mv一区 | 成年人在线观看av | 久草免费福利视频 | 国产精品资源在线 | 在线观看中文字幕av | 欧美日韩国产精品一区二区三区 | 婷婷看片| 日韩三区四区 |