|
有些基礎不夠深厚 遣詞用句也不是很精確
& Z5 L( \1 W g! l. o以下試圖以自己的體認和觀點 以簡單的辭彙* z! N* {% F8 w4 |% d
去解釋一些process與系統演進的方式, ~, ^; Y4 b. U2 y7 p/ Y' y+ t
如果有誤或是清楚的地方 歡迎大家討論
) w4 B l7 {9 ]" R
0 T! Q& j' X. ]7 H6 \5 z5 p$ Y[本文開始]
2 S/ o1 d# N7 u) h# T. G& k2 J" e5 Y在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候$ X) L) ]2 J) E- P
常常會被一下子多出來的專有名詞搞混
* h& J: }1 W0 s; Q+ c像是DMA, memory, cache, mmu, virtual address, physical address 等等
( e- H, W7 q6 T4 }& U* l U7 F" L7 {& Y尤其大家一開始接觸電腦都是已經發展很久的x86系統" e# f0 s' L7 A9 @3 R- F, M1 S
即使有單晶片系統的實驗課程1 h8 U P/ d$ C1 v1 _4 [7 p
也很難將單晶片的經驗
7 d" L! t$ n2 R5 P運用到x86或是已經較為複雜的CPU系統上
2 l( s/ t/ h& [+ q( e8 p
" K+ h8 X" }4 r+ d) g6 @7 B因為CPU上頭又開始加入了越來越複雜的作業系統
, U; P4 X T, d$ t4 [像是作業系統常提到的kernel mode, user mode- P/ j) M8 D0 A. a6 ^
常常跟上述的專有名詞physical address or virtural address交互使用. d U9 V5 B+ l) J, ^# M8 {/ ^0 Q( Z
例如刻板印象的『作業系統處於kernel mode時,使用physical address』6 J' `6 _# c4 O
經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
, O( M- Q" m2 `1 s; F
4 Q$ X) _! I+ Q1 I那應該怎麼簡單來看待一個系統?! ? r, g- G1 U: K
" N" Z3 F1 O' K" i' K- \" i首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』4 H) f/ {2 g* A' T K- }
他是用來處理各種『資料』
# j, O# H1 Q' A9 A8 z$ S. a1 Y) t3 C& @, m3 [4 u' Z
那麼這些資料又放在哪邊?他是如何去存取這些資料?, h0 \* U. H# E5 w# \
( J9 a7 g- M" G$ M" [% N, J* ~
通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
& n# _9 ?5 x+ ^+ i2 V$ Z: D u/ T/ V& S4 u& e5 w5 f& b
到目前為止,我們得到一個簡單的系統 CPU + bus + memory8 _$ g) N) k) x o
. Z* K# I R$ w" o* d
接著,我們用兩個角度去看這個簡單系統的發展 ^( K: d. B1 @5 X0 Z5 z5 W2 t
1. 硬體加速# A: B2 B- D0 |( b
2. 作業系統
% g# ?3 z! Y' \; B: B; i
! P. E3 u# B/ j! {$ t/ N我們先從硬體加速的觀點來看這個系統如何改進:
. j1 X& U/ M( M# \# X% _* k9 _' w2 u/ S. i$ ]) d4 S/ J
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
/ H1 I$ G/ |$ _ Y放在某個地方,然後請你設計好的加速硬體去處理這些資料
* b K3 D" b$ W* T5 t可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
5 ^/ t. c! O- z+ [+ P這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。& j y2 N4 Z' ^* x1 j( ]
9 _/ y, p0 v$ ZCPU + arbiter bus + memory + DMA
( b9 z# P, U5 n2 N( j! o* @( a. h( S8 ?/ Z6 b- H; n
接著我們從作業系統的角度來看:6 H' I6 F; G0 d# [ _' Y) B8 ?3 D
4 b0 B! M8 M, r: H, b一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。' k% `5 @2 i- F3 T, [
3 Z# ~# c4 r) [: S. b
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
9 c- l9 F' O! I- @" g8 J4 T0 h3 Q6 J9 V" a; D5 L( Z, [
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
1 V" M7 ?/ K2 M, |" R, V# s
$ f7 v; J/ ? N, e0 q所以我們的系統變成了+ {) c8 S* t2 U6 W& K+ i& m
; D% W+ l I5 [# N: U0 j4 A; E4 B9 {multi-mode CPU + MPU + arbiter bus + memory + DMA$ v3 C# g! d! a8 ^; G3 X7 F
! L& y8 K g, w0 l2 x* a
因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|