Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3701|回復: 3
打印 上一主題 下一主題

從system bus來看系統

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-7-31 13:36:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有些基礎不夠深厚  遣詞用句也不是很精確! W0 }. R4 E$ F7 X: [
以下試圖以自己的體認和觀點  以簡單的辭彙
6 x. P4 c2 e! B) j" g8 A去解釋一些process與系統演進的方式
; C% v, a, V$ m2 I9 h( r如果有誤或是清楚的地方  歡迎大家討論
. a1 T) A* [% U
7 }/ L/ t9 x& ^. f: N' F2 v0 k[本文開始]. w: o# U2 Y& t
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候& V/ l2 Z3 k5 K2 U, f9 x
常常會被一下子多出來的專有名詞搞混
: z2 B) i, P& d像是DMA, memory, cache, mmu, virtual address, physical address 等等
( k3 [' ]  A+ [) P尤其大家一開始接觸電腦都是已經發展很久的x86系統, D. C* L( N* x
即使有單晶片系統的實驗課程
8 f4 c4 f2 e" Z7 J. N也很難將單晶片的經驗8 U( `: {7 h& l! ?+ a+ `: }
運用到x86或是已經較為複雜的CPU系統上
6 ]1 C6 J+ i% \* T6 w  \4 \9 C$ m, }, P) O, v  V
因為CPU上頭又開始加入了越來越複雜的作業系統
1 t, e* H2 B$ q像是作業系統常提到的kernel mode, user mode
9 ~/ }$ r; L% m) W常常跟上述的專有名詞physical address or virtural address交互使用
. S3 a! L! w( l' N. ^' |例如刻板印象的『作業系統處於kernel mode時,使用physical address』
/ M* P* I5 t3 E4 s3 |. H8 E: i經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問! M& [6 J* Q2 ?. ~, {, d+ m2 N

: p7 U5 H0 E' E; {. J  @: S那應該怎麼簡單來看待一個系統?
3 c8 I$ n& d% B; }; F+ H/ O
6 Y0 @9 I' d4 Z3 d2 ?首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』( S- B9 |. S+ C8 n" P
他是用來處理各種『資料』& h" t! ?5 O- }# J$ `1 b
  {6 Y: Q4 o% C4 y
那麼這些資料又放在哪邊?他是如何去存取這些資料?0 v  C; g9 r3 ^

4 ?0 D; g4 X/ p通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
* }8 B; x6 z  G" N. _7 \5 ^6 V* J7 K. D8 ?
到目前為止,我們得到一個簡單的系統 CPU + bus + memory: U( f, W8 U' Z% v0 }! `1 h# J
, i7 \6 f( U' W
接著,我們用兩個角度去看這個簡單系統的發展
3 F/ i% J8 I" |6 Q4 X5 m+ G0 `1. 硬體加速3 \. d+ k4 z' A" d0 M/ L- L
2. 作業系統
& A7 H, a- A% N" u* ~4 z! N" b
+ V1 i! q. Y- P- X! k6 k; _我們先從硬體加速的觀點來看這個系統如何改進:2 B2 o! J: n  g0 E7 o- V1 W) \/ F4 x
/ ?% o# \  v2 U) ^0 s$ q
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
6 o( y6 ?+ Y, h7 [$ d/ L放在某個地方,然後請你設計好的加速硬體去處理這些資料1 `+ W  r3 P$ s7 u4 U2 T& f4 b" v
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。0 U) v. j9 A9 B1 P$ ^' e
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。- w% O$ N( }4 ^+ }+ }/ M" a
+ n  \+ D% a# T3 b$ K
CPU + arbiter bus + memory + DMA
, c5 n: P. }) s! r+ d3 B9 B& p( Q  j4 p: O" Y1 z9 W/ ~+ a
接著我們從作業系統的角度來看:
- [  K4 f2 I1 D/ L9 p7 ]" J5 l3 X# P% ?9 G2 z9 R4 Y
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。$ W7 M+ }  p: Y( ]. w, o7 P, p- Z

  w7 X/ t! m. Q% o5 [& g例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
1 J" t0 B" {. w- D) J2 @; K+ V7 {% b5 M: a6 b* h
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
5 {. j0 }# e" K. Q' c
4 n* s7 P! q+ j8 L8 _所以我們的系統變成了8 `- W( j: G+ U# a# s  ]# u4 e# v' |

. E  D% e! O) R! S, G2 r- `0 Hmulti-mode CPU + MPU + arbiter bus + memory + DMA  `9 I+ B2 W8 q5 p2 J

) @; S: k* u  h+ i$ ]& C4 |因為字數限制,部分貼到回文當中  =)

評分

參與人數 1Chipcoin +5 收起 理由
jacky002 + 5 言之有物!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2008-7-31 13:43:33 | 只看該作者
接著我們看virtual address和physical address的誕生,這邊相當抽象,需要一些想像。$ w1 B0 ~  [, l  B) A

" C) k8 K; e1 P6 i# `# C隨著時代進步,越來越多user program產生,user mode的program目前雖然已經不會因為隨意的存取記憶體,造成OS掛點,可是還是有可能去改到別人的記憶體,因為每個程式共同擁有並使用同一個記憶體和所謂的記憶體空間。  ]7 m3 n7 ~1 ~( c9 {

9 k9 O/ d0 C, S例如:程式A放在0~128 KBytes,程式B放在512~768KBytes,程式A寫錯位置到B程式的地方,變成程式B毀損,B程式就掛掉了。% ]. Z; q4 Y* }$ U, X; D3 O# g

