|
有些基礎不夠深厚 遣詞用句也不是很精確
4 O$ o' r' r) R. }& K7 X$ g$ |以下試圖以自己的體認和觀點 以簡單的辭彙$ A h% E, t/ f, Z. y$ A; Y5 I
去解釋一些process與系統演進的方式3 B/ E# M+ {" y/ H2 _
如果有誤或是清楚的地方 歡迎大家討論" c$ L9 U, M+ U( u
( }8 f+ t- j! ?$ J& v+ ~6 {[本文開始]& \' `, @9 a% E1 j2 R
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候$ {1 R3 W; |4 P6 a9 N
常常會被一下子多出來的專有名詞搞混
# |3 j7 x; z( n% a, R/ ]像是DMA, memory, cache, mmu, virtual address, physical address 等等# k* h9 `2 z' N4 {
尤其大家一開始接觸電腦都是已經發展很久的x86系統+ x9 Z7 V9 R' \/ N0 ^+ W& }$ q
即使有單晶片系統的實驗課程# @3 L m) \% O. W7 s( o
也很難將單晶片的經驗
$ Y& I" p1 M' M/ @4 a2 m: o4 {運用到x86或是已經較為複雜的CPU系統上
9 M# |0 e9 p4 Y2 j& z& p# i
0 T( S9 u, p9 F" X% Q因為CPU上頭又開始加入了越來越複雜的作業系統. ]) k* j+ j* Y! r" } u/ D. i
像是作業系統常提到的kernel mode, user mode' x0 I4 V* F' R8 a& Q6 S! S& f" c
常常跟上述的專有名詞physical address or virtural address交互使用
$ U; i& u4 ]- M) v3 s3 [$ w* x例如刻板印象的『作業系統處於kernel mode時,使用physical address』+ [- P, I& n Z# O2 R
經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
1 t# [- e2 r1 D# f$ ~" ~" r- {0 B: W3 m8 `$ L
那應該怎麼簡單來看待一個系統?# h4 w8 `1 g$ X! L8 Z
) b6 l1 w0 z t3 m
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
( i4 | `% S5 U/ b0 G/ ^他是用來處理各種『資料』
+ T5 E% D, x5 Z# T, e6 J& J( a: A& J1 A2 {" C
那麼這些資料又放在哪邊?他是如何去存取這些資料?4 y/ s a: h( q% [( _
2 s5 }% i) ~6 u5 z) m/ V通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
* u( a! c' B( X" X6 ~( [
1 v- o7 z0 O+ G) v1 ]4 Z! b到目前為止,我們得到一個簡單的系統 CPU + bus + memory
8 P ~, _5 O, P' R& y
: k! J$ c( t1 j5 n: K接著,我們用兩個角度去看這個簡單系統的發展. [* \3 u% g1 o( Z) R. S6 U* m
1. 硬體加速
8 I K4 l7 i# P5 P; ?1 r6 q2. 作業系統' v9 F5 u8 p1 J9 e' O, r$ o$ E
4 \/ y( W( N6 c- r5 k. W5 y. X我們先從硬體加速的觀點來看這個系統如何改進:" \3 F; V% S& e0 x* }5 j& i1 v
0 y% Q$ J }7 E' X& u; F
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)7 `9 K4 G0 Z" k @, Q
放在某個地方,然後請你設計好的加速硬體去處理這些資料
' E. P E( e2 {9 [可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。6 q/ L/ O% k7 r5 i! c! L
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。* Z2 w2 L N" g4 J
- n7 B2 i& S& O+ r8 Y5 W
CPU + arbiter bus + memory + DMA
& ~9 Z2 l5 ~6 j1 n& o
; I" ?9 h U. }# Y: _6 ?: W接著我們從作業系統的角度來看:
" U) `) W8 {1 c
2 y5 G1 }$ `1 x% P一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
: S+ r/ K. P! I) L: S0 b* i9 Y, v2 m& M. j4 J
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
b' S7 k7 r+ C9 [' `; Q1 w8 \4 h ` G4 a$ s
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。1 T% I+ k; z% ^1 Y0 z' v, V) Q
/ U0 B7 N1 O/ A) Z& t' }2 z所以我們的系統變成了4 B: K: G' W/ g9 u, H
, J/ f' Z$ ]" t/ n/ T
multi-mode CPU + MPU + arbiter bus + memory + DMA# S' ?% ]- h4 Z8 i2 C3 m
1 X, H5 }, Z- S! s% a1 Y7 J1 w' z* k因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|