|
有些基礎不夠深厚 遣詞用句也不是很精確
# m. k! g/ l/ H以下試圖以自己的體認和觀點 以簡單的辭彙
7 e/ K9 r N1 X) E9 E- f3 e去解釋一些process與系統演進的方式) {2 h# j+ Y% ]4 o8 ]
如果有誤或是清楚的地方 歡迎大家討論3 E) f" w) y9 Y: [" P
* ^( L6 T+ G6 {* A/ s[本文開始]3 o6 W4 z6 F1 F
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
$ U6 Y. w2 m8 M' W0 V1 \' `常常會被一下子多出來的專有名詞搞混$ W- b. ]$ ]" e$ b2 `; S( B
像是DMA, memory, cache, mmu, virtual address, physical address 等等
' _" Z5 K# h. j+ ^" _5 X尤其大家一開始接觸電腦都是已經發展很久的x86系統+ M9 R' ^" E7 G. E9 w9 b, l
即使有單晶片系統的實驗課程# ^, o6 b: z4 t
也很難將單晶片的經驗
. d i/ f7 d& y2 {運用到x86或是已經較為複雜的CPU系統上
# M) x5 w0 X/ |2 ] B0 {! h2 e9 L" |( ]0 m# N) e2 U& Q! R K9 m$ a
因為CPU上頭又開始加入了越來越複雜的作業系統* a7 N4 L* |; X2 H9 s
像是作業系統常提到的kernel mode, user mode& P* T" n3 Y) M& e( f D( V
常常跟上述的專有名詞physical address or virtural address交互使用
$ T4 S* T$ t+ D" n+ z7 u5 d2 b% r例如刻板印象的『作業系統處於kernel mode時,使用physical address』. ^' i1 e+ ?5 D6 @' C+ t$ Y
經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問: F+ v/ n; U' X- w
9 a. L8 @3 C) s1 N9 y5 t# f那應該怎麼簡單來看待一個系統?/ ~' H$ d" d1 N& |
( K+ q% W% @7 C" H& B6 `, w
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
# Z |1 V% b; Y0 g* L他是用來處理各種『資料』* H6 l: E* ^9 `4 l9 v( ]" P
# L/ I& L3 W( m: P2 G- S
那麼這些資料又放在哪邊?他是如何去存取這些資料?9 e4 m& y# o: o; G/ u* U2 q( S
8 X: x7 X% |, z! m q, ~; v! C通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory$ Q. p9 r+ b, u4 j# }1 ]1 }; F' h
6 L: O, r0 U0 C1 [$ m' V( z到目前為止,我們得到一個簡單的系統 CPU + bus + memory+ f$ l6 N9 J* b( d& T) A2 x8 |7 A' J
! e. x* o8 w A' k$ Q, x
接著,我們用兩個角度去看這個簡單系統的發展5 T! q' Y, }5 h+ H2 \' |
1. 硬體加速 {( e9 y5 s& b
2. 作業系統
; \+ i7 w2 u2 f3 ~# a! r# ?/ Z8 @% `9 q3 W
我們先從硬體加速的觀點來看這個系統如何改進:' b' s7 ^ V( d( I/ D$ O: v
. N5 P8 B9 P; e d( V! u
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
8 R7 ?+ s# k/ o# Q& B2 \" `放在某個地方,然後請你設計好的加速硬體去處理這些資料. n$ p) L! q8 B' X: {2 j: k+ D
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。% G7 [! S/ k+ U7 f
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。
3 V0 W( [- r4 S* }( O: F
6 ^2 ?4 D: N- c+ b! n, {* SCPU + arbiter bus + memory + DMA
! e( h& e9 U$ j8 p1 X! h( N3 _' D3 L: I
接著我們從作業系統的角度來看:) y/ l) s- Y* [- X0 r( b
( v, ~! g1 ~# H4 `2 D
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
[4 |# ?7 _, R1 @& \! K8 i+ _2 ^+ B+ O5 B5 `+ {3 {
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
4 C* X+ o0 y, x {" i# r& ~
! j! A4 p# I% Z. j7 }到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。9 J& f/ |* p/ [3 v8 j4 V) z7 B
" e- t; @9 t& \1 N3 m, F所以我們的系統變成了
! d; ?* k/ @% [% I
; u8 v4 W7 a, D/ S* C/ pmulti-mode CPU + MPU + arbiter bus + memory + DMA- O3 K: _1 E* [2 L+ D, n
9 w2 c' r9 i* r: U
因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|