# }6 I8 J! Z$ s& x上述的記憶體使用情況,不僅給programmer帶來困擾,而且變成記憶體必須被事先決定好誰只能用哪邊?只能使用多大?這樣不但得事先規劃,對於記憶體的使用也不是很高,因此MMU的硬體便被提出來。& O# r# ?& N. i! K+ u. p! j# x; s/ U

" t" D/ n; r/ H% J% Q, Z, c# q簡單來看,MMU記錄著某個虛擬位置所對應到的實體記憶體的位置。# }& Y" B( O# h# B7 I( o. r% e2 E
5 J6 R% W$ L. U( M4 _8 a: R
作業系統利用這個特性,為每一個user program先做了一個假的記憶體,每個程式都以為他有很大很大的記憶體空間,其實當程式呼叫malloc的時候,才會去設置MMU將這個user program的假記憶體空間和真實記憶體做個連結。這邊很難解釋清楚,其實每個程式都有一個假的記憶體空間的紀錄表格,當OS做context switch到某個program的時候,MMU也會跟著切到這個table上,以便用到正確的紀錄表格。7 g7 l0 b% i& G! J0 S
0 O, t+ A) N$ j! [
例如:4 |& P1 ]( }, U- m. R! }
2 X5 T6 g& o, t* e3 H/ g( p( Z
程式A的表格記錄了他配置0~4K,而這4K對應到真實記憶體的128K~132K的區段。6 k2 c$ f7 `; y/ F4 p$ y/ x: H+ R: s$ g
程式B的表格記錄了他配置0~4K,而這4K對應到真實記憶體的132K~136K的區段。
+ t( n& h; D& X. t) s- r5 [7 w/ D& Y1 Z# o
雖然兩個程式自己都以為他是用到0~4K,可是其實真實記憶體所配到的位置不同,作業系統在切換的時候,會同步將虛擬記憶體的紀錄表格做切換,以便使用到正確的對應表。以上是一種例子,各種OS可能採取的設計方式不同,但是概念大多是一樣的,我們可以看得出來,對每個程式來說,它可以有擁有許多假的連續記憶體空間,對程式撰寫,還有記憶體使用率來說,很有效果。. b+ ?0 o+ B) {, n
, o" `! Y* B4 L* F8 ]* `
到此,CPU多了MMU,現在大多包含MPU的功能。, D7 n+ ]9 Z$ X: i& U

: Q" I7 T3 {! h6 L) i! bmuti-mode CPU + MMU + arbiter bus + memory + DMA" I. h. |+ ?5 x4 a

* P0 V2 n1 h/ N, e! r$ ~! U因此OS在kernel mode的時候,如果MMU是打開的,這時候還是使用virtual address。3 c& h8 r2 a; J

" q# q; \: C: q- f要讓mmu正常工作,必須要設定,要讓他知道你對位址的規劃是如何。
# D9 s: u$ g. }0 w! S. M2 s% \9 `* d5 l
例如:RAM被硬體人員安排到0xFF00 0000的位址,可是你希望RAM被當成從0x0開始,你就可以設定MMU將 0xFF00 0000 對應到 0x0,這樣一來你讀取0x0就會自動轉到0xFF00 0000那邊去。
5 u4 w3 ^# C& ]* v4 i
& `6 s& T+ z! E0x0000 0000 --< mapping >-- 0xFF00 0000
. Q) A# k7 X9 m* [' h
# m$ I: o6 q% s; Q; ]1 V' ^作業系統一開始就會初始化這些位址轉換對應的資訊,把它放在所謂的page table裡面,然後把table位址交給MMU,MMU就會依照table的資訊工作。
% X4 R  N- \7 O/ F- s) r, B
/ V% u* j# c1 v7 N$ D6 a假如你今天有兩張table,兩張table設定不一樣,MMU只要在這兩張table之間切換,那記憶體對應的方式也會跟著換。7 R  F5 g2 M; M' ^; S

8 g- N2 ^, d, t. ]3 e5 d1 c1 P  o這是一個很重要的想法。假如,我每一個process都有自己的 page table,切換process的時候,table也跟著切換,這樣我可以控制每一個process去存取記憶體的方式。假如我是讓所有的process 都共用一個 table,這樣這個table的設定值,就會影響到所有的process。2 P6 i- \1 o. U/ w+ g, P( M2 `( y

8 h. V+ d8 w" z  }/ w! U% `- X! J共用一個table表示每個process用同一個位址去讀寫,透過MMU轉換到的位址是相同的,會讀寫到同一塊。不共用的話,表示processA和processB即使拿同一個位址0x8000 0000去讀寫,可能最後對應到的位址是不同的。2 U. `- x7 x% a9 O- W: E& L
5 [. u3 m9 {3 L( _" f
但是這樣的差別就是有什麼好處??  d8 X5 `9 d! o1 K) j1 b! O

& d1 q2 G# @8 Z% l" c! o! u  d因為感覺上複雜化了整個系統,本來我可以很直覺的拿processA傳給我的位址,去讀取它為我準備的資料,現在我可能會因為我使用的 table 不同,就不能在其他process直接使用。感覺很麻煩,要是大家都在同一個 table 工作,不是很簡單嗎?位址空間都是一樣的。
& E/ i5 M9 t# s6 Q0 r
+ ~5 _& T* D, x6 C$ M* _why?!- d. B4 i/ d$ s4 q) V
' |+ n; \& F  M' a: q, B
字數又超過啦~   
3#
 樓主| 發表於 2008-7-31 13:46:10 | 只看該作者
一、3 f4 r" W& f5 n
如果大家都在同一個page table上  b/ N( d( ~, R
因為彼此用的記憶體應對方式是一樣的
. R+ \8 L4 m% g' k  [4 J所以processA要了某個區段 0x0~0x100
# v4 Z2 V; s% t* F這樣processB就不能使用# w7 g$ l- g* t- _! K( c
很可能跑了一段時間之後整個系統的memory fragment就會變多% n) j. j6 M; w: @
對記憶體使用率來講不好9 e# B9 o8 r8 w, N& ]
很可能要一次找到大塊的不好找. t% |) a  e- d) R/ H5 x2 P+ M$ i
雖然virtual address有4G但是process分一分
9 F* Q  p1 q( w0 V8 T2 U4 z1 x+ O' u還是可能不太夠
% ~% o7 F% c4 j, ^- w5 n% `8 y. ~7 S& w7 V, j. C
二、
& ?+ l* g8 m4 r- n# ~1 Z+ z3 CprocessB可以看到processA的address space
" ^  K8 a8 r/ f" O$ {0 Q3 d6 V! C表示我可以拿到相對應的資源
2 O' T& M: J5 I0 F! h  X這樣惡意程式很容易就得到一些記憶體上的個人資料
  j; d4 K& ?/ l
8 h1 m3 [$ T4 j" l$ N. ]有些地方的說明不太容易,太簡略容易造成誤解,贅述又怕不容易, B6 m( |# }5 M
理解。沒表達清楚的地方歡迎提出來討論。

評分

參與人數 1 +1 收起 理由
card_4_girt + 1 讚許大大的經驗交流!希望您再接再厲啦!

查看全部評分

4#
發表於 2008-7-31 20:44:39 | 只看該作者
希望大大以後多多發表文章.7 M  s4 Z- a7 _& v9 n" r- T
透過大大生動的描述.很多複雜的概念就淺顯易懂了.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-11-16 08:10 AM , Processed in 0.160009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表