計算機系統漫遊
1、併發和並行
併發:指一個同時具有多個活動的系統
並行:指的是用併發來使一個系統運行的更快。
2、計算機三個層次實現併發和並行
(1)線程級併發
(2)指令級並行
通過藉助於流水線(pipelining)技術,將執行一個指令所需要的活動劃分爲不同的步驟,將處理器的硬件組織成一系列的階段,每一個階段執行一個步驟,這些階段可以並性地操作。
(3)單指令、多數據並行
允許一條指令產生多個可以並行執行的操作
3、抽象概念很核心
抽象使人不需要關注計算機底層的硬件和操作系統的複雜性。文件是對IO設備的抽象表示,虛擬內存是對主存和磁盤IO設備的抽象表示,進程是對處理器、主存和IO設備的抽象表示。
4、局部性原理
包括時間局部性和空間局部性,如果寫的代碼能夠符合局部性原理,則執行效率也能提升不少,下面給一個體現空間局部性的例子。
寫代碼的時候,很多時候優化措施就是利用了局部性原理,只是沒有明確地用這個概念來說,比如加緩存就是利用了局部性原理。
public class SolutionTest {
public static void main(String[] args) {
int size = 10000;
int[][] arr = new int[size][size];
int sum = 0;
long start = System.currentTimeMillis();
for(int i = 0; i < size; i++) {
for(int j = 0; j < size; j++) {
sum += arr[i][j];
}
}
// 按行遍歷二維數組花費110ms
System.out.println((System.currentTimeMillis() - start));
sum = 0;
start = System.currentTimeMillis();
for(int i = 0; i < size; i++) {
for(int j = 0; j < size; j++) {
sum += arr[j][i];
}
}
// 按列遍歷花費實現2100ms
System.out.println((System.currentTimeMillis() - start));
}
}
手動跑上面的程序,可見按行遍歷的時間明顯比按列遍歷花費的時間少的多。因爲對於多維數組,在內存中數組是按行順序存儲的,按行遍歷明顯符合空間局部性。
5、隨機訪問存儲器
(1)SRAM(靜態隨機訪問存儲器)
常用與計算機的高速緩存部分,是非易失性的存儲器,只要有點,它就會永遠保持它的值。
(2)DRAM(動態隨機訪問存儲器)
易失性,數據需要週期性的通過讀出,重寫來刷新內存的每一位,SRAM單元比DRA單元需要更多的晶體管。
(3)增強型的DRAM
- 快頁模式DRAM(Fast Page Mode DRAM,FPM DRAM)
對同一行的連續訪問可以直接從行緩存區得到服務 - 擴展數據輸出DRAM(Extended Data Out DRAM, EDO DRAM)
和FPM DRAM類似,只是讓CAS信號在時間上更緊密些 - 同步DRAM(Synchronous DRAM, SDRAM)
- 雙倍數據速率同步DRAM(Double Data-Rate Synchronous DRAM, DDR SDRAM)
是對SDRAM的一種增強,通過使用兩個時鐘沿作爲控制信號,從而使DRAM的速度翻倍,後面還有DDR、DDR2、DDR3、DDR4等(用提高有效帶寬的很小的預取緩存區的大小來劃分的)。
6、磁盤存儲
(1)磁盤構造
- 盤片
- 表面(每個盤片有兩個表面)
- 磁道(每個表面上有非常多的磁道)
- 扇區(每個磁道又可以劃分爲非常多的扇區)
每個磁道上的扇區數是相同的,而每個扇區數存放的位數也是相同的,這樣計算總的存儲非常方便