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

操作系統(tǒng)是如何保護自己的? CPU與保護模式

商務(wù)辦公
操作系統(tǒng)其實就是一個大管家,負責(zé)給應(yīng)用程序搭建舞臺,好讓程序們過好自己的一生,但偏偏有不聽話的程序可能想搶操作系統(tǒng)的戲,顯然這會影響所有其它正在程序,因此操作系統(tǒng)必須要有能力保護自己。

?在回答這個問題之前,你可能會首先想:為什么操作系統(tǒng)需要保護自己呢?

操作系統(tǒng)其實就是一個大管家,負責(zé)給應(yīng)用程序搭建舞臺,好讓程序們過好自己的一生,但偏偏有不聽話的程序可能想搶操作系統(tǒng)的戲,顯然這會影響所有其它正在程序,因此操作系統(tǒng)必須要有能力保護自己。

在上一篇文章《徹底理解操作系統(tǒng):CPU與實模式》中,我們從歷史的角度了解了x86最開始是沒有任何保護機制的,應(yīng)用程序竟然可以與操作系統(tǒng)平起平坐,操作系統(tǒng)能讀寫的內(nèi)存區(qū)域應(yīng)用程序也一樣可以讀寫,操作系統(tǒng)可以控制的硬件應(yīng)用程序一樣不在話下。

應(yīng)用程序和操作系統(tǒng)這么平等還何談保護?其實從某種程度講,保護自己就是限制別人,那么操作系統(tǒng)該怎樣限制應(yīng)用程序呢?

程序也是分三六九等的

核心就在一點:權(quán)限。

這一點相信對于打工人都深有體會,在公司里有的文檔你無權(quán)查看,有的數(shù)據(jù)庫你無權(quán)讀取,有的門禁你的卡刷不開等等。

這里也是一樣的道理,但是操作系統(tǒng)和普通的應(yīng)用程序都是軟件,從本質(zhì)上講沒有任何區(qū)別,在CPU眼里都是機器指令,顯然從軟件這一層面上看操作系統(tǒng)沒有很好的辦法能控制應(yīng)用程序,這就不得不借助硬件的幫忙了,借助誰的幫忙呢?顯然是CPU。

我們剛才提到過,不管是操作系統(tǒng)還是應(yīng)用程序在CPU眼里都是機器指令,CPU閉著眼執(zhí)行就完事兒,從時間角度上看CPU就是一條又一條的在執(zhí)行指令:

圖片

然而,CPU也不能對此一點都不關(guān)心,CPU必須能區(qū)分出哪些指令屬于操作系統(tǒng),哪些指令屬于普通的應(yīng)用程序!

該怎么區(qū)分呢?很簡單,其中一種方法是這樣的,我們添加一些特殊的機器指令,假設(shè)是指令A(yù)和B,CPU執(zhí)行到該指令A(yù)時就知道接下來要執(zhí)行的指令屬于操作系統(tǒng),當(dāng)執(zhí)行完指令B時就知道接下來要執(zhí)行的屬于普通應(yīng)用程序,這兩條指令在x86(32位)中就是int與iret指令,這兩個指令對應(yīng)的背后就是所謂的系統(tǒng)調(diào)用。

有了這樣的指令,CPU可以清楚的執(zhí)行什么時候在執(zhí)行普通程序,什么是在運行操作系統(tǒng)(程序),CPU能區(qū)分清楚那么就能給它們賦予不同的權(quán)限,這就是所謂用戶態(tài)與內(nèi)核態(tài)的由來,用戶態(tài)對應(yīng)的是普通程序,內(nèi)核態(tài)對應(yīng)的是操作系統(tǒng),它們的權(quán)限是不一樣的。

圖片

x86 CPU支持四種權(quán)限等級,0,1,2,3,一般的操作系統(tǒng)都使用兩種特權(quán)0和3,0是最高權(quán)限,顯然這是操作系統(tǒng)也就是內(nèi)核態(tài)所擁有的權(quán)限,而3是普通程序運行的權(quán)限,相對較低。

