實驗進程控制與通信管理_第1頁
實驗進程控制與通信管理_第2頁
實驗進程控制與通信管理_第3頁
實驗進程控制與通信管理_第4頁
實驗進程控制與通信管理_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、2) 良好獨立完成實驗二(3) 良好獨立完成實驗二(4) 良好獨立完成實驗二(5) 良好小組成績評定教師簽名: 年 月 日實驗分項11、Linux 系統(tǒng)常用進程管理命令的使用 2、Linux 系統(tǒng)常用進程創(chuàng)建與管理的系統(tǒng)調(diào)用 3、Windows平臺常用進線程控制API 4、進程同步與互斥控制 5、簡單進程通信實驗目的一、實驗目的:l1、加深對進程概念的理解,明確進程和程序的區(qū)別。l2、進一步認識并發(fā)執(zhí)行的實質(zhì)。l3、分析進程爭用資源的現(xiàn)象,學習解決進程互斥的方法。實驗要求具體題目:進程創(chuàng)建、進程控制系統(tǒng)平臺:Linux/Windows操作系統(tǒng)實驗原理步驟(算法流程)2、 實驗原理1 Linux

3、 系統(tǒng)常用進程管理命令(1)at命令:定時運行命令 讓系統(tǒng)在兩天后的17:30執(zhí)行文件data中指定的作業(yè),使用命令: at f data 15:30 +2 days(2)bg命令后臺運行命令 如果要將一個大目錄的文件進行排序后,將結(jié)果輸入到一個文件中,可以使用命令: du -a / | sort -rn > /tmp/du.sorted (3)Fg掛起程序 使用fg命令時,要加入后臺任務(wù)號碼,如果不加任何號碼,則所變動的均是當前任 務(wù)。 du -a / | sort -rn > /tmp/du.sorted &1 237 #fg 1 (4) Jobs顯示后臺程序 先把兩個

4、進程放在系統(tǒng)后臺運行,然后使用jobs命令查看后臺任務(wù)的執(zhí)行情況:du -a /etc > user.data &1 233# find / -name core -type f -ls > core.data &2 234#jobs -l1 + 237 Running du -a /etc > user.data2 - 238 Running find / -name core -type f -ls > core.data (5)kill命令殺掉進程 命令執(zhí)行過程如果出錯,用戶可用"kill"來結(jié)束任務(wù)。對于在后臺運行的進程, 可

5、以使用kill命令終止: du -a / | sort -rn > /tmp/du.sorted & 1 237 #kill 237 (6)nice命令改變權(quán)限優(yōu)先級 將ls命令的優(yōu)先序加1并執(zhí)行,將結(jié)果輸入文件1.txt: nice -n 1 ls >1.txt (7)renice命令修改優(yōu)先級 將進程PID為987及32的進程與進程擁有者為daemon及root的優(yōu)先級別號加1: renice +1 987 -u daemon root -p 32 (8)sleep命令暫停進程 下面的命令使進程先暫停60秒,然后查看哪個用戶登錄到系統(tǒng)中: sleep 60; who2、

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

7、tMyMailslot",0, MAILSLOT_WAIT_FOREVER,NULL);/創(chuàng)建一個郵路。 2)ReadFile(hMailslot,buf,100,&dwRead,NULL);/讀取郵路數(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)W

8、riteFile(hMailslot,buf,strlen(buf)+1,&dwWrite,NULL);/寫入數(shù)據(jù) 3)CloseHandle(hMailslot);/關(guān)閉油槽實驗源代碼如下:1、 進程同步與互斥控制(數(shù)據(jù)同步):#include "stdafx.h"#include<Windows.h>#include"iostream"using namespace std;int index =0;int ticket=100;HANDLE hMutex;DWORD WINAPI Fun1Proc(LPVOID lpParame

9、ter)while(TRUE)WaitForSingleObject(hMutex,INFINITE);if(ticket>0)cout<<"thread1 sell ticket :"<<ticket-<<endl;else break;ReleaseMutex(hMutex);return 0;DWORD WINAPI Fun2Proc(LPVOID lpParameter)while(TRUE)WaitForSingleObject(hMutex,INFINITE);if(ticket>0)cout<<&qu

10、ot;thread2 sell ticket :"<<ticket-<<endl;elsebreak;ReleaseMutex(hMutex);return 0;int _tmain(int argc, _TCHAR* argv)HANDLE hTread1;HANDLE hTread2;hTread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);hTread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);CloseHandle(hTread1);CloseHandle(hTrea

