|
有些基礎不夠深厚 遣詞用句也不是很精確" }! l: |8 O9 x* U- Z
以下試圖以自己的體認和觀點 以簡單的辭彙6 E: O% Q' c+ p) ]+ W
去解釋一些process與系統演進的方式5 `5 r! N' L8 y: M
如果有誤或是清楚的地方 歡迎大家討論0 n; G/ Z: h% C2 H$ T& q# N6 R
% G/ B- H/ U* l2 R9 `/ P. @! w
[本文開始]0 u8 |6 F! o" L
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
! V9 a# ] m3 l常常會被一下子多出來的專有名詞搞混
6 @6 ~, h5 d( K3 b" J2 u0 k+ Y; _; G像是DMA, memory, cache, mmu, virtual address, physical address 等等 L2 l+ U- r5 |
尤其大家一開始接觸電腦都是已經發展很久的x86系統
3 b' l; M2 }9 j6 Q$ |即使有單晶片系統的實驗課程% G' I3 R1 u$ l9 p) P! c) f
也很難將單晶片的經驗
- R" Q/ r9 v5 c- Q& X; b運用到x86或是已經較為複雜的CPU系統上
& ?1 T7 R/ u) v. _0 ^! R+ x$ p
. k9 D$ B; ?2 y" P% v因為CPU上頭又開始加入了越來越複雜的作業系統, j1 e+ J5 e6 s+ N# q) F
像是作業系統常提到的kernel mode, user mode
* W: g% r, }* I q) Z; a1 g常常跟上述的專有名詞physical address or virtural address交互使用
3 Y$ u* Y3 `9 g; y+ L' }例如刻板印象的『作業系統處於kernel mode時,使用physical address』
0 v7 F1 n y4 M7 `0 Q$ [2 V' E; k經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
. Q h1 T% d) S, E- \
; f: O- m6 J( P1 f那應該怎麼簡單來看待一個系統?) A- ?) Y1 K1 e/ ^
; \9 j% L5 u7 v- x
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』 e3 v. C7 q4 C" v( h% a
他是用來處理各種『資料』
3 c5 z. W9 D7 Y) B6 r! j
+ _7 _& N! \6 M1 h2 Q& @5 m) I那麼這些資料又放在哪邊?他是如何去存取這些資料?
0 v7 G! o0 G/ W& g! W, e" B k
2 l" w' @; a! d" w通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory: x: U2 b6 b" a; e7 E: X- n+ p
6 J% b5 n: b. S R7 ~* ?到目前為止,我們得到一個簡單的系統 CPU + bus + memory
% x% E8 i/ I0 C3 S' Z2 a: Z
. Y' I& P6 ^* }9 X3 v4 M$ }接著,我們用兩個角度去看這個簡單系統的發展
9 n# ^9 Q3 n' a1. 硬體加速7 \ R1 u, V6 z5 F; S
2. 作業系統# p7 J/ `9 w c# H
' \& E" S0 G D( r7 P: B1 g
我們先從硬體加速的觀點來看這個系統如何改進:* h1 W1 y& x7 `. |/ O: \, R
, c2 D, F* K- x) h6 l首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
3 P7 i4 z* ~8 g; {$ X放在某個地方,然後請你設計好的加速硬體去處理這些資料4 d6 f q& g5 {; A7 x! b
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
# h: f$ `: I. Z8 ~這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。 y# Z0 _, U* W! X' c" E. J. q- F
) ~# m( K: V8 j1 |CPU + arbiter bus + memory + DMA% [8 }6 T: d0 i7 w4 N2 n
& V7 Q, ^! C/ ?' |! k' ^! G接著我們從作業系統的角度來看:9 q6 m* W! i7 t- e/ L5 T
7 z8 n& ^7 Q/ t# I8 R8 _: R N一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
6 D% W+ k$ N. R" c4 V# A( g1 X, d9 X& g1 z8 S8 @0 m
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。1 w; k4 ]3 z! D
+ C6 E# t- F. f# Z2 X: Q到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
3 ~. n7 _, z( i$ P2 s! D" P; z
}6 d. @7 w4 @. d9 O* ^所以我們的系統變成了
& b. ]6 s; l& b. _! ~# e0 ?; e
" @( h0 l, W5 ?+ I9 O6 A7 Amulti-mode CPU + MPU + arbiter bus + memory + DMA
" w+ |- o" w- n! M
+ A) p8 G& S0 z1 C, q6 u% E因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|