操作系統(tǒng)pcb的組織與維護實驗_第1頁
操作系統(tǒng)pcb的組織與維護實驗_第2頁
操作系統(tǒng)pcb的組織與維護實驗_第3頁
操作系統(tǒng)pcb的組織與維護實驗_第4頁
操作系統(tǒng)pcb的組織與維護實驗_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

....z..z..****大學(xué)計算機科學(xué)系實驗報告書實驗題目:pcb的組織與維護課程名稱: 操作系統(tǒng)主講教師:一、實驗?zāi)康模?/p>

輔導(dǎo)教師:課程編號:班級:實驗時間:1pcbpcb案的理解。2pcb及進程的運行變化過程的進一步理解。二、實驗環(huán)境:VC6.0++三、實驗內(nèi)容1pcb等操作。2pcb等操作。3pcb等操作。四、實驗設(shè)計原理1PCBPCBPCBPCB.PCBPCB以得到進程程序的存儲位置,也可以找到整個進程。2PCB過這三種方式的組織進而對進程進行高效的管理。五、算法設(shè)計與流程程序設(shè)計流程圖如下:1、線性方式流程圖:開始讀入選擇選擇輸入 輸出:輸入有誤!請重新輸輸入是否是1是線性方式

否是否是2否是索引方式請輸入進程的個數(shù)讀入進程的個數(shù)n返回首菜單 保存這n個進程的信息,并選擇相應(yīng)的操作查詢 添加 刪除在已有的進程信息中查找對應(yīng)進程號的進

把新的進程信

在已有的進程信息中查找對應(yīng)進程號的進是輸出進程信息

是否存在 無該進程

