實(shí)驗(yàn)2-進(jìn)程控制與通信管理_第1頁(yè)
實(shí)驗(yàn)2-進(jìn)程控制與通信管理_第2頁(yè)
實(shí)驗(yàn)2-進(jìn)程控制與通信管理_第3頁(yè)
實(shí)驗(yàn)2-進(jìn)程控制與通信管理_第4頁(yè)
實(shí)驗(yàn)2-進(jìn)程控制與通信管理_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、年級(jí) 11級(jí) 專業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí) 五班 組號(hào) 12組 實(shí)驗(yàn)室 9#205 日期 2014/05/17 實(shí)驗(yàn) 名稱 實(shí)驗(yàn)二、進(jìn)程控制與通信管理 實(shí) 驗(yàn) 內(nèi) 容 分項(xiàng)內(nèi)容 實(shí)驗(yàn)級(jí)別 1、Linux系統(tǒng)常用進(jìn)程管理命令的使用 操作系統(tǒng)觀察級(jí) 2、Linux系統(tǒng)常用進(jìn)程創(chuàng)建與管理的系統(tǒng)調(diào)用 原碼閱讀與系統(tǒng)編程級(jí) 3、Windows平臺(tái)常用進(jìn)線程控制 API 原碼閱讀與系統(tǒng)編程級(jí) 4、進(jìn)程冋步與互斥控制(讀者與者、一豕人吃蘋果桔子、 哲學(xué)家吃飯) 碼閱讀與系統(tǒng)編程級(jí) 5、簡(jiǎn)單進(jìn)程通信(管道、消息緩沖、郵件槽等) (原碼閱讀與系統(tǒng)編程 級(jí)) 小 組 成 員 姓名 學(xué)號(hào) 組內(nèi)分工 自我評(píng)分 教師評(píng)

2、分 獨(dú)立完成實(shí)驗(yàn)二(1) 良好 獨(dú)立完成實(shí)驗(yàn)二(2) 良好 獨(dú)立完成實(shí)驗(yàn)二(3) 良好 獨(dú)立完成實(shí)驗(yàn)二(4) 良好 獨(dú)立完成實(shí)驗(yàn)二(5) 良好 小 組 成 績(jī) 評(píng) 疋 教師簽名: 年月日 實(shí)驗(yàn) 分項(xiàng)1 1、Linux系統(tǒng)常用進(jìn)程管理命令的使用2、Linux系統(tǒng)常用進(jìn)程創(chuàng)建與管理的系統(tǒng)調(diào) 用 3、Windows平臺(tái)常用進(jìn)線程控制 API 4、進(jìn)程同步與互斥控制 信 5、簡(jiǎn)單進(jìn)程通 實(shí) 一、實(shí)驗(yàn)?zāi)康模?驗(yàn) 目 的 1、加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。 2、進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。 3、分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法。 實(shí) 驗(yàn) 具體題目:進(jìn)程創(chuàng)建、進(jìn)程控制 要 系統(tǒng)平臺(tái)

3、:Linux/Windows操作系統(tǒng) 求 二、實(shí)驗(yàn)原理 1. Linux系統(tǒng)常用進(jìn)程管理命令 (1) at命令:定時(shí)運(yùn)行命令 讓系統(tǒng)在兩天后的17 : 30執(zhí)行文件data中指定的作業(yè),使用命令: # at f data 15:30 +2 days (2) bg命令后臺(tái)運(yùn)行命令 實(shí) 如果要將一個(gè)大目錄的文件進(jìn)行排序后,將結(jié)果輸入到一個(gè)文件中, 可以使用命令: 驗(yàn) # du -a / | sort -rn /tmp/du.sorted 原 理 (3) Fg掛起程序 步 使用fg命令時(shí),要加入后臺(tái)任務(wù)號(hào)碼,如果不加任何號(hào)碼,則所變動(dòng)的均是當(dāng)前任 驟 ( 務(wù)。 算 # du -a / | sort

