日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

Linux系統(tǒng)為什么需要區(qū)分內(nèi)核空間與用戶(hù)空間?

工程師 ? 來(lái)源:博客園 ? 作者:sparkdev ? 2020-10-14 14:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:sparkdev

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

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

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

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

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

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

為什么需要區(qū)分內(nèi)核空間與用戶(hù)空間在 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í)被稱(chēng)為運(yùn)行在用戶(hù)態(tài),而運(yùn)行在 Ring0 級(jí)別時(shí)被稱(chēng)為運(yùn)行在內(nèi)核態(tài)。

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

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

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

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

對(duì)于 Linux 來(lái)說(shuō),通過(guò)區(qū)分內(nèi)核空間和用戶(hù)空間的設(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)?。。?/p>

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

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

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

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

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

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

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

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

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

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

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

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

在硬件之上,內(nèi)核空間中的代碼控制了硬件資源的使用權(quán),用戶(hù)空間中的代碼只有通過(guò)內(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)行于用戶(hù)空間,執(zhí)行用戶(hù)進(jìn)程。

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

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

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

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

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

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

責(zé)任編輯:haq

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

    關(guān)注

    4

    文章

    1476

    瀏覽量

    43099
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11332

    瀏覽量

    225992
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7349

    瀏覽量

    95057
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11822

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    在 imx93 上設(shè)置 dm-crypt,一直存在 cbc-aes-tee 驅(qū)動(dòng)程序的穩(wěn)定性問(wèn)題,求解決

    。據(jù)我了解: 1. 使用用戶(hù)密鑰和 cbc-aes-ce。密鑰完全不受保護(hù),在用戶(hù)空間中以純文本形式提供。加密在內(nèi)核中處理。不是一個(gè)可行的選擇。 2. 使用 TEE 支持的可信密鑰和
    發(fā)表于 04-16 06:06

    如何理解Linux內(nèi)核中的PCIe驅(qū)動(dòng)

    我們習(xí)慣了用 Verilog 去死磕 PCIe 的底層協(xié)議狀態(tài)機(jī)。但一旦越過(guò)硬件邊界來(lái)到操作系統(tǒng)層面,Linux 內(nèi)核是如何接管并驅(qū)動(dòng)這些 PCI/PCIe 設(shè)備的呢?由于不同的 CPU 架構(gòu)實(shí)現(xiàn)了
    的頭像 發(fā)表于 04-11 17:22 ?1290次閱讀

    Linux磁盤(pán)空間告警的常見(jiàn)原因和診斷方法

    磁盤(pán)空間告警是運(yùn)維工作中最常見(jiàn)的告警類(lèi)型之一。當(dāng)磁盤(pán)空間耗盡時(shí),應(yīng)用程序無(wú)法寫(xiě)入日志、數(shù)據(jù)庫(kù)無(wú)法正常提交、容器無(wú)法創(chuàng)建新鏡像,甚至系統(tǒng)日志寫(xiě)入失敗會(huì)導(dǎo)致難以診斷的連鎖故障。本文從實(shí)際運(yùn)維經(jīng)驗(yàn)出發(fā),提供一套完整的磁盤(pán)
    的頭像 發(fā)表于 04-08 14:25 ?156次閱讀

    Linux下擴(kuò)充Swap交換空間:解決內(nèi)存不足的實(shí)用指南,這些影響要注意!

    大家在使用 Linux 系統(tǒng)(比如常用的 Ubuntu)時(shí),是不是偶爾會(huì)遇到 “內(nèi)存不足” 的彈窗?比如運(yùn)行大型編譯任務(wù)、多開(kāi)虛擬機(jī)、做數(shù)據(jù)分析,或者把 Linux 當(dāng)服務(wù)器用的時(shí)候,物理內(nèi)存一旦 “告急”,
    的頭像 發(fā)表于 02-09 16:33 ?569次閱讀
    <b class='flag-5'>Linux</b>下擴(kuò)充Swap交換<b class='flag-5'>空間</b>:解決內(nèi)存不足的實(shí)用指南,這些影響要注意!

    Linux系統(tǒng)內(nèi)核參數(shù)調(diào)優(yōu)實(shí)戰(zhàn)指南

    Linux 內(nèi)核參數(shù)調(diào)優(yōu)是系統(tǒng)性能優(yōu)化的核心環(huán)節(jié)。隨著云原生架構(gòu)的普及和硬件性能的飛速提升,默認(rèn)的內(nèi)核參數(shù)配置往往無(wú)法充分發(fā)揮系統(tǒng)潛力。在高
    的頭像 發(fā)表于 01-28 14:27 ?759次閱讀

    【「Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)」閱讀體驗(yàn)】+讀深入理解Linux內(nèi)核內(nèi)存分配

    內(nèi)核空間用戶(hù)空間,32位系統(tǒng)中的內(nèi)核地址空間有低
    發(fā)表于 01-16 20:05

    【「Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)」閱讀體驗(yàn)】+讀內(nèi)核處理的核心輔助函數(shù)

    一個(gè)是“鎖”;另一個(gè)是“條件變量”。內(nèi)核中最常見(jiàn)的鎖是自旋鎖和互斥鎖,操作系統(tǒng)內(nèi)核通常使用硬件提供的原子操作來(lái)實(shí)現(xiàn)鎖的機(jī)制。而條件變量并不是Linux
    發(fā)表于 01-10 22:08

    字存儲(chǔ)空間的小端格式

    CW32F030 內(nèi)核為 32 位的 ARM? Cortex?-M0+ 微處理器,最大尋址空間為 4GB。芯片內(nèi)置的程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、各外設(shè)及端口寄存器被統(tǒng)一編址在同一個(gè) 4GB 的線性
    發(fā)表于 12-11 07:03

    Linux內(nèi)核模塊的加載機(jī)制

    內(nèi)核模塊是什么? 內(nèi)核模塊是動(dòng)態(tài)加載到內(nèi)核中的代碼,可以在不重啟系統(tǒng)的情況下擴(kuò)展功能,比如設(shè)備驅(qū)動(dòng)或者文件系統(tǒng)支持。這樣
    發(fā)表于 11-25 06:59

    探索操作系統(tǒng)底層的關(guān)鍵接口

      在linux中,將程序的運(yùn)行空間分為內(nèi)核空間用戶(hù)空間(
    的頭像 發(fā)表于 11-08 12:42 ?896次閱讀

    深入了解系統(tǒng)調(diào)用API:探索操作系統(tǒng)底層的關(guān)鍵接口

    一、前言 為什么用戶(hù)程序不能直接訪問(wèn)系統(tǒng)內(nèi)核模式提供的服務(wù)? 在linux中,將程序的運(yùn)行空間分為內(nèi)核
    的頭像 發(fā)表于 11-03 09:20 ?907次閱讀

    通過(guò)sysmem接口擴(kuò)展內(nèi)存空間

    存儲(chǔ)器的訪問(wèn)接口,在e203_subsys_mems.v文件中可以找到: 同時(shí)在這個(gè)源文件中實(shí)現(xiàn)了一主多從的總線系統(tǒng),可以看到sysmem被分配到0x80000000到0xFFFFFFFF的地址空間
    發(fā)表于 10-24 08:12

    解決封閉空間信號(hào)覆蓋難題,隧道無(wú)線通信系統(tǒng)

    解決封閉空間信號(hào)覆蓋難題,隧道無(wú)線通信系統(tǒng)
    的頭像 發(fā)表于 08-05 14:54 ?1974次閱讀
    解決封閉<b class='flag-5'>空間</b>信號(hào)覆蓋難題,隧道無(wú)線通信<b class='flag-5'>系統(tǒng)</b>

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    、可定制性、開(kāi)放源代碼、良好的兼容性、強(qiáng)大的網(wǎng)絡(luò)支持、多任務(wù)支持、豐富的軟件生態(tài)系統(tǒng)。 架構(gòu):應(yīng)用程序運(yùn)行在用戶(hù)空間,硬件訪問(wèn)和控制通常在內(nèi)核空間
    發(fā)表于 06-20 09:46

    智能照明系統(tǒng)重塑建筑空間新生態(tài)

    在建筑空間與數(shù)字技術(shù)深度融合的今天, 智能照明系統(tǒng) 正悄然完成從功能設(shè)備到空間智慧體的華麗蛻變。這套系統(tǒng)不再只是簡(jiǎn)單的光源控制裝置,而是演變?yōu)槟軌蚋兄h(huán)境、理解需求、自主決策的建筑神經(jīng)
    的頭像 發(fā)表于 05-22 14:23 ?526次閱讀
    富源县| 天镇县| 濉溪县| 时尚| 东乌| 大新县| 孟连| 康马县| 金溪县| 武鸣县| 德清县| 河池市| 兴和县| 绥化市| 广德县| 泸州市| 始兴县| 上林县| 思南县| 海晏县| 雷州市| 昆山市| 石家庄市| 满洲里市| 佛山市| 延吉市| 平昌县| 通渭县| 新疆| 紫金县| 保靖县| 治多县| 科技| 大洼县| 孟村| 通州市| 尚志市| 彭泽县| 双流县| 安阳县| 上杭县|