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

歡迎訪問 生活随笔!

生活随笔

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

linux

2018-2019-1 20189218《Linux内核原理与分析》第五周作业

發(fā)布時間:2025/6/17 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018-2019-1 20189218《Linux内核原理与分析》第五周作业 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

系統(tǒng)調(diào)用的三層機(jī)制

用戶態(tài)、內(nèi)核態(tài)和中斷

  • 用戶態(tài)。較低的執(zhí)行級別,只能訪問一部分內(nèi)存,只能執(zhí)行一部分指令。
  • 內(nèi)核態(tài)。高級執(zhí)行級別,可以訪問任意物理內(nèi)存,可以執(zhí)行特權(quán)指令。
  • 中斷。系統(tǒng)從用戶態(tài)進(jìn)入內(nèi)核態(tài)的主要方式。有硬件中斷和軟中斷。系統(tǒng)調(diào)用就是通過軟中斷進(jìn)入內(nèi)核態(tài)。

上下文切換

用戶態(tài)切換到內(nèi)核態(tài)時,就要把用戶態(tài)寄存器上下文保存起來,同時要把內(nèi)核態(tài)寄存器的值放到當(dāng)前cpu中。int指令出發(fā)中斷機(jī)制會在堆棧上保存一些寄存器的值,會保存(SAVE_ALL)用戶態(tài)棧頂?shù)闹?/strong>,當(dāng)時的狀態(tài)字(flag)當(dāng)時的CS:EIP的值。同時會將內(nèi)核態(tài)的這些寄存器的值加載到cpu。其中內(nèi)核態(tài)CS:EIP指向中斷處理程序的入口,如果是系統(tǒng)調(diào)用則指向system_call,當(dāng)中斷結(jié)束后執(zhí)行restore_all和INTERRUPT_RETURN。

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

API就是系統(tǒng)調(diào)用的庫函數(shù),是一個函數(shù)定義。系統(tǒng)調(diào)用是通過軟中斷向內(nèi)核發(fā)出了中斷請求,int指令的執(zhí)行就會觸發(fā)一個中斷請求,一個API可能只對應(yīng)一個系統(tǒng)調(diào)用,也可能由多個系統(tǒng)調(diào)用實現(xiàn)。

Linux中通過int $0x80來觸發(fā)系統(tǒng)調(diào)用的執(zhí)行,內(nèi)核給每個系統(tǒng)調(diào)用一個編號,即系統(tǒng)調(diào)用號來指明是哪個系統(tǒng)調(diào)用,通過EAX寄存器傳遞。

無參數(shù)系統(tǒng)調(diào)用

依次通過c語言和內(nèi)嵌匯編的c語言實現(xiàn)time()函數(shù)中封裝的系統(tǒng)調(diào)用。

time.c

課本上給出的time.c在編譯時遇到如下問題:

查看struct tm發(fā)現(xiàn)應(yīng)該是mday:

修改后代碼如下:

修改后順利運行:

內(nèi)嵌匯編的代碼運行順利:

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

其實沒什么大區(qū)別,C語言代碼及運行結(jié)果如圖:

內(nèi)嵌匯編的代碼及運行結(jié)果如圖,比c語言代碼有所簡化:

帶兩個參數(shù)的系統(tǒng)調(diào)用

同樣運行順利,代碼如下:

通用庫函數(shù)syscall

新增的沒有被封裝好的系統(tǒng)調(diào)用可以通過syscall(系統(tǒng)調(diào)用號,參數(shù)表)實現(xiàn),實際上比前兩種方式舒服很多。

于是我們需要知道系統(tǒng)調(diào)用對應(yīng)的系統(tǒng)調(diào)用號,在編譯器中通過查看syscall.h中引用的unistd.h文件可以查看系統(tǒng)定義的系統(tǒng)調(diào)用號表。

至于為什么unistd.h中的宏定義的變量名和我們使用的不一樣,是因為在bits/syscall.h中又進(jìn)行了一次宏定義:

這樣應(yīng)該更有益于程序的可讀性和不同版本的兼容性(兼容性是官方的解釋,但我現(xiàn)在對不同版本之間的兼容不報什么希望)。

感想

在查看系統(tǒng)調(diào)用號表時,實際上系統(tǒng)中有大量的unistd.h,包括i386、x86_64安裝過的mykernel和Linuxkernel以及許多不知道來源的。通常是在/usr/include/asm目錄下,但在我的電腦上甚至沒有asm這個目錄。還好編譯器中鏈接到的文件是在搜索目錄中的,所以能比較快的找到需要的頭文件。

