|
有些基礎不夠深厚 遣詞用句也不是很精確$ ~$ U2 Z. f C3 ]- F
以下試圖以自己的體認和觀點 以簡單的辭彙# i. X: |7 g& i
去解釋一些process與系統演進的方式
" J6 `! S, o4 Y4 ?9 v/ t) }如果有誤或是清楚的地方 歡迎大家討論
% m+ k5 l5 Y4 X3 ]: J7 A
) Z) Z/ s8 n+ J0 c* C[本文開始]
2 Z0 ]! W) j7 C$ u& [5 P在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候- B8 s" Y1 a6 u( P% J1 ^& D! T
常常會被一下子多出來的專有名詞搞混
0 r/ E- Z0 g/ {$ Y. d1 i像是DMA, memory, cache, mmu, virtual address, physical address 等等9 B) G! W. N# f5 S a
尤其大家一開始接觸電腦都是已經發展很久的x86系統
: {. R( ~& ^0 b- ~即使有單晶片系統的實驗課程
3 T4 R, c @+ g' ]( w4 c \* v& J也很難將單晶片的經驗2 P, o5 q4 |) Q+ ~9 l! J3 ]0 f
運用到x86或是已經較為複雜的CPU系統上
. A, D; e) Q5 w8 u" W" d8 A
x3 @' G% x4 d! [$ f. V/ w; e9 R因為CPU上頭又開始加入了越來越複雜的作業系統
$ t" P q+ H* ?: G* {* M像是作業系統常提到的kernel mode, user mode' C5 F* M( g( L
常常跟上述的專有名詞physical address or virtural address交互使用- K* b9 {" W3 P1 `8 E/ p* z
例如刻板印象的『作業系統處於kernel mode時,使用physical address』& R/ w! ~. l- x- o
經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
" e6 G5 {6 N/ E, v7 g6 @( l) P3 m3 e+ z5 p; U4 k3 Q
那應該怎麼簡單來看待一個系統?- v* L+ S* x$ z- r( g
9 \. H( {( F4 ^0 A
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
5 n+ _! V3 K7 s' S( @3 F他是用來處理各種『資料』
7 _( J1 ]* d c P: m" M' f; D) x! ?( G( z1 I% ]8 L
那麼這些資料又放在哪邊?他是如何去存取這些資料?+ @. j' e+ b" O% V4 V- n! [
6 k8 E2 _# X1 e5 P7 _通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory; J e0 H/ ] `0 W. I9 ]2 l. }" I
8 @& X7 O- r( \$ G G, b到目前為止,我們得到一個簡單的系統 CPU + bus + memory
( h) O4 n. r1 s. A3 ^5 W3 }; ]- k. P
接著,我們用兩個角度去看這個簡單系統的發展
4 b( w3 t5 k& H. X; e1. 硬體加速& E- H; P9 `( Z9 U ?1 `7 K
2. 作業系統
& U* `- l% m3 A4 Q3 C: ?* ^2 d+ G7 C: Z" F/ W" z
我們先從硬體加速的觀點來看這個系統如何改進:* x9 a! G5 u7 X/ X; z/ S: L+ i$ K
0 q5 _8 y6 h6 M2 L) ^. L4 J首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
3 Y+ C, S D7 _3 L" ?* N, R放在某個地方,然後請你設計好的加速硬體去處理這些資料6 p' N( [9 q( k" @4 H
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
! T6 J) z" e9 a/ C' w2 ^4 x這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。' Q3 Y- o. S: Q. j. ?" W
$ ]. q; P4 ]8 T1 A; T1 B' W) L, BCPU + arbiter bus + memory + DMA) w. A, o; O) W
8 ?! M: `! X% L4 p, T9 T接著我們從作業系統的角度來看:
' `( A, Z8 S( W0 y! k, x- ?0 u8 _. R
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。9 a( S3 ?. o6 L$ i
- u6 V: K0 m, n H9 z% X' |例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
2 ~( x, p2 }5 z* a/ z+ w# H7 M/ }- f! F
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。2 K6 Z1 b% E/ u# ^
, m9 P4 G* G7 o+ y+ v8 H4 `8 ]5 s所以我們的系統變成了
2 T; a4 N/ E; {: c8 s4 A
: D9 w5 W( o8 s- x: a- K$ gmulti-mode CPU + MPU + arbiter bus + memory + DMA( I/ X9 _- v: D
. n1 }( _* q/ V: P' j. s5 @0 ]2 s因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|