|
有些基礎不夠深厚 遣詞用句也不是很精確6 e' G$ K) {8 P( I4 }& n
以下試圖以自己的體認和觀點 以簡單的辭彙
" H+ a0 K9 v" ~+ _去解釋一些process與系統演進的方式
. h8 ?* G3 e0 [, w, z如果有誤或是清楚的地方 歡迎大家討論
, I7 G5 f9 P- t$ n+ Z: n% M# g ~7 _. W2 x7 s& ^# r. @
[本文開始]
3 z- t, u$ j* t& p5 q6 d在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
$ B; R5 J- Q& E' B, b常常會被一下子多出來的專有名詞搞混3 G& r; r& W4 U# [8 l$ B
像是DMA, memory, cache, mmu, virtual address, physical address 等等 o; v" X* X6 }" v+ ]5 }: X. F- N1 k
尤其大家一開始接觸電腦都是已經發展很久的x86系統9 D7 l" \6 v2 Z; [/ C7 Z/ D
即使有單晶片系統的實驗課程4 b# K$ c! ~5 @3 r; d1 G2 ~; ~! Q4 B
也很難將單晶片的經驗
# l9 W {3 ^. J2 U% k運用到x86或是已經較為複雜的CPU系統上! y$ s9 `. H V7 j* g
5 T! n4 x$ W( c4 a/ h! Z, c, X
因為CPU上頭又開始加入了越來越複雜的作業系統+ K6 O6 f; ?% `* M$ Z6 T
像是作業系統常提到的kernel mode, user mode
+ W6 E% i+ L/ V* @' l常常跟上述的專有名詞physical address or virtural address交互使用
/ W* h; ^9 }- W" q; m例如刻板印象的『作業系統處於kernel mode時,使用physical address』
, ~4 h6 x/ E8 F+ [經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問6 o0 n. w T( ~1 V: m/ S1 I. L" e
( }$ V5 l& ?9 M9 y, Z
那應該怎麼簡單來看待一個系統?3 w6 ?% r; | r" f2 Z, x
( g ?* Y, c( {1 U首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
+ l" z: L* [" W& `他是用來處理各種『資料』% p# g: D. b/ n) u/ e
6 B5 x$ e u0 v% H% I9 D那麼這些資料又放在哪邊?他是如何去存取這些資料?
0 v) G9 Z S3 A" [6 v9 D
, |3 j6 C, b1 _+ S0 j0 B通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory6 X1 i: R! b& a* u" w6 D: Q8 w; w% k
+ M( m! @' ]; Z
到目前為止,我們得到一個簡單的系統 CPU + bus + memory4 K. ] @! O& B" H9 I
; i0 c, Z- Z- x) j8 `8 Y3 ~' U. m
接著,我們用兩個角度去看這個簡單系統的發展; b9 B- n" _! o* T2 P/ z; b! ~8 V
1. 硬體加速
4 s* g2 Y$ ]2 D- R3 I( y8 U& \6 K2. 作業系統$ x/ ?2 M' c6 E0 J$ v' P. q7 i
7 y0 V2 y1 Q, I+ `- v3 V# `1 n
我們先從硬體加速的觀點來看這個系統如何改進:
8 v; B3 O) @4 k7 l# C
# k: y" H, `5 z3 M' I' T首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)% Z! s* w* O u6 s( K# @/ @
放在某個地方,然後請你設計好的加速硬體去處理這些資料1 A, j) }; e' W& n b. L% y' t
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
3 f. }, L) C9 u這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。* E: }+ X" g2 ?$ K6 \
7 G# C2 S$ O7 z0 lCPU + arbiter bus + memory + DMA
$ m: F+ x! ? K k3 c, G- x0 R
; b/ T5 w' ^5 @* O# ]% O, y4 ^接著我們從作業系統的角度來看:
* {! i+ N8 y" ~1 x' L; g$ h$ S7 r- h
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
( E3 Y' m5 f5 U3 D6 F3 C, z C* o1 i8 H9 ~0 e
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。' g$ {. w. x+ F
1 A1 S4 q' |" D/ {1 k& X2 m到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
3 b* D8 Q2 V& G) n& p% N3 y
; v( F U5 Y+ M7 S. }3 a6 V: E所以我們的系統變成了, r, c5 i( S1 |: C4 `
! o" V% |1 \& |
multi-mode CPU + MPU + arbiter bus + memory + DMA& w, D# a8 z9 k. K* [7 i4 [+ z
2 [ O" W; H* r, |! y# @3 `因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|