是 是否存在 否刪除該進程 無該進程線性方式代碼:#include<iostream>#include<string>usingnamespace#defineFALSE0#defineTRUE 1#defineTASK_READY3#defineTASK_WAITE4#defineTASK_RUNNING5structtask_struct{stringpname;//intpid;//進程號intstate;//進程當(dāng)前狀態(tài)/*3就緒狀態(tài)4等待狀態(tài) 5運行狀態(tài)task_struct*next;//指向下一個的};/////////////////////////////////////voidshowInput();voidmenu(task_struct*pcb);////////////////////////////////intinputNum()//提示輸入進程數(shù){intn;cout<<"cin>>n;cout<<endl;returnn;}voidCreateList(task_struct*pcb,intn){pcb->next=NULL;task_struct*p=newtask_struct;p=pcb;for(inti=0;i<n;i++){task_struct*q=newtask_struct;inttmp;q->pid=i+1;cout<<"請輸入第"<<i+1<<"個進程名:";cin>>q->pname;loop:cout<<"請輸入進程狀態(tài)(3,4,5cin>>tmp;if(tmp!=3&&tmp!=4&&tmp!=5){cout<<"輸入錯誤!"<<endl;gotoloop;}elseq->state=tmp;if(p->next==NULL){q->next=NULL;p->next=q;//p=q;cout<<"Addanode"<<endl;}else{q->next=NULL;p=p->next;p->next=q;//p=q;cout<<"forAdd"<<endl;}cout<<endl;}}voiddisplay(task_struct*pcb){task_struct*p;cout<<"****************************************"<<endl;cout<<"進程號\t進程名\t當(dāng)前狀態(tài)"<<endl;for(p=pcb->next;p!=NULL;p=p->next){cout<<p->pid<<"\t"<<p->pname<<"\t";switch(p->state){case3:cout<<"TASK_READY"<<endl;break;case4:cout<<"TASK_WAITE"<<endl;break;case5:cout<<"TASK_RUNNING"<<endl;break;}}cout<<"****************************************"<<endl;menu(pcb);}///////////////////////////////////////////////voidoutput(task_struct*pcb,task_struct*p)//輸入單個進程記錄信息{cout<<"****************************************"<<endl;cout<<"進程號\t進程名\t當(dāng)前狀態(tài)"<<endl;cout<<p->pid<<"\t"<<p->pname<<"\t";switch(p->state){case3:cout<<"TASK_READY"<<endl;break;case4:cout<<"TASK_WAITE"<<endl;break;case5:cout<<"TASK_RUNNING"<<endl;break;}cout<<endl<<endl<<endl<<endl<<endl;menu(pcb);}voidQuery(task_struct*pcb)//查詢{intpid;cout<<"cin>>pid;task_struct*p;for(p=pcb->next;p!=NULL;p=p->next){if(p->pid==pid){output(pcb,p);return;}}cout<<"無該進程!"<<endl;menu(pcb);}voidAdd(task_struct*pcb)//添加{inttmp;task_struct*p=newtask_struct;task_struct*q;for(q=pcb;q->next!=NULL;q=q->next);//if(q->next==NULL)if(pcb->next==NULL)p->pid=1;elsep->pid=q->pid+1;cout<<"請輸入要添加的進程名:";cin>>p->pname;loop1:cout<<"請輸入進程狀態(tài)(3,4,5cin>>tmp;if(tmp!=3&&tmp!=4&&tmp!=5){cout<<"輸入錯誤!"<<endl;gotoloop1;}elsep->state=tmp;p->next=NULL;//if(q->next==NULL)if(pcb->next==NULL)pcb->next=p;elseq->next=p;cout<<endl<<endl;display(pcb);}voidDelete(task_struct*pcb)//刪除{task_struct*p,*q;cout<<"請輸入要刪除的進程號:";inttmp;cin>>tmp;for(p=pcb;p!=NULL;p=p->next){q=p->next;if(q->pid==tmp){p->next=q->next;deleteq;display(pcb);}}cout<<"無該進程!"<<endl;menu(pcb);}////////////////////////////////////////////////voidDestroy(task_struct*pcb)//銷毀鏈表{task_struct*p,*q;p=pcb;while(p->next!=NULL){q=p->next;p->next=q->next;deleteq;}deletepcb;}voidmenu(task_struct*pcb)//提示選擇相應(yīng)的操作{intm;cout<<"1.查詢"<<endl;cout<<"2.添加"<<endl;cout<<"3.刪除"<<endl;cout<<"4.返回首菜單"<<endl;cout<<"選擇:";cin>>m;cout<<endl<<endl;switch(m){case1:Query(pcb);break;case2:Add(pcb);break;case3:Delete(pcb);break;case4:Destroy(pcb);showInput();break;default:cout<<"輸入有誤!重新輸入"<<endl;menu(pcb);}}voidList()//線性方式{intn=inputNum();task_struct*pcb=newCreateList(pcb,n);cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;display(pcb);}voidHash()//索引方式{//intn=inputNum();}voidshowInput() //提示選擇輸入{inttmp;cout<<"1.線性方式"<<endl;//cout<<"2.索引方式"<<endl;cout<<"請輸入你的選擇:";cin>>tmp;cout<<endl<<endl;switch(tmp){case1:List();break;//case2:Hash();break;default:cout<<"輸入有誤!請重新輸入。"<<endl<<endl;showInput();}}voidmain(){showInput();}六、實驗調(diào)試與結(jié)果分析(問題的發(fā)現(xiàn)、分析、解決方案與創(chuàng)新)實驗結(jié)果展示:****************************************進程號進程名當(dāng)前狀態(tài)1aTASK_WAITE2sTASK_READY3dTASK_RUNNING****************************************查詢添加刪除選擇:請輸入要查詢的進程號:2****************************************進程號進程名當(dāng)前狀態(tài)2sTASK_READY查詢添加刪除選擇:選擇:2請輸入要添加的進程名:f請輸入進程狀態(tài)(3為就緒狀態(tài),4為等待,5為運行):5****************************************進程號進程名當(dāng)前狀態(tài)1aTASK_WAITE2sTASK_READY3dTASK_RUNNING4fTASK

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論