在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

以32位系統(tǒng)為例介紹內(nèi)核空間和用戶空間

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:sparkdev ? 2020-11-12 17:41 ? 次閱讀

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

內(nèi)核空間和用戶空間

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

操作系統(tǒng)的核心是內(nèi)核(kernel),它獨(dú)立于普通的應(yīng)用程序,可以訪問受保護(hù)的內(nèi)存空間,也有訪問底層硬件設(shè)備的所有權(quán)限。為了保證內(nèi)核的安全,現(xiàn)在的操作系統(tǒng)一般都強(qiáng)制用戶進(jìn)程不能直接操作內(nèi)核。

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

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

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

為什么需要區(qū)分內(nèi)核空間與用戶空間

CPU 的所有指令中,有些指令是非常危險(xiǎn)的,如果錯(cuò)用,將導(dǎo)致系統(tǒng)崩潰,比如清內(nèi)存、設(shè)置時(shí)鐘等。如果允許所有的程序都可以使用這些指令,那么系統(tǒng)崩潰的概率將大大增加。

所以,CPU 將指令分為特權(quán)指令和非特權(quán)指令,對(duì)于那些危險(xiǎn)的指令,只允許操作系統(tǒng)及其相關(guān)模塊使用,普通應(yīng)用程序只能使用那些不會(huì)造成災(zāi)難的指令。

比如 Intel 的 CPU 將特權(quán)等級(jí)分為 4 個(gè)級(jí)別:Ring0~Ring3。其實(shí) Linux 系統(tǒng)只使用了 Ring0 和 Ring3 兩個(gè)運(yùn)行級(jí)別(Windows 系統(tǒng)也是一樣的)。

當(dāng)進(jìn)程運(yùn)行在 Ring3 級(jí)別時(shí)被稱為運(yùn)行在用戶態(tài),而運(yùn)行在 Ring0 級(jí)別時(shí)被稱為運(yùn)行在內(nèi)核態(tài)。

內(nèi)核態(tài)與用戶態(tài)

好了我們現(xiàn)在需要再解釋一下什么是內(nèi)核態(tài)、用戶態(tài):「當(dāng)進(jìn)程運(yùn)行在內(nèi)核空間時(shí)就處于內(nèi)核態(tài),而進(jìn)程運(yùn)行在用戶空間時(shí)則處于用戶態(tài)。」

在內(nèi)核態(tài)下,進(jìn)程運(yùn)行在內(nèi)核地址空間中,此時(shí) CPU 可以執(zhí)行任何指令。運(yùn)行的代碼也不受任何的限制,可以自由地訪問任何有效地址,也可以直接進(jìn)行端口的訪問。

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

對(duì)于以前的 DOS 操作系統(tǒng)來說,是沒有內(nèi)核空間、用戶空間以及內(nèi)核態(tài)、用戶態(tài)這些概念的。可以認(rèn)為所有的代碼都是運(yùn)行在內(nèi)核態(tài)的,因而用戶編寫的應(yīng)用程序代碼可以很容易的讓操作系統(tǒng)崩潰掉。

對(duì)于 Linux 來說,通過區(qū)分內(nèi)核空間和用戶空間的設(shè)計(jì),隔離了操作系統(tǒng)代碼(操作系統(tǒng)的代碼要比應(yīng)用程序的代碼健壯很多)與應(yīng)用程序代碼。

即便是單個(gè)應(yīng)用程序出現(xiàn)錯(cuò)誤也不會(huì)影響到操作系統(tǒng)的穩(wěn)定性,這樣其它的程序還可以正常的運(yùn)行(Linux 可是個(gè)多任務(wù)系統(tǒng)啊!)。

「所以,區(qū)分內(nèi)核空間和用戶空間本質(zhì)上是要提高操作系統(tǒng)的穩(wěn)定性及可用性。」

如何從用戶空間進(jìn)入內(nèi)核空間

