linux內(nèi)核

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

用戶進(jìn)程與內(nèi)核進(jìn)行交互的一組接口帮哈;

需要C庫(kù)支持司顿,通過(guò)使用C庫(kù)定義的函數(shù)來(lái)訪問(wèn)系統(tǒng)調(diào)用

系統(tǒng)調(diào)用伴找、中斷盈蛮、異常是訪問(wèn)內(nèi)核的三種方式。

  • 系統(tǒng)調(diào)用號(hào):關(guān)聯(lián)系統(tǒng)調(diào)用
  • 系統(tǒng)調(diào)用的性能:
  1. linux很短的上下文切換時(shí)間
  2. 系統(tǒng)調(diào)用處理程序和每個(gè)系統(tǒng)調(diào)用都非常簡(jiǎn)潔
  • 系統(tǒng)調(diào)用處理程序:用戶空間的程序使用軟中斷來(lái)通知內(nèi)核執(zhí)行系統(tǒng)調(diào)用

通過(guò)exa寄存器傳遞系統(tǒng)調(diào)用號(hào)給內(nèi)核技矮;

給用戶空間的返回值也通過(guò)寄存器傳遞(x86系統(tǒng):存放在eax寄存器上)抖誉;

建立系統(tǒng)調(diào)用的好處:

  • 系統(tǒng)調(diào)用創(chuàng)建容易且使用方便
  • Linux系統(tǒng)調(diào)用性能很高
  • 保證了系統(tǒng)的安全性和穩(wěn)定性:用戶程序不能直接操作內(nèi)核地址空間。

系統(tǒng)調(diào)用和庫(kù)函數(shù)的區(qū)別:

  • 庫(kù)函數(shù)是0-n個(gè)系統(tǒng)調(diào)用的封裝
  • 函數(shù)庫(kù)調(diào)用是調(diào)用函數(shù)庫(kù)中的一個(gè)程序衰倦,而系統(tǒng)調(diào)用是調(diào)用系統(tǒng)內(nèi)核的一個(gè)服務(wù)
  • 函數(shù)庫(kù)調(diào)用屬于過(guò)程調(diào)用袒炉,開(kāi)銷(xiāo)較小,系統(tǒng)調(diào)用需要有用戶態(tài)和內(nèi)核態(tài)之間的切換開(kāi)銷(xiāo)
  • 庫(kù)函數(shù)調(diào)用是在用戶地址空間執(zhí)行樊零,而系統(tǒng)調(diào)用是在內(nèi)核地址空間執(zhí)行

問(wèn)題:

  • 圍繞系統(tǒng)調(diào)用號(hào)來(lái)講我磁,包括系統(tǒng)預(yù)分配、再固化驻襟、注冊(cè)到每個(gè)需要支持的體系結(jié)構(gòu)夺艰、維護(hù)困難(只能在主內(nèi)核樹(shù)維護(hù))、功能簡(jiǎn)單的話便是大材小用

內(nèi)存管理

  • 頁(yè):內(nèi)核把物理頁(yè)作為內(nèi)存管理的基本單位

  • 內(nèi)存管理單元(MMU):管理內(nèi)存并把虛擬地址轉(zhuǎn)換為物理地址的硬件沉衣,以頁(yè)為單位進(jìn)行處理郁副。

  • struct page:使用了大量的聯(lián)合體union來(lái)保證struct page結(jié)構(gòu)體足夠小

  • 區(qū):Linux把系統(tǒng)的頁(yè)劃分成區(qū),形成不同的內(nèi)存池厢蒜,這樣可以根據(jù)用途進(jìn)行分配霞势。

    ZONE_DMA:DMA使用的頁(yè)

    ZONE_NORMAL:正撑胫玻可尋址的頁(yè)

    ZONE_HIGHMEM:動(dòng)態(tài)映射的頁(yè)

  • kmalloc():返回在物理連續(xù)的一段以字節(jié)為單位的內(nèi)核內(nèi)存

  • kfree():與kmalloc()配對(duì)使用,避免內(nèi)存泄漏

  • vmalloc():分配的內(nèi)存虛擬地址連續(xù)愕贡,物理地址無(wú)需連續(xù)

    分配非連續(xù)的物理內(nèi)存塊草雕,再“修正”頁(yè)表,把內(nèi)存映射到邏輯地址空間的連續(xù)區(qū)域

  • kmalloc和vmalloc

    大部分內(nèi)核代碼選用kmalloc分配內(nèi)存的原因固以,主要出于性能考慮墩虹。

    ? vmalloc為了把物理上不連續(xù)的頁(yè)轉(zhuǎn)換為虛擬地址空間上連續(xù)的頁(yè),必須專門(mén)建立頁(yè)表項(xiàng)憨琳。并且诫钓,通過(guò)vmalloc獲得的頁(yè)必須一個(gè)一個(gè)進(jìn)行映射,會(huì)導(dǎo)致比直接映射產(chǎn)生更大的TLB抖動(dòng)篙螟。

  • 內(nèi)核常用的內(nèi)存分配方式:使用某個(gè)低級(jí)頁(yè)分配器或者kmalloc

  • 當(dāng)創(chuàng)建和撤銷(xiāo)很多大的數(shù)據(jù)結(jié)構(gòu)菌湃,可以建立slab高速緩存來(lái)提升性能

