91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

Linux的用戶態(tài)與內(nèi)核態(tài)區(qū)分

汽車玩家 ? 來源:未知 ? 作者:李威 ? 2020-04-12 19:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們先來看一張 Linux 整體架構(gòu)圖。

Linux的用戶態(tài)與內(nèi)核態(tài)區(qū)分

系統(tǒng)調(diào)用

系統(tǒng)調(diào)用時(shí)操作系統(tǒng)的最小功能單位。根據(jù)不同的應(yīng)用場(chǎng)景,不同的 Linux 發(fā)行版本提供的系統(tǒng)調(diào)用數(shù)量也不盡相同,大致在240-350之間。這些系統(tǒng)調(diào)用組成了用戶態(tài)跟內(nèi)核態(tài)交互的基本接口,例如:用戶態(tài)想要申請(qǐng)一塊20K大小的動(dòng)態(tài)內(nèi)存,就需要brk系統(tǒng)調(diào)用,將數(shù)據(jù)段指針向下偏移,如果用戶態(tài)多處申請(qǐng)20K動(dòng)態(tài)內(nèi)存,同時(shí)又釋放呢?這個(gè)內(nèi)存的管理就變得非常的復(fù)雜。

庫函數(shù)

庫函數(shù)就是屏蔽這些復(fù)雜的底層實(shí)現(xiàn)細(xì)節(jié),減輕程序員的負(fù)擔(dān),從而更加關(guān)注上層的邏輯實(shí)現(xiàn)。它對(duì)系統(tǒng)調(diào)用進(jìn)行封裝,提供簡單的基本接口給用戶,這樣增強(qiáng)了程序的靈活性,當(dāng)然對(duì)于簡單的接口,也可以直接使用系統(tǒng)調(diào)用訪問資源,例如: open() , write() , read() 等等。庫函數(shù)根據(jù)不同的標(biāo)準(zhǔn)也有不同的版本,例如: glibc 庫, posix 庫等。

Shell

Shell 顧名思義,就是外殼的意思。就好像把內(nèi)核包裹起來的外殼。它是一種特殊的應(yīng)用程序,俗稱命令行。為了方便用戶和系統(tǒng)交互,一般一個(gè) Shell 對(duì)應(yīng)一個(gè)終端,呈現(xiàn)給用戶交互窗口。當(dāng)然 Shell 也是編程的,它有標(biāo)準(zhǔn)的 shell 語法,符合其語法的文本叫 Shell 腳本。很多人都會(huì)用 Shell 腳本實(shí)現(xiàn)一些常用的功能,可以提高工作效率。

為什么要區(qū)分用戶態(tài)與內(nèi)核態(tài)?

CPU 的所有指令中,有一些指令是非常危險(xiǎn)的,如果錯(cuò)用,將導(dǎo)致整個(gè)系統(tǒng)崩潰。比如:清內(nèi)存、設(shè)置時(shí)鐘等。如果所有的程序都能使用這些指令,那么你的系統(tǒng)一天死機(jī)N回就不足為奇了。所以, 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 、 RING1 、 RING2 、 RING3 。

當(dāng)一個(gè)任務(wù)(進(jìn)程)執(zhí)行系統(tǒng)調(diào)用而陷入內(nèi)核代碼中執(zhí)行時(shí),我們就稱進(jìn)程處于內(nèi)核運(yùn)行態(tài)(或簡稱為內(nèi)核態(tài))。此時(shí)處理器處于特權(quán)級(jí)最高的(0級(jí))內(nèi)核代碼中執(zhí)行。

當(dāng)進(jìn)程處于內(nèi)核態(tài)時(shí),執(zhí)行的內(nèi)核代碼會(huì)使用當(dāng)前進(jìn)程的內(nèi)核棧。每個(gè)進(jìn)程都有自己的內(nèi)核棧。

