欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

十篇文章理解OS內核(1)用戶與內核的橋梁---系統(tǒng)調用

1.什么是系統(tǒng)調用

在 linux 中,軟硬件是有明顯的分層的,出于安全或者是資源統(tǒng)籌考慮,硬件資源由內核進行統(tǒng)一管理,內核擁有絕對的權限,而用戶空間無法直接訪問硬件.在實際的應用中,用戶進程總是無法避免需要操作到硬件,這個硬件可能是磁盤文件,USB接口等,這時候就需要向內核遞交申請,讓內核幫忙做硬件相關的事情,這個過程就由系統(tǒng)調用完成.

無論從硬件還是從軟件角度來說,用戶空間與內核空間有一道無法輕易逾越的屏障,如果是簡單地一分為二,事情并不會有多復雜,不幸的是,這兩者不能簡單地完全隔斷,用戶空間的大部分操作都需要通過內核來完成,就連簡單的申請內存操作,用戶空間都無法獨立自主地做到,因為這涉及到物理內存的分配,而物理內存也是硬件的一種,所以在這道屏障上需要開一扇門,來進行內核與用戶之間的交互,這道門也就是系統(tǒng)調用.

2.系統(tǒng)調用的作用和重要性

系統(tǒng)調用是用戶空間程序與內核空間之間的橋梁。用戶程序通過系統(tǒng)調用請求內核提供的服務,如文件操作、進程控制、網(wǎng)絡通信等。系統(tǒng)調用的存在有以下幾個重要原因:

  1. 安全性:保護系統(tǒng)資源,防止用戶程序濫用系統(tǒng)資源。
  2. 抽象性:為用戶程序提供統(tǒng)一的接口,隱藏底層實現(xiàn)細節(jié)。
  3. 可擴展性:內核可以根據(jù)需要添加新的服務,而不影響用戶程序。

3.系統(tǒng)調用的實現(xiàn)機制

系統(tǒng)調用的實現(xiàn)涉及到用戶態(tài)和內核態(tài)之間的切換,以及內核內部的處理流程。下面是一個簡化的系統(tǒng)調用流程圖:

alt

  1. 用戶程序發(fā)起系統(tǒng)調用:用戶程序通過系統(tǒng)調用接口(如syscall函數(shù))發(fā)起系統(tǒng)調用請求。

  2. 切換到內核態(tài):系統(tǒng)調用接口觸發(fā)一個中斷或特殊指令,使得CPU從用戶態(tài)切換到內核態(tài)。

  3. 查找系統(tǒng)調用表:內核通過系統(tǒng)調用表(sys_call_table)查找對應的系統(tǒng)調用處理函數(shù)。

  4. 執(zhí)行處理函數(shù):內核調用相應的處理函數(shù)來執(zhí)行系統(tǒng)調用的具體邏輯。

  5. 返回用戶態(tài):系統(tǒng)調用完成后,內核將結果返回給用戶程序,并通過中斷返回指令切換回用戶態(tài)。

4.系統(tǒng)調用指令都干了些什么(以syscall指令為例)

程序想從用戶態(tài)進入內核態(tài)的關鍵就是系統(tǒng)調用指令,這個指令是內核和用戶的橋梁。 syscall指令是x86-64架構中用于進行系統(tǒng)調用的一種機制。和sysret指令成對出現(xiàn)。當用戶態(tài)程序需要執(zhí)行系統(tǒng)調用時,它通過syscall指令觸發(fā)一個平滑的從用戶態(tài)到內核態(tài)的過渡。以下是syscall指令執(zhí)行時所做的事情的詳細步驟:

4.1. 保存用戶態(tài)寄存器

在執(zhí)行syscall指令之前,用戶程序會將需要傳遞給內核的參數(shù)放入特定的CPU寄存器中。在x86-64架構中,通常是以下寄存器:

  • rdi, rsi, rdx, r10, r8, r9:用于傳遞前六個參數(shù)。
  • rax:用于存放系統(tǒng)調用的編號。
4.2. 執(zhí)行syscall指令

用戶程序執(zhí)行syscall指令,這會導致CPU執(zhí)行以下操作:

  • 觸發(fā)中斷syscall指令在x86-64架構中相當于執(zhí)行了一個中斷,通常是中斷向量號0x80(32位系統(tǒng))或0x0C0(64位系統(tǒng))。
4.3. 從用戶態(tài)切換到內核態(tài)

中斷發(fā)生后,CPU會自動從用戶態(tài)切換到內核態(tài)。這個過程中,CPU會做以下事情:

  • 更改棧:從用戶棧切換到內核棧。
  • 更改指令指針:將指令指針指向內核態(tài)的中斷處理程序。
  • 保存狀態(tài):保存用戶態(tài)的CPU狀態(tài),包括寄存器內容等,以便于之后可以恢復。
4.4. 傳遞系統(tǒng)調用信息