同時,一些指令只有在內(nèi)核態(tài)下才可以執(zhí)行,這些就是所謂特權(quán)指令,當(dāng)CPU在用戶態(tài)(普通程序)時是沒有辦法執(zhí)行特權(quán)指令的,這樣就從機器指令這個層面確保了普通程序不能執(zhí)行某些特權(quán)操作。

圖片

我們知道程序除了機器指令外還有指令依賴的數(shù)據(jù),而數(shù)據(jù)又是保存在內(nèi)存中,那么接下來的問題是操作系統(tǒng)該怎樣保護自己的內(nèi)存不會普通程序讀寫呢?

訪問內(nèi)存也需要權(quán)限

答案和我們剛才講解的機器指令的特權(quán)劃分是一樣的。我們規(guī)定操作系統(tǒng)所在的內(nèi)存區(qū)域只有CPU處于內(nèi)核態(tài)時才可以訪問,如果位于用戶態(tài)的程序試圖訪問內(nèi)核所在的地址空間那么將立刻被操作系統(tǒng)kill掉。那么接下來的問題就是我們該怎樣給一段內(nèi)存添加上權(quán)限信息呢?顯然我們需要一張“表”,這張表中記錄一段內(nèi)存區(qū)域并且記錄下訪問這塊內(nèi)存所需要的權(quán)限信息,類似這樣:

序號   起始地址   長度     所需權(quán)限
0 0x7c00 0x1000 0
1 0x9a00 0x2000 3
...

當(dāng)CPU試圖訪問這段內(nèi)存區(qū)域時會根據(jù)CPU自身所在的權(quán)限(內(nèi)核態(tài)或者用戶態(tài))與這段內(nèi)存需要的權(quán)限進行比對,只有當(dāng)CPU所在權(quán)限比訪問這段內(nèi)存所需要的權(quán)限高或者相等時才能讀寫這段內(nèi)存,否則將觸發(fā)異常。

假設(shè)CPU當(dāng)前正在執(zhí)行用戶態(tài)程序,也就是運行在用戶態(tài),因此其權(quán)限等級為3,此時如果CPU試圖訪問第0號內(nèi)存塊時發(fā)現(xiàn)讀寫該內(nèi)存塊所需要的權(quán)限為0(內(nèi)核態(tài)),這時CPU本身將產(chǎn)生異常,該異常將被操作系統(tǒng)捕獲,此時操作系統(tǒng)會發(fā)現(xiàn)應(yīng)用程序試圖讀寫程序不具備權(quán)限的內(nèi)存,因此操作系統(tǒng)手起刀落將該進程kill掉,這樣操作系統(tǒng)就保證了自己的內(nèi)存區(qū)域不會被普通程序所讀寫。

圖片

就這樣操作系統(tǒng)成功保護了自己的內(nèi)存數(shù)據(jù)以及機器指令。

現(xiàn)在是時候總結(jié)一下了。

為了將操作系統(tǒng)和普通程序區(qū)別開來,我們需要給機器指令賦予權(quán)限等級,該權(quán)限信息會保存在CPU中,顯然CPU中需要特定寄存器來保存該信息,于此同時我們也為內(nèi)存區(qū)域賦予了權(quán)限等級,只有當(dāng)前CPU的權(quán)限大于或者等于該內(nèi)存區(qū)域所需權(quán)限時才能讀寫,這就要求有一張“表”來保存內(nèi)存起始地址、長度、權(quán)限等信息,這張表就是所謂的Global Descriptor Table,GDT,以及Local Descriptor Table,LDT。

內(nèi)核所在內(nèi)存區(qū)域以及一些共享內(nèi)存區(qū)域信息就保存在GDT中,這就是叫做Global的原因,而進程所在的內(nèi)存區(qū)域(私有)信息則保存在LDT中,這就是為什么叫做Local。

具備這些能力的x86 CPU就被稱為保護模式,Inter處理器從80286開始引入保護模式,可以看到與x86早前的實模式相比,保護模式開始有了質(zhì)的飛躍。

從實模式到保護模式