當(dāng)進(jìn)程在執(zhí)行用戶自己的代碼時(shí),則稱其處于用戶運(yùn)行態(tài)(用戶態(tài))。即此時(shí)處理器在特權(quán)級(jí)最低的(3級(jí))用戶代碼中運(yùn)行。

當(dāng)正在執(zhí)行用戶程序而突然被中斷程序中斷時(shí),此時(shí)用戶程序也可以象征性地稱為處于進(jìn)程的內(nèi)核態(tài)。 Linux 使用了 Ring3 級(jí)別運(yùn)行用戶態(tài), Ring0 作為 內(nèi)核態(tài),沒有使用 Ring1 和 Ring2 。 Ring3 狀態(tài)不能訪問 Ring0 的地址空間,包括代碼和數(shù)據(jù)。 Linux 進(jìn)程的 4GB 地址空間,3G-4G部分大家是共享的,是內(nèi)核態(tài)的地址空間,這里存放在整個(gè)內(nèi)核的代碼和所有的內(nèi)核模塊,以及內(nèi)核所維護(hù)的數(shù)據(jù)。用戶運(yùn)行一個(gè)程序,該程序所創(chuàng)建的進(jìn)程開始是運(yùn) 行在用戶態(tài)的,如果要執(zhí)行文件操作,網(wǎng)絡(luò)數(shù)據(jù)發(fā)送等操作,必須通過 write , send 等系統(tǒng)調(diào)用,這些系統(tǒng)調(diào)用會(huì)調(diào)用內(nèi)核中的代碼來完成操作,這時(shí),必 須切換到 Ring0 ,然后進(jìn)入 3GB-4GB 中的內(nèi)核地址空間去執(zhí)行這些代碼完成操作,完成后,切換回 Ring3 ,回到用戶態(tài)。

這樣,用戶態(tài)的程序就不能 隨意操作內(nèi)核地址空間,具有一定的安全保護(hù)作用。

處理器總處于以下狀態(tài)中的一種:

1、內(nèi)核態(tài),運(yùn)行于進(jìn)程上下文,內(nèi)核代表進(jìn)程運(yùn)行于內(nèi)核空間;

2、內(nèi)核態(tài),運(yùn)行于中斷上下文,內(nèi)核代表硬件運(yùn)行于內(nèi)核空間;

3、用戶態(tài),運(yùn)行于用戶空間。

用戶態(tài)到內(nèi)核態(tài)怎樣切換?

從用戶態(tài)到內(nèi)核態(tài)切換可以通過三種方式:

系統(tǒng)調(diào)用:這是用戶態(tài)進(jìn)程主動(dòng)要求切換到內(nèi)核態(tài)的一種方式,用戶態(tài)進(jìn)程通過系統(tǒng)調(diào)用申請(qǐng)使用操作系統(tǒng)提供的服務(wù)程序完成工作,比如前例中fork()實(shí)際上就是執(zhí)行了一個(gè)創(chuàng)建新進(jìn)程的系統(tǒng)調(diào)用。而系統(tǒng)調(diào)用的機(jī)制其核心還是使用了操作系統(tǒng)為用戶特別開放的一個(gè)中斷來實(shí)現(xiàn),例如Linux的int 80h中斷。

異常:當(dāng)CPU在執(zhí)行運(yùn)行在用戶態(tài)下的程序時(shí),發(fā)生了某些事先不可知的異常,這時(shí)會(huì)觸發(fā)由當(dāng)前運(yùn)行進(jìn)程切換到處理此異常的內(nèi)核相關(guān)程序中,也就轉(zhuǎn)到了內(nèi)核態(tài),比如缺頁異常。

