




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、.操作系統(tǒng)實驗報告指導(dǎo)教師:胡曉鵬.實驗報告一實驗名稱 : Linux 操作系統(tǒng)下的C語言編程實驗?zāi)康?: 1.認識 Linux 系統(tǒng),熟悉Linux 操作系統(tǒng)的基本操作;2.了解 vi 命令的基本用法,能夠使用vi 命令對文件進行基礎(chǔ)的操作與編輯;3.能夠在 Linux 環(huán)境下編寫 C語言程序,生成 .out 文件,并成功執(zhí)行;4.體會 Linux 環(huán)境下編程與Windows 環(huán)境下編程的異同,加深對Linux 操作系統(tǒng)的理解。實驗內(nèi)容 :熟悉 Linux 環(huán)境,編寫簡單C 語言程序。實驗結(jié)果:.實驗結(jié)論: 在 Linux 操作系統(tǒng)下的編程環(huán)境不同于Windows ,編譯器進行命令編譯。操作
2、環(huán)境簡潔,大多以鍵盤操作。.實驗報告二實驗名稱: 基于進程與線程的并發(fā)實驗?zāi)康?:1. 了解進程與線程工作原理,掌握并發(fā)機制,學會編寫簡單的并發(fā)程序。2. 充分理解并掌握基于進程與線程的并發(fā)。實驗內(nèi)容 :在 Linux 環(huán)境進行基于進程與線程編寫實驗程序。試驗核心代碼 :int main() pthread_t tidN; pid_t pid; pid=fork(); if(pid0) printf(fail to forkn);exit(1);else if(pid=0) printf(the child process:n);elsesleep(10);printf(the parent
3、process:n);void *res;int err3;err0=pthread_create(&tid0,NULL,fn1,NULL);err1=pthread_create(&tid1,NULL,fn2,NULL);err2=pthread_create(&tid2,NULL,fn3,NULL);int i;.for(i=0;iN;i+)if(erri= pthread_join(tidi,&res)!=0) printf(cannot join the thread %dn,i); exit(1);return 0;void *fn1(void *arg)printf(the fir
4、st thread is donen);return (void *)1;void *fn2(void *arg)printf(the second thread is donen);/ sleep(1);return (void *)1;void *fn3(void *arg)printf(the third thread is donen);/ sleep(2); return (void *)1;.實驗結(jié)果:實驗結(jié)論: 進程與線程之間的關(guān)系為線程離不開進程,線程在多任務(wù)系統(tǒng)的作用使計算機高校工作,同時下創(chuàng)建進程是應(yīng)盡量避免進程的出現(xiàn)。掌握線程pthread_join()中的阻塞原理。.實
5、驗報告三實驗題目 : 進程間的通信實驗?zāi)康?:學習在 linux環(huán)境進程間的信息傳遞和接收, 理解進程間的信號通信,并能編寫簡單代碼實現(xiàn)進程間的通信。實驗代碼:#include #include #include #include #include static int alarm_fired=0;void ouch(int sig) alarm_fired=1;int main() pid_t pid;pid=fork();if(pid=-1) printf(fork failedn); exit(1);else if(pid=0) kill(getpid(),SIGALRM); exit(
6、0);signal(SIGALRM,ouch);alarm(5);pause();.if(alarm_fired=1)printf(receive a signal %dn,SIGALRM);exit(0);實驗結(jié)果 :實驗結(jié)論: 進程能進行信息通信, 如果進程間有必要, 能夠?qū)崿F(xiàn)很好的進程異步處理。.實驗報告四實驗題目 : 進程間的通信 - 共享內(nèi)存實驗?zāi)康?:理解進程間共享內(nèi)存機制, 學會分析共享內(nèi)存之間的通信方式并進行內(nèi)存共享實踐,編寫簡單程序?qū)崿F(xiàn)內(nèi)存簡單共享。實驗代碼 :核心代碼:/*/ 定義數(shù)據(jù)結(jié)構(gòu)體struct shared_use_stint written_by_you;cha
7、r some_textTEXT_SZ;/* 寫入 */* 創(chuàng)建共享內(nèi)存 */shmid=shmget(key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);if(shmid=-1)fprintf(stderr,shmget failedn);exit(EXIT_FAILURE);/* 映射共享內(nèi)存*/shared_memory=shmat(shmid,(void *)0,0);if(shared_memory=(void *)-1)fprintf(stderr,shmat failedn);exit(EXIT_FAILURE);.pri
8、ntf(Memory attached at %Xn,(int)shared_memory);/* 讓結(jié)構(gòu)體指針指向這塊共享內(nèi)存*/shared_stuff=(struct shared_use_st *)shared_memory;/* 循環(huán)的向共享內(nèi)存中寫數(shù)據(jù),直到寫入的為“ end為”止 */while(running)while(shared_stuff-written_by_you=1)sleep(1);/ 等到讀進程讀完之后再寫printf(waiting for client.n);printf(ener some text:);fgets(buffer,BUFSIZ,stdin
9、);strncpy(shared_stuff-some_text,buffer,TEXT_SZ);shared_stuff-written_by_you=1;if(strncmp(buffer,end,3)=0)running=0;/ 結(jié)束循環(huán)/* 讀取 */* 創(chuàng)建共享內(nèi)存 */shmid=shmget(key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);if(shmid=-1)fprintf(stderr,shmget failedn);exit(EXIT_FAILURE);./* 映射共享內(nèi)存*/shared_memory=sh
10、mat(shmid,(void *)0,0);if(shared_memory=(void *)-1)fprintf(stderr,shmat failedn);exit(EXIT_FAILURE);printf(Memory attached at %Xn,(int)shared_memory);/* 讓結(jié)構(gòu)體指針指向這塊共享內(nèi)存*/shared_stuff=(struct shared_use_st *)shared_memory;/* 控制讀寫順序*/shared_stuff-written_by_you=0;/* 循環(huán)的從共享內(nèi)存中讀數(shù)據(jù),直到讀到“ end為”止 */while(ru
11、nning)if(shared_stuff-written_by_you)printf(You wrote:%s,shared_stuff-some_text);sleep(1); /讀進程睡一秒,同時會導(dǎo)致寫進程睡一秒,這樣做到讀了之后再寫 shared_stuff-written_by_you=0;if(strncmp(shared_stuff-some_text,end,3)=0)running=0; / 結(jié)束循環(huán).實驗結(jié)果:實驗結(jié)論:內(nèi)存共享中應(yīng)該含有安全防護機制, 內(nèi)存在共享的同時應(yīng)該做到內(nèi)存的保護,共享內(nèi)存段是更應(yīng)該做到安全高效共享。 應(yīng)當加強訓(xùn)練共享內(nèi)存段申請原則,多多學習管道運
12、輸?shù)膶崿F(xiàn)。.實驗報告五實驗題目 :虛擬內(nèi)存實驗?zāi)康?:模擬替換算法技術(shù), 編程實現(xiàn) LRU和 CLOCK算法,掌握替換算法技術(shù),完全實現(xiàn)替換策略。實驗主要函數(shù):void lru_p(int n,int m,int proc);void clock_p(int n,int m,int proc);實驗代碼 :#include #include / 準備用時鐘函數(shù)調(diào)用庫函數(shù)#include using namespace std;void lru_p(int n,int m,int proc)cout-endl;cout 這是 least recently used:endl;struct pag
13、eint time;int pro;struct page *p=(struct page*)malloc(n*sizeof(page);int i = 0;int flag = 0;/記錄是否滿頁int exit;/初始化時間for(int j=0;jn;j+).pj.time=0;while(im)/ 初始化進程不占用頁 exit=0;for(j = 0;j flag;j+)pj.time+;if( = proci) / 處理相同如何情況下的相同進程exit=1;pj.time=1;if(exit=0&(flagn)/ 沒有相同進程且不缺頁 =proci;pf
14、lag.time=1;flag+;elseif(exit=0)/處理缺頁沒有相同進程但缺頁int key=0;int maxtime=p0.time;for(j=1;jn;j+).if(maxtimepj.time)maxtime=pj.time; key=j;=proci;pkey.time=1;/輸出for(j=0;jflag;j+)printf( %d,);coutendl;i+;void clock_p(int n,int m,int proc)cout-endl;cout 這是 clock:endl;struct pageint flag;int pro;
15、struct page *p=(struct page*)malloc(m*sizeof(page);./初始化隊列for(int k=0;kn;k+)pk.flag=0;int i=0;int next;int j=0;/標記初始位置int mart=0;while(im)next=1; while(next)for(k=0;kmart;k+)if(=proci)next=0;if(next)if(!pj.flag)=proci;pj.flag=1;next=0;if(martn)mart+;.elsepj.flag=0;next=1;if(martn)mart+;j
16、+;j=j%n;/ 輸出i+;for(k=0;kmart;k+)printf( %d,);coutendl;void main()int pages;cout pages;coutm;cout 輸入你的進程ID:;int *proc=new intm;for(int i=0;iproci;lru_p(pages,m,proc);clock_p(pages,m,proc);實驗結(jié)果:實驗結(jié)論:替換策略是計算機高效工作,充分利用資源, 而不同的替換算法都有自己的利弊,不同的場景應(yīng)充分權(quán)衡利弊進行選擇。.實驗報告六實驗題目 :進程調(diào)度和輪循實驗?zāi)康?:理解掌握進程調(diào)度算法,使用程序?qū)崿F(xiàn)算
17、法,學會分析調(diào)度算法,以加深對進程的概念及進程調(diào)度算法的理解。實驗代碼 :核心代碼:-實現(xiàn)函數(shù) -/定義存放nums 個進程 PCB 的鏈表的頭結(jié)點;PCB* linkinit()/初始化鏈表的頭結(jié)點;PCB* head1;head1=(PCB *)malloc(sizeof(PCB);head1-next=NULL;return head1;/往鏈表中添加進程PCB 節(jié)點 ;void linkadd(PCB* head)PCB* r,* q=head;r=(PCB *)malloc(sizeof(PCB);while(q-next)q=q-next;void inputdata(PCB* r
18、);inputdata(r);r-next=q-next;q-next=r;/向鏈表 PCB 節(jié)點內(nèi)容中輸入數(shù)據(jù)void inputdata(PCB* r).printf( 進程名 :);scanf(n%c,&r-name);printf( 到達時間 :);scanf(%d,& r-reach_time);printf( 運行時間 :);scanf(%d,& r-run_time);/以 “到達時間 ”的從大到小的順序?qū)︽湵磉M行排序void seq(PCB* head)PCB* h=head;while(h-next-next)PCB* p=h-next,*q=h-next;while(q-n
19、ext)q=q-next;if(p-reach_time q-reach_time)p=q;PCB* r=h;while(r-next!=p)r=r-next;r-next=p-next;p-next=h-next;h-next=p;h=h-next;/求最大的到達時間int mrtime(PCB* head)PCB* p=head;.while(p-next)p=p-next;int maxreachtime=p-reach_time;return maxreachtime;/將各個進程運行時間的初始值賦給p-rt; 在求 帶權(quán)周轉(zhuǎn)時間 的時候要用到void runtort(PCB* hea
20、d)PCB* p=head;dop=p-next;p-rt=p-run_time;while(p-next);void output(PCB* head,int nums)PCB* t=head;int zzs_time=0;float dqzzs_time=0.00;while(t-next!=NULL)t=t-next;printf( 進程名 :%cn,t-name);printf(t周轉(zhuǎn)時間 :%dn,t-zz_time);printf(t帶權(quán)周轉(zhuǎn)時間:%fn,t-dqzz_time);zzs_time=zzs_time+t-zz_time;dqzzs_time=dqzzs_time+t-dqzz_time;printf(n 平均周轉(zhuǎn)時間:%fn,(float)zzs_time/nums);printf( 平均帶權(quán)周轉(zhuǎn)時間:%fn,(float)dqzzs_time/nums);.-主函數(shù) -voidmain()int nums;printf( 請輸入要運行的進程個數(shù):);scanf(%d,&nums); /
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 通史版2025版高考歷史二輪復(fù)習第1部分第1篇中國古代史第4講明清前期-中國古代文明的輝煌與遲滯教師用書
- 2025年法律知識競賽試題及答案(民商法)
- 2025年隔離相關(guān)知識考試試題及答案
- 2025年德陽二診數(shù)學試題及答案
- 2025年java 面試題及答案122
- 2025-2030年中國鋁塑復(fù)合管配件數(shù)據(jù)監(jiān)測研究報告
- 2025-2030年中國商用高壓清洗機數(shù)據(jù)監(jiān)測研究報告
- 2025年高考語文一輪復(fù)習古詩詞題材與鑒賞訓(xùn)練及詩歌鑒賞常用術(shù)語
- 小型家電買賣合同協(xié)議書
- 服務(wù)器硬件冗余配置指南
- 2024-2025學年第二學期天域全國名校協(xié)作體高三3月聯(lián)考 地理試卷(含答案)
- 修理木橋施工合同范本
- 學校2025年每日兩小時體育活動方案-陽光體育活力四溢
- B超的基本知識
- 錘擊式PHC預(yù)應(yīng)力混凝土管樁貫入度的控制
- 新教科版一年級科學下冊第一單元第6課《哪個流動得快》課件
- 屋面種植土垂直施工方案
- 2025年新人教PEP版英語三年級下冊全冊課時練習
- 《愛耳日課件》課件
- 2024年安徽中醫(yī)藥高等專科學校高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
評論
0/150
提交評論