国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 操作系統(tǒng) > 正文

庫函數(shù)與系統(tǒng)調(diào)用

2024-06-28 13:21:25
字體:
供稿:網(wǎng)友
庫函數(shù)與系統(tǒng)調(diào)用

系統(tǒng)調(diào)用可以解釋為操作系統(tǒng)為用戶提供的一些接口,這些接口提供了對系統(tǒng)硬件功能的操作。這樣說大家可能還有點抽象,我再舉一個更具體的例子:比如我要寫一個程序,這個程序的功能就是在屏幕上顯示一個字符串“hello,world!”。那么實現(xiàn)這么一個在屏幕上顯示一個字符串的操作就是系統(tǒng)調(diào)用write()的功能。

那么系統(tǒng)調(diào)用的意義在哪里呢? 你想想看,你寫一個程序還需要自己去實現(xiàn)在屏幕上打印字符串的代碼,這也太累人了吧,,因此系統(tǒng)調(diào)用把我們從底層的硬件編程中解放了出來。再者,系統(tǒng)調(diào)用是內(nèi)核代碼,內(nèi)核代碼能訪問系統(tǒng)上的所有地址空間,而我們執(zhí)行的代碼是用戶空間的代碼,用戶空間的代碼在對系統(tǒng)進(jìn)行操作時是有限制的,(作為一個菜鳥程序員,系統(tǒng)如果不對你寫的代碼進(jìn)行限制,,萬一把系統(tǒng)搞蹦了呢。。)。因此系統(tǒng)調(diào)用的另一個功能就是維護(hù)了系統(tǒng)的安全性,,你要用就直接調(diào)用我這個接口就行了,,不用你自己寫。系統(tǒng)調(diào)用還有一個功能就是為了方便程序的移植性。。 總之,你就把系統(tǒng)調(diào)用當(dāng)做一個接口,什么時候你需要使用它了,調(diào)用一下它就行了,既方便又安全。。 你可能會有疑問,我們平時在寫C語言時打印一個字符串不是用PRintf()函數(shù)嗎?這個printf()跟前面提到的那個系統(tǒng)調(diào)用write()有什么區(qū)別呢?問對了。 其實你可以把庫函數(shù)當(dāng)做是對系統(tǒng)調(diào)用的又一次封裝。。什么意思呢?系統(tǒng)調(diào)用作為內(nèi)核提供給我們的接口,它的執(zhí)行效率是比較高效精簡的。但是有時候我們需要對獲取的信息進(jìn)行更復(fù)雜的處理,這個時候如果我們把這些處理過程包裝成一個函數(shù)再提供給程序員,不是更方便編程了嗎?因此一個庫函數(shù)有可能含有一個系統(tǒng)調(diào)用,有可能有好幾個系統(tǒng)調(diào)用,當(dāng)然也有可能沒有系統(tǒng)調(diào)用,比如有些操作就不需要涉及內(nèi)核的功能。 總之,庫函數(shù)是面向程序員的應(yīng)用編程接口。看一下下面這張圖也許更明白了它們之間的關(guān)系: 說完了庫函數(shù)和系統(tǒng)調(diào)用之間的關(guān)系,下面我們來看看系統(tǒng)調(diào)用到底是怎么運行的。 當(dāng)一個進(jìn)程正在運行時,遇到讀寫文件什么的,此時會發(fā)生一個中斷,中斷發(fā)生后,系統(tǒng)會把當(dāng)前用戶進(jìn)程的一些寄存器信息保存在內(nèi)核堆棧中(以備將來恢復(fù)),接著去執(zhí)行中斷服務(wù)程序,我們這里是去執(zhí)行系統(tǒng)調(diào)用,linux中通過執(zhí)行int $0x80來執(zhí)行系統(tǒng)調(diào)用的中斷,但是內(nèi)核實現(xiàn)了很多系統(tǒng)調(diào)用,所以進(jìn)程必須指明需要哪個系統(tǒng)調(diào)用,這時候就需要傳遞一個系統(tǒng)調(diào)用號。這個系統(tǒng)調(diào)用號就存放在%eax寄存器中。 下面我們通過一個例子來說明:我們這里這個程序用來顯示當(dāng)前的時間。 首先我們通過庫函數(shù)來實現(xiàn): 結(jié)果如下:成功獲得當(dāng)前時間。 接下來我們通過嵌入?yún)R編語言來實現(xiàn)系統(tǒng)調(diào)用: 發(fā)現(xiàn)沒?首先通過mov $0xd %%eax來將系統(tǒng)調(diào)用號放入%eax寄存器中,通過查閱,發(fā)現(xiàn)time()的系統(tǒng)調(diào)用號是13。這個時候通過執(zhí)行int $0x80,系統(tǒng)就會去執(zhí)行time()這個系統(tǒng)調(diào)用了。 查看結(jié)果: 看,依然能夠獲得系統(tǒng)的時間! 這里涉及的很多知識可能大家都不太看得懂,沒關(guān)系,我們后面會詳細(xì)介紹!這篇博客的目的是讓大家理解庫函數(shù)和系統(tǒng)調(diào)用的區(qū)別,以及系統(tǒng)調(diào)用的大致執(zhí)行方式。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 深水埗区| 河北区| 绥德县| 苏州市| 绥芬河市| 温泉县| 浦县| 鹰潭市| 富源县| 岳池县| 和龙市| 平安县| 西昌市| 东平县| 曲靖市| 大埔县| 西乡县| 苗栗市| 清镇市| 赤城县| 营口市| 朝阳市| 加查县| 尖扎县| 卢氏县| 安庆市| 九龙城区| 乌鲁木齐县| 定西市| 佛山市| 含山县| 宁远县| 永定县| 广南县| 墨玉县| 雷波县| 清河县| 阜新市| 邻水| 乌海市| 阿勒泰市|