【Linux技術】嵌入式linux核心的五個子系統
Perface
Linux核心主要由程序排程(SCHED)、記憶體管理(MM)、虛擬檔案系統(VFS)、網路介面(NET)和程序間通訊(IPC)5個子系統組成,如圖1所示。
圖1 Linux核心的組成部分與關係
1.程序排程
程序排程控制系統中的多個程序對CPU的訪問,使得多個程序能在CPU中“微觀序列,巨集觀並行”地執行。程序排程處於系統的中心位置,核心中其他的子系統都依賴它,因為每個子系統都需要掛起或恢復程序。
圖2 Linux程序狀態轉換
如上圖2所示,Linux的程序在幾個狀態間進行切換。在裝置驅動程式設計中,當請求的資源不能得到滿足時,驅動一般會排程其他程序執行,並使本程序進入睡眠狀態,直到它請求的資源被釋放,才會被喚醒而進入就緒態。
睡眠分成可被打斷的睡眠和不可被打斷的睡眠,兩者的區別在於可被打斷的睡眠在收到訊號的時候會醒。
在裝置驅動程式設計中,當請求的資源不能得到滿足時,驅動一般會排程其他程序執行,其對應程序進入睡眠狀態,直到它請求的資源被釋放,才會被喚醒而進入就緒態。
裝置驅動中,如果需要幾個併發執行的任務,可以啟動核心執行緒,啟動核心執行緒的函式為:
pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
2.記憶體管理
記憶體管理的主要作用是控制多個程序安全地共享主記憶體區域。
如下圖3所示,一般而言,Linux的每個程序享有4GB的記憶體空間,0~3GB屬於使用者空間,3~4GB屬於核心空間,核心空間對常規記憶體、I/O裝置記憶體以及高階記憶體存在不同的處理方式。
圖3 Linux程序地址空間
3.虛擬檔案系統
如下圖4所示,Linux虛擬檔案系統(VFS)隱藏各種了硬體的具體細節,為所有的裝置提供了統一的介面。而且,它獨立於各個具體的檔案系統,是對各種檔案系統的一個抽象,它使用超級塊super
block存放檔案系統相關資訊
圖4 Linux檔案系統
4.網路介面
網路介面提供了對各種網路標準的存取和各種網路硬體的支援。如下圖5所示,在Linux中網路介面可分為網路協議和網路驅動程式,網路協議部分負責實現每一種可能的網路傳輸協議,網路裝置驅動程式負責與硬體裝置通訊,每一種可能的硬體裝置都有相應的裝置驅動程式。
圖5 Linux網路體系結構
5.程序通訊
程序通訊支援提供程序之間的通訊,Linux支援程序間的多種通訊機制,包含訊號量、共享記憶體、管道等,這些機制可協助多個程序、多資源的互斥訪問、程序間的同步和訊息傳遞。
依賴關係
Linux核心的5個組成部分之間的依賴關係如下:
·程序排程與記憶體管理之間的關係:這兩個子系統互相依賴。在多道程式環境下,程式要執行必須為之建立程序,而建立程序的第一件事情,就是將程式和資料裝入記憶體。
·程序間通訊與記憶體管理的關係:程序間通訊子系統要依賴記憶體管理支援共享記憶體通訊機制,這種機制允許兩個程序除了擁有自己的私有空間,還可以存取共同的記憶體區域。
·虛擬檔案系統與網路介面之間的關係:虛擬檔案系統利用網路介面支援網路檔案系統(NFS),也利用記憶體管理支援RAMDISK裝置。
·記憶體管理與虛擬檔案系統之間的關係:記憶體管理利用虛擬檔案系統支援交換,交換程序(swapd)定期由排程程式排程,這也是記憶體管理依賴於程序排程的惟一原因。當一個程序存取的記憶體對映被換出時,記憶體管理向檔案系統發出請求,同時,掛起當前正在執行的程序。
除了這些依賴關係外,核心中的所有子系統還要依賴於一些共同的資源。這些資源包括所有子系統都用到的例程,如分配和釋放記憶體空間的函式、列印警告或錯誤資訊的函式及系統提供的除錯例程等。
相關推薦
【Linux技術】嵌入式linux核心的五個子系統
Perface Linux核心主要由程序排程(SCHED)、記憶體管理(MM)、虛擬檔案系統(VFS)、網路介面(NET)和程序間通訊(IPC)5個子系統組成,如圖1所示。 圖1 Linux核心的組成部分與關係 1.程序排程 程序排程控制系統中的多個程序對CPU的訪問,使
【重磅推薦】嵌入式Linux經典書單(部分含視訊)
一直都有人問我要書單,在網上搜索大半天,沒找到合適的,他們寫的太不負責了,遂決定自己整理。 本書單綜合了豆瓣知乎熱評,尤其參考了一線開發者韋東山學員群的小夥伴們的意見, 再結合本人多年答疑經驗整理而成。非常感謝他們。 本書單內容涉及:l
【讀書筆記】《Linux核心設計與實現》程序管理與程序排程
大學跟老師做嵌入式專案,寫過I2C的裝置驅動,但對Linux核心的瞭解也僅限於此。Android系統許多導致root的漏洞都是核心中的,研究起來很有趣,但看相關的分析文章總感覺隔著一層窗戶紙,不能完全理會。所以打算系統的學習一下Linux核心。買了兩本書《Linux核心設計與實現(第3版)》和《深入理解Lin
【linux技術】nginx詳解
1 配置檔案 # worker程序數,通常設定成和cpu的數量相等 worker_processes auto; # 設定worker程序最大檔案開啟數;避免出現too many open files worker_rlimit_nofile 65535; # ng
linux核心---嵌入式linux核心的五個子系統
轉自:https://blog.csdn.net/qq_27522735/article/details/63251168 Linux核心主要由程序排程(SCHED)、記憶體管理(MM)、虛擬檔案系統(VFS)、網路介面(NET)和程序間通訊(IPC)5個子系統組成,如圖1所示。 圖1
【Linux技術】如何升級cmake
如果系統中的cmake版本無法滿足我們的需求,我們可以通過原始碼對cmake進行重現安裝。 1 檢視cmake版本 cmake --version 2 解除安裝過去的版本 sudo apt-get a
【總結】嵌入式Linux學習中遇到的問題及解決方法
持續更新。。。(1)uboot中執行nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new下載新核心時出現:TTT***ERROR:Cannot um
【ARM-Linux開發】嵌入式作業系統上的小型資料庫移植SQLite
近段時間在學資料庫,因為自身需求,所以注重研究了點嵌入式sqlite資料庫,SQLite,是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體
【 專欄 】- 嵌入式linux驅動/linux驅動測試/嵌入式測試驅動開發(TDD)例項
嵌入式linux驅動/linux驅動測試/嵌入式測試驅動開發(TDD)例項 介紹AST2500處理器下,對應的LINUX驅動,包括AST2500的暫存器以及對應的通用驅動。 涉及到的模組有ADC,網口(NIC),Video等。
【學習筆記】編譯Linux核心(下)---KConfig、Makefile詳解以及ARM平臺Linux核心的編譯
本文主要介紹Linxu2.6的核心配置系統。 如果你瀏覽一下原始碼目錄,就可以發現原始碼目錄及其子目錄中有很多的KConfig檔案和Makefile檔案。這些檔案什麼作用呢?正是這些檔案組成了Li
【Linux技術】使用SSH進行檔案傳輸
在linux下面使用scp命令進行檔案傳輸。 1.從遠端電腦下載檔案到本地 scp username@serverIP:/path /path/local 2.向遠端電腦上傳檔案 scp
【取證分析】用linux命令xxd來獲取dump檔案資訊獲得flag
題目連結:https://blog.csdn.net/xiangshangbashaonian/article/details/82747394 拿到一道CTF題目 notepad++開啟如下所示 [email protected]:~/Desktop$ fi
【進階】從linux到android,程序的方方面面
最近在閱讀《Linux核心設計與實現》,這裡做一下linux中程序相關的知識點整理,以及android中程序的淺析。 下面1,2小節整理自《Linux核心設計與實現》 第三章《程序管理》和第四章《程序排程》。第3節整理android中程序的知識點。
【每天一個Linux命令】01. Linux中ping命令的用法
PING: PING (Packet Internet Grope),因特網包探索器 功能說明: 檢測網路的連通性:ping可以測試計算機名和計算機的 ip 地址,驗證與遠端計算機的連線,通過將 icmp 回顯資料包傳送到計算機並偵聽回顯回覆資料包來驗證與一臺
【已解決】VMware Linux虛擬機器執行提示“鎖定檔案失敗,虛擬機器開啟模組snapshot失敗”的解決辦法
原因:本人因在設定虛擬機器時CD/DVD硬體連線方式將使用iso映像檔案改成了物理驅動連線,導致VMware Linux虛擬機器啟動時提示“鎖定檔案失敗...” 、 (注:期間碰到程序被佔用問題
【Redis學習】:Linux環境下的Redis安裝與配置
安裝環境 redis是C語言開發的,安裝redis需要先將官網上下載的原始碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc。這個最好使用yum安裝,因為依賴關係比較多,自己不好找
【每天一個linux命令】11. Linux配置環境變數/etc/profile .bashrc .bash_profile等
1. 修改/etc/profile檔案 特點:所有使用者的shell都有權使用你配置好的環境變數說明:如果你的電腦僅用作開發,建議使用此配置,因為所有使用者的shell都有權使用你配置好的環境變數,
【ARM-Linux開發】【CUDA開發】【視訊開發】關於Linux下利用GPU對視訊進行硬體加速轉碼的方案
最近一直在研究Linux下利用GPU進行硬體加速轉碼的方案,折騰了很久,至今沒有找到比較理想的硬加速轉碼方案。似乎網上討論這一方案的文章也特別少,這個過程中也進行了各種嘗試,遇到很多具體問題,以下便對之前所作的一些工作做一些總結和分享,省的時間長了自己也忘記了,也希望後來
【空間釋放】解決Linux下rm操作不釋放空間的問題
最近在開發的過程中,不小心把螢幕回顯的輸出定向到nohup.out裡去了,導致週末過完回來一看,我的天被打滿了…… 然後趕緊刪掉這104個G的檔案,看看空間還給我沒—— 啊咧? $ df -h Filesystem Size Used Avail U
【每天一個Linux命令】08. Linux中time命令的用法
Linux中time命令,我們經常用來計算某個程式的執行耗時(real),使用者態cpu耗時(user),系統態cpu耗時(sys) time命令最常用的使用方式就是在其後面直接跟上命令和引數:ti