緩沖池設計(1)_第1頁
緩沖池設計(1)_第2頁
緩沖池設計(1)_第3頁
緩沖池設計(1)_第4頁
緩沖池設計(1)_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、進程創建和進程同步控制(API 函數) 班級:目錄引入主要任務總體設計具體設計操作過程總結進程的引入 程序(Program)是一組指令的有序集合,它本身沒有任何運行的含義,它只是一個靜態的實體。 也就是說,用程序這個靜態的實體不能反映程序在并發執行 過 程 的 這 些 動 態 特 征 。 于 是 , 人 們 引 入 “ 進 程(Process)“這一概念來描述程序動態執行過程的性質。 進程是應用程序的執行實例,是操作系統分配資源單位。進程最根本的屬性是動態性和并發性。 每個進程是由私有的虛擬地址空間、代碼、數據和其它各種系統資源組成,進程在運行過程中創建的資源隨著進程的終止而被銷毀,所使用的系

2、統資源在進程終止時被釋放。線程的引入 由于每創建一個進程需要申請許多的系統資源,比如內存空間分配,PCB的分配等,這樣就會造成一些不必要的浪費,而線程不需要任何系統資源,它與所屬的進程共享系統資源,并且線程之間的切換速度快,提高了程序運行的效率,所以引入了線程的概念。 線程是操作系統分配處理器的最基本單元,它是操作系統用來調度執行的最小單位。 一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以并發執行。 主要任務1、利用圖形界面直觀易懂的特點,把完全抽象的線程的就緒、阻塞(等待)、執行的狀態以及同步互斥的過程用圖形動態的顯示出來。2、用信號量和事件作為線程之間的同步互斥工具,通過

3、對設置BUFFER1、BUFFER2的容量,來協調PUT、GET、MOVE這三個線程,使其同步來實現P、V操作,并說明每個信號量的含義、初值和值的范圍。3、設計的程序并非真正的傳輸數據,只是對一個數據計數器加減來模擬數據的增加減少,然后通過定時刷新,將線程的狀態、數據顯示到界面上。總體設計利用信號量機制來解決生產者消費者問題,利用互斥信號量mutex實現進程對緩沖池的互斥使用。對 信 號 量 的 操 作 通 過 兩 個 原 子 操 作 : W a i t ( s ) 和Signal(s).Wait(s)是等待信號的操作,進行S=S-1操作;Signal(s)是發送信號的操作,進行S=S+1操作

4、。 wait 若s-1后仍大于或等于零,則進程繼續執行;若s-1后小于零,則該進程被阻塞后進入與該信號相對應的隊列中,然后轉進程調度;若相加結果大于或等于零,則從該信號的等待隊列中喚醒一等待進程,然后再返回原進程繼續執行或轉進程調度 互斥與同步互斥與同步:進程的同步與互斥進程的同步與互斥是指進程在推進時的是指進程在推進時的相互制約關系。相互制約關系。進程同步:它主要源于進程合作,是進程間共同完成一項任務時進程同步:它主要源于進程合作,是進程間共同完成一項任務時直接發生相互作用的關系。直接發生相互作用的關系。 進程互斥:它主要源于資源共享,是進程之間的間接制約關系。進程互斥:它主要源于資源共享,

5、是進程之間的間接制約關系。協調操作設計的總體流程Buffer1Buffer2putmoveget具體設計3個Put操作 , 不斷循環,向Buffer1送數據,1個Move操作,不斷循環,將Buffer1的數據取到Buffer2,2個GET操作, 不斷循環,從Buffer2中取數據。Buffer1容量3, Buffer2容量2, Put、 Move、 Get每次操作一個數據,為了在操作的過程中要保證數據不丟失,每個Buffer每次只能接受一個Put或一個Move或一個Get,多個操作不能同時操作同一Buffer(即需要互斥操作)。 信號量的設置 需要六個信號量:full1,empty1,butt

6、er1 full2,empty2,butter2各信號量含義及初值如下: full1表示buffer1是否有數據,初值為0;empty1表示buffer1是否有空間,初值為3; buffer1表示buffer1是否可操作,初值為1; full2表示buffer2是否有數據,初值為0; empty2表示buffer2是否有空間,初值為2; buffer2表示buffer2是否可操作,初值為1。程序函數概覽 APIAPI函數,即函數,即Application Programming Application Programming InterfaceInterface,操作系統除了協調應用程序的執,