進(jìn)程地址空間

用戶空間中進(jìn)程的內(nèi)存,成為進(jìn)程地址空間遍略。

  • 內(nèi)存區(qū)域:

    • 代碼段:可執(zhí)行文件代碼的內(nèi)存映射
    • 數(shù)據(jù)段:可執(zhí)行文件的已初始化的全局變量和靜態(tài)變量
    • BSS段:未初始化的全局變量和靜態(tài)變量
    • 堆:任何匿名的內(nèi)存映射(如malloc分配的內(nèi)存)
    • 棧:進(jìn)程用戶空間棧(進(jìn)程內(nèi)核棧獨(dú)立存在并由內(nèi)核維護(hù))
  • 內(nèi)核同時(shí)使用了mmap(鏈?zhǔn)浇Y(jié)構(gòu))和mm_rb(紅黑樹(shù))來(lái)描述同一塊內(nèi)存區(qū)域惧所,在可以同時(shí)遍歷整個(gè)節(jié)點(diǎn)同時(shí),保證了查找節(jié)點(diǎn)的效率

  • 查找內(nèi)存地址所對(duì)應(yīng)的內(nèi)存區(qū)域:

    1. 查看mmap_cache緩存
    2. 未命中時(shí)則選擇搜索mm_rb紅黑樹(shù)結(jié)構(gòu)绪杏,未找到則返回NULL
  • linux使用三級(jí)頁(yè)表完成地址轉(zhuǎn)換(虛擬地址轉(zhuǎn)換成物理地址)

  • brk sbrk

定時(shí)器和時(shí)間管理

  • 實(shí)際時(shí)間:開(kāi)機(jī)后下愈,內(nèi)核初始化從RTC讀取,放入到xtime變量中蕾久。系統(tǒng)讀寫(xiě) xtime 時(shí)用的就是順序鎖

  • 定時(shí)器

    • 靜態(tài)定時(shí)器:執(zhí)行周期性的工作

      1. 更新系統(tǒng)運(yùn)行時(shí)間

      2. 更新實(shí)際時(shí)間

      3. 檢查當(dāng)前進(jìn)程是否用盡了自己的時(shí)間片势似,如果用盡,需要重新調(diào)度僧著。

  • 動(dòng)態(tài)定時(shí)器

    動(dòng)態(tài)創(chuàng)建的定時(shí)器履因,使用后銷(xiāo)毀。一般在內(nèi)核代碼中使用的基本都是動(dòng)態(tài)定時(shí)器

    1. HZ:

      節(jié)拍率(HZ)是時(shí)鐘中斷的頻率盹愚,表示的一秒內(nèi)時(shí)鐘中斷的次數(shù)搓逾。比如 HZ=100 表示一秒內(nèi)觸發(fā)100次時(shí)鐘中斷程序。

    2. jiffies

      jiffies用來(lái)記錄自系統(tǒng)啟動(dòng)以來(lái)產(chǎn)生的總節(jié)拍數(shù)杯拐。比如系統(tǒng)啟動(dòng)了 N 秒,那么 jiffies就為 N×HZ

    3. 時(shí)間中斷處理程序

      時(shí)鐘中斷處理程序作為系統(tǒng)定時(shí)器而注冊(cè)到內(nèi)核中世蔗,體系結(jié)構(gòu)的不同端逼,可能時(shí)鐘中斷處理程序中處理的內(nèi)容不同

  • 定時(shí)器執(zhí)行流程

    定義:定時(shí)器在內(nèi)核中用一個(gè)鏈表來(lái)保存的,鏈表的每個(gè)節(jié)點(diǎn)都是一個(gè)定時(shí)器

    生命周期:

    img
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末污淋,一起剝皮案震驚了整個(gè)濱河市顶滩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寸爆,老刑警劉巖礁鲁,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盐欺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡仅醇,警方通過(guò)查閱死者的電腦和手機(jī)冗美,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)析二,“玉大人粉洼,你說(shuō)我怎么就攤上這事∫渡悖” “怎么了属韧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛤吓。 經(jīng)常有香客問(wèn)我宵喂,道長(zhǎng),這世上最難降的妖魔是什么会傲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任锅棕,我火速辦了婚禮,結(jié)果婚禮上唆铐,老公的妹妹穿的比我還像新娘哲戚。我一直安慰自己,他們只是感情好艾岂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布顺少。 她就那樣靜靜地躺著,像睡著了一般王浴。 火紅的嫁衣襯著肌膚如雪脆炎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天氓辣,我揣著相機(jī)與錄音秒裕,去河邊找鬼。 笑死钞啸,一個(gè)胖子當(dāng)著我的面吹牛几蜻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播体斩,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼梭稚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了絮吵?” 一聲冷哼從身側(cè)響起弧烤,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹬敲,沒(méi)想到半個(gè)月后暇昂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體莺戒,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年急波,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了从铲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幔崖,死狀恐怖食店,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赏寇,我是刑警寧澤吉嫩,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站嗅定,受9級(jí)特大地震影響自娩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渠退,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一忙迁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碎乃,春花似錦姊扔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梗掰,卻和暖如春嵌言,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背及穗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工摧茴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埂陆。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓苛白,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親焚虱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丸氛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容