內核態(tài)的中斷處理程序會檢查由用戶態(tài)傳遞過來的系統(tǒng)調用號和參數(shù),并根據(jù)這些信息確定要執(zhí)行的系統(tǒng)調用。

4.5. 查找系統(tǒng)調用處理函數(shù)

內核使用系統(tǒng)調用號查找sys_call_table,找到對應的系統(tǒng)調用處理函數(shù)。

4.6. 執(zhí)行系統(tǒng)調用處理函數(shù)

內核調用相應的處理函數(shù)執(zhí)行系統(tǒng)調用。這個處理函數(shù)會實際執(zhí)行用戶請求的操作,如讀寫文件、創(chuàng)建進程等。

4.7. 處理系統(tǒng)調用結果

系統(tǒng)調用完成后,處理函數(shù)會將結果返回。成功時,返回值通常是一個非負整數(shù);出錯時,返回一個負的錯誤碼。

4.8. 從內核態(tài)返回用戶態(tài)

系統(tǒng)調用完成后,內核需要將控制權交還給用戶程序。這涉及到以下步驟:

  • 恢復用戶態(tài)寄存器:將用戶態(tài)的寄存器狀態(tài)恢復。
  • 返回用戶棧:從內核棧切換回用戶棧。
  • 使用sysret指令:在x86-64架構中,sysret指令會從內核態(tài)返回到用戶態(tài)。
4.9. 繼續(xù)用戶程序的執(zhí)行

用戶程序在syscall指令之后的下一條指令處繼續(xù)執(zhí)行,此時系統(tǒng)調用的結果已經(jīng)被返回,用戶程序可以根據(jù)這個結果進行后續(xù)操作。

syscall指令的設計使得系統(tǒng)調用的發(fā)起和返回都非常簡單和高效,同時確保了用戶態(tài)和內核態(tài)之間的隔離,提高了系統(tǒng)的安全性和穩(wěn)定性。

5.系統(tǒng)調用表的結構

系統(tǒng)調用表是一個函數(shù)指針數(shù)組,每個元素對應一個系統(tǒng)調用的處理函數(shù)。下面是一個簡化的系統(tǒng)調用表的結構圖:

alt

  • sys_ni_syscall:默認的處理函數(shù),當系統(tǒng)調用編號無效時,返回錯誤。
  • sys_read、sys_writesys_open等:具體的系統(tǒng)調用處理函數(shù)。

6.添加新的系統(tǒng)調用

要向內核添加一個新的系統(tǒng)調用,需要以下步驟:

  1. 修改系統(tǒng)調用表:在內核源碼的syscall_64.tbl文件中添加新的系統(tǒng)調用編號和對應的處理函數(shù)。
	common	mycall	__x64_sys_mycall
  1. 實現(xiàn)處理函數(shù):編寫一個新的C函數(shù)來實現(xiàn)你的系統(tǒng)調用邏輯,并使用asmlinkage關鍵字聲明。
asmlinkage long sys_mycall(struct pt_regs *regs) {
    // 實現(xiàn)系統(tǒng)調用邏輯
    return 0;
}
  1. 修改內核配置:如果系統(tǒng)調用函數(shù)分布在不同的源文件中,需要在相應的makefile中添加源文件的引用。

  2. 編譯內核:修改完成后,重新編譯內核,這樣你的新系統(tǒng)調用就可以被使用了。

系統(tǒng)調用的性能考慮

系統(tǒng)調用的實現(xiàn)方式對性能有重要影響。早期的系統(tǒng)調用通過軟件中斷(如int $0x80)實現(xiàn),這種方式簡單但性能較差。現(xiàn)代的系統(tǒng)調用通過專門的CPU指令(如syscall)實現(xiàn),可以更快地在用戶態(tài)和內核態(tài)之間切換。

總結

系統(tǒng)調用是我們在傳統(tǒng)的用戶程序思維中,對OS內核的初步窺探,理解系統(tǒng)調用,是我們理解內核最初也是最重要的一步。

#操作系統(tǒng)##大廠##OS##嵌入式##開發(fā)#
十篇文章理解OS內核 文章被收錄于專欄

筆者在求職嵌入式,C/C++,后臺開發(fā)等崗位的技術面中,基本所有面試官對筆者具有OS內核相關開發(fā)經(jīng)歷十分感興趣,很多面試官也會建議我再繼續(xù)深入的了解OS內核。如華為,vivo,小米,??档牡总泹徫坏拿嬖嚬伲瑫恢鄙钔谖业腛S大賽項目。 對于計算機專業(yè),OS一直是重中之重,但是現(xiàn)代內核很多機制的實現(xiàn)細節(jié),學校并沒有講明,所以我會輸出一些文章來詳細講講OS的實現(xiàn)細節(jié)以及面試中需要著重銘記的要點。

全部評論

相關推薦

點贊 評論 收藏
分享
東孝子_強東我偶像:你怎么當孝子都和我時間一樣??
點贊 評論 收藏
分享
評論
2
8
分享

創(chuàng)作者周榜

更多
??途W(wǎng)
牛客企業(yè)服務