两章虽然篇幅不小,不过都是以介绍为主,这部分不是我读这本书的重点,看得比较粗略,笔记内容也很少,干脆合二为一。node
正如章节名,这章主要是关于多处理机、多计算机、虚拟化、分布式系统。因为非单机的多处理器系统和网络通讯关系密切,还讲了一些计算机网络的内容。编程
虽然非阻塞send()能够当即返回,而不是像阻塞版本那样可能会致使CPU空转,可是它有一个严重缺点:send所使用的缓冲区,直到发送工做完成后才能修改。若是系统不知道何时发送完成,那么这个缓冲区就不能肯定它从新变为可用的时机。数组
这个原理能够相似地适用于其余的一些非阻塞版本系统调用(不过recieve的状况简单些)。非阻塞系统调用并不是完美,这是我从前的误区。安全
固然,操做系统设计时能够回避这个问题,原书提到了三种:复制到内核由内核发送、发送后通知进程、缓冲区作只读标记并在写时复制。三者也有各自的缺陷,简单能够对应的归纳为:复制到内核开销、处理同步带来的编程困难、缓冲区管理复杂,具体的解释能够参考P557。网络
译:app
假设不能在多处理器同步问题中使用TSL指令(Test and Set Lock),而是提供了一个能够交换寄存器和存储器中一个字的SWP指令,能够用来处理多处理器同步问题吗?less
Answer:分布式
It is just as good as TSL . It is used by preloading a 1 into the register to be used. Then that register and the memory word are atomically swapped. After the instruction, the memory word is locked (i.e., has a value of 1). Its previous value is now contained in the register. If it was previously locked, the ide
word has not been changed and the caller must loop. If it was previously unlocked, it is now locked.oop
分析:
须要使用寄存器的某一个处理器将本身的一个寄存器预装载一个1,而后使用SWP交换存储器和寄存器中的内容,这个存储器字就至关于被锁上了,原先的值被送入了寄存器。若是以前已锁,那么就忙等;反之则此时上锁。
不过有个问题:若是这个存储器字初始值就是1,怎么办?按个人理解,这个存储器字是用来专门提供SWP模拟TSL功能的,“锁”的范围不限于这个单一的字。
译:
将图8-24中的H进程从节点2移至节点3,此时外部信息流量是多少?
分析:
这里的“移动”实际上是指下面的状况,将节点二、3之间的分界线变为红线:
须要注意的是,节点1和节点3有直接相连的部分。在这个图的基础上进行分析,不可贵出答案是27。
译:
为何以太网传输电缆有距离限制?
Answer:
Ethernet nodes must be able to detect collisions between packets, so the propagation delay between the two most widely separated nodes must be less
than the duration of the shortest packet to be sent. Otherwise the sender may fully transmit a packet and not detect a collision even though the packet suffers a collision close to the other end of the cable.
分析:
以太网须要冲突检测,于是两个最近节点的距离形成的最小包的传输延时必须小于包的生存时间。不然,即便两个临近节点也没法发现同一根电缆上冲突的存在。
在个人印象中,最大长度的缘由是信号在电缆上传输的衰减,与这个答案不是很相符,二者看上去都是有道理的。
1.习题18,第二问要求计算上额外的两次复制所占用的时间,而这个时间的计算方法并无在题目中给出,疑似遗漏。答案中这两次复制总时间是660ns。
原书为了说明隐写术的页面http://www.cs.vu.nl/~art/已经404了,习题16中的网页http://www.cs.vu.nl/ast我一样打不开。
译:
说出C编译器中一种经过改进能够大量减小安全漏洞的特征,为何不这样实现编译器呢?
Answer:
The compiler could insert code on all array references to do bounds checking.This feature would prevent buffer overflow attacks. It is not done because it would slow down all programs significantly. In addition, in C it is not illegal to declare an array of size 1 as a procedure parameter and then reference element 20, but clearly the actual array whose address has been passed had better have at least 20 elements.
答案:
能够改进编译器使其对全部数组引用作边界检查,这样缓冲区溢出攻击将被消除。不这样作的缘由是这将明显拖慢全部程序。而且,在C中生命一个大小为1的数组并引用它的20号元素是合法的,虽然这么作(引用第20个元素)最好仍是用一个至少有20个元素的数组。
译:
删除文件时,文件块被放回空闲块列表,但并无被清除。你认为让操做系统在释放以前先清除每一个文件块是好方法吗?从安全性和性能分别考虑,并解释效果。
Answer:
From a security point of view, it would be ideal. Used blocks sometimes are exposed, leaking valuable information. From a performance point of view,zeroing blocks wastes CPU time, thus degrading performance.
分析:
不清除有可能泄露重要信息,可是性能比较好;反之则下降了性能。注意答案中,结合上下文来理解,"ideal"应为"unideal"。
1.P353图9-17,F1对于用户B应标为"R"而非"A";
2.P357图9-11,为了与上下文一致,“可信计算基准”应为“可信计算基”;
3.P382“内存驻留病毒”第一段第三行,“中断变量”应为“中断向量”。