- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哲学家就餐问题研究和模拟
哲学家就餐问题研究和模拟
摘要:如今良好的交互性、并行性、同步性早已是大多数计算机操作系统不可或缺的功能,无论是基于单核还是多核计算机,倘若没有以上几个性能,则毫无疑问是糟糕的操作系统。哲学家就餐问题是操作系统研究领域中一个著名而有趣的问题,是从计算机实现伪同步并行功能研究中演化而来的经典进程间通讯问题,对研究同步性有很大的帮助和启发。该文探究了哲学家问题的原理,并使用C语言对其进行了模拟。
关键词:操作系统同步性;死锁竞争;哲学家就餐问题
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)15-3516-06
1965年,著名的数学家Dijkstra提出了一个他称为“哲学家就餐”的问题,并亲自解决之。自那时起,每个发明同步原语的人都希望通过解决此问题来展示其同步原语的精妙之处。
同步原语这一概念,被用于描述进程的执行动作,在操作系统中的地位举足轻重,其对实现操作系统程序的并行性和同步性有着奠基性的作用。那么,什么是同步原语呢?
在计算机的操作系统中,程序一般被抽象成进程这一概念。在一台计算机中,所有存在的进程要实现计算、访问资源等一系列复杂的操作。
当今计算机能够依靠相当少的CPU(相对于进程庞大的数量来说,一两个或者四个CPU简直少得可怜)实现程序并行的功能正是基于同步原语:计算机内的进程都被分为运行时间相同的原子执行动作,即一个复杂的动作由许多子动作组成,这些子动作不能再分成更小的子动作。同步原语中的原语便是指这些子动作。
对于CPU来说,每次只执行一个原子动作,这个原子动作不一定是来自于相同的进程,一般按照某种规则来运行原子动作,比如在一段时间内,一个进程只能占用CPU运行若干个属于它自已的原子动作。由于CPU的运行速度非常快,当下普通CPU其一秒内的运算速度都可以以亿为单位计量,因此在一段时间内,可以让很多进程都完成一部分原子动作,在人类的角度看来,就好像程序并行运行了。
在这里,就可以看到同步原语的必要性。若无同步原语的话,进程便会胡作非为了,因为计算机没有规定一个进程能执行动作到何种地步,对于进程间的竞争问题和通讯问题,即使有了很好的策略也无法控制进程执行的结果。例如,对于一个缓冲区,一个进程获得了它的修改权,但是操作系统没有确定原子动作,这个进程不知道会执行到哪一步,于是,在操作系统还没有来得及告知其他进程时,就可能会有另一个无知的进程也获得了该缓冲区的修改权,从而与前一个进程一同修改缓冲区的内容,这将会导致世界大乱。
同时,毫无疑问,在这里,存在一个很现实的问题。
正如上所述,计算机中的进程数往往多得惊人,光是操作系统本身就需要并行运行众多进程,再加上用户开启的各种应用进程(比如用户想听MP3歌曲,便开启了一个MP3播放器,这一个播放器可能包含不止一个进程),其数目可能会非常大。然而,计算机的硬件设备却极其有限,例如,目前的普通计算机只有一或者两个中央处理器(CPU),只有有限的内存,只有一个显示器,这么多进程要同时使用这些相对来说少得可怜的硬件设备,若没有一个优秀的访问机制,程序间便会出乱子。例如客户开启了一个文本编辑进程用来编写一篇文章,在某个时候,这篇文章的代码被保存在内存中的一些位置上,过了一段时间,这个客户又开启了一个视频播放器,而原先的文本编辑进程仍没有关闭,播放器要使用的内存位置正好与编辑器所占用的位置有冲突,此时该如何是好?当文本编辑程序不适用CPU而让视屏播放器使用CPU时,该如何保存文本编辑器的记录?文本编辑器修改了内存上的内容,视屏播放器如何知道?如果这些进程不相互沟通各自的信息,那相信该用户不久便会精神崩溃。
因此,进程间必须实现良好的信息共享策略,哲学家就餐问题便是研究这类策略的一个经典抽象数学问题。
1 哲学家就餐问题分析
说起哲学家就餐问题,就不得不与计算机操作系统中的进程间通讯(ipc)问题挂上钩。
在进程间通讯问题中,有一个简单而基本的模型,就是存在多个进程,而只存在一个缓冲区。非常明显,这个缓冲区的数据可以被多个进程读取,这不会造成任何后果。但是,一旦有进程要改写这个缓冲区的内容,那麻烦就来了,首先,不能允许多个进程同时改写缓冲区的内容,因为一旦有多个进程同时修改,那该以哪个进程的操作为准呢?并且每个进程获取的缓冲区内容都不是最新的,每个进程也不知道其他进程相对缓冲区内容做什么手脚,最终缓冲区中的内容也不知道会是什么,因为这些进程会不顾进程的感受,自顾自的往缓冲区储存自已修改后的数据。
对于上文所描述的进程通讯问题,早已有众多的研究和解决方案诞生于世,在这里就不一一赘述。
哲学家就餐问题则是对进程间通讯问题的一个发展,其有利于解决进程间由竞争
文档评论(0)