11、d2);hMutex=CreateMutex(NULL,TRUE,"ticket");if(hMutex)if(ERROR_ALREADY_EXISTS=GetLastError()cout<<"Only one instance can run!"<<endl;return 0;ReleaseMutex(hMutex);ReleaseMutex(hMutex);Sleep(10000);return 0;2、 郵件槽進程通信:1) 油槽服務(wù)器:(關(guān)鍵代碼段)void C油槽客戶端Dlg:OnSend()/ TODO: 在此添加控

12、件通知處理程序代碼HANDLE hMailslot;hMailslot=CreateFile(".mailslotMyMailslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(INVALID_HANDLE_VALUE=hMailslot)MessageBox("打開油槽失敗!");return;CString str;char buf100;m_edit.GetWindowText(str);strcpy_s(buf,str);DWO

13、RD dwWrite;if(!WriteFile(hMailslot,buf,strlen(buf)+1,&dwWrite,NULL)MessageBox("寫入數(shù)據(jù)失??!");CloseHandle(hMailslot);return;CloseHandle(hMailslot);2) 油槽客戶端:(關(guān)鍵代碼段)void C油槽客戶端Dlg:OnSend()/ TODO: 在此添加控件通知處理程序代碼HANDLE hMailslot;hMailslot=CreateFile(".mailslotMyMailslot",GENERIC_WRITE

14、,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(INVALID_HANDLE_VALUE=hMailslot)MessageBox("打開油槽失??!");return;CString str;char buf100;m_edit.GetWindowText(str);strcpy_s(buf,str);DWORD dwWrite;if(!WriteFile(hMailslot,buf,strlen(buf)+1,&dwWrite,NULL)MessageBox("寫入數(shù)據(jù)

15、失??!");CloseHandle(hMailslot);return;CloseHandle(hMailslot);(寫不完時,可另加附頁。)實驗結(jié)果及分析三、實驗結(jié)果:1、實驗截圖:2-1進程控制達到數(shù)據(jù)同步處理截圖2-2 油槽通信控制面板截圖2-3 油槽-服務(wù)器截圖2-4 油槽-客戶端截圖2-5 發(fā)送-接受效果截圖2、 結(jié)果分析: 1)、ls 命令列出了指定目錄下的文件名和目錄名,參數(shù)-l要求顯示文件或目錄的詳 細信息,例如類型、訪問權(quán)限、連接數(shù)、擁有者等。 在Linux中,用戶通過利用fork創(chuàng)建的進程來與原進程運行相同的程序代碼,為了 使新進程運行新的程序,用戶可以使用系統(tǒng)

16、調(diào)用exec來裝入一個新的程序到當前進 程的地址空間,如果exec調(diào)用成功,系統(tǒng)開始執(zhí)行新程序,永遠不會返回原來的程 序。 2)、進程同步與互斥控制,能有效的控制全局變量在某一進程執(zhí)行過程中唯一被訪 問。在多線程程序中容易出現(xiàn)共享資源因時間片到期而終止訪問,這樣就很容易出 現(xiàn)數(shù)據(jù)的錯亂。假如全局變量未火車票;對于線程函數(shù)(FunProc1、FunProc2),在 訪問全局變量ticket時,ticket自減一。如果在線程函數(shù)1(FunProc1)訪問ticket, 還沒有來得及自減一就因時間片到期而被線程函數(shù)2(FunProc2)搶占訪問,然后 自減一。這樣就造成了資源數(shù)據(jù)不一致,從而產(chǎn)生很危險的后果。 本實驗通過設(shè)置互斥信號量從而達到線程之間對共享資源的同步訪問,以此還可以 實現(xiàn)進程同步中的讀者/寫者問題。 3)、由于油槽是單向通信機制,所以只能通過創(chuàng)建油槽服務(wù)器進程讀取數(shù)據(jù),打開 油槽客戶端進程寫入數(shù)據(jù)。如果只打開油槽服務(wù)器,創(chuàng)建讀取數(shù)據(jù)進程而沒有打開 客戶端就會導致服務(wù)器進入無限等代狀態(tài),造成程序崩潰。 在創(chuàng)建進程句柄后要記得釋放句柄,不然會產(chǎn)生不良后果。心得體會 在了解

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論