|
有些基礎不夠深厚 遣詞用句也不是很精確' o: n' {$ U @* Y: n( P+ {0 V
以下試圖以自己的體認和觀點 以簡單的辭彙/ i3 a6 ^; V0 V! g& f
去解釋一些process與系統演進的方式+ _) d) ]- c: K9 Z' Y- d
如果有誤或是清楚的地方 歡迎大家討論# X) ^* m7 u0 H7 O; ~) a# W
- ^5 I+ O4 r. T u& `3 e[本文開始]: m0 K: n: d, F1 U5 V8 g
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
9 N- _' [0 Q# x3 T- \* N. w常常會被一下子多出來的專有名詞搞混
4 U0 O+ l! D. w+ k# ?5 I8 r: w8 O3 a像是DMA, memory, cache, mmu, virtual address, physical address 等等
# }, e( i( V1 i! w6 P( A尤其大家一開始接觸電腦都是已經發展很久的x86系統
; I. [ l% U" B% T7 }即使有單晶片系統的實驗課程
1 J* T# B+ r: b- V6 u( x. a也很難將單晶片的經驗
8 j7 {4 ^ l( D3 ?6 V+ Y/ H1 @運用到x86或是已經較為複雜的CPU系統上1 m7 a# o3 \' D& p2 R- Q5 ?
R d+ X5 t8 O" R/ b [
因為CPU上頭又開始加入了越來越複雜的作業系統
& |9 N/ S0 h, y* O像是作業系統常提到的kernel mode, user mode
8 R& A9 Q9 x" j% }% t& G常常跟上述的專有名詞physical address or virtural address交互使用+ b0 B* z+ `# B- _* \
例如刻板印象的『作業系統處於kernel mode時,使用physical address』
0 i/ g6 v* u* M& \經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問6 Z) D* U2 e+ Z* w# L# b5 I# w
# i9 P! e5 |1 B* L! h, H8 d* O* r那應該怎麼簡單來看待一個系統?7 l e6 s$ C# s& N5 G9 ^; h
3 `( z5 Y# |( w6 l
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
. g9 t( ?5 {( X3 t他是用來處理各種『資料』
2 `9 [& o+ @/ _. f4 ~% K5 u+ u: ?; J6 b$ Z* a% \! l1 M# ?- R
那麼這些資料又放在哪邊?他是如何去存取這些資料?# p- c6 c$ t1 {7 T! y0 _! d$ X+ o
! m+ w1 r! W0 P+ ]3 m! d
通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
l2 H1 w* a& h: Y1 c/ ^) @1 |" Y9 w/ g4 a3 J, B, [
到目前為止,我們得到一個簡單的系統 CPU + bus + memory
; h# q- t v! r- v+ E9 Z7 t( ?( R3 |' Y" Q$ v5 v- W9 J/ a
接著,我們用兩個角度去看這個簡單系統的發展3 T: Z7 L0 [& R+ F* q: F
1. 硬體加速2 p( ^. x) P. w2 ?/ W* n
2. 作業系統
9 \% k8 T7 s) B% _! ]$ _' m: r: T! u0 ]% \
我們先從硬體加速的觀點來看這個系統如何改進:
; _, y1 a! C6 C4 s# ^7 X! m: X/ m6 ?
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)" J* @1 a1 C% T+ E
放在某個地方,然後請你設計好的加速硬體去處理這些資料' F) M6 v5 X6 A2 F5 Y
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
9 \( n" x# K; m; K- p) u這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。
* x( e4 m) k, K) I$ c9 p% o; x* L- H" p5 ^0 u0 r% A5 J
CPU + arbiter bus + memory + DMA
: d/ ]! F+ S/ y" H% ^
/ E6 U* c* F% k' |接著我們從作業系統的角度來看:
) u z4 `* ?* e$ @! I5 e4 F) l/ `5 ?. E! Q# @
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
5 T" ^: {2 K& e* ]1 r0 x4 }' X0 ^. ]0 n* P3 ^. e
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。& b2 P" `: w4 `5 z
0 R' E7 K9 v4 s4 j& }
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
: C& {8 \, u6 B- M7 [
) w e! r, O. D$ W所以我們的系統變成了
! u* J j8 k3 g8 y& t7 x; ^ r$ Q1 `: x
multi-mode CPU + MPU + arbiter bus + memory + DMA
6 m0 }5 w+ @8 ?" S3 _6 s+ M3 Z0 o1 u( n/ l" s, e! R
因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|