女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

Linux的用戶態與內核態區分

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

掃碼添加小助手

加入工程師交流群

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

Linux的用戶態與內核態區分

系統調用

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

庫函數

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

Shell

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

為什么要區分用戶態與內核態?

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

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

當進程處于內核態時,執行的內核代碼會使用當前進程的內核棧。每個進程都有自己的內核棧。

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

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

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

處理器總處于以下狀態中的一種:

1、內核態,運行于進程上下文,內核代表進程運行于內核空間;

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

3、用戶態,運行于用戶空間。

用戶態到內核態怎樣切換?

從用戶態到內核態切換可以通過三種方式:

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

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

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

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

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

    關注

    87

    文章

    11509

    瀏覽量

    213687
  • 內存
    +關注

    關注

    8

    文章

    3121

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    昆侖通物聯網觸摸屏配置教程

    昆侖通物聯網觸摸屏配置教程
    發表于 06-09 14:59 ?0次下載

    鴻蒙5開發寶藏案例分享---折疊屏懸停開發實踐

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

    關于晶振的三

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

    衍射級次偏振的研究

    分析提供了通用和方便的工具。為此,復雜的一維或二維周期結構可以使用界面和調制介質進行配置,這允許任何類型的光柵形貌進行自由的配置。在此用例中,詳細討論了衍射級次的偏振的研究。 任務說明 簡要介紹
    發表于 01-11 08:55

    衍射級次偏振的研究

    分析提供了通用和方便的工具。為此,復雜的一維或二維周期結構可以使用界面和調制介質進行配置,這允許任何類型的光柵形貌進行自由的配置。在此用例中,詳細討論了衍射級次的偏振的研究。 任務說明 簡要介紹
    發表于 12-25 15:39

    衍射級次偏振的研究

    分析提供了通用和方便的工具。為此,復雜的一維或二維周期結構可以使用界面和調制介質進行配置,這允許任何類型的光柵形貌進行自由的配置。在此用例中,詳細討論了衍射級次的偏振的研究。 任務說明 簡要介紹
    發表于 12-18 13:45

    SN74AVC2T244的使能引腳OE到底是OE=低電平時輸出三,還是OE=高電平時輸出三

    SN74AVC2T244的使能引腳OE到底是OE=低電平時輸出三,還是OE=高電平時輸出三? TI的手冊也能漏洞百出?
    發表于 12-04 07:48

    DAC3162EVM的輸入阻抗不是高阻,怎么連接比較器和DAC呀?

    利用一個比較器生成43M 5V的方波,輸入到DAC中,但比較器需要后接高阻的芯片,DAC3162EVM的輸入阻抗不是高阻,該怎么連接比較器和DAC呀
    發表于 11-21 06:22

    國產實時操作系統:和RT-Linux,Zephyr的實時性對比

    基于RT-Thread內核,并具備POSIX用戶運行環境的高性能實時操作系統。它類似Linux、Windows的架構,具備用戶
    的頭像 發表于 11-12 01:07 ?2551次閱讀
    國產實時操作系統:和RT-<b class='flag-5'>Linux</b>,Zephyr的實時性對比

    為什么gv7601在spi用戶訪問寄存器時,讀取音頻寄存器讀不到信息,是要設置什么嗎?

    為什么gv7601在spi用戶訪問寄存器時。讀取視頻寄存器正常。讀取音頻寄存器讀不到信息。是要設置什么嗎?
    發表于 11-04 08:21

    Linux內核測試技術

    Linux 內核Linux操作系統的核心部分,負責管理硬件資源和提供系統調用接口。隨著 Linux 內核的不斷發展和更新,其復雜性和代碼規
    的頭像 發表于 08-13 13:42 ?1253次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>測試技術

    緩沖器的工作原理和應用

    緩沖器(Three-state buffer),又稱為三門、三驅動器,是一種特殊的邏輯門電路,其工作原理主要基于三輸出控制。三
    的頭像 發表于 08-02 17:47 ?7698次閱讀

    邏輯電路的工作原理及其四種三緩沖器介紹

    邏輯作為一種數字電子技術中的邏輯類型,允許信號線在三種狀態之間切換。本文介紹了三邏輯電路原理并介紹了四種基本類型的三緩沖器。如果你對三邏輯感興趣,相信這篇內容會讓你對其有基礎
    的頭像 發表于 08-01 09:59 ?4203次閱讀
    三<b class='flag-5'>態</b>邏輯電路的工作原理及其四種三<b class='flag-5'>態</b>緩沖器介紹

    門電路的輸出有哪三種狀態

    門電路是一種特殊的數字邏輯電路,其輸出可以有三種狀態:高電平、低電平和高阻抗狀態。這種電路在數字系統中有著廣泛的應用,如數據總線、地址總線等。 一、三門電路的工作原理 三門電路的基本組
    的頭像 發表于 07-30 15:17 ?8478次閱讀

    鎖存器原和新的定義

    鎖存器(Latch)是一種存儲單元,用于存儲一位二進制信息。在數字電路中,鎖存器是一種基本的存儲元件,廣泛應用于寄存器、計數器、觸發器等電路中。鎖存器的原和新是描述鎖存器狀態變化的兩個重要概念
    的頭像 發表于 07-23 10:21 ?1203次閱讀