|
有些基礎不夠深厚 遣詞用句也不是很精確
' [0 E& O! d$ y; m1 G: d. o' d以下試圖以自己的體認和觀點 以簡單的辭彙
. f3 _( m, o' H+ j2 q去解釋一些process與系統演進的方式0 u' Y- |0 d' X9 ]" Z0 y3 N& q6 l
如果有誤或是清楚的地方 歡迎大家討論
; k- f a7 b9 k6 @
9 @/ o- B$ p6 j# @, S& R% _# I[本文開始]
9 Y! r* d$ V/ }在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
( k3 ~ p; _% _* Y* E/ d$ Z, R常常會被一下子多出來的專有名詞搞混. U4 q8 E; W U& B$ r
像是DMA, memory, cache, mmu, virtual address, physical address 等等
7 w; v( k$ u" C/ J+ v5 t尤其大家一開始接觸電腦都是已經發展很久的x86系統9 ~& g$ l/ Y1 ]9 q3 g8 {- n: C
即使有單晶片系統的實驗課程
2 a H8 I$ [5 i( Z1 S7 d也很難將單晶片的經驗
& |! L% V8 D* @1 E( n運用到x86或是已經較為複雜的CPU系統上% U2 r: F' D1 q( z# q
' O/ U6 b9 A3 M( I- J; S- P
因為CPU上頭又開始加入了越來越複雜的作業系統
( o5 D/ T' {! j3 A! p( J) f& h像是作業系統常提到的kernel mode, user mode
/ l7 a& D( ?. ?2 @, @常常跟上述的專有名詞physical address or virtural address交互使用
3 y! _6 Q. _. [例如刻板印象的『作業系統處於kernel mode時,使用physical address』
{: |! X2 n1 s# x3 `, }6 x. C經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問" G5 }& Z: q, s2 V5 T1 \
+ `1 ^6 S2 d0 S; U) H0 V
那應該怎麼簡單來看待一個系統?; y6 s( p# Q( @
2 e- ]% d% o$ y$ }- k9 A首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
7 Y! H2 a9 R7 V他是用來處理各種『資料』9 p6 N, U7 w( V
8 H. \, h; H) P
那麼這些資料又放在哪邊?他是如何去存取這些資料?0 @$ P7 p1 b6 k: H; C
3 \! }6 F& y) w% H( Z s
通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory/ b" v; o9 S# p G4 _! y
8 ~: ?: A* v# O7 ], H% c
到目前為止,我們得到一個簡單的系統 CPU + bus + memory
% R2 v! T5 n! ^/ t6 t7 L7 u1 ?8 ^, }# h4 r5 \" l
接著,我們用兩個角度去看這個簡單系統的發展
4 f" i6 w+ f5 d$ F6 q1. 硬體加速& u- J) X6 I. r1 G$ k' E
2. 作業系統9 g) }3 v! t: j2 {7 j3 G# K" ?
" V! g# C8 r: t6 ^2 U# z
我們先從硬體加速的觀點來看這個系統如何改進:2 h5 ^- a& E: ]( z6 b
$ n& N# f' V- V& u: t' w' Y首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)6 E2 |5 i: _ q
放在某個地方,然後請你設計好的加速硬體去處理這些資料1 A3 l5 I/ k# V o+ t; F
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。1 B2 F6 f8 u' u& P; o6 n, o# w5 q+ r
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。
, p" k5 O% \ d: H ?9 V V
$ B7 l/ Y. @- n$ ?+ OCPU + arbiter bus + memory + DMA* ?" N- J4 I$ p9 r N5 j
" Y; K4 K# X# c
接著我們從作業系統的角度來看:
% }+ o7 W+ v& J9 b5 {% s1 [/ _
, X2 ^" B5 g+ u* g一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。" M- e8 g9 K" W( J8 }! h) ]1 n
& ~" X% p [; q% a5 [: c& D例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
: \: j+ |( d/ b) R/ ]4 C8 }) a& u4 S/ W
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。( b) S5 O ` R
0 g8 D1 V/ G8 S N. { K所以我們的系統變成了0 B8 V/ {. }; J- M
8 R# X6 A, Q( }+ d0 u6 d% Zmulti-mode CPU + MPU + arbiter bus + memory + DMA
- x0 E, v8 W4 f ]6 i% y, i1 Y6 Z( \5 Z2 g* l1 z* g B
因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|