CPU總體架構
總線按照用途分為系統總線、存儲器總線、IO總線。
也可以這樣分類看:
ITCM對于單核使用,類似CPU Cache,可以提醒性能。
Hello world的一生
1:輸入源碼
2: 儲存到磁盤的hello.c
磁盤都是按照位元組存儲的,不同上下文中,可以按照不同含義解析。
文本檔案每個位元組按照ascii碼,同時包含\n\t<space>等(10進制)
Linux使用指令:
#十進制列印
od -Ax -tcu1 helloworld.c
#如果采用16進制,逐個位元組列印ASCII字元
od -Ax -tcx1 helloworld.c
3:編譯
gcc -o helloworld helloworld.c
後面再補充細節,這裡重點說明CPU架構
4:運作
結合CPU架構圖,執行如下:
1:shell是外殼程式,當鍵盤輸入helloworld,通過USB接口通過IO總線和系統總線,讀入到CPU的寄存器;CPU通過系統總線和存儲器總線寫入到主存。
2:當鍵盤輸入回車時,外殼程式直到輸入結束,通過一系列指令加載helloworld檔案,把目标檔案代碼和資料從磁盤複制到主存。
3:處理器執行代碼指令,把主存的Hello world加載到寄存器,再複制到顯示裝置,顯示再螢幕上。
緩存
從helloworld運作看,CPU執行很快,但是IO裝置和記憶體速度很慢,需要緩存。
執行時間如下:
1cycle=0.3納秒
L1 Data cache=1納秒
L2 Data cache=4納秒
RAM= 80+納秒
讀寫硬碟15+毫秒
網際網路通路 80毫秒
抽象
helloworld程式沒有直接通路鍵盤、寄存器、磁盤和主存,依靠是作業系統提供的服務。
作業系統可以看成應用軟體和硬體之間的一層軟體,屏蔽處理器、主存、IO裝置差異。
作業系統提供程序、虛拟記憶體VM和檔案,對應如下功能。
程序
程序是作業系統對正在運作程式的一種抽象。一個系統可以運作多個程序,好像可以獨立使用硬體(實質并發,即交錯執行)。多個程序是切換,上下文(寄存器、PC指針、緩存)切換。
Shell殼到helloworld程式切換,執行完後切回shell,采用上述流程。
虛拟記憶體
作業系統對于每個程序提供一個抽象,獨占使用記憶體,包含代碼段、資料段、共享庫、堆、棧、核心态等
檔案
檔案是對于I/O裝置的抽象,是一個位元組序列。
跨系統的網絡通訊
并發和并行
單處理器下多線程并發
超線程下不依賴資料的并行(PC和寄存器有多份,但是ALU隻有1份)
多處理器下多線程的并行(每個處理器獨立PC、寄存器和ALU)
流水線保證指令級并行
單指令多資料并行SIMD