|
有些基礎不夠深厚 遣詞用句也不是很精確. z+ ?) k1 {' c# |* c+ I3 l p
以下試圖以自己的體認和觀點 以簡單的辭彙$ F" j% Q: _( d5 w( R, z
去解釋一些process與系統演進的方式2 n8 P$ d x7 Y9 v* s* z
如果有誤或是清楚的地方 歡迎大家討論
' v4 e ~; d+ [8 ^1 t, H
' Y. \# |# k+ G0 C2 a6 J[本文開始]
4 p- d6 d& ~: z- K4 k9 E在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候8 i& @" Q; p7 h$ k
常常會被一下子多出來的專有名詞搞混3 X* _8 I5 ^0 w$ \
像是DMA, memory, cache, mmu, virtual address, physical address 等等, k$ I2 s& m+ n% X1 z
尤其大家一開始接觸電腦都是已經發展很久的x86系統8 e( h+ {2 |, P! G) p
即使有單晶片系統的實驗課程$ N; c5 \, g) M7 w2 A
也很難將單晶片的經驗- d$ g4 x* I! v) u1 T: e
運用到x86或是已經較為複雜的CPU系統上4 a, J P8 m5 W* M7 X) N! W! F# r
5 T* N {6 G" J; D- B! u( {3 w因為CPU上頭又開始加入了越來越複雜的作業系統) x0 J/ B# m; e5 B& B
像是作業系統常提到的kernel mode, user mode
) y2 H; Z2 J' E- M6 U% I- F常常跟上述的專有名詞physical address or virtural address交互使用( p3 M" ^" p% M1 }1 B; B( z
例如刻板印象的『作業系統處於kernel mode時,使用physical address』
% m* W- g, q& N經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問" h6 q- d" f' u3 c+ J% w7 p
0 z- Q# c6 C: w, }8 T
那應該怎麼簡單來看待一個系統?% w& \. m5 k4 F/ v- [6 ~! L
) M: Z* ]+ @' O
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』2 N6 s- ~' |4 o
他是用來處理各種『資料』
8 h [' h4 }8 T1 [/ W6 }( @: I, b) e# Y' a
那麼這些資料又放在哪邊?他是如何去存取這些資料?2 l* p* o1 Q0 D
/ e/ v" \( U: s
通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
; e$ A4 J2 w( P; X O d
" b" E H5 h! [# T* }' w到目前為止,我們得到一個簡單的系統 CPU + bus + memory5 J4 `; G! O* f) b
: j% I& _& t7 M4 `: t接著,我們用兩個角度去看這個簡單系統的發展 `$ u# N2 f+ q
1. 硬體加速
; b6 {2 | p5 b; ~) h t2. 作業系統% w3 ?$ b# L# `7 p& t
3 F: [5 n d% u' N
我們先從硬體加速的觀點來看這個系統如何改進:2 h$ `" e4 `/ Q; v3 W) V
& v& F6 v' c* W3 [8 D3 W; d+ Q
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)/ v3 ^. y2 T. N* k$ N
放在某個地方,然後請你設計好的加速硬體去處理這些資料
0 s/ W8 k, w' f8 a2 i2 I1 r$ f可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
# c. A$ j+ S6 t這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。
, G, J& E* f( [& s
7 Y8 I* `% F- Z! ^7 ZCPU + arbiter bus + memory + DMA! T" L4 s m. y2 \
' J u. ? P! d8 C
接著我們從作業系統的角度來看:6 L& m* T7 N7 |% D0 |3 b
; }( p$ m& R. U
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
# R4 B$ u6 R8 z- c: o6 s3 P" c/ k, l" R7 @, ^0 ^$ o3 _
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。4 k. M" o- F9 {
2 p. v! }- m0 ^7 V6 R% [9 A, _到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
7 H( J( \+ G8 }2 W; Y+ E. w" }0 g6 P) V: W E% f3 W
所以我們的系統變成了
3 _2 F8 U6 J- Z, i0 k2 K) M$ Q& h0 Q% ^9 _% H# m
multi-mode CPU + MPU + arbiter bus + memory + DMA
5 n/ a2 I0 e( p; g, T0 u% ^
6 G' _' Q; @; U* K5 u# f因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|