版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)習(xí)題目:作業(yè)調(diào)度系統(tǒng)完畢人姓名:組號(hào):一學(xué)號(hào):實(shí)習(xí)內(nèi)容簡(jiǎn)要描述試驗(yàn)內(nèi)容:規(guī)定實(shí)現(xiàn)顧客空間內(nèi)的作業(yè)調(diào)度系統(tǒng),通過(guò)作業(yè)調(diào)度系統(tǒng)實(shí)現(xiàn)如下的操作:(1)提交自己的作業(yè)。(2)將自己提交的作業(yè)移出。(3)查看作業(yè)狀態(tài)。2.試驗(yàn)?zāi)康模?1).理解操作系統(tǒng)中調(diào)度的概念和調(diào)度算法。(2).學(xué)習(xí)Linux下進(jìn)程控制以及進(jìn)程之間通信的知識(shí)。(3).理解在操作系統(tǒng)中作業(yè)是怎樣被調(diào)度的,怎樣協(xié)調(diào)和控制各作業(yè)對(duì)CPU的使用。3.試驗(yàn)環(huán)境:windows/xp,Linux系統(tǒng)虛擬機(jī)重要代碼構(gòu)造(附注釋)見(jiàn)附表(一)成果分析(或錯(cuò)誤原因分析)一.試驗(yàn)措施要完畢試驗(yàn)作業(yè)調(diào)度系統(tǒng),還需要編寫試驗(yàn)代碼。在linux系統(tǒng)終端中,寫一種可以執(zhí)行的作業(yè)。下面將一種作業(yè)的代碼寫出來(lái)。注釋:假如上述表格空間不夠,可以另附表格進(jìn)行闡明操作系統(tǒng)實(shí)習(xí)匯報(bào)日期:-5-25成果分析(或錯(cuò)誤原因分析)將讓面的程序保留為p1.c。接下來(lái)就在linux系統(tǒng)終端中進(jìn)行處理。打開(kāi)一終端,編譯scheduler.c,stat.c,enq.c,deq.c文獻(xiàn)。自己定義5個(gè)程序,為p1,p2,p3,p4,p5,這5個(gè)程序運(yùn)行時(shí)間滿足不小于100毫秒,編譯這個(gè)5個(gè)程序。當(dāng)上面的工作完畢后,在一種終端”A”里面運(yùn)行”./scheduler”程序,然后再開(kāi)一種終端”B”,運(yùn)行“./enqp1”,同理,運(yùn)行p2,p3,p4,p5,也可以運(yùn)行statjid和deqjid命令,在A終端里面觀測(cè)相對(duì)應(yīng)的變化。終端B終端A二.成果分析1.當(dāng)在A終端中運(yùn)行scheduler程序后,成果如下表明Scheduler程序已經(jīng)運(yùn)行。在B終端中運(yùn)行./enqp1。在A終端中出現(xiàn)如下的成果:表明新的job已經(jīng)建立。Jid為1,pid為16914.在B終端中運(yùn)行./stat。在A終端中出現(xiàn)如下成果:即顯示作業(yè)狀態(tài)。4.在B終端運(yùn)行./deq后,在A終端出現(xiàn)如下成果。表明作業(yè)已經(jīng)出隊(duì)。在終端B執(zhí)行p2,p3,p4,p5后將出現(xiàn)與執(zhí)行p1后相似的成果。重要代碼構(gòu)造(附注釋)一:試驗(yàn)代碼分析本次試驗(yàn)中需要文獻(xiàn)shceduler.c,deq.c,stat.c,enq.c和job.h.。其中shceduler.c是已經(jīng)完畢好的作業(yè)調(diào)度程序。下面分析它的代碼shceduler.c。scheduler是作業(yè)調(diào)度程序,負(fù)責(zé)整個(gè)系統(tǒng)的運(yùn)行。這是一種不停循環(huán)運(yùn)行的進(jìn)程,其任務(wù)是處理作業(yè)的入隊(duì)、出隊(duì)以及狀態(tài)查看祈求,在合適的時(shí)間調(diào)度各作業(yè)運(yùn)行。voidschedule(){ structjobinfo*newjob=NULL;//創(chuàng)立一種新的jobinfo構(gòu)造,用來(lái)寄存job的信息 structjobcmdcmd;//創(chuàng)立一種新的命令行構(gòu)造,用來(lái)寄存job命令的有關(guān)信息,包括命令種類,命令優(yōu)先級(jí),命令的發(fā)出者,命令的內(nèi)容 intcount=0; bzero(&cmd,DATALEN);//該函數(shù)將命令行第一種命令置為空 if((count=read(fifo,&cmd,DATALEN))<0)//讀fifo文獻(xiàn)中的一種job命令。 error_sys("readfifofailed");//////////////////////////////////////////////////////////// switch(cmd.type){//查看job命令行中的的type一項(xiàng)。該項(xiàng)代表此命令行的種類,即stat、deq、enq命令。 caseENQ://假如是ENQ則調(diào)用enq命令對(duì)應(yīng)的處理程序do_enq()函數(shù)處理 do_enq(newjob,cmd); break; caseDEQ://假如是DEQ,則調(diào)用deq命令相對(duì)應(yīng)的程序do_deq()函數(shù)處理 do_deq(cmd); break; caseSTAT://假如是STAT,則調(diào)用STAT命令相對(duì)應(yīng)的程序do_stat()函數(shù)處理 do_stat(cmd); break; default://假如命令是其他命令,則什么都不做 break; }/*schedule()函數(shù)通過(guò)以上分析的形式對(duì)命令的類型進(jìn)行分析,并調(diào)用與類型相對(duì)應(yīng)的處理程序來(lái)進(jìn)行作業(yè)調(diào)度任務(wù)。如下分析這三個(gè)處理程序。voiddo_enq(structjobinfo*newjob,structjobcmdenqcmd)//此函數(shù)就是處理enq命令的程序。首先在程序中創(chuàng)立兩個(gè)個(gè)waitqueue*newnode,*p;然后就進(jìn)行newjob的填充,并進(jìn)行命令的處理。如:*/while(i<enqcmd.argnum){ if(*offset==':'){ *offset++='\0'; q=(char*)malloc(offset-argvec); strcpy(q,argvec); arglist[i++]=q; argvec=offset; }else offset++; }//在對(duì)命令行進(jìn)行處理后,就應(yīng)當(dāng)將作業(yè)做入隊(duì)處理。代碼如下newnode=(structwaitqueue*)malloc(sizeof(structwaitqueue)); newnode->next=NULL; newnode->job=newjob;//最終輸出作業(yè)有關(guān)信息后整個(gè)處理就結(jié)束了。打印信息代碼如下 newjob->pid=pid; printf("\nnewjob:jid=%d,pid=%d\n",newjob->jid,newjob->pid);voiddo_deq(structjobcmddeqcmd)//這個(gè)函數(shù)就是deq命令的處理函數(shù)。毫無(wú)疑問(wèn),這個(gè)函數(shù)首先也需要?jiǎng)?chuàng)//建作業(yè)等待隊(duì)列。structwaitqueue*p,*prev,*select,*selectprev;//程序根據(jù)jid來(lái)確//定出隊(duì)的job。首先會(huì)在目前正在執(zhí)行的job中查找,假如符合,則直接進(jìn)行一下處理printf("terminatejob:%d\n",current->job->jid); kill(SIGTERM,current->job->pid); for(i=0;(current->job->cmdarg)[i]!=NULL;i++){ free((current->job->cmdarg)[i]); (current->job->cmdarg)[i]=NULL; } free(current->job->cmdarg); free(current->job); free(current); current=NULL;//假如不是目前正在執(zhí)行的job,則在等待隊(duì)列中查找。//在等待隊(duì)列中找到后,程序就會(huì)將job停止,并釋放job占用的資源。voiddo_stat()//分析//Stat命令就是在原則輸出上打印出就緒隊(duì)列中各作業(yè)的信息。實(shí)現(xiàn)相對(duì)//簡(jiǎn)樸。只需要在等待隊(duì)列中依次輸出job的有關(guān)信息即可。二:deq.c和stat.c編寫deq.c和stat.c分別執(zhí)行作業(yè)調(diào)度系統(tǒng)中的deq命令和stat命令。即作業(yè)出棧命令和作業(yè)狀態(tài)查詢命令。deq是作業(yè)出隊(duì)命令:格式是deqjid,每一種作業(yè)提交時(shí),scheduler調(diào)度程序都將為其分派一種惟一的jid。使用deq命令,給scheduler調(diào)度程序發(fā)出一種出隊(duì)祈求。scheduler調(diào)度程序?qū)⑹乖撟鳂I(yè)出隊(duì),然后清除有關(guān)的數(shù)據(jù)構(gòu)造。假如該作業(yè)目前正在運(yùn)行,則發(fā)信號(hào)給它,迫使它停止運(yùn)行。當(dāng)然,每個(gè)顧客都只能殺掉(kill)自己提交的作業(yè),而非他人的。stat是查看作業(yè)狀態(tài)的命令:格式是stat,在原則輸出上打印出就緒隊(duì)列中各作業(yè)的信息。狀態(tài)信息應(yīng)當(dāng)包括如下幾點(diǎn):·進(jìn)程的pid;·作業(yè)提交者的username;·作業(yè)執(zhí)行的時(shí)間;·在就緒隊(duì)列中總的等待時(shí)間;·作業(yè)創(chuàng)立的時(shí)刻;·此時(shí)作業(yè)的狀態(tài)(READY、RUNNING)。在讀了作業(yè)調(diào)度源代碼scheduler.c文獻(xiàn)后,分析enq.c文獻(xiàn),根據(jù)enq.c的寫法編寫程序deq.c和stat.c,這兩個(gè)程序就是判斷輸入的命令行與否是合法命令,假如不是,做出提醒;假如是就將該命令存入FIFO文獻(xiàn)中。然后scheduler.c程序就會(huì)在該文獻(xiàn)中提取命令行,做出對(duì)應(yīng)的處理。//stat.c的源代碼voidusage()//假如參數(shù)個(gè)數(shù)不對(duì)則調(diào)用該函數(shù)顯示對(duì)的的命令格式提醒顧客輸入對(duì)的的命令{ printf("Usage:stat\n" "Printjobstatisticsofalljobs");}intmain(intargc,char*argv[])//主函數(shù){ structjobcmdstatcmd;//命令行數(shù)據(jù)構(gòu)造,intfd,fifo; charfifoname[100]; structjobinfoinfo; chartimebuf[BUFLEN]; if(argc!=1) { usage(); return1; } statcmd.type=STAT; statcmd.defpri=0; statcmd.owner=getuid(); statcmd.argnum=0;statcmd.data[0]='\0'; if((fd=open(FIFO,O_WRONLY))<0) error_sys("statopenfifofailed"); if(write(fd,&statcmd,DATALEN)<0)//假如可以打開(kāi)FIFO文獻(xiàn),寫入命令行 error_sys("statwritefailed"); close(fd);return0;}//deq.c的源代碼voidusage(){ printf("Usage:deqjid\n" "\tjid\t\tthejobid\n");}intmain(intargc,char*argv[]){ intfd; structjobcmddeqcmd; if(argc!=2) { usage(); return1; } intp=atoi(*(++argv)); if(p<0||p>9)//假如文獻(xiàn)ID不為數(shù)字,給出錯(cuò)誤提醒 { printf("Invalidjobid:mustbeadigit.\n"); usage(); return1; } --argv; /*Initialthedeqcmdstruct*/ deqcmd.type=DEQ; deqcmd.defpri=0; deqcmd.owner=getuid(); deqc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 咪咪吃魚課件
- 2025年平江縣招教考試備考題庫(kù)含答案解析(必刷)
- 2025年西寧城市職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)附答案解析
- 2025年吉林省白山市單招職業(yè)傾向性考試題庫(kù)帶答案解析
- 2025年哈爾濱職業(yè)技術(shù)大學(xué)馬克思主義基本原理概論期末考試模擬題帶答案解析(奪冠)
- 2025年珠海城市職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫(kù)帶答案解析
- 2025年望城縣招教考試備考題庫(kù)含答案解析(奪冠)
- 2025年樂(lè)至縣招教考試備考題庫(kù)附答案解析(奪冠)
- 2024年阿合奇縣招教考試備考題庫(kù)含答案解析(必刷)
- 2025年南溪縣招教考試備考題庫(kù)含答案解析(必刷)
- 外呼服務(wù)合同
- 電子商務(wù)供應(yīng)鏈管理課件
- 標(biāo)準(zhǔn)波導(dǎo)和法蘭尺寸
- 繪本:我喜歡書
- 2023健康住宅建設(shè)技術(shù)規(guī)程
- 漢聲數(shù)學(xué)繪本《數(shù)是怎么來(lái)的》
- 統(tǒng)編版中外歷史綱要下冊(cè) (全球聯(lián)系的初步建立與世界格局的演變) 課件
- GB/T 26471-2023塔式起重機(jī)安裝、拆卸與爬升規(guī)則
- GB/T 26126-2018商品煤質(zhì)量煤粉工業(yè)鍋爐用煤
- GB/T 14048.2-2020低壓開(kāi)關(guān)設(shè)備和控制設(shè)備第2部分:斷路器
- GA 801-2014機(jī)動(dòng)車查驗(yàn)工作規(guī)程
評(píng)論
0/150
提交評(píng)論