4、-rn /tmp/du.sorted who 2、 進(jìn)程同步與互斥控制(數(shù)據(jù)同步),原理如下: (1) 、設(shè)置全局變量:int ticket=100;互斥量:HANDLE hMutex; (2) 、創(chuàng)建互斥信號(hào)量 ticket : hMutex=CreateMutex(NULL,TRUE,ticket); (3) 、用 WaitForSingleObject(hMutex,INFINITE);捕獲互斥信號(hào)量 hMutex (4) 、用ReleaseMutex(hMutex);釋放互斥量的使用權(quán) 3、通過郵件槽實(shí)現(xiàn)簡(jiǎn)單進(jìn)程通信,原理如下: (1) 、油槽服務(wù)器: 1) hMailslot=Cre

5、ateMailslot(.mailslotMyMailslot,0, MAILSLOT_WAIT_FOREVER,NULL)/ 創(chuàng)建一個(gè)郵路。 2) ReadFile(hMailslot,buf,100,讀取郵路數(shù)據(jù) 3) CloseHandle(hMailslot);/ 關(guān)閉油槽 (2) 、油槽客戶端: 1) hMailslot=CreateFile(.mailslotMyMailslot,GENERIC_WRITE, FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); /創(chuàng)建油槽文件 2) WriteFile(hM

6、ailslot,buf,strle n(buf)+1, / 寫入數(shù)據(jù) 3) CloseHandle(hMailslot);/ 關(guān)閉油槽 實(shí)驗(yàn)源代碼如下: 1、進(jìn)程同步與互斥控制(數(shù)據(jù)同步) #include stdafx.h #in clude #i ncludeiostream using n amespace std; int in dex =0; int ticket=100; HANDLE hMutex; DWORD WINAPI Fu n1Proc(LPVOID lpParameter) while(TRUE) WaitForSi ngleObject(hMutex,INFINITE

7、); if(ticketO) coutthread1 sell ticket :ticket-0) coutthread2 sell ticket :ticket-e ndl; else break; ReleaseMutex(hMutex); return 0; int _tmain(int argc, _TCHAR* argv) HANDLE hTread1; HANDLE hTread2; hTread 仁CreateThread(NULL,O,Fu n1Proc,NULL,0,NULL); hTread2=CreateThread(NULL,0,Fu n2Proc,NULL,0,NUL

8、L); CloseHa ndle(hTreadl); CloseHa ndle(hTread2); hMutex=CreateMutex(NULL,TRUE,ticket); if(hMutex) if(ERROR_ALREADY_EXISTS=GetLastError() cout Only one in sta nee can run !e ndl; return 0; ReleaseMutex(hMutex); ReleaseMutex(hMutex); Sleep(IOOOO); return 0; 2、郵件槽進(jìn)程通信: 1)油槽服務(wù)器:(關(guān)鍵代碼段) void C 油槽客戶端 Dlg

