——哲學家就餐問題與死鎖
院系:班級:
設計時間:
設計者:
指導老師:
目錄一、課程設計任務書3
二、設計題目與要求4
三、總體設計思想及系統平台、語言、工具4
四、資料結構與模組說明6
五、使用者名稱、源程式名、目標程式名和源程式8
六、執行結果與運**況12
七、除錯記錄18
八、自我評析和總結19
九、參考文獻20
十、評分表20
課程設計任務書
一、課程設計的目的、任務與要求
為了使計算機專業的學生,更好地理解和掌握作業系統課程的理論知識,概念和方法,並以此為基礎,對作業系統實現技術作進一步剖析.通過對各種管理技術模擬,進一步培養學生軟體開發能力.
二、選題的原則及題目難度、深度、廣度分析
1.在滿足教學要求和對學生技能訓練的前提下,盡可能結合實際問題選題。
2.選題的難易程度要適當,以學生在規定時間內經過努力可以完成為宜。
3.以在老師給定的題目中選擇為主,也可由學生自行命題為輔(教師認可)。
三、課程設計內容 (每題3-4人)
題目:哲學家就餐問題與死鎖。要求學生設計哲學家就餐程式,該程式能演示哲學家死鎖情況,也能演示採用死鎖預防方法解除死鎖的情況。
四、要求完成的主要任務:
利用多執行緒技術編寫哲學家就餐程式,使之在執行時能演示產生死鎖的情況,也能演示採用死鎖防止方法後不產生死鎖的情況。
程式要採用簡單的控制台介面,執行後在螢幕上顯示功能選單,列出該程式具有的功能,供使用者選擇,使用者選擇功能後應該轉到相應的處理程式。程式應該包括以下功能:
(1)演示死鎖現象;
(2)通過資源按序分配法防止死鎖;
(3)通過資源預分配法防止死鎖;
(4)退出。
五、課程設計時間程序表
17周周一~周五上午8點半~11點,下午2點半到5點。
擬稿(簽名2023年 12月 10 日
核對(簽名年月日
審批(簽名年月日
用多執行緒同步方法解決哲學家就餐問題
(dining-philosophers problem)
1.設計題目與要求
1.1設計題目描述:
用多執行緒同步方法解決哲學家就餐問題(dining-philosophers problem)
1.2要求:
利用多執行緒技術編寫哲學家就餐程式,使之在執行時能演示產生死鎖的情況,也能演示採用死鎖防止方法後不產生死鎖的情況。
程式要採用簡單的控制台介面,執行後在螢幕上顯示功能選單,列出該程式具有的功能,供使用者選擇,使用者選擇功能後應該轉到相應的處理程式。程式應該包括以下功能:
(1)演示死鎖現象;
(2)通過資源按序分配法防止死鎖;
(3)通過資源預分配法防止死鎖;
(4)退出。
2.總體設計思想及系統平台、語言、工具
2.1總體設計思想
死鎖是程序併發執行過程中可能出現的現象,哲學家就餐問題是描述死鎖的經典例子。假設有幾位哲學家圍坐在一張餐桌旁,桌上有吃不盡的食品,每兩位哲學家之間擺放著一根筷子,筷子的個數與哲學家的數量相等,每一位哲學家要麼思考,要麼等待,要麼拿起左右兩根筷子進餐。本設計假設有五個哲學家和五根筷子,它們的編號都是從0到4。
如果每位哲學家都拿起左邊的筷子,就會發生死鎖。
為了防止死鎖,可以採用資源預分配法或者資源按序分配法。資源預分配法是指程序在執行前一次性地向系統申請它所需要的全部資源,如果系統當前不能夠滿足程序的全部資源請求,則不分配資源, 此程序暫不投入執行,如果系統當前能夠滿足程序的全部資源請求, 則一次性地將所申請的資源全部分配給申請程序。資源按序分配法是指事先將所有資源類全排序, 即賦予每乙個資源類乙個唯一的整數,規定程序必需按照資源編號由小到大的次序申請資源。
在哲學家就餐問題中,要採用資源預分配法只需讓每個哲學家同時申請左右兩根筷子。要採用資源按序分配法只需規定每個哲學家先申請左右兩根筷子中編號小的筷子,再申請編號大的筷子。
2.2系統平台、語言及工具
(1)作業系統:xp
(2)程式語言:c++語言
(3)工具:vc++ 6.0
2.3軟體的總體結構、模組關係、總體流程
流程圖3
3.資料結構與模組說明
程式需要六個執行緒,主線程用於顯示主選單,接收使用者的功能選擇;五個哲學家執行緒用於模擬哲學家的活動,即不停地思考、飢餓、進食。相鄰的兩個哲學家執行緒需要共享他們中間的同一根筷子,因此對每一根筷子的使用要互斥,用互斥體陣列h_mutex_chopsticks來實現。主線程建立五個哲學家執行緒後要等待所有哲學家結束,用執行緒控制代碼陣列h_thread來表示五個執行緒,主線程通過等待這五個執行緒控制代碼來實現同步。
該程式共有7個函式,這些函式可以分成4組。各組包含的函式及其功能如表2-1所示。
3.2 演算法設計
下面給出主要函式的演算法描述。
(1)deadlock_philosopher函式
}(2)ordered_allocation_philosopher函式
}(3)pre_allocation_philosopher函式
}(4)deadlock函式
其他的初始化函式與deadlock()的演算法相同,只不過在建立執行緒時使用不同的執行緒函式。
在windows中可以用系統呼叫waitformultipleobjects()同時申請兩份資源,具體解法如下所示。
#define n 5
typedef enumstatus;
status state[n];
semaphore self[n];
semaphore mutex = 1;
void test(int i)
}void pick_chopsticks(int i)
void put_chopsticks(int i)
void philosopher(int i)
void main
}在上述程式中, 自定義資料型別status用來列舉哲學家的狀態,陣列state用來存放五個哲學家的狀態,由於該陣列是全域性變數,所以用訊號燈變數mutex實現對它的互斥訪問。訊號量陣列self包含五個元素,每個元素的初始值皆為0,當第i號哲學家不具備進食條件時,會將自己阻塞在訊號量self[i]上。函式test用於測試i號哲學家是否具備進食的條件。
i號哲學家可以進食必須同時滿足以下條件:i號哲學家飢餓,左邊哲學家不在進食,右邊哲學家不在進食。
4.使用者名稱、源程式名、目標程式名和源程式
// 1.cpp: 主專案檔案。
#include "stdafx.h"
#include
#include
#include
作業系統課程設計報告
上海電力學院 計算機作業系統原理 課程設計報告 題目名稱 編寫程式模擬虛擬儲存器管理 姓名 杜志豪 學號 20121798 班級 2012053班 同組姓名 孫嘉軼 課程設計時間 2014.6.30 2014.7.4 評語成績 一 設計內容及要求4 1.1 設計題目4 1 2 使用演算法分析4 1 ...
作業系統課程設計報告
作業系統 課程設計報告 姓名吳昊學號 20091811042 系別資訊管理與工程系 專業電腦科學與技術班級 09級 課程設計題目模擬檔案管理系統 指導教師崔新會 小組成員吳昊 丁強強 辛夢娟 王放 周洋 2012 年 6 月 11 日 目錄 內容摘要 2 第一章引言 2 第二章需求分析 4 第三章系...
作業系統課程設計報告
課程設計說明書 設計名稱 作業系統課程設計 題目 檔案訪問介面設計 學生姓名 陳小浪 專業 電腦科學與技術 班級 12級1班 學號 2012314118 指導教師 任朝暉 日期 2014 年 9 月 15 日 課程設計任務書 電腦科學與技術專業年級班 一 設計題目 檔案訪問介面設計 二 主要內容 利...