其實(shí)所有的系統(tǒng)資源管理都是在內(nèi)核空間中完成的。比如讀寫磁盤文件,分配回收內(nèi)存,從網(wǎng)絡(luò)接口讀寫數(shù)據(jù)等等。

我們的應(yīng)用程序是無法直接進(jìn)行這樣的操作的。但是我們可以通過內(nèi)核提供的接口來完成這樣的任務(wù)。

比如應(yīng)用程序要讀取磁盤上的一個(gè)文件,它可以向內(nèi)核發(fā)起一個(gè) "系統(tǒng)調(diào)用" 告訴內(nèi)核:"我要讀取磁盤上的某某文件"。

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

此時(shí)應(yīng)用程序已經(jīng)從系統(tǒng)調(diào)用中返回并且拿到了想要的數(shù)據(jù),可以開開心心的往下執(zhí)行了。簡(jiǎn)單說就是應(yīng)用程序把高科技的事情(從磁盤讀取文件)外包給了系統(tǒng)內(nèi)核,系統(tǒng)內(nèi)核做這些事情既專業(yè)又高效。

對(duì)于一個(gè)進(jìn)程來講,從用戶空間進(jìn)入內(nèi)核空間并最終返回到用戶空間,這個(gè)過程是十分復(fù)雜的。舉個(gè)例子,比如我們經(jīng)常接觸的概念 "堆棧",其實(shí)進(jìn)程在內(nèi)核態(tài)和用戶態(tài)各有一個(gè)堆棧。

運(yùn)行在用戶空間時(shí)進(jìn)程使用的是用戶空間中的堆棧,而運(yùn)行在內(nèi)核空間時(shí),進(jìn)程使用的是內(nèi)核空間中的堆棧。所以說,Linux 中每個(gè)進(jìn)程有兩個(gè)棧,分別用于用戶態(tài)和內(nèi)核態(tài)。

下圖簡(jiǎn)明的描述了用戶態(tài)與內(nèi)核態(tài)之間的轉(zhuǎn)換:

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

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

整體結(jié)構(gòu)

接下來我們從內(nèi)核空間和用戶空間的角度看一看整個(gè) Linux 系統(tǒng)的結(jié)構(gòu)。它大體可以分為三個(gè)部分,從下往上依次為:硬件 -> 內(nèi)核空間 -> 用戶空間。如下圖所示(此圖來自互聯(lián)網(wǎng)):

在硬件之上,內(nèi)核空間中的代碼控制了硬件資源的使用權(quán),用戶空間中的代碼只有通過內(nèi)核暴露的系統(tǒng)調(diào)用接口(System Call Interface)才能使用到系統(tǒng)中的硬件資源。其實(shí),不光是 Linux,Windows 操作系統(tǒng)的設(shè)計(jì)也是大同小異。

實(shí)際上我們可以將每個(gè)處理器在任何指定時(shí)間點(diǎn)上的活動(dòng)概括為下列三者之一:

運(yùn)行于用戶空間,執(zhí)行用戶進(jìn)程。

運(yùn)行于內(nèi)核空間,處于進(jìn)程上下文,代表某個(gè)特定的進(jìn)程執(zhí)行。

運(yùn)行于內(nèi)核空間,處于中斷上下文,與任何進(jìn)程無關(guān),處理某個(gè)特定的中斷。

以上三點(diǎn)幾乎包括所有的情況,比如當(dāng) CPU 空閑時(shí),內(nèi)核就運(yùn)行一個(gè)空進(jìn)程,處于進(jìn)程上下文,但運(yùn)行在內(nèi)核空間。

說明:Linux 系統(tǒng)的中斷服務(wù)程序不在進(jìn)程的上下文中執(zhí)行,它們?cè)谝粋€(gè)與所有進(jìn)程都無關(guān)的、專門的中斷上下文中執(zhí)行。

之所以存在一個(gè)專門的執(zhí)行環(huán)境,就是為了保證中斷服務(wù)程序能夠在第一時(shí)間響應(yīng)和處理中斷請(qǐng)求,然后快速地退出。

總結(jié)

