预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

6.16管程的signal操作和信号量的signal操作有什么不同?管程的signal操作在以下情况下是不能继续进行的:当执行signal操作并且无等待线程时那么系统会忽略signal操作认为signal操作没有发生过。如果随后执行wait操作那么相关的线程就会被阻塞。然后在信号量中即使没有等待线程每个signal操作都会是相应的信号量值增加。接下来的等待操作因为之前的信号量值的增加而马上成功进行。6.17假设signal语句只能作为一个管程中的最后一条语句出现可以怎样简化6.7节所描述的实现?如果signal语句作为最后一条语句出现那么锁会使发出信号的进程转化成接受信号的进程。否则发出信号的进程将解锁并且接受信号的进程则需要和其他进程共同操作获得锁从而使操作继续下去。6.21假设将管程中的wait和signal操作替换成一个单一的构件await(B)这里B是一个普通的布尔表达式进程执行直到B变成真用这种方法写一个管程实现读者一作者问题。解释为什么一般来说这种结构实现的效率不高。要使这种实现达到高效率需要对await语句加上哪些限制?(提示限制B的一般性参见Kessels[1977])读者一作者问题可以进行以下修改修改中产生了await声明:读者可以执行“await(activewriters==0&&waitingwriters==0廉确保在进犬临界区域时没有就绪的作者和等待的作者。作者可以执行“await(activewriters==0&&activereaders==0)来确保互斥。在signal操作后系统检查满足等待条件满足的等待线程检查其中被唤醒的等待线程。这个要求相当复杂并且可能需要用到交互的编译器来评估在不同时间点下的条件。可以通过限制布尔条件使布尔变量和其他部分分开作为独立的程序变量(仅仅用来检查是否相等的一个静态值)。在这种情况下布尔条件可以传达给运行时系统该系统可以执行检查每一个它所需要的时间以确定哪些线程被唤醒。6.23为什么SolarisLinux和Windows2000都使用白旋锁作为多处理器系统的同步机制而不作为单处理器系统的同步机制?SolarisLinux和Windows2000中只有在多处理器系统才能使用白旋锁作为一个同步机制。白旋锁不适合单处理器的系统因为打破了这一进程的白旋锁只有通过执行不同的进程才可以得到。如果这一进程不会放弃此处理器其他进程就无法设置第一个进程所要求的程序条件从而不能继续操作。在一个多处理器系统其他进程执行其他处理器从而修改程序状态从白旋锁中释放第一个进程。6.24在基于日志的系统中可以给事务提供支持在相应日志记录写到稳定存储之前不能允许真正地更新数据项。为什么这个限制是必需的?如果事务需要放弃那么更新的数据项的值应该要恢复到原来的值。这就需要原来值的数据在进行操作之前完成更新。6.25证明两段锁协议能确保冲突的串行执行。调度是指一个或多个事务的执行顺序。一个串行调度是指每个事务执行的原子调度。如果一个调度由两个不同的事务组成通过连续的操