共享有兩種,這裡的共享可以了解為複用,分為時間上的複用和空間上的複用,時間上的複用的一個典型的例子就是分時系統分時使用cpu,cpu将所有時間分成若幹個段,每個程序使用一段時間,然後讓出cpu,之後排程邏輯會挑選另外一個程序來使用cpu的接下來的時間段;空間上的複用的一個典型的例子就是早期的多道程式設計的記憶體管理機制,那個時候沒有現在MMU的複雜邏輯,僅僅将實體記憶體分成若幹等分或者不等分的空間段,然後分給每個程序一個,如果空間段比程序少就要涉及換入換出機制,這裡先不涉及換入換出,如果有換入換出了就說明這個記憶體段在程序生命周期内并不是永久屬于該程序的,這就導緻了一定的時間複用,這個一會再說,不考慮交換的話,每個程序就可以在被分到的記憶體空間段中進行僅僅屬于自己的編址邏輯,比如所有程序都将自己記憶體段的開始定位為邏輯位址0,然後順序平坦編址。
更晚的時候的請求調頁機制實際上是空間複用和時間複用的混合,某一個時刻是空間複用,但是在更長的時間段上看,一個記憶體空間段并不是永久的屬于一個程序,這就是時間複用了。實際上請求調頁的複雜性就在于它實作了公平性,在很細的粒度上實作了公平性,如果不是為了這種公平,完全沒有必要這麼複雜,原始的整個程序的換入換出已經很好了,隻是那會造成很大的交換延遲,相反如果粒度過于細,還會造成抖動,是以請求調頁機制在公平性和效率之間作了折中,這就是工作集機制,當然這隻是理論,實際的作業系統核心實作中LRU的用法更加普遍些,并且lru連結清單加上兩個閥值而不是一個閥值,有效地防止了抖動。
在現實生活中,時分複用和空分複用使用的也是很廣泛的,畢竟理論就是來源于真實的世界的如果共享的是一個資源,那麼就是空分複用,如果共享的是一個流程,那麼就是時分複用,當然流水線也是一種提高效率的機制,它在一個流程内部分為了好幾個流程,有效地調動了所有的流程,使得任何細微流程不至于空閑,流水線是為了防止部件空閑的,是一個細粒度的機制,然而問題是雖然部件不空閑了,但是資料卻不再是一步到位了,而要從流水線的一節流到下一節,肯定影響了單品加工效率,這個怎麼解決呢?這就是緩存的作用。
本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274126