我們在之前的文章中說過,x86是一個有著頑強生命力的物種,其它大部分類型的CPU在計算機不長的歷史中逐漸消失了,而x86則歷久彌新,也因此x86歷史包袱十分沉重,即使是最新款的intel x86處理器也可以運行上世紀(jì)編寫的古老程序,為做到向后兼容,intel x86程序必須既能運行在實模式下也能運行在保護模式下。

圖片

因此x86處理器在加電會首先進入實模式然后切換到保護模式,現(xiàn)代操作系統(tǒng)都運行在保護模式下,正是利用了處理器的一系列特性操作系統(tǒng)才得以保護自己。

算上前一篇《徹底操作系統(tǒng):CPU與實模式?》以及到目前為止,我們看到的x86內(nèi)存管理都是基于段式機制,Segmentation來管理內(nèi)存的,實際上x86處理器在引入保護模式的同時也開始支持頁式內(nèi)存管理(paging),因此現(xiàn)代x86處理器即支持段式內(nèi)存管理也支持頁式內(nèi)存管理,只不過對于現(xiàn)代操作系統(tǒng)像Linux等實際上幾乎不再使用處理器提供的段式內(nèi)存管理機制而是基于頁式內(nèi)存管理機制。

從這里我們也能看出來,內(nèi)存管理機制其實是處理器這種硬件提供的,操作系統(tǒng)(軟件)只不過這種機制的使用者而已。好啦,這篇文章就先到這里,實際上這里還有很多內(nèi)容沒有講解完,GDT、LDT長什么樣子?怎么使用?具體該怎樣從實模式切換到保護模式等等,這些內(nèi)容將在后續(xù)章節(jié)中介紹。?

責(zé)任編輯:武曉燕 來源: 碼農(nóng)的荒島求生
相關(guān)推薦

2009-12-15 18:02:45

2023-07-06 00:45:05

Linux保護模式

2011-09-06 09:47:21

WindowsVistIE7保護模式

2022-07-28 09:44:04

內(nèi)存實模式保護模式

2022-06-01 08:16:12

CPU實模式操作系統(tǒng)

2012-01-12 12:15:14

2010-05-07 11:55:13

Unix操作系統(tǒng)

2021-03-07 00:32:43

信息安全隱私互聯(lián)網(wǎng)

2009-02-19 16:57:51

IE8新特性保護模式

2013-11-13 16:02:41

IE11瀏覽器微軟

2018-06-12 15:53:30

2013-08-27 10:24:01

2018-03-01 06:44:39

災(zāi)難恢復(fù)數(shù)據(jù)安全DRaaS

2017-12-19 20:35:22

程序員中興事件自殺

2022-07-05 17:49:34

元宇宙安全隱私保護

2017-05-02 21:49:31

零丟失保護模式選擇

2022-07-29 10:42:51

Linux隱私

2012-06-29 15:01:46

2009-08-08 21:10:01

2022-03-23 16:03:51

加密貨幣私鑰網(wǎng)絡(luò)安全
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 一级午夜aaa免费看三区 | 在线伊人 | 久久网亚洲 | 亚洲激情一级片 | 成人在线电影网站 | 国产成人免费在线观看 | 国产美女在线看 | 欧美激情综合五月色丁香小说 | 国产视频精品免费 | 综合久久av | 国产精品视频不卡 | 天天操 天天操 | 91欧美激情一区二区三区成人 | 三级在线视频 | 狠狠涩 | 99热热精品 | 日韩电影免费观看中文字幕 | 福利视频一区二区三区 | 在线观看中文字幕一区二区 | 在线亚洲一区 | 麻豆国产一区二区三区四区 | 中文字幕亚洲精品在线观看 | 欧美日韩综合一区 | 北条麻妃99精品青青久久 | 国产成人精品午夜视频免费 | 国产精品久久久久久久久免费桃花 | 久色激情 | 国内精品久久久久 | 久久999| 亚洲一区二区三区在线视频 | 男女视频在线观看免费 | 亚洲成人高清 | 免费网站国产 | 免费在线观看一级毛片 | www.国产精| 久久91精品| 亚洲免费观看视频网站 | 国产成人亚洲精品 | 日本一区二区在线视频 | 亚洲一区二区三 | 国产视频一区二区 |