下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)讓ChatGPT寫(xiě)一個(gè)內(nèi)核模塊筆者最近看到這樣一篇文章
,原讓ChatGPT寫(xiě)一個(gè)內(nèi)核模塊,要求實(shí)現(xiàn)的功能是:每5秒向控制臺(tái)打印一句"Hellow(or)ld",并且把編譯需要的Makefile也一起寫(xiě)出來(lái)。
(AI)最開(kāi)始的實(shí)現(xiàn)方法是:創(chuàng)建一個(gè)內(nèi)核線程,線程主體是一個(gè)while循環(huán),每隔1毫秒檢查一次,看時(shí)間是不是過(guò)去了5秒:
while(!kthre(ad)_should_stop()){unsignedlong(ti)me_since_load=jiffies-jiffies_at_load;unsignedlongtime_since_load_sec=time_since_load/HZ;if(time_since_load_sec>=5){printk(KERN_INFO"Helloworld!");jiffies_at_load=jiffies;}//Sleepfor1mstoavoidhoggingthe(CPU)msleep(1);}
此處用msleep(1)是沒(méi)有大毛病的,它確實(shí)可以通過(guò)睡眠暫時(shí)讓出CPU,避免hogging,不像
busyloop
的mdelay()。
但它這里實(shí)現(xiàn)的比較曲折,1毫秒檢查一次,5秒內(nèi)就要檢查5000次,雖然沒(méi)有「霸占」CPU,但是對(duì)CPU資源也是不小的浪費(fèi)。
于是原讓它改了一個(gè)更減少CPU消耗的版本出來(lái):
while(!kthread_should_stop()){printk(KERN_INFO"Helloworld!");//Sleepfor5secondstoavoidhoggingtheCPUschedule_timeout(HZ*5);}
看起來(lái)是解決了原來(lái)存在的問(wèn)題,但編譯出來(lái)一試,好家伙,"Helloworld"是突突地往控制臺(tái)上打啊,根本不是間隔5秒一次。
把這個(gè)問(wèn)題反饋給AI后,它立馬做出了調(diào)整,加入了一句對(duì)process狀態(tài)的設(shè)置后,就可以work了。
set_current_state(TASK_INTERRUPTIBLE);schedule_timeout(HZ*5);
查閱(Linux)源碼可知,schedule_timeout()最終會(huì)調(diào)用__schedule()函數(shù),其對(duì)process切換的判斷是這樣的:
if(!preempt
再由于:
#defineTASK_RUNNING0x0000
所以如果之前的狀態(tài)是RUNNING,process并不會(huì)真的離開(kāi)CPU的runqueue,豈不就是一直執(zhí)行,一直框框地打印么。
在/search/linux上查了下schedule_timeout()在內(nèi)核中的具體使用情況,好些對(duì)set_current_state()為INTERRUPTIBLE的設(shè)置沒(méi)有和schedule_timeout()挨在一起,所以AI“理解”不了這兩者的關(guān)聯(lián),筆者覺(jué)得是可以接受的。
不過(guò)其實(shí)Linux是提供了一個(gè)“二合一”的封裝函數(shù)的:
schedschedule_timeout_uninterruptible(signedlongtimeout){set_current_state(TASK_UNINTERRUPTIBLE);returnschedule_timeout(timeout);}
而它還有個(gè)更上層的封裝"msleep"(希望可被(信號(hào))打斷就用"msleep_interruptible"):
voidmsleep(unsignedintmsecs){unsignedlongtimeout=msecs_to_jiffies(msecs)+1;while(timeout)timeout=schedule_timeout_uninterruptible(timeout);}
咳,繞了這么大一圈,其實(shí)一開(kāi)始直接用msleep(5000)最方便啦。
后來(lái)原又提了在「內(nèi)核模塊」開(kāi)發(fā)中頗為常見(jiàn)的兩點(diǎn)功能:
一是將5秒的間隔配置成modulepa(ram)eter(以供動(dòng)態(tài)調(diào)整),這個(gè)任務(wù)被順利完成了。
二是在"/proc"文件系統(tǒng)中加入打印次數(shù)的統(tǒng)計(jì)功能(以便查詢(xún)),這里出了點(diǎn)小岔子,AI用的"file_operations",而不是"proc_ops",這在高于5.7的內(nèi)核版本上是編譯不過(guò)的(參看筆者親身經(jīng)歷的這個(gè)案例)。
這也不能怪AI,你沒(méi)說(shuō)內(nèi)核版本不是。
小結(jié)
最后原寫(xiě)了下他的感受,大意就是"halfamazingandhalf(te)rrifying",雖然AI中途犯了不少錯(cuò),但總比自己現(xiàn)查(資料)來(lái)的快不是…
除此之外,筆者也有兩點(diǎn)感受,一是ChatGPT即使有時(shí)會(huì)出錯(cuò),但回答地總是非常自信(還好不是那么普通,卻那么自信……),二是那個(gè)解釋一條條地寫(xiě)的真是規(guī)范啊,連每個(gè)頭文件為什么加,都有理有據(jù),這一點(diǎn)就強(qiáng)過(guò)很多人。
#include//Neededforallkernelmodules#include//NeededforKERN_INFO#include//Neededforthemac(ros)#include//Neededforjiffies#include//Neededformsleep
筆者自己也用這個(gè)題目,在ChatGPT上試了一把,得出了不太一樣的結(jié)果,欲知后續(xù),請(qǐng)看下文分解。
補(bǔ)充(為了避免影響主線劇情):
那schedule_timeout()返回的時(shí)候,也需要手動(dòng)再將狀態(tài)設(shè)置回TASK_RUNNING么?不需要,因?yàn)閠imer的callback在喚醒process后會(huì)將其狀態(tài)(自動(dòng))設(shè)為RUNNING(參考Linux中的等待隊(duì)列機(jī)制):
void
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語(yǔ)外貿(mào)大學(xué)《環(huán)境生物監(jiān)測(cè)與修復(fù)技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東汕頭幼兒師范高等專(zhuān)科學(xué)校《水工程經(jīng)濟(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東培正學(xué)院《文化項(xiàng)目管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 七年級(jí)上冊(cè)《3.1.1 代數(shù)式》課件與作業(yè)
- 廣東南方職業(yè)學(xué)院《數(shù)學(xué)物理方法Ⅱ》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東理工職業(yè)學(xué)院《中國(guó)藝術(shù)設(shè)計(jì)史》2023-2024學(xué)年第一學(xué)期期末試卷
- 【全國(guó)百?gòu)?qiáng)?!刻旖蚴心祥_(kāi)中學(xué)2020-2021學(xué)年高一上學(xué)期第二次階段檢測(cè)數(shù)學(xué)試題
- 【Ks5u發(fā)布】山東省煙臺(tái)市2021屆高三上學(xué)期期末統(tǒng)考數(shù)學(xué)(理)試題掃描版含答案
- 2021高考生物限時(shí)規(guī)范特訓(xùn):第25講-現(xiàn)代生物進(jìn)化理論
- 【9語(yǔ)一?!?024年合肥市第四十二中學(xué)中考一模語(yǔ)文試題
- 湘藝版 四年級(jí)上冊(cè)音樂(lè)教案- 第五課 踩雨
- 魔方社團(tuán)活動(dòng)記錄-副本
- 《振動(dòng)力學(xué)》習(xí)題集(含答案解析)
- 診斷課件診斷學(xué)咯血
- 高速公路項(xiàng)目施工安全標(biāo)準(zhǔn)化圖集(多圖)
- 第一節(jié)植物細(xì)胞的結(jié)構(gòu)和功能 (3)
- D502-15D502等電位聯(lián)結(jié)安裝圖集
- 設(shè)計(jì)風(fēng)速、覆冰的基準(zhǔn)和應(yīng)用
- 水果深加工項(xiàng)目商業(yè)計(jì)劃書(shū)范文參考
- 愛(ài)麗絲夢(mèng)游仙境話(huà)劇中英文劇本
- 五年級(jí)上冊(cè)人教版數(shù)學(xué)脫式計(jì)算題五年級(jí)上冊(cè)脫式計(jì)算,解方程,應(yīng)用題
評(píng)論
0/150
提交評(píng)論