色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

以32位系統為例介紹內核空間和用戶空間

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:sparkdev ? 2020-11-12 17:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文以 32 位系統為例介紹內核空間(kernel space)和用戶空間(user space)。

內核空間和用戶空間

對 32 位操作系統而言,它的尋址空間(虛擬地址空間,或叫線性地址空間)為 4G(2的32次方)。也就是說一個進程的最大地址空間為 4G。

操作系統的核心是內核(kernel),它獨立于普通的應用程序,可以訪問受保護的內存空間,也有訪問底層硬件設備的所有權限。為了保證內核的安全,現在的操作系統一般都強制用戶進程不能直接操作內核。

具體的實現方式基本都是由操作系統將虛擬地址空間劃分為兩部分,一部分為內核空間,另一部分為用戶空間。針對 Linux 操作系統而言,最高的 1G 字節(從虛擬地址 0xC0000000 到 0xFFFFFFFF)由內核使用,稱為內核空間。而較低的 3G 字節(從虛擬地址 0x00000000 到 0xBFFFFFFF)由各個進程使用,稱為用戶空間。

對上面這段內容我們可以這樣理解:「每個進程的 4G 地址空間中,最高 1G 都是一樣的,即內核空間。只有剩余的 3G 才歸進程自己使用。」

「換句話說就是, 最高 1G 的內核空間是被所有進程共享的!」下圖描述了每個進程 4G 地址空間的分配情況(此圖來自互聯網):

為什么需要區分內核空間與用戶空間

CPU 的所有指令中,有些指令是非常危險的,如果錯用,將導致系統崩潰,比如清內存、設置時鐘等。如果允許所有的程序都可以使用這些指令,那么系統崩潰的概率將大大增加。

所以,CPU 將指令分為特權指令和非特權指令,對于那些危險的指令,只允許操作系統及其相關模塊使用,普通應用程序只能使用那些不會造成災難的指令。

比如 Intel 的 CPU 將特權等級分為 4 個級別:Ring0~Ring3。其實 Linux 系統只使用了 Ring0 和 Ring3 兩個運行級別(Windows 系統也是一樣的)。

當進程運行在 Ring3 級別時被稱為運行在用戶態,而運行在 Ring0 級別時被稱為運行在內核態。

內核態與用戶態

好了我們現在需要再解釋一下什么是內核態、用戶態:「當進程運行在內核空間時就處于內核態,而進程運行在用戶空間時則處于用戶態。」

在內核態下,進程運行在內核地址空間中,此時 CPU 可以執行任何指令。運行的代碼也不受任何的限制,可以自由地訪問任何有效地址,也可以直接進行端口的訪問。

在用戶態下,進程運行在用戶地址空間中,被執行的代碼要受到 CPU 的諸多檢查,它們只能訪問映射其地址空間的頁表項中規定的在用戶態下可訪問頁面的虛擬地址,且只能對任務狀態段(TSS)中 I/O 許可位圖(I/O Permission Bitmap)中規定的可訪問端口進行直接訪問。

對于以前的 DOS 操作系統來說,是沒有內核空間、用戶空間以及內核態、用戶態這些概念的。可以認為所有的代碼都是運行在內核態的,因而用戶編寫的應用程序代碼可以很容易的讓操作系統崩潰掉。

對于 Linux 來說,通過區分內核空間和用戶空間的設計,隔離了操作系統代碼(操作系統的代碼要比應用程序的代碼健壯很多)與應用程序代碼。

即便是單個應用程序出現錯誤也不會影響到操作系統的穩定性,這樣其它的程序還可以正常的運行(Linux 可是個多任務系統啊!)。

「所以,區分內核空間和用戶空間本質上是要提高操作系統的穩定性及可用性。」

如何從用戶空間進入內核空間

其實所有的系統資源管理都是在內核空間中完成的。比如讀寫磁盤文件,分配回收內存,從網絡接口讀寫數據等等。

我們的應用程序是無法直接進行這樣的操作的。但是我們可以通過內核提供的接口來完成這樣的任務。

比如應用程序要讀取磁盤上的一個文件,它可以向內核發起一個 "系統調用" 告訴內核:"我要讀取磁盤上的某某文件"。

其實就是通過一個特殊的指令讓進程從用戶態進入到內核態(到了內核空間),在內核空間中,CPU 可以執行任何的指令,當然也包括從磁盤上讀取數據。具體過程是先把數據讀取到內核空間中,然后再把數據拷貝到用戶空間并從內核態切換到用戶態。