外設(shè)中斷:當(dāng)外圍設(shè)備完成用戶請(qǐng)求的操作后,會(huì)向CPU發(fā)出相應(yīng)的中斷信號(hào),這時(shí)CPU會(huì)暫停執(zhí)行下一條即將要執(zhí)行的指令轉(zhuǎn)而去執(zhí)行與中斷信號(hào)對(duì)應(yīng)的處理程序,如果先前執(zhí)行的指令是用戶態(tài)下的程序,那么這個(gè)轉(zhuǎn)換的過程自然也就發(fā)生了由用戶態(tài)到內(nèi)核態(tài)的切換。比如硬盤讀寫操作完成,系統(tǒng)會(huì)切換到硬盤讀寫的中斷處理程序中執(zhí)行后續(xù)操作等。

這3種方式是系統(tǒng)在運(yùn)行時(shí)由用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)的最主要方式,其中系統(tǒng)調(diào)用可以認(rèn)為是用戶進(jìn)程主動(dòng)發(fā)起的,異常和外圍設(shè)備中斷則是被動(dò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)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11764

    瀏覽量

    219092
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3212

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Linux內(nèi)核驅(qū)動(dòng)開發(fā)的技術(shù)核心精要

    嵌入式Linux驅(qū)動(dòng)開發(fā)是連接硬件與操作系統(tǒng)的關(guān)鍵環(huán)節(jié)。隨著內(nèi)核演進(jìn)(如Linux 6.13)和硬件復(fù)雜度提升,開發(fā)者需掌握并發(fā)控制、中斷分層、內(nèi)存管理、設(shè)備樹、調(diào)試工具等核心知識(shí)。本文提煉出驅(qū)動(dòng)
    發(fā)表于 03-10 13:56

    成都華微與循態(tài)量子達(dá)成戰(zhàn)略合作

    近日,成都華微電子科技股份有限公司(以下簡稱成都華微)與上海循態(tài)量子科技有限公司(以下簡稱循態(tài)量子)正式簽署戰(zhàn)略合作協(xié)議,雙方將依托各自技術(shù)與資源優(yōu)勢(shì),攜手推進(jìn)量子信息技術(shù)產(chǎn)業(yè)化與規(guī)?;瘧?yīng)用,共同筑牢國家信息安全量子屏障。
    的頭像 發(fā)表于 03-05 17:45 ?1551次閱讀

    后仿出現(xiàn)X態(tài)的原因

    1、仿真pattern自身原因,比如程序使用了未初始化(寫)的存儲(chǔ)區(qū),讀出紅X的數(shù)據(jù)并使用,導(dǎo)致紅X傳播; 2、仿真環(huán)境或者平臺(tái)原因,模型或者整chip頂層PIN腳的信號(hào)沒有驅(qū)動(dòng),是高阻Z態(tài),進(jìn)入
    發(fā)表于 01-16 06:01

    成都華微與循態(tài)量子開展交流座談

    引言 近日,成都華微電子科技股份有限公司(簡稱成都華微)董事會(huì)秘書李春妍帶隊(duì)赴上海循態(tài)量子科技有限公司(簡稱循態(tài)量子)開展交流座談。循態(tài)量子總經(jīng)理周穎明攜核心團(tuán)隊(duì)熱情接待,雙方圍繞“量子+集成電路
    的頭像 發(fā)表于 01-15 10:59 ?648次閱讀

    Linux內(nèi)核日志玩明白了嗎?printk調(diào)試神器全解析

    的日志等級(jí)機(jī)制,從參數(shù)配置到實(shí)戰(zhàn)用法一次講透~一、printk與printf的差異用戶態(tài)的printf大家都熟,直接打印內(nèi)容,簡單粗暴。但內(nèi)核場(chǎng)景更復(fù)雜,系統(tǒng)崩潰或是
    的頭像 發(fā)表于 12-19 08:32 ?873次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>日志玩明白了嗎?printk調(diào)試神器全解析

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

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

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

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

    開源鴻蒙技術(shù)大會(huì)2025丨統(tǒng)一生態(tài)共建分論壇:共建共享開源鴻蒙,聚力共贏統(tǒng)一未來

    9月27日,開源鴻蒙技術(shù)大會(huì)2025統(tǒng)一生態(tài)共建分論壇在湖南長沙國際會(huì)議中心舉行。統(tǒng)一生態(tài)共建分論壇廣泛邀請(qǐng)到來自開源鴻蒙社區(qū)的捐贈(zèng)單位代表、高校教師、技術(shù)專家等匯聚一堂,聚焦探討開源鴻蒙統(tǒng)一生態(tài)
    的頭像 發(fā)表于 10-12 21:05 ?711次閱讀
    開源鴻蒙技術(shù)大會(huì)2025丨統(tǒng)一生<b class='flag-5'>態(tài)</b>共建分論壇:共建共享開源鴻蒙,聚力共贏統(tǒng)一未來

    使用qemu-vexpress-a9 運(yùn)行用戶程序跑不了怎么解決?

    qemu-vexpress-a9 的 sd.bin 鏡像文件中。 然后成功編譯rt-threadbspqemu-vexpress-a9的內(nèi)核態(tài).elf文件 使用./qemu-nographic.sh 模擬用戶
    發(fā)表于 10-09 07:41

    求助,關(guān)于rt-smart用戶態(tài)線程實(shí)時(shí)性差的問題求解

    我在樹莓派4B上使用v5.2.0 開啟smart的rt-thread 并啟用SMP多核(4核)內(nèi)核時(shí),在用戶態(tài)內(nèi)核態(tài)運(yùn)行同樣的代碼測(cè)試:
    發(fā)表于 09-26 08:25

    【HZ-T536開發(fā)板免費(fèi)體驗(yàn)】—— linux創(chuàng)建線程

    自己的私有資源。 在linux系統(tǒng)中,線程狀態(tài)通常反映了當(dāng)前線程的當(dāng)前活動(dòng)和執(zhí)行階段。 主要分為: 1。運(yùn)行轉(zhuǎn)態(tài) 2。阻塞轉(zhuǎn)態(tài) 3。終止?fàn)顟B(tài) 如何區(qū)分單線程和多線程? 在單個(gè)程序中只
    發(fā)表于 09-01 21:31

    昆侖通態(tài)物聯(lián)網(wǎng)觸摸屏配置教程

    昆侖通態(tài)物聯(lián)網(wǎng)觸摸屏配置教程
    發(fā)表于 06-09 14:59 ?0次下載

    鴻蒙5開發(fā)寶藏案例分享---折疊屏懸停態(tài)開發(fā)實(shí)踐

    ?【鴻蒙折疊屏開發(fā)寶藏指南】原來官方藏了這么多好東西!手把手教你玩轉(zhuǎn)懸停態(tài)開發(fā)**?** Hey小伙伴們!我是你們的老朋友XX,最近在肝鴻蒙折疊屏項(xiàng)目時(shí),意外挖到了官方文檔里的隱藏寶藏!原來
    發(fā)表于 06-03 12:04

    關(guān)于晶振的三態(tài)

    晶振的高阻態(tài)在電路起什么作用,為什么有的晶振需要三態(tài)腳有的不需要,晶振的三態(tài)是靠什么去控制的?
    發(fā)表于 05-15 11:08

    樹莓派4 性能大比拼:標(biāo)準(zhǔn)Linux與實(shí)時(shí)Linux 4.19內(nèi)核的延遲測(cè)試

    引言本文是對(duì)我之前關(guān)于RaspberryPi3同一主題的帖子的更新。與之前的帖子一樣,我使用的是隨Raspbian鏡像提供的標(biāo)準(zhǔn)內(nèi)核,以及應(yīng)用了RT補(bǔ)丁的相似內(nèi)核版本。對(duì)于實(shí)時(shí)版,我
    的頭像 發(fā)表于 03-25 09:39 ?828次閱讀
    樹莓派4 性能大比拼:標(biāo)準(zhǔn)<b class='flag-5'>Linux</b>與實(shí)時(shí)<b class='flag-5'>Linux</b> 4.19<b class='flag-5'>內(nèi)核</b>的延遲測(cè)試