|
有些基礎不夠深厚 遣詞用句也不是很精確! W0 }. R4 E$ F7 X: [
以下試圖以自己的體認和觀點 以簡單的辭彙
6 x. P4 c2 e! B) j" g8 A去解釋一些process與系統演進的方式
; C% v, a, V$ m2 I9 h( r如果有誤或是清楚的地方 歡迎大家討論
. a1 T) A* [% U
7 }/ L/ t9 x& ^. f: N' F2 v0 k[本文開始]. w: o# U2 Y& t
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候& V/ l2 Z3 k5 K2 U, f9 x
常常會被一下子多出來的專有名詞搞混
: z2 B) i, P& d像是DMA, memory, cache, mmu, virtual address, physical address 等等
( k3 [' ] A+ [) P尤其大家一開始接觸電腦都是已經發展很久的x86系統, D. C* L( N* x
即使有單晶片系統的實驗課程
8 f4 c4 f2 e" Z7 J. N也很難將單晶片的經驗8 U( `: {7 h& l! ?+ a+ `: }
運用到x86或是已經較為複雜的CPU系統上
6 ]1 C6 J+ i% \* T6 w \4 \9 C$ m, }, P) O, v V
因為CPU上頭又開始加入了越來越複雜的作業系統
1 t, e* H2 B$ q像是作業系統常提到的kernel mode, user mode
9 ~/ }$ r; L% m) W常常跟上述的專有名詞physical address or virtural address交互使用
. S3 a! L! w( l' N. ^' |例如刻板印象的『作業系統處於kernel mode時,使用physical address』
/ M* P* I5 t3 E4 s3 |. H8 E: i經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問! M& [6 J* Q2 ?. ~, {, d+ m2 N
: p7 U5 H0 E' E; {. J @: S那應該怎麼簡單來看待一個系統?
3 c8 I$ n& d% B; }; F+ H/ O
6 Y0 @9 I' d4 Z3 d2 ?首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』( S- B9 |. S+ C8 n" P
他是用來處理各種『資料』& h" t! ?5 O- }# J$ `1 b
{6 Y: Q4 o% C4 y
那麼這些資料又放在哪邊?他是如何去存取這些資料?0 v C; g9 r3 ^
4 ?0 D; g4 X/ p通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
* }8 B; x6 z G" N. _7 \5 ^6 V* J7 K. D8 ?
到目前為止,我們得到一個簡單的系統 CPU + bus + memory: U( f, W8 U' Z% v0 }! `1 h# J
, i7 \6 f( U' W
接著,我們用兩個角度去看這個簡單系統的發展
3 F/ i% J8 I" |6 Q4 X5 m+ G0 `1. 硬體加速3 \. d+ k4 z' A" d0 M/ L- L
2. 作業系統
& A7 H, a- A% N" u* ~4 z! N" b
+ V1 i! q. Y- P- X! k6 k; _我們先從硬體加速的觀點來看這個系統如何改進:2 B2 o! J: n g0 E7 o- V1 W) \/ F4 x
/ ?% o# \ v2 U) ^0 s$ q
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
6 o( y6 ?+ Y, h7 [$ d/ L放在某個地方,然後請你設計好的加速硬體去處理這些資料1 `+ W r3 P$ s7 u4 U2 T& f4 b" v
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。0 U) v. j9 A9 B1 P$ ^' e
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。- w% O$ N( }4 ^+ }+ }/ M" a
+ n \+ D% a# T3 b$ K
CPU + arbiter bus + memory + DMA
, c5 n: P. }) s! r+ d3 B9 B& p( Q j4 p: O" Y1 z9 W/ ~+ a
接著我們從作業系統的角度來看:
- [ K4 f2 I1 D/ L9 p7 ]" J5 l3 X# P% ?9 G2 z9 R4 Y
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。$ W7 M+ } p: Y( ]. w, o7 P, p- Z
w7 X/ t! m. Q% o5 [& g例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
1 J" t0 B" {. w- D) J2 @; K+ V7 {% b5 M: a6 b* h
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
5 {. j0 }# e" K. Q' c
4 n* s7 P! q+ j8 L8 _所以我們的系統變成了8 `- W( j: G+ U# a# s ]# u4 e# v' |
. E D% e! O) R! S, G2 r- `0 Hmulti-mode CPU + MPU + arbiter bus + memory + DMA `9 I+ B2 W8 q5 p2 J
) @; S: k* u h+ i$ ]& C4 |因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|