chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

我們先來看一張 Linux 整體架構圖。

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

系統(tǒng)調用

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

庫函數

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

Shell

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

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

CPU 的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統(tǒng)崩潰。比如:清內存、設置時鐘等。如果所有的程序都能使用這些指令,那么你的系統(tǒng)一天死機N回就不足為奇了。所以, CPU 將指令分為特權指令和非特權指令,對于那些危險的指令,只允許操作系統(tǒng)及其相關模塊使用,普通的應用程序只能使用那些不會造成災難的指令。 Intel 的 CPU 將特權級別分為4個級別: RING0 、 RING1 、 RING2 、 RING3 。

當一個任務(進程)執(zhí)行系統(tǒng)調用而陷入內核代碼中執(zhí)行時,我們就稱進程處于內核運行態(tài)(或簡稱為內核態(tài))。此時處理器處于特權級最高的(0級)內核代碼中執(zhí)行。

當進程處于內核態(tài)時,執(zhí)行的內核代碼會使用當前進程的內核棧。每個進程都有自己的內核棧。

當進程在執(zhí)行用戶自己的代碼時,則稱其處于用戶運行態(tài)(用戶態(tài))。即此時處理器在特權級最低的(3級)用戶代碼中運行。

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

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

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

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

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

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

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

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

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

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

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

這3種方式是系統(tǒng)在運行時由用戶態(tài)轉到內核態(tài)的最主要方式,其中系統(tǒng)調用可以認為是用戶進程主動發(fā)起的,異常和外圍設備中斷則是被動的。

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

    關注

    88

    文章

    11807

    瀏覽量

    219508
  • 內存
    +關注

    關注

    9

    文章

    3231

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何理解Linux內核中的PCIe驅動

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

    74LVC125A:一款實用的三態(tài)輸出四緩沖器

    74LVC125A:一款實用的三態(tài)輸出四緩沖器 在電子設計領域,緩沖器是一種常見且重要的器件。今天,我們就來深入了解一下SGMICRO公司的74LVC125A三態(tài)輸出四緩沖器。 文件下載
    的頭像 發(fā)表于 03-13 17:30 ?696次閱讀

    74HC541:八通道三態(tài)緩沖/線驅動器的深度解析

    74HC541:八通道三態(tài)緩沖/線驅動器的深度解析 作為電子工程師,我們在日常設計中常常需要用到各種邏輯器件來構建穩(wěn)定、高效的電路系統(tǒng)。今天,我們就來詳細探討一下 SGMICRO 公司
    的頭像 發(fā)表于 03-13 14:20 ?339次閱讀

    Linux內核驅動開發(fā)的技術核心精要

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

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

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

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

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

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

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

    Linux內核日志玩明白了嗎?printk調試神器全解析

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

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

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

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

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

    使用qemu-vexpress-a9 運行用戶程序跑不了怎么解決?

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

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

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

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

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

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

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

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

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