哲学家进餐问题操作系统课程设计报告


    XX学院
    操作系统
    课程设计报告


    题 目: 哲学家进餐问题
    班 级:
    学 号:
    作者姓名:
    指导教师:


    2011年X月X日
    目 录

    1.设计题目求 1
    11实验目 1
    12设计求 1
    13 初始条件 1
    2.总体设计思想相关知识 2
    21总体设计思想 2
    22 界区互斥编程原理 2
    23开发环境工具 3
    3.数结构模块说明 3
    31 数结构 3
    32程序模块流程图 4
    321 程序模块 4
    323 返回哲学家状态模块 6
    324 返回餐具状态模块 6
    4.源程序代码 7
    5.测试结果 11
    6.课设总结 14
    7.参考文献 15


    1.设计题目求
    11实验目
    通实现哲学家进餐问题步深入解掌握进程步互斥原理
    12设计求
    哲学家N定全体达开始讨:讨间隙哲学家进餐进餐时需刀叉哲学家刀叉进餐哲学家数餐桌布置行设定实现刀叉互斥算法程序实现
    13 初始条件
    (1)操作系统:windows
    (2)程序设计语言:C++
    (3)设定圆桌六哲学家三刀叉图摆放:


    图11 哲学家进餐问题设定图
    2.总体设计思想相关知识
    21总体设计思想
    哲学家生活思考吃饭思考饿餐思考循环复求:哲学家位左右刀叉够餐哲学家先刀叉刀叉时抓旁边两餐具哲学家手中抢夺餐具哲学家次餐必须放手中两餐具恢复思考强抓住餐具放
    设计程序够显示前哲学家状态桌餐具情况死锁推算出状态哲学家状态桌餐具情况设计安排哲学家正常生活程序
    哲学家设计3种状态等进餐思考哲学家重复进行等>进餐>思考行动循环中:
    等>进餐:哲学家处等进餐状态左右手两边餐具处空闲状态时发生种状态改变状态改变发生哲学家起左右手两边餐具
    进餐>思考:状态改变发生哲学家放左右手餐具餐具状态中转变空闲
    思考>等:哲学家思考结束条件转入等状态
    述程序中应设置6元素信号量数组tools[6]保持哲学家间步
    22 界区互斥编程原理
    硬件界资源软件界资源进程必须互斥进行访问进程中访问界资源段代码称界区(Critical Section)
    进程中访问界资源段程序称界区(Critical Section)(界资源次仅允许进程享资源)次准许进程进入界区进入允许进程进入硬件界资源软件界资源进程必须互斥进行访问
    程序EnterCriticalSection (&cs)LeaveCriticalSection (&cs)两函数实现界区互斥
    EnterCriticalSection (&cs)进入界区LeaveCriticalSection (&cs)离开界区
    23开发环境工具
    系统台:WINDOW环境
    实现语言:C++
    开发工具:VC++60
    3.数结构模块说明
    31 数结构
    Philosopher
    numberint
    statusint
    +Philosopher(in numint)
    +find() constint
    +getinfo() constint
    +Change()void
    图31 哲学家类UML图
    程序中定义哲学家类包含两私象四公象
    Number象:报讯哲学家编号
    Status象:保存前该哲学家状态0表示正等(处饥饿状态)1表示餐具正吃饭2表示正思考
    Philosopher(int num)方法:哲学家类构造函数参数num表示哲学家编号
    find() const方法:返回该哲学家编号
    getinfo() const方法:返回哲学家前状态
    Change()方法:根题目求改变哲学家状态(等>进餐>思考>等…………)
    外程序中包含公象bool类型数组tools[6]保存6餐前状态:true表示该餐具前空闲false表示该餐具前正
    程序中包含两公函数:printtoolstatusPrint返回哲学家状态toolstatus返回餐具状态
    32程序模块流程图
    321 程序模块


    图32 程序模块流程





    322 状态改变模块

    图33 状态改变模块Change()流程图
    323 返回哲学家状态模块

    图34 返回哲学家状态模块print()流程图
    324 返回餐具状态模块


    图35 返回餐具状态模块toolstatus(bool a)流程图
    4.源程序代码
    实验目:通实现哲学家进餐问题步深入解掌握进程步互斥原理
    设计求:哲学家N定全体达开始讨:讨间隙哲学家进餐
    进餐时需刀叉哲学家刀叉进餐哲学家数
    餐桌布置行设定实现刀叉互斥算法程序实现
    #include
    #include
    #include
    #include
    #include

    using namespace std
    bool tools[6] 全局变量餐工具
    CRITICAL_SECTION cs 信号量 线程中界区
    class Philosopher
    {
    private
    int number
    int status *标记前哲学家状态0表示正等(处饥饿状态)1表示两支筷子正吃饭2表示正思考*
    public
    Philosopher(int num0) status(2) number(num) { }
    int find() const { return number }
    int getinfo() const { return status }
    void Change() 状态改变函数
    }
    void PhilosopherChange()
    {
    EnterCriticalSection (&cs) 进入界区
    if(status1) 正进餐
    {
    tools[number6]true 放左手工具
    tools[(number1)6]true 放右手工具
    status2 改变状态思考
    }
    else if(status2) 思考中
    {
    status0 改变状态等
    }
    else if(status0) 等中
    {
    if(tools[number6]&&tools[(number1)6]) 左右手两边工具均空闲状态
    {
    tools[number6]false 起左手工具
    tools[(number1)6]false 起右手工具
    status1
    }
    }

    LeaveCriticalSection (&cs)
    }
    string print(Philosopher *pA)
    {
    pA>Change()
    int ipA>getinfo()
    string str
    if(i0)
    str等
    else if(i1)
    str餐
    else str思考
    return str
    }
    string toolstatus(bool a)
    {
    string state
    if(atrue)
    state闲
    if(afalse)
    state
    return state
    }
    int main()
    {
    char con 'y' 判断否继续
    for(int i0i<6i++)
    tools[i]true 3组刀叉未初始化
    Philosopher P1(1)P2(2)P3(3)P4(4)P5(5)P6(6)
    InitializeCriticalSection (&cs) 初始化初始化界区
    cout<<状态说明示意图:< cout<< <<哲学家0号状态<< < cout<<哲学家5号状态<< <<叉3状态<< <<刀1状态<< <<哲学家1号状态< cout<< <<刀3状态<< <<叉1状态< cout<<哲学家4号状态<< <<叉2状态<< <<刀2状态<< <<哲学家2号状态< cout<< <<哲学家3号状态<< < cout<<餐具状态表示中闲表示空闲中< cout<<< cout<<哲学家开始生活:< cout< cout< while(con'y')
    {
    P1Change()
    P2Change()
    P3Change()
    P4Change()
    P5Change()
    P6Change()
    cout<<前状态:< cout<< < cout< cout<< < cout< cout<< < cout<<< cout<<继续状态输入y输入结束程序:
    cin>>con
    Sleep(20)
    }
    DeleteCriticalSection (&cs) 退出资源区
    return 0
    }
    5.测试结果


    图51 程序运行开始界面


    图52 哲学家状态1

    图53 哲学家状态2


    图54 哲学家状态3

    图55 哲学家状态4


    图56 退出程序
    6.课设总结
    前2周时间完成次课程设计
    通次课程设计学许课学知识注意许课没提东西
    通次设计理联系实际机会锻炼通理解决实际问题力正谓实践出真知代码没什问题实际运行起出正确结果代码部存逻辑语法等方面时会注意问题通次课程设计积累少样问题解决方法
    设计中总会遇样样问题遇问题势必分析问题通种渠道解决问题利互联网次课程设计加强网查数检索问题力时候学知识次重学知识方法
    7.参考文献
    [1]宗华宗涛陈吉著 操作系统 北京:民邮电出版社2009
    [2]李爱华程磊著 面相象程序设计(C++语言) 北京 清华学出版社2010
    衡 yang 师 范学院


    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    驱动程序实验报告操作系统课程设计报告

    操作系统课程设计报告班级: 计科 姓名: 学号: 老师: 时间:2012年X月X日一、设计目的操作...

    1年前   
    296    0

    操作系统课程设计银行家算法报告

    《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级:计科班 ...

    3年前   
    615    0

    合工大页面置换算法操作系统课程设计报告

    计算机与信息学院《操作系统综合设计》报告设计题目:页面置换算法学生姓名:学 号:专业班级:计算机科学与技术班2015 年 X月一、设计题目 3二、开发环境与工具 3三、设计原理 31....

    3年前   
    555    0

    《操作系统 银行家算法》课程设计报告

    《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级: 计科班 ...

    3年前   
    807    0

    操作系统课程设计报告树型目录文件系统

    操作系统课程设计报告题目:树型目录文件系统 学 院 计算机学院 专 业 网络工程 年级班别 班 学 ...

    3年前   
    538    0

    银行家算法《操作系统》课程设计报告

    《操作系统》课程设计报告课题: 银行家算法 专业计算机科学与技术学生姓名班级计算机学号指导教师信息工程...

    3年前   
    692    0

    用多线程同步方法解决生产者消费者问题操作系统课程设计

    题 目用多线程同步方法解决生产者-消费者问题(Producer-Consumer Problem)学 院计算机科学与技术学院专 业软件工程班 级姓 名 ...

    3年前   
    485    0

    进程调度算法的实现计算机操作系统课程设计

    题目2 进程调度算法的实现2.1 题目的主要研究内容及预期达到的目标(1)设计进程控制块; (2)设计多个进程队列; (3)设计多个进程(≥20); (4)动态生成时间片、执行时间和优先级,...

    3年前   
    580    0

    操作系统课程设计磁盘调度算法

    操作系统课程设计磁盘调度算法目 录1 课程设计目的及要求……………………………………………………12 相关知识…………………………………………………………………13 ...

    3年前   
    545    0

    操作系统课程设计银行家算法的模拟实现

    操作系统课程设计报告专业计算机科学与技术学生姓名班级学号指导教师完成日期信息工程学院题目: 银行家算法的模拟实现 一、设计目的本课程设计是学习完“操作系统原理”课程后进...

    3年前   
    679    0

    操作系统课程设计磁盘调度算法

    《计算操作系统》课程设计报告 姓名: ...

    3年前   
    460    0

    操作系统课程设计动态分区分配存储管理

    操作系统课程设计设计题目 动态分区分配存储管理学生姓名号学 号指导教师专业班级计算机班 第一章 课程设计概述1.1 设计任务:动态分区分配存储管理1.2 设计要求建立描述内存...

    2年前   
    417    0

    进餐的礼仪

    进餐的礼仪  去参加宴会,进餐的礼仪很重要,不但要吃得尽兴,而且要显出彬彬风范。 就座和离席 在入座时应等长者坐定后,方可入座。如有男士为你拉开座椅,你应落落大方的向对方表示感谢,然后再从容入...

    10年前   
    644    0

    进餐礼仪

    进餐礼仪  现一般的聚会或应酬,大都以吃饭为主。除有关饮食方面的礼仪注意外,对于整个交际过程中的细节亦应注意,尤以女子更须注意,如果你举止不雅观,不懂礼节,是会贻笑大方的。  1.进餐时应闭嘴...

    12年前   
    555    0

    操作系统实习报告样本

    操作系统实习报告样本  1 操作系统实习报告内容(1)    基本信息:完成人姓名、学号、报告日期(2)    实习内容(3)    实习目的(4)    实习题目(5)    设计思路和流程...

    9年前   
    568    0

    操作系统实践报告

    学 号: 实践课设计报告课程名称计算机操作系统题 目模拟设计存储管理的分配与回收学 院计算机科学与技术学院专 业计算机科学与技术班 级姓 名指导教师年月日模拟...

    1年前   
    452    0

    西餐进餐礼仪

    西餐进餐礼仪  从总体上来讲,吃西餐的礼节比中餐规定更为严格。  西餐中都要用到餐巾。餐巾分为午餐巾和晚餐巾。午餐巾可以完全打开铺在膝上,晚餐巾只打开到对折为止。餐巾打开后应平铺在大腿上,不能...

    11年前   
    555    0

    中餐进餐礼仪

    中餐进餐礼仪  有人说,判断一个人的教养只需看他的吃相就行了。吃相对于每位参加宴会的人来说,都是必须注意的。按照国际惯例,在宴会上不论吃东西,还是喝酒水,都不能发出刺耳的声响,这倒不是小题大作...

    9年前   
    397    0

    西方的进餐礼仪

    西方的进餐礼仪  欧美国家的餐桌大多是长方形,男主人(host)坐在桌子的一端,女主人(hostess)坐在另一端,通常安排座位时要尽量避免两位男宾或两位女宾并坐在一起。 就餐时,身体要坐得端...

    12年前   
    553    0

    操作系统课程设计编程序模拟银行家算法

    课程设计报告书 课程名称: 操作系统原理 题 目: 编程序模拟银行家算法 系 名: 信息工程系 专业班级: ...

    3年前   
    722    0

    文档贡献者

    z***u

    贡献于2022-06-25

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档