9、:OnSend() / TODO:在此添加控件通知處理程序代碼 HANDLE hMailslot; hMailslot=CreateFile(.mailslotMyMailslot,GENERIC_WRITE,FILE_SHARE_RE AD,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE=hMailslot) MessageBox(打開油槽失敗!”); return; CStri ng str; char buf100; m_edit.GetWi ndowText(str); strcpy_s(b

10、uf,str); DWORD dwWrite; if(!WriteFile(hMailslot,buf,strle n(buf)+1, return; CloseHa ndle(hMailslot); 2) 油槽客戶端:(關(guān)鍵代碼段) void C 油槽客戶端 Dlg:OnSend() / TODO:在此添加控件通知處理程序代碼 HANDLE hMailslot; hMailslot=CreateFile(.mailslotMyMailslot,GENERIC_WRITE,FILE_SHARE_RE AD,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NUL

11、L); if(INVALID_HANDLE_VALUE=hMailslot) MessageBox(打開油槽失?。 ?; return; CStri ng str; char buf1OO; m_edit.GetWi ndowText(str); strcpy_s(buf,str); DWORD dwWrite; if(!WriteFile(hMailslot,buf,strle n(buf)+1, return; CloseHa ndle(hMailslot); (寫不完時(shí),可另加附頁(yè)。) 三、實(shí)驗(yàn)結(jié)果: 1、實(shí)驗(yàn)截圖: 實(shí) 驗(yàn) 結(jié) 果 及 分 析 國(guó)3 匚:冷 d o wvste m 3

12、2c m d thradlticket: :1EIEI thread2 sell ticket : :99 thradlticket : :98 threadticket : 97 threadl sell ticket : 96 thread2 $911 ticket : :95 threadl sell ticket : :91 thread sell ticket : 93 thrdl sell ticket : :32 thrad2 well ticket : 31 threadl well ticket . :9G thread2 ell ticket ; threadl sell

13、ticket ; :88 thread sell ticket : ;87 threadl ell ticket . ;G thread2 sell ticket ; 85 threadl xll ticket ; thrad2 oell ticket ; :83 threadl dell ticket ; ;82 thrad2 cell ticket : :S1 threadl 命ell ticket : throad2 cell ticket : :79 threadl *1】ticket ; :78 thread2 soil ticket : ;77 threadl gll ticket

14、 ; tTG 2-1進(jìn)程控制達(dá)到數(shù)據(jù)同步處理截圖 2-2油槽通信控制面板截圖 2-3油槽-服務(wù)器截圖 2-4油槽-客戶端截圖 2-5發(fā)送-接受效果截圖 2、結(jié)果分析: 1 )、Is命令列出了指定目錄下的文件名和目錄名,參數(shù)-I要求顯示文件或目錄的詳 細(xì)信息,例如類型、訪問權(quán)限、連接數(shù)、擁有者等。 在Linux中,用戶通過利用fork創(chuàng)建的進(jìn)程來與原進(jìn)程運(yùn)行相同的程序代碼,為了 使新進(jìn)程運(yùn)行新的程序,用戶可以使用系統(tǒng)調(diào)用exec來裝入一個(gè)新的程序到當(dāng)前進(jìn) 程的地址空間,如果exec調(diào)用成功,系統(tǒng)開始執(zhí)行新程序,永遠(yuǎn)不會(huì)返回原來的程 序。 2 )、進(jìn)程同步與互斥控制,能有效的控制全局變量在某一進(jìn)程

15、執(zhí)行過程中唯一被訪 問。在多線程程序中容易出現(xiàn)共享資源因時(shí)間片到期而終止訪問,這樣就很容易出 現(xiàn)數(shù)據(jù)的錯(cuò)亂。假如全局變量未火車票;對(duì)于線程函數(shù)(Fun Procl、Fun Proc2),在 訪問全局變量ticket時(shí),ticket自減一。如果在線程函數(shù)1 ( Fun Procl )訪問ticket, 還沒有來得及自減一就因時(shí)間片到期而被線程函數(shù)2( FunProc2 )搶占訪問,然后 自減一。這樣就造成了資源數(shù)據(jù)不一致,從而產(chǎn)生很危險(xiǎn)的后果。 本實(shí)驗(yàn)通過設(shè)置互斥信號(hào)量從而達(dá)到線程之間對(duì)共享資源的同步訪問,以此還可以 實(shí)現(xiàn)進(jìn)程同步中的讀者/寫者問題。 3) 、由于油槽是單向通信機(jī)制,所以只能通過創(chuàng)建油槽服務(wù)器進(jìn)程讀取數(shù)據(jù),打開 油槽客戶端進(jìn)程寫入數(shù)據(jù)。如果只打開油槽服務(wù)器,創(chuàng)建讀取數(shù)據(jù)進(jìn)程而沒有打開 客戶端就會(huì)導(dǎo)致服務(wù)器進(jìn)入無限等代狀態(tài),造成程序崩潰。 在創(chuàng)建進(jìn)程句柄后要記得釋放句柄,不然會(huì)產(chǎn)生不良后果。 心 得 體 會(huì) 在了解了操作系統(tǒng)中進(jìn)程間的通信的方式我們使用了郵槽實(shí)現(xiàn)了簡(jiǎn)單的進(jìn)程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論