|
有些基礎不夠深厚 遣詞用句也不是很精確6 A7 }3 P) D2 C e- E# S2 ^3 d
以下試圖以自己的體認和觀點 以簡單的辭彙
9 ~# w, ^; l$ N+ B, U0 Z去解釋一些process與系統演進的方式: h7 J; {* g' @, }2 C
如果有誤或是清楚的地方 歡迎大家討論9 l) T5 G& h# D' [; h( K6 j
) q5 t a# v- k6 I[本文開始], m+ c* D$ n' `' `) c8 A
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候7 t* B& T6 k! a+ q
常常會被一下子多出來的專有名詞搞混5 [. q3 \* F2 G& `2 F1 Y
像是DMA, memory, cache, mmu, virtual address, physical address 等等
1 _1 i7 B9 p$ F! |$ ]: {) h尤其大家一開始接觸電腦都是已經發展很久的x86系統
+ i) W! ]5 w9 r7 @$ I) `; I7 y, P即使有單晶片系統的實驗課程+ H5 z' x1 C& e! k7 U9 z/ J, J
也很難將單晶片的經驗% a/ c3 J. o; @
運用到x86或是已經較為複雜的CPU系統上
0 C6 i _" }9 n- V6 l. ], I. A
% e) [! P% u) `: d, e: \0 h/ g因為CPU上頭又開始加入了越來越複雜的作業系統; Y: ]& T, Z4 g" @' U
像是作業系統常提到的kernel mode, user mode* g% ]+ Z3 t5 z6 H; j4 B' w& t0 N" G2 I
常常跟上述的專有名詞physical address or virtural address交互使用1 d' c) v' c' _& t' P
例如刻板印象的『作業系統處於kernel mode時,使用physical address』
" r/ |/ }9 Q% K: o4 {經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問8 i4 N/ L$ |7 W( {, L" K0 ?
; E2 p% S. B j那應該怎麼簡單來看待一個系統?
6 b- v) j8 Y3 d- n L6 C- a
\( [ k/ ?3 H( n" b+ _ v9 C$ e7 ~首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』* _; l, j+ w2 j" R
他是用來處理各種『資料』
, g- a4 c0 D }; d# Z/ L1 o0 w6 ?: z$ ?
那麼這些資料又放在哪邊?他是如何去存取這些資料?
* W; i/ Z' W6 Y6 ~. ] ^" l$ J5 T5 r5 I2 ^& p. d
通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
+ s7 T6 a+ I. o: {+ r
/ n C. `/ x# n2 H$ |4 J到目前為止,我們得到一個簡單的系統 CPU + bus + memory; ?7 o5 P0 c2 `) i1 L
! A& A8 P2 ^6 B1 u
接著,我們用兩個角度去看這個簡單系統的發展
3 l* _' ^% P# x9 a- v1. 硬體加速! s6 |: M# s G( I
2. 作業系統0 s3 U5 M+ ]- U
7 N# R2 O9 z. Z5 z/ S. t
我們先從硬體加速的觀點來看這個系統如何改進:
9 ?6 d( N7 Y0 J, O+ ?& x, `) Y8 X/ H( [( \9 t$ e
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)9 T6 J' c$ V( P8 P/ q" w
放在某個地方,然後請你設計好的加速硬體去處理這些資料
3 A. V! q8 @6 [/ ?0 U6 \可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。& C4 m, J3 {2 z$ w& l
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。, }3 s; k7 D# A- M& y
" o! E3 I/ s( v: C; FCPU + arbiter bus + memory + DMA
6 E# }. t; A- M# a1 I" Y* x4 z) d
接著我們從作業系統的角度來看:
9 [! {, h: g+ g* z3 L: j. U/ i( ]! l6 W* J& `+ Z+ ~
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。6 p. W, H$ Y- ^7 i) _
# |$ ~1 |4 c; T" o- C例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。2 ~$ ^1 P' L" V% K* ?& A
2 n4 g# j; ~/ Z# A: Y N1 B+ @
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
" |/ [2 u& u: Q1 V: J2 a4 ^8 N5 @& D* W: l8 e4 E+ G) E
所以我們的系統變成了
( Q+ C2 |* _! ?2 u7 Q
% Q* u9 b5 C1 E. ~! f3 gmulti-mode CPU + MPU + arbiter bus + memory + DMA
* T* r+ s8 p1 B7 N
- }* f+ d! R' F6 X( F0 e因為字數限制,部分貼到回文當中 =) |
評分
-
查看全部評分
|