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

首頁 > 學院 > 操作系統 > 正文

處理器在 protected mode 下的 protection

2024-06-28 13:22:05
字體:
來源:轉載
供稿:網友
處理器在 PRotected mode 下的 protection前言

實模式,保護模式,分段,分頁,虛擬內存,內核態,用戶態,如果你對這些術語之間的關系非常熟悉,那就不用繼續看了。這篇主要記錄我對用戶態/內核態的一些理解,如有不對還請指教。

下述說明均為 x86-32 模式。

簡述

分段/分頁機制實現了邏輯地址到物理地址的轉換,為每個程序提供了自己獨立的虛擬內存空間,與其他應用程序進行隔離,防止修改其他程序相關數據。開啟了分頁機制之后,CPU 硬件會對所有代碼進行內存映射處理,不管是應用程序還是操作系統,都會使用虛擬內存機制。

對于4G 線性地址空間而言, linux 將最高 1G 空間映射為內存使用的空間,除去高端內存等小范圍概念,基本上內核的地址減去 PAGE_OFFSET 偏移就是其實際物理地址。注意這里我沒有說 4G 線性地址空間的主體,它的主體是所有的進程,甚至包括內核自身。 每個進程都有自己的 CR3 ,每個進程的 CR3 的地址映射的最高 1G 都是一樣的,是通用的內核本身。

剛開始啟動的時候內核是作為一個可執行程序啟動,但在啟動完成后當有系統調用時,內核代碼開始執行,此時它所使用的 CR3 還是原進程的 CR3,所以我們會說一個程序在內核態運行。

我們為什么需要用戶態/內核態之間的切換?

用戶態/內核態 不是原因,只是結果,只看結果是看不出什么的。引入 用戶態/內核態 的原因是因為 privilege level, 用戶態/內核態的區分只是實現 privilege protection 的一種形式,而這種方式依賴于 分段/分頁來實現。

內存隔離與保護 ----------------> 分段/分頁privilege(特權等級) ----------------> 用戶態/內核態

假設只有分段/分頁,其依賴于 GDT/LDT 與 CR3 寄存器指向的 page structure, 乍一看提供了隔離,但是如果沒有 privilege level 的保護,應用程序可以自己修改自己的 CR3 指向的內存映射,這個內存保護也就形同虛設了,更不用提一些危險的指令了。

假設只有privilege level,那也肯定不行,甚至連多程序運行都不可能。

所以說區分內核態/用戶態除了提供系統調用功能,更多的是進行 privilege 保護,不同模式下只允許運行對應的 CPU 指令。所有運行在內核態的代碼共享一個虛擬內存空間,也就是通過分段/分頁機制使得所有進程的 3G~4G 線性地址空間指向同一塊區域,也就是內核區域。從這個方面來看,此時操作系統不再是啟動時的可執行程序,更像是一個單例的共享庫一樣給所有進程使用。許多圖片上將操作系統畫成應用程序下的獨立一層應該更符號這個結構。

總結

之所以寫這篇文章是在自制操作系統的過程中對內核的虛擬地址配置有所疑問,不理解所有程序共用 3G~4G內存的原因,很多文章一上來就會告訴你這是內核態使用,我相信從 特權等級 的概念引申出去了解內核態和用戶態會更為簡單。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: SHOW| 鄢陵县| 内黄县| 珲春市| 大化| 定安县| 孙吴县| 南康市| 富裕县| 灵川县| 亚东县| 大同市| 盐城市| 崇信县| 西和县| 天气| 峨眉山市| 惠州市| 黑龙江省| 盐津县| 沂源县| 兴和县| 昭觉县| 乐陵市| 习水县| 阿巴嘎旗| 五峰| 合水县| 洱源县| 兰州市| 阿克陶县| 江都市| 新竹市| 万盛区| 塔河县| 曲靖市| 武邑县| 济宁市| 封丘县| 塘沽区| 句容市|