日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux系统调用及其效率

發(fā)布時(shí)間:2025/4/14 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统调用及其效率 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

操作系統(tǒng)相關(guān)概念:

操作系統(tǒng)---管理計(jì)算機(jī)硬件與軟件資源的軟件,是用戶(hù)與系統(tǒng)操作交互的接口,為在它上面運(yùn)行的程序提供服務(wù)。

操作系統(tǒng)內(nèi)核 ----操作系統(tǒng)的核心。負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)核、設(shè)備驅(qū)動(dòng)程序。文件和網(wǎng)絡(luò)系統(tǒng),一套內(nèi)核不是一套完整的操作系統(tǒng),如Linux。

Linux操作系統(tǒng)---基于Linux內(nèi)核的操作系統(tǒng),通常由Linux內(nèi)核、Shell、文件系統(tǒng)和應(yīng)用程序。常見(jiàn)的有RetHat 、Fedora 、Centos 、Ubuntu和Andriod。

?

Linux的運(yùn)行空間:

Linux的運(yùn)行空間 = 內(nèi)核空間 + 用戶(hù)空間

內(nèi)核空間 ---存放的是整個(gè)內(nèi)核代碼和所有內(nèi)核模塊,以及內(nèi)核所維護(hù)的數(shù)據(jù)。

用戶(hù)空間---用戶(hù)程序的代碼和數(shù)據(jù)。

?

?

什么是系統(tǒng)調(diào)用?

操作系統(tǒng)提供給用戶(hù)程序調(diào)用的系統(tǒng)服務(wù)(硬件設(shè)備)的一組特殊的接口。

系統(tǒng)調(diào)用可以被看成是一個(gè)內(nèi)核與用戶(hù)空間程序交互的接口——他好比一個(gè)信使,把用戶(hù)進(jìn)程的請(qǐng)求傳達(dá)給內(nèi)核,

待內(nèi)核將請(qǐng)求處理完畢后,再將處理的結(jié)果送回給用戶(hù)空間。

?

?

系統(tǒng)調(diào)用的必要性:

1)把用戶(hù)從底層的硬件編程中解放出來(lái)

  與具體的硬件完全隔離,用戶(hù)不需要面向具體的硬件編碼,降低了開(kāi)發(fā)的發(fā)雜性和難度。

2)極大的提高了系統(tǒng)的安全性與穩(wěn)定性

  將用戶(hù)進(jìn)程隔離,實(shí)現(xiàn)內(nèi)核“保護(hù)”,用戶(hù)進(jìn)程不允許訪問(wèn)數(shù)據(jù),也無(wú)法使用內(nèi)核函數(shù),用戶(hù)訪問(wèn)內(nèi)核的路徑是事先定義好的,

? ? ? ?只能從規(guī)定位置進(jìn)入內(nèi)核,而不準(zhǔn)肆意跳入內(nèi)核,有了這樣限于內(nèi)核的統(tǒng)一訪問(wèn)方式才能保證內(nèi)核的安全無(wú)誤。

3)使用戶(hù)程序具有可移植性

  不同平臺(tái),不同硬件。略略略。

?

-------------------------------------------------------------

系統(tǒng)調(diào)用的實(shí)現(xiàn):

簡(jiǎn)單的來(lái)講,系統(tǒng)調(diào)用實(shí)現(xiàn)所依靠的是軟件中斷。那么何為軟件中斷?

  軟件中斷——他是通過(guò)軟件指令觸發(fā)的中斷,Linux系統(tǒng)內(nèi)核響應(yīng)軟件中斷,從用戶(hù)態(tài)切換到內(nèi)核態(tài)執(zhí)相應(yīng)的系統(tǒng)調(diào)用。中斷

指計(jì)算機(jī)運(yùn)行過(guò)程中,出現(xiàn)某些意外情況需要主機(jī)干預(yù)時(shí),機(jī)器能夠自動(dòng)停止處理正在運(yùn)行的程序并轉(zhuǎn)入處理新情況的程序,處理完

畢后,有轉(zhuǎn)回被暫停的程序繼續(xù)執(zhí)行。

?

