吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡述操作系統的保護機制

jf_78858299 ? 來源:碼農的荒島求生 ? 作者:陸小風 ? 2023-02-15 14:48 ? 次閱讀

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

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

我們從歷史的角度了解了x86最開始是沒有任何保護機制的,應用程序竟然可以與操作系統平起平坐,操作系統能讀寫的內存區域應用程序也一樣可以讀寫,操作系統可以控制的硬件應用程序一樣不在話下。

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

程序也是分三六九等的

核心就在一點: 權限 。

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

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

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

圖片

然而,CPU也不能對此一點都不關心,CPU必須能區分出哪些指令屬于操作系統,哪些指令屬于普通的應用程序!

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

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

圖片

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

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

圖片

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

訪問內存也需要權限

答案和我們剛才講解的機器指令的特權劃分是一樣的。

我們規定操作系統所在的內存區域只有CPU處于內核態時才可以訪問,如果位于用戶態的程序試圖訪問內核所在的地址空間那么將立刻被操作系統kill掉。

那么接下來的問題就是我們該怎樣給一段內存添加上權限信息呢?

顯然我們需要一張“表”,這張表中記錄一段內存區域并且記錄下訪問這塊內存所需要的權限信息,類似這樣:

序號   起始地址   長度     所需權限0     0x7c00    0x1000  01     0x9a00    0x2000  3...

當CPU試圖訪問這段內存區域時會根據CPU自身所在的權限(內核態或者用戶態)與這段內存需要的權限進行比對,只有當CPU所在權限比訪問這段內存所需要的權限高或者相等時才能讀寫這段內存,否則將觸發異常。

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

圖片

就這樣操作系統成功保護了自己的內存數據以及機器指令。

現在是時候總結一下了。

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

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

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

從實模式到保護模式

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

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

我們看到的x86內存管理都是基于段式機制,Segmentation來管理內存的,實際上x86處理器在引入保護模式的同時也開始支持頁式內存管理(paging),因此現代x86處理器即支持段式內存管理也支持頁式內存管理,只不過對于現代操作系統像Linux等實際上幾乎不再使用處理器提供的段式內存管理機制而是基于頁式內存管理機制。

從這里我們也能看出來,內存管理機制其實是處理器這種硬件提供的,操作系統(軟件)只不過這種機制的使用者而已。

好啦,這篇文章就先到這里,實際上這里還有很多內容沒有講解完,GDT、LDT長什么樣子?怎么使用?具體該怎樣從實模式切換到保護模式等等,這些內容將在后續章節中介紹。

希望這篇文章對大家理解操作系統的保護機制有所幫助。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    6892

    瀏覽量

    123742
  • 程序
    +關注

    關注

    117

    文章

    3795

    瀏覽量

    81411