之前在編程中要用到系統(tǒng)中的命令都是由system(command)實現(xiàn),現(xiàn)在想來這應(yīng)該是通過shell的封裝來調(diào)用的系統(tǒng)函數(shù),效率應(yīng)該比直接在程序中進(jìn)行系統(tǒng)調(diào)用低不少。

一個小問題

這章之后對Linux系統(tǒng)的層次似乎多了些理解。按照我的理解,內(nèi)核處于最底層,c語言中的系統(tǒng)調(diào)用和shell中的內(nèi)建命令都是通過調(diào)用內(nèi)核中的函數(shù)實現(xiàn),是對內(nèi)核中的函數(shù)的不同的封裝。C語言中syscall()是直接調(diào)用內(nèi)核中的函數(shù),而C語言中的system()函數(shù)則是通過調(diào)用shell間接的調(diào)用內(nèi)核中的函數(shù),所以命令可以和終端中的寫法保持一致,傳參也是直接傳字符串。希望這么理解是對的,在以后的實踐中去檢驗。

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

總結(jié)

以上是生活随笔為你收集整理的2018-2019-1 20189218《Linux内核原理与分析》第五周作业的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 午夜整容室| 久久久国产一区二区三区 | 免费看国产曰批40分钟粉红裤头 | 天堂网一区二区 | 麻豆视频观看 | 麻豆 国产 | 亚洲视频在线观看免费视频 | 新中文字幕 | www成人网 | 国产一区二区观看 | 综合激情在线 | 国产电影一区二区三区爱妃记 | 日本韩国三级 | 91猎奇在线观看 | 日韩视频一区二区在线观看 | 97视频一区 | 亚洲校园激情 | 色偷偷视频 | 黄色avav | 亚洲人色| 国产精品免费久久 | 丝袜在线一区 | 欧美性猛交ⅹ乱大交3 | 亚洲麻豆一区二区三区 | 成人精品一区二区三区中文字幕 | 丁香六月激情综合 | 国产91丝袜在线播放九色 | 乳色吐息免费看 | 欧美色综合天天久久综合精品 | 成年人黄色 | 五月婷婷婷婷 | 亚洲AV成人无码一二三区在线 | 国产91精品欧美 | 国产素人在线 | 亚洲乱码国产乱码精品精软件 | 日本韩国欧美一区二区三区 | 午夜写真片福利电影网 | 男女爽爽视频 | 欧美另类视频在线观看 | 久久午夜无码鲁丝片 | 可以看的av网址 | 欧美日韩一区二区久久 | 91爱爱com| 影音先锋中文字幕一区 | 500福利视频导航 | 原创真实夫妻啪啪av | 中文字字幕一区二区三区四区五区 | 久久精品亚洲a | 欧美aa| 国产91片| 亚洲午夜毛片 | 男生插女生的网站 | 亚洲网在线观看 | 久久精品无码一区二区三区 | 国产成人综合亚洲 | 免费视频网站在线观看入口 | 风间ゆみ大战黑人 | 日韩3区| 欧美精品黑人猛交高潮 | 亚洲GV成人无码久久精品 | 日韩精品视频免费看 | 日韩毛片一区二区三区 | 四虎永久在线精品免费一区二区 | 免费在线观看黄网站 | 无码成人精品区在线观看 | 尤物视频网站在线观看 | 在线观看日本视频 | 激情网av| 一区二区三区久久久久 | 免费在线观看成人av | 伊人免费在线观看高清版 | 精品国产乱码久久久久夜深人妻 | 国产3p在线播放 | 国产精品av一区 | 欧美10p| 久久久精品蜜桃 | 亚洲视频在线一区 | 奇米影视777在线观看 | 亚洲天堂社区 | 日韩在线免费视频观看 | 激情久| 美国爱爱视频 | 国产毛片毛片毛片 | 色吧久久| 激情综合区 | 丰满人妻老熟妇伦人精品 | av制服丝袜| 狠狠干in | 26uuu成人网 国产精品久久久久久久久久直播 | 日韩成人午夜电影 | 国产黑丝在线播放 | 午夜剧场91 | 狠狠操综合网 | 国产免费脚交足视频在线观看 | 国产福利二区 | 91热热 | 日韩黄片一区二区三区 | 一女双乳被两男吸视频 | 四虎最新网址在线观看 |