現(xiàn)代的操作系統(tǒng)大都通過內(nèi)核空間和用戶空間的設(shè)計(jì)來保護(hù)操作系統(tǒng)自身的安全性和穩(wěn)定性。所以在我們閱讀有關(guān)操作系統(tǒng)的資料時(shí)經(jīng)常遇到內(nèi)核空間、用戶空間和內(nèi)核態(tài)、用戶態(tài)等概念,希望本文能夠幫助您理解這些基本的概念。

責(zé)任編輯:xj

原文標(biāo)題:Linux系統(tǒng)中,為什么需要區(qū)分內(nèi)核空間與用戶空間?

文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5122

    文章

    19423

    瀏覽量

    312775
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1402

    瀏覽量

    40916
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11414

    瀏覽量

    212249

原文標(biāo)題:Linux系統(tǒng)中,為什么需要區(qū)分內(nèi)核空間與用戶空間?

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    VirtualLab Fusion應(yīng)用:多層超表面空間板的模擬

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

    如何在Linux內(nèi)核5.18版本之后和64架構(gòu)中從內(nèi)核空間調(diào)用ioctl?

    我嘗試在最近的內(nèi)核中重新構(gòu)建以前版本 (4.19) 的 Linux 設(shè)備驅(qū)動(dòng)程序,即嵌入式平臺(tái)上的 6.1.22,ARM64 架構(gòu)。 驅(qū)動(dòng)程序管理 tty 設(shè)備。 當(dāng)我調(diào)用類似于用戶空間
    發(fā)表于 04-02 06:06

    請(qǐng)問Linux用戶空間可以調(diào)用SCFW API嗎?

    還是僅內(nèi)核空間作? 我想在 Linux 中 imx8 Quad Max 燒錄保險(xiǎn)絲,由于產(chǎn)品的設(shè)計(jì),使用 uboot/串行加載器是有問題的。
    發(fā)表于 03-31 07:50

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間用戶空間的數(shù)據(jù)拷貝之獲取用戶空間數(shù)據(jù)

    例程代碼路徑:ELF 1開發(fā)板資料包\\03-例程源碼\\03-2 驅(qū)動(dòng)例程源碼\\03_內(nèi)核空間用戶空間的數(shù)據(jù)拷貝\\copy_form_user 在copy_to_user.c源
    發(fā)表于 03-22 09:25

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間用戶空間的數(shù)據(jù)拷貝之獲取內(nèi)核空間數(shù)據(jù)

    例程代碼路徑:ELF 1開發(fā)板資料包\\03-例程源碼\\03-2 驅(qū)動(dòng)例程源碼\\03_內(nèi)核空間用戶空間的數(shù)據(jù)拷貝\\copy_to_user 在mydevice-auto.c源碼
    發(fā)表于 03-21 14:00

    飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間用戶空間的數(shù)據(jù)拷貝之獲取用戶空間數(shù)據(jù)

    例程代碼路徑:ELF 1開發(fā)板資料包\\03-例程源碼\\03-2 驅(qū)動(dòng)例程源碼\\03_內(nèi)核空間用戶空間的數(shù)據(jù)拷貝\\copy_form_user 在copy_to_user.c源
    發(fā)表于 03-21 13:58

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間用戶空間的數(shù)據(jù)拷貝之?dāng)?shù)據(jù)拷貝介紹

    本帖最后由 jf_13411809 于 2025-3-20 14:10 編輯 在Linux系統(tǒng)中,內(nèi)核空間用戶空間是兩個(gè)獨(dú)立的地址
    發(fā)表于 03-20 11:50

    飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間用戶空間的數(shù)據(jù)拷貝之獲取內(nèi)核空間數(shù)據(jù)

    本帖最后由 jf_13411809 于 2025-3-20 14:09 編輯 例程代碼路徑:ELF 1開發(fā)板資料包\\03-例程源碼\\03-2 驅(qū)動(dòng)例程源碼\\03_內(nèi)核空間用戶空間
    發(fā)表于 03-20 11:48

    飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間用戶空間的數(shù)據(jù)拷貝之?dāng)?shù)據(jù)拷貝介紹

    在Linux系統(tǒng)中,內(nèi)核空間用戶空間是兩個(gè)獨(dú)立的地址空間,它們有不同的訪問權(quán)限和內(nèi)存保護(hù)機(jī)制。
    發(fā)表于 03-19 08:55

    設(shè)計(jì)相位型空間光調(diào)制器生成高帽光束

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

    電壓空間矢量與磁鏈?zhǔn)噶康年P(guān)系是什么

    電壓空間矢量與磁鏈?zhǔn)噶康年P(guān)系在電機(jī)控制和變頻調(diào)速系統(tǒng)中具有重要地位。以下是對(duì)這兩者關(guān)系的介紹: 一、基本概念 電壓空間矢量 : 又名“空間
    的頭像 發(fā)表于 10-12 15:12 ?1570次閱讀

    linux驅(qū)動(dòng)程序運(yùn)行在什么空間

    空間擁有對(duì)硬件的直接訪問權(quán)限,而用戶空間則受到限制,保護(hù)系統(tǒng)的穩(wěn)定性和安全性。 1. Linux 內(nèi)核
    的頭像 發(fā)表于 08-30 14:37 ?702次閱讀

    操作系統(tǒng)的內(nèi)存布局介紹

    32操作系統(tǒng)的內(nèi)存布局很經(jīng)典,很多書籍都是以32系統(tǒng)例子去講解的。32
    的頭像 發(fā)表于 08-07 15:47 ?666次閱讀
    操作<b class='flag-5'>系統(tǒng)</b>的內(nèi)存布局<b class='flag-5'>介紹</b>

    達(dá)實(shí)智能AIoT空間場(chǎng)景控制系統(tǒng)概述

    面對(duì)當(dāng)前建筑空間智能化實(shí)施運(yùn)營(yíng)中存在的子系統(tǒng)不互通、控制延時(shí)、運(yùn)維成本高、面板復(fù)雜不統(tǒng)一等問題,達(dá)實(shí)通過分割整體建筑單元空間,集成空間環(huán)境
    的頭像 發(fā)表于 07-30 11:27 ?1086次閱讀

    地下人防空間環(huán)境檢測(cè)儀介紹

    地下人防空間環(huán)境檢測(cè)儀介紹
    的頭像 發(fā)表于 07-01 11:05 ?463次閱讀
    地下人防<b class='flag-5'>空間</b>環(huán)境檢測(cè)儀<b class='flag-5'>介紹</b>
    主站蜘蛛池模板: 18年大片免费在线观看 | 亚洲黄色录像 | 99久久99久久精品国产 | 成人mv高清在线 | 欧美亚洲韩国国产综合五月天 | 欧美四虎影院 | 一本大道一卡二卡四卡 | 永久福利盒子日韩日韩免费看 | 色一乱一伦一区一直爽 | 亚洲免费色视频 | 免费看一级大片 | 国内精品91久久久久 | 日韩欧美一卡二区 | 国模精品视频一区二区三区 | 国产成人亚洲精品77 | 精品一区二区三区18 | 视频一区视频二区在线观看 | 一级毛片免费全部播放完整 | 男人j进入女人j在线视频 | xxxxxx日本老师hd68 | 国产亚洲视频在线 | 午夜综合网| 在线视频 二区 | 丁香伊人五月综合激激激 | 欧美freesex10一13 | 天天躁夜夜躁狠狠躁2021 | 91色在线视频| 久久久精品波多野结衣 | 国产乱理论片在线观看理论 | 美女和帅哥在床上玩的不可描述 | 亚洲欧洲一区二区三区在线 | 欧美成人午夜精品免费福利 | 日本人zzzwww| 天天干夜夜欢 | 天天躁夜夜躁狠狠躁2018a | 久久久久久久综合狠狠综合 | 永久免费在线看 | 亚洲狠狠网站色噜噜 | 亚洲欧美在线一区 | 日在线视频 | 一区二区精品 |