此時應用程序已經從系統調用中返回并且拿到了想要的數據,可以開開心心的往下執行了。簡單說就是應用程序把高科技的事情(從磁盤讀取文件)外包給了系統內核,系統內核做這些事情既專業又高效。

對于一個進程來講,從用戶空間進入內核空間并最終返回到用戶空間,這個過程是十分復雜的。舉個例子,比如我們經常接觸的概念 "堆棧",其實進程在內核態和用戶態各有一個堆棧。

運行在用戶空間時進程使用的是用戶空間中的堆棧,而運行在內核空間時,進程使用的是內核空間中的堆棧。所以說,Linux 中每個進程有兩個棧,分別用于用戶態和內核態。

下圖簡明的描述了用戶態與內核態之間的轉換:

既然用戶態的進程必須切換成內核態才能使用系統的資源,那么我們接下來就看看進程一共有多少種方式可以從用戶態進入到內核態。

概括的說,有三種方式:系統調用、軟中斷和硬件中斷。這三種方式每一種都涉及到大量的操作系統知識,所以這里不做展開。

整體結構

接下來我們從內核空間和用戶空間的角度看一看整個 Linux 系統的結構。它大體可以分為三個部分,從下往上依次為:硬件 -> 內核空間 -> 用戶空間。如下圖所示(此圖來自互聯網):

在硬件之上,內核空間中的代碼控制了硬件資源的使用權,用戶空間中的代碼只有通過內核暴露的系統調用接口(System Call Interface)才能使用到系統中的硬件資源。其實,不光是 Linux,Windows 操作系統的設計也是大同小異。

實際上我們可以將每個處理器在任何指定時間點上的活動概括為下列三者之一:

運行于用戶空間,執行用戶進程。

運行于內核空間,處于進程上下文,代表某個特定的進程執行。

運行于內核空間,處于中斷上下文,與任何進程無關,處理某個特定的中斷。

以上三點幾乎包括所有的情況,比如當 CPU 空閑時,內核就運行一個空進程,處于進程上下文,但運行在內核空間。

說明:Linux 系統的中斷服務程序不在進程的上下文中執行,它們在一個與所有進程都無關的、專門的中斷上下文中執行。

之所以存在一個專門的執行環境,就是為了保證中斷服務程序能夠在第一時間響應和處理中斷請求,然后快速地退出。

總結

現代的操作系統大都通過內核空間和用戶空間的設計來保護操作系統自身的安全性和穩定性。所以在我們閱讀有關操作系統的資料時經常遇到內核空間、用戶空間和內核態、用戶態等概念,希望本文能夠幫助您理解這些基本的概念。

責任編輯:xj

原文標題:Linux系統中,為什么需要區分內核空間與用戶空間?

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

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

    關注

    5154

    文章

    19708

    瀏覽量

    318091
  • 內核
    +關注

    關注

    3

    文章

    1416

    瀏覽量

    41486
  • Linux
    +關注

    關注

    87

    文章

    11519

    瀏覽量

    214003

