|
有些基礎不夠深厚 遣詞用句也不是很精確
2 B% B2 |* t6 H以下試圖以自己的體認和觀點 以簡單的辭彙
+ F U* {4 R5 k去解釋一些process與系統演進的方式
5 `# [* s' C* L0 I' F如果有誤或是清楚的地方 歡迎大家討論
! I( `% `7 C' j7 B+ O
1 t- [! z! t2 z( }! V[本文開始]
. W3 z1 l5 e$ {$ e在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
( _# x7 O% H, o/ z& N常常會被一下子多出來的專有名詞搞混1 J1 F9 a( y+ t: {. l
像是DMA, memory, cache, mmu, virtual address, physical address 等等
& n: A& R/ }. i7 o5 s1 z8 x/ l尤其大家一開始接觸電腦都是已經發展很久的x86系統: l! B5 n2 b- d8 A( V
即使有單晶片系統的實驗課程6 ^6 i4 G, X1 Y }
也很難將單晶片的經驗
! w6 r3 T3 A: J3 n9 Z運用到x86或是已經較為複雜的CPU系統上$ ?- w% b& l# H) F) B6 k A J
8 V, r3 l4 ]9 u3 p- [2 Y8 W因為CPU上頭又開始加入了越來越複雜的作業系統% b6 B! [8 G+ h0 }# S. e
像是作業系統常提到的kernel mode, user mode* ?/ b5 P2 j7 H# x* z' i& E
常常跟上述的專有名詞physical address or virtural address交互使用% C1 `% X2 g8 U( @
例如刻板印象的『作業系統處於kernel mode時,使用physical address』$ L6 i8 Q2 P! \+ q. {7 l
經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
. E4 P. m# ]& x& A
7 i- W* k: c4 R4 ~那應該怎麼簡單來看待一個系統?
* F% Z) W: g2 X& \" ^+ T4 h( u, u7 q' A* F
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
% D9 W( p. f* K, W" I4 y他是用來處理各種『資料』
+ m8 L0 \* `5 ]4 u9 N: S1 l! h! x+ r1 i7 J
那麼這些資料又放在哪邊?他是如何去存取這些資料?$ b+ Z2 \5 @* P( J4 V8 e: y& E1 T
. ` ?& [3 }! Y6 ^: h9 |通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
' Z" q k) H4 ]2 o, ` R7 B
7 ~& c! @/ n6 a' H9 y( f到目前為止,我們得到一個簡單的系統 CPU + bus + memory% z6 J* E+ V( O) k* P0 y3 e
' [) N; w* ~0 ~! B _接著,我們用兩個角度去看這個簡單系統的發展
5 Z( h- C2 A1 f a1. 硬體加速
4 }% v, e7 N4 J* _- `- O% g2. 作業系統+ N y: w1 r. A) n
. X2 p s- A/ V" v我們先從硬體加速的觀點來看這個系統如何改進:" |8 ~) T5 T9 F7 @. X3 `# V2 V7 U
. U& w l" D' i u
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
" A9 J/ N( l( u% v放在某個地方,然後請你設計好的加速硬體去處理這些資料
' h+ Y, u; y8 l4 B" @$ f5 z/ a可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。; f5 n! B4 \* q+ ^. F6 J
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。
- l4 S4 A: x# q2 H3 c4 s
x2 l! x7 p. ]- R. |2 T: bCPU + arbiter bus + memory + DMA
! c9 e; ~5 v: p$ J6 g. G1 g8 s {
接著我們從作業系統的角度來看:. K9 n0 U7 I* i" b1 S: k/ d
" U6 y5 C# V$ Q1 u8 B7 o' p
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
! P4 [0 a0 `1 }* V" b0 R6 Q( d( ?+ M3 d6 w8 {
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
/ T! I$ H9 Q# y
* N# x' t* j: U, p3 g4 a到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
9 i$ w" p. R2 v
2 x2 f3 x R1 r' N所以我們的系統變成了
; W; q6 e) S1 r
8 B" q' [) \8 x, X' m) imulti-mode CPU + MPU + arbiter bus + memory + DMA
) C" H c2 k8 i% Z7 O
- u5 ~0 M' V6 X9 \因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|