|
有些基礎不夠深厚 遣詞用句也不是很精確
1 y- Y# J* M6 W: p, Y1 G8 e+ z以下試圖以自己的體認和觀點 以簡單的辭彙; n/ B$ D/ g5 f4 a: X ?6 }
去解釋一些process與系統演進的方式
[& D5 @, B7 R) C2 m0 ^如果有誤或是清楚的地方 歡迎大家討論' E+ J o. [8 o- Y
# c2 Q. l0 C6 `! ?* K( c+ x
[本文開始]* G# M7 Z( [( O! O9 T m; {
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候$ F% `- d2 n8 M" ?
常常會被一下子多出來的專有名詞搞混
4 r3 X6 n7 S) h1 u% t2 N像是DMA, memory, cache, mmu, virtual address, physical address 等等6 Q6 g6 z9 F+ a& z
尤其大家一開始接觸電腦都是已經發展很久的x86系統
7 K$ s) O A: b" q- H' q即使有單晶片系統的實驗課程
+ q* q {5 B# V& ?; E也很難將單晶片的經驗
" [& |6 c- ?" _5 o9 F; T' I運用到x86或是已經較為複雜的CPU系統上$ _+ x; n! V$ B& V) S" i( `$ F) s
2 z5 `- V0 O. X4 E8 q
因為CPU上頭又開始加入了越來越複雜的作業系統
& \2 o4 G2 L3 g像是作業系統常提到的kernel mode, user mode- G |/ e6 l9 J
常常跟上述的專有名詞physical address or virtural address交互使用
/ r) G6 I& o/ _2 F$ K; S( r例如刻板印象的『作業系統處於kernel mode時,使用physical address』- G/ A5 h# G" ?0 \: j7 m4 I: M
經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
1 ^) M# ^7 j& d% U) M: ^! ~ b+ Y: A! i+ w, |5 U9 s% D
那應該怎麼簡單來看待一個系統?
9 u& Z$ N' P0 i! a, `, e6 i) h8 S
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』& r4 ~" W+ x8 J$ e3 h7 s
他是用來處理各種『資料』
* a0 ?7 w( K# ~+ d% @+ C8 C; ~' X, T3 s' o1 q% F
那麼這些資料又放在哪邊?他是如何去存取這些資料?
* i; B* n+ a- j4 n7 X" o
6 R1 a- k: |8 N$ y+ F- q通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory0 W' B# y* V& ^7 f, `
: K9 o: i+ W+ V! s到目前為止,我們得到一個簡單的系統 CPU + bus + memory
; D! X" v1 a# g) O
" d# l3 H9 P! p) N接著,我們用兩個角度去看這個簡單系統的發展) h" p, N, Y4 j9 A8 q" X* D
1. 硬體加速8 }' `- L9 {) Y! R* m3 r+ s
2. 作業系統
/ c% w# H, q) C% g% m
) a- A4 M) D+ n3 v1 V9 J7 V7 {我們先從硬體加速的觀點來看這個系統如何改進: x7 n) t( G8 ?9 i3 l3 Y
! m6 ^% z9 Z- l* a j首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
) Q3 T9 `5 q5 T0 ]- P放在某個地方,然後請你設計好的加速硬體去處理這些資料5 |/ ]: m' M6 ~. n. D9 v& E5 G
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。; P# |. a- }# v/ y8 ^, N ]
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。6 v& Q7 @, r- Q" Y) E
5 f) s3 Q( v5 q2 a9 g) {& kCPU + arbiter bus + memory + DMA0 D0 w" w4 K9 U
- Z1 c' A! R, r& }* }接著我們從作業系統的角度來看:
* Y+ v* e* X# _ X' k; N: c( f
. t8 q* z0 U8 P一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。6 N, x1 x5 f. j0 h' K( M. b
9 M* d J6 w8 a
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。5 z, x+ y; ]$ g4 w, g# t
% V: y! r1 P3 G. U! m
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
* F9 Y* r; j2 c7 I# C% b
" s) `" F& P: M所以我們的系統變成了
. K2 Q+ z" r" Q. [$ s* J& M$ l7 C) v% W
multi-mode CPU + MPU + arbiter bus + memory + DMA
1 v- l% R$ L* f
/ O8 H( q: l6 V) t$ t因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|