原文標題:Linux系統中,為什么需要區分內核空間與用戶空間?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    智能照明系統重塑建筑空間新生態

    的語言重新定義人與空間的互動方式。 智能照明系統猶如一敏銳的空間觀察者,通過遍布建筑各處的環境傳感器持續捕捉自然光變化、人員活動、空間使用
    的頭像 發表于 05-22 14:23 ?155次閱讀

    VirtualLab Fusion應用:多層超表面空間板的模擬

    表面制作空間板模型 分層超材料(\"空間板\")用于模仿自由空間中比元件實際厚度長得多的傳播,同時保持原始光學系統的成像特性。 分層介質元件 本用
    發表于 04-09 08:51

    如何在Linux內核5.18版本之后和64架構中從內核空間調用ioctl?

    我嘗試在最近的內核中重新構建以前版本 (4.19) 的 Linux 設備驅動程序,即嵌入式平臺上的 6.1.22,ARM64 架構。 驅動程序管理 tty 設備。 當我調用類似于用戶空間
    發表于 04-02 06:06

    請問Linux用戶空間可以調用SCFW API嗎?

    還是僅內核空間作? 我想在 Linux 中 imx8 Quad Max 燒錄保險絲,由于產品的設計,使用 uboot/串行加載器是有問題的。
    發表于 03-31 07:50

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-內核空間用戶空間的數據拷貝之獲取用戶空間數據

    例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\03_內核空間用戶空間的數據拷貝\\copy_form_user 在copy_to_user.c源
    發表于 03-22 09:25

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-內核空間用戶空間的數據拷貝之獲取內核空間數據

    例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\03_內核空間用戶空間的數據拷貝\\copy_to_user 在mydevice-auto.c源碼
    發表于 03-21 14:00

    飛凌嵌入式ElfBoard ELF 1板卡-內核空間用戶空間的數據拷貝之獲取用戶空間數據

    例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\03_內核空間用戶空間的數據拷貝\\copy_form_user 在copy_to_user.c源
    發表于 03-21 13:58

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-內核空間用戶空間的數據拷貝之數據拷貝介紹

    本帖最后由 jf_13411809 于 2025-3-20 14:10 編輯 在Linux系統中,內核空間用戶空間是兩個獨立的地址
    發表于 03-20 11:50

    飛凌嵌入式ElfBoard ELF 1板卡-內核空間用戶空間的數據拷貝之獲取內核空間數據

    本帖最后由 jf_13411809 于 2025-3-20 14:09 編輯 例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\03_內核空間用戶空間
    發表于 03-20 11:48

    飛凌嵌入式ElfBoard ELF 1板卡-內核空間用戶空間的數據拷貝之數據拷貝介紹

    在Linux系統中,內核空間用戶空間是兩個獨立的地址空間,它們有不同的訪問權限和內存保護機制。
    發表于 03-19 08:55

    設計相位型空間光調制器生成高帽光束

    、SNR,一致性偏差,雜散光評估 ?建模/設計 —基于迭代傅里葉變換算法(IFTA)設計位相傳遞函數,將高斯光束整形高帽光束 —場追跡:光在空間光調制器像素陣列的衍射。 2.系統圖示 3.建模與設計結果
    發表于 12-12 10:28

    電壓空間矢量與磁鏈矢量的關系是什么

    電壓空間矢量與磁鏈矢量的關系在電機控制和變頻調速系統中具有重要地位。以下是對這兩者關系的介紹: 一、基本概念 電壓空間矢量 : 又名“空間
    的頭像 發表于 10-12 15:12 ?2147次閱讀

    linux驅動程序運行在什么空間

    空間擁有對硬件的直接訪問權限,而用戶空間則受到限制,保護系統的穩定性和安全性。 1. Linux 內核
    的頭像 發表于 08-30 14:37 ?934次閱讀

    操作系統的內存布局介紹

    32操作系統的內存布局很經典,很多書籍都是以32系統例子去講解的。32
    的頭像 發表于 08-07 15:47 ?914次閱讀
    操作<b class='flag-5'>系統</b>的內存布局<b class='flag-5'>介紹</b>

    達實智能AIoT空間場景控制系統概述

    面對當前建筑空間智能化實施運營中存在的子系統不互通、控制延時、運維成本高、面板復雜不統一等問題,達實通過分割整體建筑單元空間,集成空間環境
    的頭像 發表于 07-30 11:27 ?1531次閱讀
    主站蜘蛛池模板: 亚洲精品天堂在线观看 | 国产精品国产三级国产an | 国产久爱青草视频在线观看 | 国产精品亚洲在钱视频 | 免费被靠视频动漫 | 樱桃视频影院在线播放 | 欧美 亚洲 另类 综合网 | www.青青草.com| 乳液全集电影在线观看 | 青草在线观看视频 | 欧美日韩中文在线字幕视频 | 伊人色综合久久天天 | 久久嫩草影院网站 | 一个人看www | 裸妇厨房风流在线观看 | 国产AV亚洲一区精午夜麻豆 | 青娱乐在线一区 | 成人在线免费 | 2021久久精品免费观看 | 国偷自产视频一区二区久 | 5566av资源| 性xxxx直播放免费 | 婷婷久久无码欧美人妻 | 性欧美FREE少妇XXX | 暖暖日本手机免费完整版在线观看 | 亚洲一区乱码电影在线 | 日韩免费一级毛片 | 精品国产国产精2020久久日 | 性生片30分钟 | 在线观看视频一区 | 小莹的性荡生活 | 超碰在线视频公开 | 制服的微热 | 色一伦一情一区二区三区 | 精品国产乱码久久久久久乱码 | 九九色精品国偷自产视频 | 一个人在线观看视频免费 | 99视频精品全部免费观看 | 老阿姨儿子一二三区 | 一个人视频日本在线观看 | 新图解av吧 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品