共享有两种,这里的共享可以理解为复用,分为时间上的复用和空间上的复用,时间上的复用的一个典型的例子就是分时系统分时使用cpu,cpu将所有时间分成若干个段,每个进程使用一段时间,然后让出cpu,之后调度逻辑会挑选另外一个进程来使用cpu的接下来的时间段;空间上的复用的一个典型的例子就是早期的多道程序设计的内存管理机制,那个时候没有现在MMU的复杂逻辑,仅仅将物理内存分成若干等分或者不等分的空间段,然后分给每个进程一个,如果空间段比进程少就要涉及换入换出机制,这里先不涉及换入换出,如果有换入换出了就说明这个内存段在进程生命周期内并不是永久属于该进程的,这就导致了一定的时间复用,这个一会再说,不考虑交换的话,每个进程就可以在被分到的内存空间段中进行仅仅属于自己的编址逻辑,比如所有进程都将自己内存段的开始定位为逻辑地址0,然后顺序平坦编址。
更晚的时候的请求调页机制实际上是空间复用和时间复用的混合,某一个时刻是空间复用,但是在更长的时间段上看,一个内存空间段并不是永久的属于一个进程,这就是时间复用了。实际上请求调页的复杂性就在于它实现了公平性,在很细的粒度上实现了公平性,如果不是为了这种公平,完全没有必要这么复杂,原始的整个进程的换入换出已经很好了,只是那会造成很大的交换延迟,相反如果粒度过于细,还会造成抖动,因此请求调页机制在公平性和效率之间作了折中,这就是工作集机制,当然这只是理论,实际的操作系统内核实现中LRU的用法更加普遍些,并且lru链表加上两个阀值而不是一个阀值,有效地防止了抖动。
在现实生活中,时分复用和空分复用使用的也是很广泛的,毕竟理论就是来源于真实的世界的如果共享的是一个资源,那么就是空分复用,如果共享的是一个流程,那么就是时分复用,当然流水线也是一种提高效率的机制,它在一个流程内部分为了好几个流程,有效地调动了所有的流程,使得任何细微流程不至于空闲,流水线是为了防止部件空闲的,是一个细粒度的机制,然而问题是虽然部件不空闲了,但是数据却不再是一步到位了,而要从流水线的一节流到下一节,肯定影响了单品加工效率,这个怎么解决呢?这就是缓存的作用。
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274126