收藏 人收藏

    評論

    相關推薦

    實時操作系統和分時操作系統的區別

    操作系統能否滿足實時性要求來區分,可把操作系統分成分時操作系統和實時操作系統,分時操作系統按照相等的時間片調度進程輪流運行,分時操作系統
    發表于 11-14 17:39 ?1.3w次閱讀

    μC/OSII操作系統的中斷機制和中斷應滿足的條件是什么

    本文以開源的嵌入式操作系統μC/OSII為例,分析了操作系統的中斷機制和中斷應滿足的條件。介紹了μC/OSII系統時鐘節拍,探討了時鐘中斷函數中存在的不足,并且給出了解決方案,從而有效
    發表于 04-27 06:33

    嵌入式技術簡述

    1.嵌入式技術簡述(1)概念: 在已有的硬件上移植操作系統,在操作系統上做層應用開發以及在操作系統之下做底層開發;(2)操作系統:管理資源(
    發表于 10-27 06:49

    STM32CubeProgrammer解除讀保護的方法簡述

    操作系統,圖形用戶界面或命令行界面,支持多種連接選擇(JTAG、SWD、USB、UART),采用手動操作或通過腳本自動操作。很多情況下,我們為了程序安全,都會在燒錄時,使能讀保護功能,
    發表于 02-14 06:29

    一文讀懂RT-Thread操作系統的郵箱機制

    RT-Thread操作系統的郵箱有何作用?RT-Thread操作系統的郵箱機制管理數據結構是怎樣的?
    發表于 02-28 08:10

    嵌入式實時操作系統VxWorks內核調度機制研究

    嵌入式實時操作系統VxWorks內核調度機制研究
    發表于 03-29 12:26 ?13次下載

    基于OSEK/DX操作系統的任務管理機制設計

    基于OSEK/VDX操作系統的任務管理機制設計:在汽車電子仿真控制平臺開發領域,通常需要遵循OSEKIVDX規范集,而該規范集的核心之一便是OSEK/VDX操作系統規范。要設計一個符合該規
    發表于 04-21 22:02 ?19次下載

    Linux操作系統原理及應用

    Linux操作系統原理及應用 1.1  操作系統的地位 1.2  操作系統的功能 1.3  操作系統的發展過程 1.4 
    發表于 04-28 14:53 ?0次下載

    linux操作系統的安全性

    linux操作系統的安全性 計算機系統安全性的內涵 操作系統的安全性功能 操作系統的安全機制 安全
    發表于 04-28 15:05 ?0次下載

    Linux操作系統簡述

    Linux操作系統簡述一、計算機軟件與操作系統  功能強大的計算機自從走進了人類的生活就發揮著越來越重要的作用,隨著時代的發展,計算機已
    發表于 01-18 12:43 ?1235次閱讀

    硬盤保護卡的接口類型 /操作系統

    硬盤保護卡的接口類型 /操作系統  接口類型     
    發表于 12-26 15:39 ?703次閱讀

    RTOS操作系統

    RTOS操作系統RTOS操作系統RTOS操作系統RTOS操作系統RTOS操作系統
    發表于 12-28 15:30 ?0次下載

    基于UEFI固件的操作系統完整性度量機制

    操作系統是計算機硬件和軟件的紐帶,是應用軟件運行的基礎環境,而內核的安全性是操作系統安全的核心問題,若操作系統內核受到攻擊,會對操作系統以及應用程序造成重大的威脅。 UEFI (Uni
    發表于 11-30 17:27 ?0次下載
    基于UEFI固件的<b class='flag-5'>操作系統</b>完整性度量<b class='flag-5'>機制</b>

    操作系統內核中高效保護應用程序的方法

    在現代操作系統中,內核運行在最高特權層,管理底層硬件并向上層應用程序提供系統服務,因而安全敏感的應用程序很容易受到來自底層不可信內核的攻擊,提出了一種在不可信操作系統內核中保護應用程序
    發表于 01-15 16:45 ?0次下載
    <b class='flag-5'>操作系統</b>內核中高效<b class='flag-5'>保護</b>應用程序的方法

    解析操作系統的概念、結構和機制

    全面。解析操作系統的概念、結構和機制。
    發表于 03-26 14:19 ?8次下載
    大发888真钱| 百家乐vshow| 澳门百家乐官网游戏皇冠网| 玩百家乐的玩法技巧和规则| 百家乐官网的桌布| 星空棋牌官方下载| 百家乐技术辅助软件| 网上百家乐官网是真是假天涯论坛| 明升88 | 赌百家乐的计划跟策略| 澳门百家乐官网经| 百家乐官网最好的投注法| 大发888娱乐城在线存款| 最好的百家乐博彩公司| 百家乐官网双峰县| 海宁市| 大发888娱乐城论坛| 至尊百家乐2014| 百家乐官网玩法开户彩公司| 娱乐城官网| 百家乐预约| 百家乐官网技巧玩法技巧| 大发888送58体验金| 百家乐赌场凯时娱乐| 百家乐官网大光明影院| 网上百家乐官网辅助软件| 立博足球投注网| 威尼斯人娱乐场 澳门赌场| 嬴澳门百家乐的公式| 新濠峰百家乐官网的玩法技巧和规则 | 保单百家乐游戏机| 百家乐官网大天堂| 百家乐官网盛大娱乐城城| 大发888是什么游戏| 百家乐技巧方法| 百家乐游戏策略| 百家乐官网图淑何看| 百家乐官网在线怎么玩| 海王星国际| 大发888注册账号| 百家乐博彩公|