7、操作系統除了協調應用程序的執行、內存分配、系統資源管理外,同時也是一行、內存分配、系統資源管理外,同時也是一個很大的服務中心,調用這個服務中心的各種個很大的服務中心,調用這個服務中心的各種服務(每一種服務是一個函數),可以幫肋應服務(每一種服務是一個函數),可以幫肋應用程序達到開啟視窗、描繪圖形、使用周邊設用程序達到開啟視窗、描繪圖形、使用周邊設備的目的,由于這些函數服務的對象是應用程備的目的,由于這些函數服務的對象是應用程序,所以稱為序,所以稱為APIAPI函數。函數。 這些函數是這些函數是WINDOWSWINDOWS提供給應用程序與操作提供給應用程序與操作系統的接口,他們猶如系統的接口,他

8、們猶如“積木塊積木塊”一樣,可以一樣,可以搭建出各種界面豐富,功能靈活的應用程序。搭建出各種界面豐富,功能靈活的應用程序。/*定義頭文件 */ #include #include #include #include #include #include #include/*定義頭變量 */ sem_t iFull,iEmpty; sem_t oFull,oEmpty; int iIn=0,iOut=0,oIn=0,oOut=0; sem_t sem1,sem2; char inBuffer10; /數組實現緩沖區char outBuffer20; int data1,data2,data3; v

9、oid put(void *arg); void move(void *arg); void get(void *arg);sem_t聲明信號量,本質是一個長整型的數/*mian函數 */ main(int argc, char *argv ) 聲明局部變量 /pthread_t用于聲明線程ID/*初始化信號量imutex為1*/ sem_init(&sem1,0,1);/*初始化信號量omutex為1*/*初始化信號量iFull為1*/*初始化信號量iEmpty為10*/*初始化信號量oFull為0*/*初始化信號量oEmpty為20*/函數sem_init()用來初始化一個信號量它的原型為

10、: extern int sem_init _P (sem_t *_sem, int _pshared, unsigned int _value);pshared參數控制著信號量的類型/*創建三個線程*/ /put線程 /move線程/get線程應用函數:pthread_create是類Unix操作系統(Unix、Linux、Mac OS X等)的創建線程的函數。頭文件 #include函數聲明int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);線

11、程ID/* put操作線程函數 */ void put(void *arg) /*信號量減一,P操作*/ p(empty) p(s) put 操作 /*信號量加一,V操作*/ v(full) v(s) 函數sem_post( sem_t *sem )用來增加信號量的值當有線程阻塞在這個信號量上時,調用這個函數會使其中的一個線程不再阻塞,選擇機制同樣是由線程的調度策略決定的。函數sem_wait( sem_t *sem )被用來阻塞當前線程直到信號量sem的值大于0,解除阻塞后將sem的值減一,表明公共資源經使用后減少。函數sem_trywait ( sem_t *sem )是函數sem_wai

12、t()的非阻塞版本,它直接將信號量sem的值減一。函數sem_destroy(sem_t *sem)用來釋放信號量sem。 獲得信號量sem的值,并保存到valp中int sem_getvalue(sem_t *sem, int *valp);/* move操作線程函數 */ void move(void *arg) /* move操作將數據取出inBuffer緩沖區 */ p(full) p(s)從inBuffer獲取數據 v(empty) v(s) /* move操作將數據放入outBuffer緩沖區 */ p(empty) p(s) 放入outBuffer v(full) v(s) /*

13、 get操作線程函數 */ void get(void *arg) /*信號量減一,P操作*/ p(full) p(s) get 操作 /*信號量加一,V操作*/ v(empty) v(s) Buffer1Buffer2putmovegetBuffer1 Buffer2putgetmove操作過程操作過程Buffer1 Buffer2putgetmove操作過程操作過程Buffer1 Buffer2putgetmove操作過程操作過程Buffer1 Buffer2putgetmove操作過程操作過程Buffer1 Buffer2putgetmove操作過程操作過程Buffer1 Buffer2putgetmove操作過程操作過程Buffer1 Buffer2putgetmove操作過程操作過程Buffer1 Buffer2putgetmove操作過程操作過程總結經過幾天的討論課準備,對

溫馨提示

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

評論

0/150

提交評論