系統(tǒng)調(diào)用控制程序執(zhí)行軟件中斷的過(guò)程如下:

  1)在進(jìn)程的內(nèi)核態(tài)堆棧中保存大多數(shù)寄存器的內(nèi)容(即保存恢復(fù)進(jìn)程到用戶(hù)態(tài)執(zhí)行所需要的上下文)

  2)根據(jù)用戶(hù)態(tài)傳遞的系統(tǒng)調(diào)用號(hào),確定系統(tǒng)調(diào)用的執(zhí)行程序

  3)調(diào)用相應(yīng)的執(zhí)行程序來(lái)處理系統(tǒng)調(diào)用

  4)從系統(tǒng)調(diào)用返回(恢復(fù)用戶(hù)空間的程序運(yùn)行)

?

前面提到了系統(tǒng)調(diào)用號(hào),系統(tǒng)調(diào)用號(hào)是什么呢?

系統(tǒng)調(diào)用號(hào)——每一個(gè)系統(tǒng)調(diào)用被賦予一個(gè)系統(tǒng)調(diào)用號(hào),與具體的系統(tǒng)調(diào)用相關(guān)聯(lián)。

?系統(tǒng)調(diào)用表——內(nèi)核維護(hù)系統(tǒng)調(diào)用表,保存系統(tǒng)調(diào)用函數(shù)的起始地址,系統(tǒng)調(diào)用號(hào)對(duì)應(yīng)系統(tǒng)在系統(tǒng)調(diào)用中的偏移量。

?

執(zhí)行系統(tǒng)調(diào)用的方法:

一)glibc庫(kù)函數(shù)——glibc是Linux下使用的開(kāi)源標(biāo)準(zhǔn)C庫(kù),他是GUN發(fā)布的libc,即運(yùn)行時(shí)庫(kù)。

  1)每個(gè)特定的系統(tǒng)調(diào)用對(duì)應(yīng)至少一個(gè)glibc封裝的庫(kù)函數(shù)

  2)多個(gè)API有可能只對(duì)應(yīng)同一個(gè)系統(tǒng)調(diào)用

  3)返回值-1在多數(shù)情況下表示內(nèi)核不能滿(mǎn)足進(jìn)程的請(qǐng)求

  4)Libc中定義的errno變量包含特定的出錯(cuò)碼

  GLIB庫(kù)函數(shù)實(shí)例

  

?

二)syscall調(diào)用——glibc提供的syscall函數(shù)直接調(diào)用。

函數(shù)原型:long int syscall(long int sysno, ...)

傳參說(shuō)明:sysno是系統(tǒng)調(diào)用號(hào),唯一標(biāo)識(shí)系統(tǒng)調(diào)用號(hào),詳見(jiàn)sys/syscall.h

     ...為剩余可變長(zhǎng)的參數(shù),為系統(tǒng)調(diào)用所帶的參數(shù),根據(jù)系統(tǒng)調(diào)用的不同,可帶0~5個(gè)不等的參數(shù),

     如果超過(guò)特定系統(tǒng)調(diào)用所能帶的參數(shù),多余的參數(shù)被忽略。

返回值:該函數(shù)返回值為特定系統(tǒng)調(diào)用的返回值,在系統(tǒng)調(diào)用成功之后你可以將返回值轉(zhuǎn)化為特定的類(lèi)型,

     如果系統(tǒng)調(diào)用失敗則返回-1,錯(cuò)誤代碼存放在errno中。

  Syscall調(diào)用實(shí)例

  

?

Glibc調(diào)用與Syscall調(diào)用的對(duì)比

?

?

-----------------------如何高效的執(zhí)行Linux系統(tǒng)調(diào)用---------------------------

?

系統(tǒng)調(diào)用會(huì)影響效率?

頻繁使用底層的系統(tǒng)調(diào)用會(huì)影響程序的執(zhí)行效率!why? ——罪魁禍?zhǔn)住脩?hù)態(tài)和內(nèi)核態(tài)的切換。

  1)保存用戶(hù)進(jìn)程現(xiàn)場(chǎng)

  2)合法性檢查(如內(nèi)存)

  3)參數(shù)傳遞

  4)恢復(fù)現(xiàn)場(chǎng)

  

如何避免系統(tǒng)調(diào)用時(shí)的效率問(wèn)題?

  1)多調(diào)用GLIBC庫(kù),如果GLIBC庫(kù)中能找到,就毫不猶豫的使用它。

  2)盡可能少調(diào)用系統(tǒng)接口,能一次搞定的避免多次。

?

轉(zhuǎn)載于:https://www.cnblogs.com/wangkeqin/p/9201703.html

總結(jié)

以上是生活随笔為你收集整理的Linux系统调用及其效率的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。