操作系統(tǒng)課程設計報告_第1頁
操作系統(tǒng)課程設計報告_第2頁
操作系統(tǒng)課程設計報告_第3頁
操作系統(tǒng)課程設計報告_第4頁
操作系統(tǒng)課程設計報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

北京化工大學北方學院課程設計報告課程名稱操作系統(tǒng)課程設計設計題目LinuxC程序設計專業(yè)、班級學號姓名指導教師設計時間2015.10.19——2015.11.06一、2015年11月6日一、引言(簡要說明設計題目的目的、意義、內容、主要任務等)1.目的-----WORD格式--可編輯--專業(yè)資料-----本次系統(tǒng)軟件課程設計的主要目的有兩個:一方面是分析設計linux源代碼,另一方面是進行系統(tǒng)級的程序設計。意義:⑴通過本課題的畢業(yè)設計,熟悉了關于linux下C語言的系統(tǒng)軟件程序設計,可以比較深入的了解和掌握基本gcc,vim等編程軟件的使用和對makefile文件的使用。⑵掌握進程間的通信方式,進程控制,文件操作的方式。⑶本報告就系統(tǒng)的開發(fā)過程做了詳細的介紹,并對系統(tǒng)的原理、總體設計等方面做了深入細致的討論。內容采用結構化分析和設計方法,運用linuxC開發(fā)實現本次操作系統(tǒng)設計的4個任務。主要任務1、設計一個程序,要求創(chuàng)建一個管道,復制進程,父進程往管道中寫入字符串,子進程從管道中讀取并輸出字符串。2、設計一個程序,要求復制進程,子進程顯示自己的進程號(PID)后暫停一段時間,父進程等待子進程正常結束,打印顯示等待的進程號(PID)和等待的進程退出狀態(tài)。3、用管道實現Islsort命令功能。4、設計一個程序,要求用戶進程復制出一個子進程,父進程向子進程發(fā)出信號,子進程收到此信號,結束子進程。二、正文(課程設計的主要內容,包括實驗與觀測方法和結果、儀器設備、計算方法、編程原理、數據處理、設計說明與依據、加工整理和圖表、形成的論點和導出的結論等。正文內容必須實事求是、客觀真切、準確完備、合乎邏輯、層次分明、語言流暢、結構嚴謹,符合各學科、專業(yè)的有關要求。)需求分許、設計一個程序,要求創(chuàng)建一個管道,復制進程,父進程往管道中寫入字符串,子進程從管道中讀取并輸出字符串。、設計一個程序,要求復制進程,子進程顯示自己的進程號(PID)后暫停一段時間,父進程等待子進程正常結束,打印顯示等待的進程號(PID)和等待的進程退出狀態(tài)。、用管道實現Islsort命令功能。、設計一個程序,要求用戶進程復制出一個子進程,父進程向子進程發(fā)出信號,子進程收到此信號,結束子進程。系統(tǒng)設計第一個任務進程間通信程序結構及主要過程本程序運用了順序結構,選擇結構等c語言主要結構,指針、函數調用等知識,該程序覆蓋了linuxc語言所學的除結構體外的大部分知識。本程序結構和過程思路:利用fork函數復制進程,父進程往管道中寫入字符串,子進程從管道中讀取并輸出字符串第二個任務進程控制程序結構及主要過程本程序運用了順序結構,選擇結構等c語言主要結構,指針、函數調用等知識,該程序覆蓋了linuxc語言所學的除結構體外的大部分知識。本程序結構和過程思路如下:利用fork函數復制進程,再利用getpid函數獲取子進程的進程號,同時也利用了wait函數來等待進程。第三個任務結構及主要過程本程序運用了順序結構,選擇結構等c語言主要結構,指針、函數調用等知識,該程序覆蓋了linuxc語言所學的除結構體外的大部分知識。本程序結構和過程思路:利用fork函數復制進程,調用run_ls和run_sort函數實現linux下Islsort命令,對當前目錄進行操作。第四個任務進程控制程序結構及主要過程本程序運用了順序結構,選擇結構等c語言主要結構,指針、函數調用等知識,該程序覆蓋了linuxc語言所學的除結構體外的大部分知識。本程序結構和過程思路:利用fork函數復制進程,父進程打印進程信息并且signol函數通知子進程,子進程收到父進程的信號后打印結束進程的提示然后結束進程,打印信息。系統(tǒng)實現(1)進程間通信實現源代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>intmain(intargc,char*argv[]){intpd[2];/*用于保存管道文件描述符*/charout[80],str[]="helloflami!”;/*str是要寫入的字符串,out用于保存從管道讀取的字符串*/assert(pipe(pd)!=-1);/*斷言用于確定pipe()函數執(zhí)行成功,如果管道創(chuàng)建失敗,則pipe()返回-1*/if(!fork())write(pd[1],str,strlen(str));/*父線程將字符串寫入管道*/else{read(pd[0],out,strlen(str));/*在子線程中從管道中讀取子進程寫入的字符串*/printf("%s\n",out);/*子線程中輸出。*/}return0;}

進程控制實現源代碼:#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<sys/wait.h>intmain()(pid_tpid,vpid;intstatus,i;pid=fork();if(pid==0)(printf("子進程pid:%d\n”,getpid());sleep(2);exit(3);}else{

vpid=wait(&status);i=WEXITSTATUS(status);printf("父進程pid:%d,退出狀態(tài)%d\n",vpid,i);}}(3)管道實現ls|sort命令#include<unistd.h>intfd[2];voidrun_ls(){close(fd[0]);close(fd[1]);char*argv[]={"ls",NULL,NULL};//(傳遞給執(zhí)行文件的參數數組,這里包含執(zhí)行文件的參數char*envp[]={0,NULL};//傳遞給執(zhí)行文件新的環(huán)境變量數組execve("/bin/ls”,argv,envp);}voidrun_sort(){close(fd[0]);close(fd[1]);char*argv[]={"sort",NULL,NULL};//(傳遞給執(zhí)行文件的參數數〉組,這里包含執(zhí)行文件的參數char*envp[]={0,NULL};//傳遞給執(zhí)行文件新的環(huán)境變量數組execve("/usr/bin/sort”,argv,envp);}intmain(){pipe(fd);if(fork()>0){dup2(fd[1],1);run_ls();}else{dup2(fd[0],0);close(fd[0]);close(fd[1]);pipe(fd);if(fork()>0){dup2(fd[1],1);run_sort();}else{dup2(fd[0],0);run_sort();}}return0;}(4)第四個任務源代碼#include<sys/types.h>#include<signal.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>voidhandler(intsigno){

