版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上*實踐教學* 蘭州理工大學計算機與通信學院2014年秋季學期操作系統(tǒng)原理課程設(shè)計題 目: 進程控制系統(tǒng)模擬專業(yè)班級: 計算機2班 姓 名: 原 龍 學 號: 指導教師: 龐淑俠 成 績: _摘 要操作系統(tǒng)原理課程設(shè)計是為了讓我們能對操作系統(tǒng)原理有更進一步的了解所開設(shè)的實踐課程。這就要求我們在對課本主要內(nèi)容熟練掌握的前提下,還能夠運用這些內(nèi)容來解決實際問題。 本次課設(shè)題目為進程控制系統(tǒng)模擬。進程的控制過程包括:創(chuàng)建進程、判斷進程、換出進程、終止進程、殺死進程等,這些控制和管理功能是由操作系統(tǒng)中的原語來實現(xiàn)的。原語是在管態(tài)下執(zhí)行、完成系統(tǒng)特定功能的程序段,而用于進程控制的
2、原語包括:創(chuàng)建原語、撤銷原語、阻塞原語、喚醒原語、掛起原語和激活原語等。系統(tǒng)對進程的控制如不使用原語,就會造成其狀態(tài)的不確定性,從而實現(xiàn)不了進程控制的功能。本課設(shè)將實現(xiàn)用一個fork()函數(shù)實現(xiàn)進程的創(chuàng)建,查看運行,再利用一個exec( )函數(shù)實現(xiàn)進程之間的替換,用一個wait()函數(shù)調(diào)整進程的運行順序,直到殺死進程退出程序。主要算法采用了先來先服務(wù),這樣做的優(yōu)點是進入隊列的順序決定優(yōu)先級。課程設(shè)計可以提高我們的實踐動手能力,能讓我們把課本上的知識真正在實際應(yīng)用中得到實現(xiàn),進而把它變成自己的東西,達到學以致用的效果。同時,還可以加深對理論知識的印象。這也可以為我們以后的工作奠定良好的基礎(chǔ)。 關(guān)
3、鍵字: 進程控制 原語 進程創(chuàng)建 進程撤銷前 言操作系統(tǒng)原理是計算機類專業(yè)的核心課程,也是其他諸多類專業(yè)的重要選修課,開設(shè)這門課可以為理解、應(yīng)用和開發(fā)程序提供技術(shù)和方法支持,為后續(xù)課程的學習提供重要思想和方法基礎(chǔ),同時對于自己邏輯思維培養(yǎng)和程序設(shè)計思想體系的建立有著重要的影響。但是對于操作系統(tǒng)原理這門課僅僅通過課堂教學或自學獲取理論知識是遠遠不夠的,還必須加強實踐,親自上機輸入、編輯、檢查、修改、調(diào)試和運行各種典型算法。在大學學習時,知識是通過一門門獨立的課程傳授的,而實際問題之能夠順利地得到解決,不但需要多方面的知識,而且還需要善于對這些知識綜合地加以運用。這次課設(shè)正是給我們了一次自己實踐的
4、機會。每個進程用一個進程控制塊( PCB)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數(shù)、到達時間、需要運行時間、已用CPU時間、進程狀態(tài)等等。 進程的優(yōu)先數(shù)及需要的運行時間可以事先人為地指定(也可以由隨機數(shù)產(chǎn)生)。進程的到達時間為輸入進程的時間。由于多道程序設(shè)計的操作系統(tǒng)都建立在進程的基礎(chǔ)上,操作系統(tǒng)中引進進程的概念,理論角度講是對正在運行的程序活動規(guī)律的抽象;從實現(xiàn)角度講,則是一種數(shù)據(jù)結(jié)構(gòu),目的在于清楚地刻畫系統(tǒng)的動態(tài)規(guī)律,有效管理計算機系統(tǒng)中程序的運行。目錄一、設(shè)計思想 1.1基本原理進程:進程是具有獨立功能的可并發(fā)執(zhí)行的程序在一個數(shù)據(jù)集合上的運行過程,在系統(tǒng)運行過程中是不斷產(chǎn)生和消亡
5、的。中斷:中斷是指處理機對系統(tǒng)中或系統(tǒng)外發(fā)生的異步事件的響應(yīng)。進程管理:主要包括進程調(diào)度,進程的創(chuàng)建和撤銷、進程的阻塞和喚醒,中斷作用的實現(xiàn)。內(nèi)核在引導并完成了基本的初始化以后,就有了系統(tǒng)的第一個進程,即初始化進程,實際上是內(nèi)核線程。除此之外所有的其它進程和線程都是由這個原始的進程或其子孫進程所創(chuàng)建。通過用主函數(shù)建立一個主菜單,然后再編寫各個子函數(shù)分別實現(xiàn)主函數(shù)的功能,從而達到實現(xiàn)創(chuàng)建進程,查看進程,換出進程,殺死進程,結(jié)束進程等功能,在整個過程中主要用到了公共參數(shù)和私有參數(shù)以及函數(shù)調(diào)用等技術(shù)。1.2設(shè)計目的及要求通過該題目的設(shè)計過程,可以初步掌握進程控制系統(tǒng)的原理、軟件開發(fā)方法并提高解決實際
6、問題的能力。也能提高同學們的實踐動手能力,在實踐過程中加深理解和熟練掌握課本中所學的各種操作,學會如何把所學的知識用于解決實際問題,以達到學以致用的效果。了解Windows XP的操作接口及系統(tǒng)調(diào)用方式,熟悉Windows XP常用操作的實現(xiàn)過程,練習并掌握Visual C+開發(fā)環(huán)境。利用Windows SDK(System Development Kit)提供的API(應(yīng)用程序接口)編程模擬實現(xiàn)進程控制系統(tǒng),要求用fork( )創(chuàng)建一個進程,再調(diào)用exec( )用新的程序替換該子進程的內(nèi)容,利用wait( )來控制進程執(zhí)行順序。核心要求用fork( )創(chuàng)建一個進程,再調(diào)用exec( )用新的
7、程序替換該子進程的內(nèi)容,利用wait( )來控制進程執(zhí)行順序?,F(xiàn)設(shè)計為以下內(nèi)容:1、分析設(shè)計要求,給出解決方案(要說明設(shè)計實現(xiàn)所用的原理、采用的數(shù)據(jù)結(jié)構(gòu))。2、設(shè)計合適的測試用例,對得到的運行結(jié)果要有分析。3、設(shè)計中遇到的問題,設(shè)計的心得體會。1.3進程狀態(tài)之間的關(guān)系進程的三個狀態(tài)之間的轉(zhuǎn)換如圖1-3所示:運行狀態(tài)就緒狀態(tài)阻塞狀態(tài)進程調(diào)度落選等待事件已經(jīng)發(fā)生發(fā)生等待事件圖1-3 進程的三種基本狀態(tài)及其轉(zhuǎn)換1.4 進程控制建立四個函數(shù)模擬進程創(chuàng)建、撤銷、阻塞和喚醒四個原語。進程創(chuàng)建fork()進程創(chuàng)建的主要工作是:第一步,申請空白進程控制塊;第二步,初始化進程控制塊;第三步,將進程鏈入就緒隊列。
8、進程撤銷destory()進程撤銷的主要工作是:第一步,回收進程所占內(nèi)存資源;第二步,回收進程控制塊;第三步,在屏幕上顯示進程執(zhí)行結(jié)果,進程撤銷進程阻塞block()進程阻塞的主要工作是:第一步,保存運行進程的CPU現(xiàn)場;第二步,修改進程狀態(tài);第三步,將進程鏈入對應(yīng)的阻塞隊列,然后轉(zhuǎn)向進程調(diào)度。進程的喚醒進程喚醒的主要工作是將進程由阻塞隊列中摘下,修改進程狀態(tài)為就緒,然后鏈入就緒隊列。1.5 總體設(shè)計思路主 函 數(shù)創(chuàng)建模塊查看模塊換出模塊殺死模塊通信模塊退出模塊 進程的總體設(shè)計主要模塊如圖1-5所示:圖1-5 總體設(shè)計模塊二、各模塊的偽碼算法2.1 進程控制塊定義一個ProcessType為進
9、程控制塊,內(nèi)設(shè)置進程標示符pid、進程的優(yōu)先級、進程的大小以及進程的信息。還包括struct ProcessType Ready20;/就緒數(shù)組。struct ProcessType Hung20; /掛起數(shù)組;struct ProcessType Cpu; /運行進程。int Number1=0,Number2=0,First=0; /Number1是就緒隊列中的進程的個數(shù); /Number2是掛起隊列中的進程個數(shù); /First是判斷是否是第一次輸入進程。2.2新建進程 開始通過fork()函數(shù)新建個進程,并設(shè)置就緒隊列的最大長度為10;并包括進程的三個參數(shù) Number1>20Nu
10、mber1>20noyesnoFirst=0進程已滿進程已滿First+First=0yesInputInput2.3查看運行中的進程新建一個RUN函數(shù)用于查看正在運行的狀態(tài),函數(shù)如下:Run()輸出結(jié)果;將優(yōu)先級高的進程調(diào)入CPU執(zhí)行定義數(shù)組;就緒數(shù)組第一個數(shù);for(i=0;i<Number1;i+)if(strcmp(p,Readyi.Priority)<0)把Readyi.Priority所指向的由NULL結(jié)束的字符串復制到p所指的數(shù)組中。for(i=0;i<20;i+)查看進程;for(i;i<Number1-1;i+)修改結(jié)果;將結(jié)果調(diào)入隊列;2.4撤
11、銷進程用一個skill()函數(shù)來實現(xiàn)進程的銷毀,詳細設(shè)計如下:Void();定義數(shù)組;顯示輸出結(jié)果;for(i=0;i<Number2;i+)將進程掛起;for(i=0;i<Number1;i+)就緒進程;輸入;for(i;i<Number2;i+)將結(jié)果遞增1;Number2-;for(i;i<Number1;i+)將結(jié)果遞增1;Number1的值-1;else continue;if(strcmp(p,Cpu.Pid)=0)重新賦值;for(i=0;i<Number1-1;i+)將調(diào)入的結(jié)果遞增1;Number1的值-1;三、測試結(jié)果分析3.1開始界面演示開始
12、界面如圖3-1所示:圖3-13.2 新建功能界面 圖3-23.3進程的查看演示圖3-33.4進程的調(diào)度情況圖3-43.5退出系統(tǒng)圖3-5設(shè) 計 總 結(jié)通過這次課程設(shè)計,增強了自己C+的編程能力,也加深了對操作系統(tǒng)原理這門課程中進程控制管理模塊的理解。但還是有些不足之處,例如未能很好的實現(xiàn)進程的協(xié)調(diào)控制,界面不美觀,若能通過圖形化界面顯示則效果會更好。我爭取在以后的學習過程中以這次課程設(shè)計的不足為經(jīng)驗,進一步強化學習自己的編程能力和對問題的分析和解決能力。兩個星期程序設(shè)計課程,雖然時間有點短,但我也收獲不少,這次試驗,加深了我對進程概念及進程管理的理解;比較熟悉進程管理中主要數(shù)據(jù)結(jié)構(gòu)的設(shè)計及進程
13、調(diào)度算法、進程控制機構(gòu)、同步機構(gòu)及通訊機構(gòu)的實施。也讓我認識到自己的不足,操作系統(tǒng)的有些知識,我知道的還不多,沒有掌握好,還需要多多學學,不斷提升自己的能力。在設(shè)計過程中的思考和討論,使我對現(xiàn)有知識能夠運用計算機來解決現(xiàn)實生活中的實際問題確立了信心,對模塊化程序設(shè)計思想有了比較清晰的印象,為今后的程序設(shè)計奠定了一定的心理和技術(shù)上的準備。在這樣一次又一次的礪煉中,我得到的不僅僅是知識,更多的是自身能力的提高。經(jīng)過這次課設(shè)我學到了很多。這次課程設(shè)計加強了我對計算機操作系統(tǒng)的認識,對我個人而言是對所學課程內(nèi)容掌握情況的一次自我驗證。通過此次課程設(shè)計加深理解了什么是進程控制,熟悉了Windows 7支
14、持的進程的控制方式。練習并掌握了Windows SDK(System Development Kit)提供的API編輯器來編譯C程序,學會了利用API編譯、調(diào)試C程序。更重要的是通過此次課程設(shè)計使我懂得了三思而后行,學到了嚴謹?shù)膶W習態(tài)度、永不放棄的精神,也增加了去面對更大挑戰(zhàn)的信心和勇氣,同時也培養(yǎng)了把學到的知識用于解決實際問題,培養(yǎng)了我的獨立動手能力。參 考 文 獻1 湯子瀛,哲鳳屏.計算機操作系統(tǒng).西安電子科技大學學出版社.2 王清,李光明.計算機操作系統(tǒng).冶金工業(yè)出版社.3 孫鐘秀等.高等教育出版社4 曾明.陜西科學技術(shù)出版社. 5 張麗芬,劉利雄.操作系統(tǒng)實驗教程.清華大學出版社.6
15、孟靜.高等教育出版社7 周長林.高等教育出版社8 張堯?qū)W.清華大學出版社9 任滿杰.電子工業(yè)出版社致 謝經(jīng)過近兩周的上機實踐,本次操作系統(tǒng)原理的課程設(shè)計圓滿完成了,這次課程設(shè)計培養(yǎng)了我全面思考問題的能力,從而加快了解決問題的速度、提高了的工作效率,以及鍛煉了在短時間內(nèi)解決問題的頑強意志。在編寫程序的過程中,我得到了龐淑俠老師、王旭陽老師、李曉旭老師的的耐心指導,在老師的指導下,我的能力得到了提高,同時養(yǎng)成了科學、嚴謹?shù)淖黠L和習慣,為此我要誠懇的感謝三位老師。同時還要感謝孫源同學在一些問題上對我的指點以及牛長平同學在一些問題上跟我的共同探討。,沒他們的幫助可能有很多問題我個人不能進行很好的解決。
16、在此我對他們所有人的幫助表示衷心的感謝。另外通過本次課程設(shè)計,我深刻體會到在遇到問題時要沉著冷靜,不要盲目去做,須知“磨刀不誤砍柴工”。首先對問題進行全面的分析,勾勒出大致思路,然后根據(jù)思路決定解決問題的大致方向,制定相應(yīng)的解決方案, 進而逐步解決問題。附錄(部分程序源代碼)#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>struct ProcessType/進程控制塊char Pid10;/進程標識符char Priority10;/進程優(yōu)先級c
17、har Size10;/進程大小char Message10;/進程的信息;struct ProcessType Ready20;/就緒數(shù)組。struct ProcessType Hung20; /掛起數(shù)組;struct ProcessType Cpu; /運行進程。int Number1=0,Number2=0,First=0; /Number1是就緒隊列中的進程的個數(shù); /Number2是掛起隊列中的進程個數(shù); /First是判斷是否是第一次輸入進程。/*/新建進程的函數(shù);void fork()if(Number1>20)printf("n就緒進程已滿,請先刪除或掛起進程n
18、");elseif(First=0)printf("n");printf("n這是你第一次輸入進程信息,它將直接調(diào)入CPU運行!n");printf("n請輸入新進程的Pidn");scanf("%s",&Cpu.Pid);printf("n請輸入新進程的優(yōu)先級n");scanf("%s",&Cpu.Priority);printf("請輸入新進程的大小n");scanf("%s",&Cpu.Size)
19、;First+;elseprintf("n請輸入新進程的Pidn");scanf("%s",&ReadyNumber1.Pid);printf("請輸入新進程的優(yōu)先級n");scanf("%s",&ReadyNumber1.Priority);printf("請輸入新進程的大小n");scanf("%s",&ReadyNumber1.Size);Number1+;/*/查看正在運行的進程;void Run()printf("n現(xiàn)在正在運行的進
20、程的資料如下:n");printf("PID碼為:%sn優(yōu)先級為:%sn大小為:%s",Cpu.Pid,Cpu.Priority,Cpu.Size);void ChangeA()/將優(yōu)先級高的進程調(diào)入CPU執(zhí)行char i,m10,t10;char n10,p10;strcpy(p,Ready0.Priority);/就緒數(shù)組第一個數(shù)for(i=0;i<Number1;i+)if(strcmp(p,Readyi.Priority)<0)/*strcmp(char *str1, char *str2) : 按照各個字符(ascii)比較字符串str1和s
21、tr2,當str1<str2時,返回值<0;當str1=str2時,返回值=0;當str1>str2時,返回值>0 */strcpy(p,Readyi.Priority); /把Readyi.Priority所指向的由NULL結(jié)束的字符串復制到p所指的數(shù)組中。for(i=0;i<20;i+)if(strcmp(p,Readyi.Priority)=0) /用法同上strcpy(m,Cpu.Size); /用法同上,以下所有關(guān)于這兩個函數(shù)的用法都同上面所解釋的strcpy(Cpu.Size,Readyi.Size);strcpy(n,Cpu.Pid);strcpy(
22、Cpu.Pid,Readyi.Pid);strcpy(t,Cpu.Priority);strcpy(Cpu.Priority,Readyi.Priority);break;else continue;for(i;i<Number1-1;i+)strcpy(Readyi.Size,Readyi+1.Size);strcpy(Readyi.Pid,Readyi+1.Pid);strcpy(Readyi.Priority,Readyi+1.Priority);strcpy(Readyi.Size,m);strcpy(Readyi.Pid,n);strcpy(Readyi.Priority,t)
23、;/*/手動將進程掛起void ChangeB()int i;char p10;printf("n請輸入想要掛起的進程的PID碼:n(在以下中選:");for(i=0;i<Number1;i+)printf("就緒%s ",Readyi.Pid);printf(")n");scanf("%s",&p);for(i=0;i<Number1;i+)if(strcmp(p,Readyi.Pid)=0)strcpy(HungNumber2.Size,Readyi.Size);strcpy(HungNum
24、ber2.Pid,Readyi.Pid);strcpy(HungNumber2.Priority,Readyi.Priority);Number2+;break;else continue;for(i;i<Number1;i+)strcpy(Readyi.Size,Readyi+1.Size);strcpy(Readyi.Pid,Readyi+1.Pid);strcpy(Readyi.Priority,Readyi+1.Priority);Number1-;/*/將掛起的進程按先進先出的方式調(diào)入就緒隊列void ChangeC()int i;strcpy(ReadyNumber1.Siz
25、e,Hung0.Size);strcpy(ReadyNumber1.Pid,Hung0.Pid);strcpy(ReadyNumber1.Priority,Hung0.Priority);Number1+;for(i=0;i<Number2;i+)strcpy(Hungi.Size,Hungi+1.Size);strcpy(Hungi.Pid,Hungi+1.Pid);strcpy(Hungi.Priority,Hungi+1.Priority);Number2-;for(i=0;i<Number1;i+)printf("就緒隊列為:nPID碼為:%s;n優(yōu)先級為:%s;
26、n大小為:%sn",Readyi.Pid,Readyi.Priority,Readyi.Size);/*/手動將就緒進程調(diào)入CPU執(zhí)行void ChangeD()char i,m10,t10;char p10;char n10;printf("n請輸入想要運行的進程的PID碼:n(在以下中選:");for(i=0;i<Number1;i+)printf("就緒%s ",Readyi.Pid);printf(")n");scanf("%s",&p);for(i=0;i<Number1;i
27、+)if(strcmp(p,Readyi.Pid)=0)strcpy(m,Cpu.Size);strcpy(Cpu.Size,Readyi.Size);strcpy(Readyi.Size,m);strcpy(n,Cpu.Pid);strcpy(Cpu.Pid,Readyi.Pid);strcpy(Readyi.Pid,n);strcpy(t,Cpu.Priority);strcpy(Cpu.Priority,Readyi.Priority);strcpy(Readyi.Priority,t);break;else continue;/*/手動將掛起的進程調(diào)入就緒隊列void ChangeE(
28、)int i;char p10;printf("n請輸入想要調(diào)入就緒的進程的PID碼:n(在以下中選:");for(i=0;i<Number2;i+)printf("掛起%s ",Hungi.Pid);printf(")n");scanf("%s",&p);for(i=0;i<Number2;i+)if(strcmp(p,Hungi.Pid)=0)strcpy(ReadyNumber1.Size,Hungi.Size);strcpy(ReadyNumber1.Pid,Hungi.Pid);str
29、cpy(ReadyNumber1.Priority,Hungi.Priority);break;else continue;Number1+;for(i;i<Number2;i+)strcpy(Hungi.Size,Hungi+1.Size);strcpy(Hungi.Pid,Hungi+1.Pid);strcpy(Hungi.Priority,Hungi+1.Priority);Number2-;for(i=0;i<Number1;i+)printf("就緒隊列為:nPID碼為:%s;n優(yōu)先級為:%s;n大小為:%sn",Readyi.Pid,Readyi.P
30、riority,Readyi.Size);/*/換入換出實現(xiàn)函數(shù)void Change()int a;printf("n請你選擇需要的交換方式:n");printf("1.將優(yōu)先級高的進程調(diào)入CPU執(zhí)行.n");printf("2.手動將進程掛起.n");printf("3.將掛起的進程按先進先出的方式調(diào)入就緒隊列.n");printf("4.手動將就緒進程調(diào)入CPU執(zhí)行.n");printf("5.手動將掛起的進程調(diào)入就緒隊列.n");scanf("%d"
31、;,&a);switch(a)case 1:ChangeA();break;case 2:ChangeB();break;case 3:ChangeC();break;case 4:ChangeD();break;case 5:ChangeE();break;default:break;/*/殺死進程void Kill()char i;char p10;printf("n請輸入想要殺死的進程的PID碼:n(在以下中選:");printf("運行%s ",Cpu.Pid);for(i=0;i<Number2;i+)printf("掛
32、起%s ",Hungi.Pid);for(i=0;i<Number1;i+)printf("就緒%s ",Readyi.Pid);printf(")n");scanf("%s",&p);for(i=0;i<Number2;i+)if(strcmp(p,Hungi.Pid)=0)for(i;i<Number2;i+)strcpy(Hungi.Size,Hungi+1.Size);strcpy(Hungi.Pid,Hungi+1.Pid);strcpy(Hungi.Priority,Hungi+1.Pr
33、iority);Number2-;break;else continue;for(i=0;i<Number1;i+)if(strcmp(p,Readyi.Pid)=0)for(i;i<Number1;i+)strcpy(Readyi.Size,Readyi+1.Size);strcpy(Readyi.Pid,Readyi+1.Pid);strcpy(Readyi.Priority,Readyi+1.Priority);Number1-;break;else continue;if(strcmp(p,Cpu.Pid)=0)strcpy(Cpu.Size,Ready0.Size);st
34、rcpy(Cpu.Pid,Ready0.Pid);strcpy(Cpu.Priority,Ready0.Priority);for(i=0;i<Number1-1;i+)strcpy(Readyi.Size,Readyi+1.Size);strcpy(Readyi.Pid,Readyi+1.Pid);strcpy(Readyi.Priority,Readyi+1.Priority);Number1-;void ShareMemory() /共享存儲器通信int i,operate;char p10;char sha120="Hello!"/共享存儲區(qū)分區(qū)該數(shù)據(jù)是用來給
35、其他進程讀的char sha210; /共享存儲區(qū)分區(qū),用來提供給其他進程的寫操作printf("n共享存儲區(qū)已有數(shù)據(jù)為:");printf("%s",sha1);printf("nn1.為向共享存儲區(qū)里讀數(shù)據(jù),.為向共享存儲區(qū)里寫數(shù)據(jù)n");printf("n請選擇操作:");scanf("%d",&operate);printf("n請輸入共享存儲器通信的進程的Pid碼:");scanf("%s",&p);if(operate=1)pr
36、intf("讀取數(shù)據(jù)為:");printf("%s", sha1);elseprintf("請寫入數(shù)據(jù):");gets(sha2);gets(sha2);printf("您向共享存儲區(qū)中寫入的數(shù)據(jù)是:");puts(sha2);printf("此時共享存儲區(qū)中的數(shù)據(jù)為:");strcat(sha1,sha2);printf("%s",sha1);for (i = 0;i < Number2;i+)if (strcmp(p, Hungi.Pid) = 0)for (i;i
37、 < Number2;i+)strcpy(Hungi.Message, sha2);break;else continue;for (i = 0;i < Number1;i+)if (strcmp(p, Readyi.Pid) = 0)for (i;i < Number1;i+)strcpy(Readyi.Message, sha2);break;else continue;if (strcmp(p, Cpu.Pid) = 0)strcpy(Cpu.Message, sha2);/*/消息傳遞通信void MsgPass() int i;char p10, q10;char
38、buffer20; /分配內(nèi)存存放消息的緩沖區(qū),數(shù)組的大小可以更大,由于動態(tài)數(shù)組控制/起來比較麻煩,就采用預存大空間來分配了printf("n請輸入發(fā)送消息的進程Pid:");scanf("%s", &q);printf("n請輸入Send的消息內(nèi)容:");scanf("%s",&buffer);printf("n此時消息緩沖隊列中的內(nèi)容為:");printf("%s",buffer);printf("nn請輸入接收消息的進程Pid:");
39、scanf("%s", &p);printf("n接收進程從消息緩沖區(qū)中Receive的消息內(nèi)容是:");printf("%s",buffer);for (i = 0;i < Number2;i+)if (strcmp(p, Hungi.Pid) = 0)for (i;i < Number2;i+)strcpy(Hungi.Message, buffer);break;else continue;for (i = 0;i < Number1;i+)if (strcmp(p, Readyi.Pid) = 0)for (i;i < Number1;i+)strcpy(Readyi.Message, buffer);break;else continue;if (strcmp(p, Cpu.Pid) = 0)strcpy(Cpu.Message, buffer);/直接通信void ZJTX()int i;char a5, b5;char buffer20; /分配內(nèi)存存放消息的緩沖區(qū),數(shù)組的大小可以更大,由于動態(tài)數(shù)組控制/起來比較麻煩,就采用預存大空間來分配了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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年工業(yè)自動化生產(chǎn)線廠房租賃合同4篇
- 2024離婚合同書:不含財產(chǎn)分割案例版B版
- 個人房產(chǎn)抵押合同
- 2024年04月交通銀行股份有限公司畢節(jié)分行(貴州)招考1名勞務(wù)人員筆試歷年參考題庫附帶答案詳解
- 2024物業(yè)公司收費標準合同
- 2025年度不銹鋼復合材料應(yīng)用研發(fā)與推廣協(xié)議3篇
- 2024年03月貴州中國農(nóng)業(yè)銀行貴州省分行春季招考筆試歷年參考題庫附帶答案詳解
- 2025年度農(nóng)產(chǎn)品溯源體系建設(shè)合作協(xié)議范本3篇
- 二零二五年度草牧場資源綜合利用與承包合同3篇
- 專職護林員2024年度服務(wù)協(xié)議版B版
- 骨科手術(shù)后患者營養(yǎng)情況及營養(yǎng)不良的原因分析,骨傷科論文
- GB/T 24474.1-2020乘運質(zhì)量測量第1部分:電梯
- GB/T 12684-2006工業(yè)硼化物分析方法
- 定崗定編定員實施方案(一)
- 高血壓患者用藥的注意事項講義課件
- 特種作業(yè)安全監(jiān)護人員培訓課件
- (完整)第15章-合成生物學ppt
- 太平洋戰(zhàn)爭課件
- 封條模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖漿
- 貨代操作流程及規(guī)范
評論
0/150
提交評論