1、“.....最后,还包含了几个更特殊的头文件。其中有行,它被核心和文件系统用来定义设备以及访问从程序传入系统的参数。另个是行,它定义了若干结构,这些结构用来实现不同语言所需的字符集对应的特殊键盘布局。它也被那些生成和加载这些表格的程序使用。这里的些文件,如行只被核心使用,而不被文件系统或内存管理器使用。对于个支持额外的设备的实现,这里有另外些类似的文件,它们分别支持其他的设备。这些设备在该目录下的位置需要解释下。理想情况下,所有的用户程序应该仅仅通过操作系统来访问设备,这些支持外部设备的文件应当放在下。但是系统管理的实际情况要求,些用户命令能访问系统级的结构,例如对硬盘进行分区的命令......”。
2、“.....我们将这些特殊头文件放在目录树下。是这里讨论的最后个特殊头文件目录,它下面有两个文件包含与系列机相关的信息。个是,它被软盘系统任务使用。尽管该任务属于标准的版本,但本书不详细讨论其源代码,因为它和硬盘任务很类似。另个文件是行,它定义了兼容机上使用的硬盘分区表和相关通过这种方式,系统中总的消息数保持不变,所以消息可以存放在预知数量的内存中。如果生产者的速度比消费者快,则所有的消息最终都将被填满,于是生产者将阻塞以等待消费者取用后返回条空消息。如果消费者速度快,则正好相反所有的消息均为空,等待生产者来填充它们,消费者阻塞以等待条填充过的消息。缓冲区中的槽数消息缓冲区产生些数据放入缓冲区......”。
3、“.....向消费者发送数据项,发送条空消息,收到条包含数据的消息,从消息中析取数据,回送空消息作为应答使用数据项进行操作图用条消息的生产者消费者进程。消息传递可以有许多变体。对于初学者,我们来看如何对消息编址。种方法是为每个进程分配个唯的地址,按进程为消息指定地址。另种方法是引入种新的数据结构,称作信箱。个信箱就是个用来对定数量的消息进行缓冲的地方,典型的情况是消息的数量在信箱创建时确定。当使用信箱时,和调用中的地址参数使用信箱,而不是进程。当个进程试图向个满的信箱发消息时,它将被挂起,直至信箱内有消息被取走而为新消息腾出空间。对于生产者消费者问题,生产者和消费者均应创建足够容纳条消息的信箱......”。
4、“.....消费者则向生产者信箱发送空消息。当使用信箱时,缓冲机制是很清楚的目标信箱容纳那些被发送但尚未被目标进程接收的消息。使用信箱的另种极端情况是彻底去掉缓冲。采用这种方法时,如果在之前执行,则发送进程被阻塞,直到发生。执行时消息可以直接从发送者拷贝到接收者,不用任何中间缓冲。类似地,如果先被执行,则接收者阻塞直到发生。这种策略常被称为会合原则。与带有缓冲的消息方案相比,这种方案实现起来更容易些,但却降低了灵活性,因为发送者和接收者定要以步步紧接的方式运行。在及中用户进程间的通信采用管道,它与信箱在效果上等价......”。
5、“.....换言之,如果个进程向管道写入条字节的消息,而另个进程从管道中读取个字节,则读进程将次性地获得这所有条消息。而在个真正的消息系统中,每个操作将只返回条消息。当然,如果进程能够达成致总是从管道中读写固定大小的消息,或者每条消息都以个特殊字符如换行符结束,则不会有任何问题。构成操作系统的进程之间使用消息大小固定的真正的消息机制进行通信。经典问题操作系统文化中有许多被广为讨论和分析的有趣的问题。以下几节我们将讨论三个较为著名的问题。哲学家进餐问题在年,提出并解决了个他称之为哲学家进餐的同步问题。从那时起,每个发明新的同步原语的人都希望通过解决哲学家就餐问题来展示其同步原语的精妙之处......”。
6、“.....每个哲学家面前都有碟通心面,由于面条很滑,所以要两把叉子才能夹住。相邻两个碟子之间有把叉子,餐桌如图所示。图哲学家就餐图。哲学家的生活包括两种活动即吃饭和思考这只是种抽象,即对本问题而言其他活动都无关紧要。当个哲学家觉得饿时,他就试图分两次去取他左边和右边的叉子,每次拿把,但不分次序。如果成功地获得了两把叉子,他就开始吃饭,吃完以后放下叉子继续思考。这里的问题就是为每个哲学家写段程序来描述其行为,要求不能死锁。要求拿两把叉子是人为规定的,我们也可以将意大利面条换成中国菜,用米饭代替通心面,用筷子代替叉子。图给出了最浅显的解法。过程将直等到所指定的叉子可用,然后将其取用。不幸的是......”。
7、“.....设想所有五位哲学家都同时拿起左面的叉子,则他们都拿不到右面的叉子,于是发生死锁。哲学家数目哲学家号从到号哲学家正在思考取左面叉子取右面叉子为取余吃面放回左面叉子放回右面叉子图哲学家进餐问题的种不正确解法。我们可以将程序修改下,规定在拿到左叉后,先检查右面的叉子是否可用。如果不可用,则先放下左叉,等段时间再重复整个过程。但这种解法也是的,尽管与前种的原因不同。可能在个瞬间,所有的哲学家都同时启动这个算法,拿起左叉,看到右叉不可用,又都放下左叉,等会儿,又同时拿起左叉。如此这样永远重复下去。对于这种情况,即所有的程序都在运行,但却无法取得进展,就称为饥饿......”。
8、“.....而不是等待相同的时间,则发生上述锁步的机会就很小了。这种想法是对的,但在些应用中人们希望种完全正确的方案,它不能因为串靠不住的随机数字而失效想想核电站中的安全控制系统。对图中的算法可进行下列改进,它既不会发生死锁又不会发生饥饿使用个二进制信号量对五个函数之后的语句进行保护。在哲学家开始拿叉子之前,先对信号量执行。在放回叉子后,再对执行。从理论上讲,这种解法是可行的。但从实际角度来看,这里有性能上的局限同时刻只能有位哲学家进餐。而五把叉子实际上允许两位哲学家同时进餐。图中的解法不仅正确,而且对于任意位哲学家的情况都能获得最大的并行度......”。
9、“.....个哲学家只有在两个邻居都不在进餐时才允许转移到进餐状态。第位哲学家的邻居由宏和定义,换言之,若为,则为,为。哲学家数目的左邻号码的右邻号码哲学家正在思考哲学家想取得叉子哲学家正在吃面信号量是个特殊的整型变量记录每个人状态的数组临界区互斥每个哲学家个信号量哲学家号码,从到无限循环哲学家正在思考需要两只叉子,或者阻塞进餐把两把叉子同时放回桌子哲学家号码从到进入临界区记录下哲学家饥饿的事实试图得到两只叉子离开临界区如果得不到叉子就阻塞哲学家号码从到进入临界区哲学家进餐结束看下左邻居现在是否能进餐看下右邻居现在是否能进餐离开临界区哲学家号码从到图个哲学家就餐问题的解决方案......”。
1、手机端页面文档仅支持阅读 15 页,超过 15 页的文档需使用电脑才能全文阅读。
2、下载的内容跟在线预览是一致的,下载后除PDF外均可任意编辑、修改。
3、所有文档均不包含其他附件,文中所提的附件、附录,在线看不到的下载也不会有。