printf("thisischildprocess,pid=%d,parentid=%d\n”,getpid(),getppid());}intmain(){intpid;pid=fork();if(pid<0){perror("forkerror");}elseif(pid==0){signal(SIGUSR1,handler);pause();printf("childprocessexit\n");exit(0);}else{intstatus;printf("thisisparentprocess,pid=%d,parentid=%d\n”,getpid(),getppid());printf("waitingforchildprocessexit\n");kill(pid,SIGUSR1);wait(&status);printf("thechildprocessexit,thereturnstatusis0x%x\n",status);pause();}return0;}5,系統(tǒng)測試(1)運行結果[umr@localhostDocuments]$videmo01.c[umr@localhostDocuments]$gcc-odemo01demo01.cum"Slocdlhostum^.ocalhostlo"Ej'.ocalhostum"Slocdlhostum^.ocalhostlo"Ej'.ocalhostiaI'qflami6^ocuTe,_ts]!EvidensOL.cDocuments]Sgcc-odetnoOLdenoDl.c$./dSTOZlZ:OCLIT0$./dSTOZl結果分析這是一個進程控制程序,要求創(chuàng)建一個管道,復制進程,父進程往管道中寫入字符串,子進程從管道中讀取并輸出字符串。經過測試,該程序基本實現了以上功能,且計算結果合理正確,滿足實驗要求。試驗過程及結果[umr@localhostDocuments]$videmo02.c[umr@localhostDocuments]$gcc-odemo02demo02.c[umr@localhostDocuments]$./demo02子進程pid:14004父進程pid:14004,退出狀態(tài)3umi-OlocalhostDocuments]$videmaOZ.匚unr?1.acaihostDocuments]$gcc-odema02demo02.cumr?!acaihastDocuments]$./demcOS子進程pid:L4004I父進程Did:L4W4.退出狀態(tài)3結果分析這是一個進程控制程序,要求完成復制進程,子進程顯示自己的進程號(PID)后暫停一段時間,父進程等待子進程正常結束,打印顯示等待的進程號(PID)和等待的進程退出狀態(tài)。經過測試,該程序基本實現了以上功能,且計算結果合理正確,滿足實驗要求。試驗過程及結果[umr@localhostDocuments]$videmo03.c[umr@localhostDocuments]$gcc-odemo03demo03.c[umr@localhostDocuments]$./demo03demo01demo01.cdemo02demo02.cdemo03demo03.cdemo04demo04.cMFIWE|a*網匚,II-iwiMFIWE|a*網匚,II-iwi-ifflniii",川■|用心!士4N;*rr#"|?■winLvDLMliY頃1|uar<Lic?di'lhai?icnnwjii令<s?wr如一一一_一_:ha雄「131*白r田田1百斤土:JrTMlL:cfijm--1,,pt..Miknar*inCnraar^Dn.JiTffll.U理1」E--'?al~rpFw_lfri:r:iUH舊■?>:!H^r|IBiBi脂HEMliWEdllvlOMBLiJ.iILiiVLikalFnaLEuimflilJk-QdWAId.lL'jrP.cciilhaiLrcciMnEEF*加EmmMCIXwt』*¥14?"im.c|』r4LwTha?ktpc-advSj.K--itE?LMit^E/dwvO?rHE■H"3k-tfifildircirwt-aryr454-i*?■?M*fll<|r中i"iLE皿皿五壬ST或It閂』昏代:JmHUconuuLsmuh{SIBiH胃fL地iMtiM■F齡*1工村日il謠&:inFaJSSj^-f-iocalhair"111■-*Ji結果分析:程序利用fork函數復制進程,調用run_ls和run_sort函數實現linux下Islsort命令,對當前目錄進行操作?;就瓿沙绦蛟O計要求,且結果正確合理,滿足實驗要求。試驗過程及結果[umr@localhostDocuments]$./demo04thisisparentprocess,pid=4010,parentid=3693waitingforchildprocessexitthechildprocessexit,thereturnstatusis0xa[uin!■?!.□£[uin!■?!.□£alhostDocumentsS,/demo04thisisparentprocess,pld=4010,parentid=369Bwaitingforchildprocessexitthechildprccessexit,thereturnstatusisOxa結果分析這是一個進程控制軟件,要求復制一個子進程,要求父進程發(fā)送一個信號給子進程,發(fā)送時打印提示,然后子進程收到信號后打印提示結束進程,結束完成后打印測試結果。程序基本已實現程序要求,結果正確合理,滿足實驗要求。三、結論(應當準確、完整、明確精練;也可以在結論或討論中提出建議、設想、尚待解決問題等。)設計過程中的感受與體會從程序的整體構思到程序的算法設計及程序的編寫再到最后程序的調試,我經歷了重重困難和考驗,但是我并沒有放棄,我運用本學期所學到的知識和課外的一些知識,從想到查再到問,最后完成了這個4個程序。在設計過程中,我不僅僅是完成了程序,更重要的是我在這次設計中鞏固了linuxc所學到的知識,鍛煉了自己的實踐能力;另外在這次設計的過程中,我懂得了在設計遇到困難的時候怎樣去解決這個困難。從書上網上查閱資料,向比我們知識豐富的人虛心請教,這是我們解決問題的主要方法,這樣也同時擴寬了我們的知識面,打破了課堂的局限,

溫馨提示

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

評論

0/150

提交評論