Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

從system bus來看系統

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-7-31 13:36:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有些基礎不夠深厚  遣詞用句也不是很精確
' [0 E& O! d$ y; m1 G: d. o' d以下試圖以自己的體認和觀點  以簡單的辭彙
. f3 _( m, o' H+ j2 q去解釋一些process與系統演進的方式0 u' Y- |0 d' X9 ]" Z0 y3 N& q6 l
如果有誤或是清楚的地方  歡迎大家討論
; k- f  a7 b9 k6 @
9 @/ o- B$ p6 j# @, S& R% _# I[本文開始]
9 Y! r* d$ V/ }在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
( k3 ~  p; _% _* Y* E/ d$ Z, R常常會被一下子多出來的專有名詞搞混. U4 q8 E; W  U& B$ r
像是DMA, memory, cache, mmu, virtual address, physical address 等等
7 w; v( k$ u" C/ J+ v5 t尤其大家一開始接觸電腦都是已經發展很久的x86系統9 ~& g$ l/ Y1 ]9 q3 g8 {- n: C
即使有單晶片系統的實驗課程
2 a  H8 I$ [5 i( Z1 S7 d也很難將單晶片的經驗
& |! L% V8 D* @1 E( n運用到x86或是已經較為複雜的CPU系統上% U2 r: F' D1 q( z# q
' O/ U6 b9 A3 M( I- J; S- P
因為CPU上頭又開始加入了越來越複雜的作業系統
( o5 D/ T' {! j3 A! p( J) f& h像是作業系統常提到的kernel mode, user mode
/ l7 a& D( ?. ?2 @, @常常跟上述的專有名詞physical address or virtural address交互使用
3 y! _6 Q. _. [例如刻板印象的『作業系統處於kernel mode時,使用physical address』
  {: |! X2 n1 s# x3 `, }6 x. C經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問" G5 }& Z: q, s2 V5 T1 \
+ `1 ^6 S2 d0 S; U) H0 V
那應該怎麼簡單來看待一個系統?; y6 s( p# Q( @

2 e- ]% d% o$ y$ }- k9 A首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
7 Y! H2 a9 R7 V他是用來處理各種『資料』9 p6 N, U7 w( V
8 H. \, h; H) P
那麼這些資料又放在哪邊?他是如何去存取這些資料?0 @$ P7 p1 b6 k: H; C
3 \! }6 F& y) w% H( Z  s
通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory/ b" v; o9 S# p  G4 _! y
8 ~: ?: A* v# O7 ], H% c
到目前為止,我們得到一個簡單的系統 CPU + bus + memory
% R2 v! T5 n! ^/ t6 t7 L7 u1 ?8 ^, }# h4 r5 \" l
接著,我們用兩個角度去看這個簡單系統的發展
4 f" i6 w+ f5 d$ F6 q1. 硬體加速& u- J) X6 I. r1 G$ k' E
2. 作業系統9 g) }3 v! t: j2 {7 j3 G# K" ?
" V! g# C8 r: t6 ^2 U# z
我們先從硬體加速的觀點來看這個系統如何改進:2 h5 ^- a& E: ]( z6 b

$ n& N# f' V- V& u: t' w' Y首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)6 E2 |5 i: _  q
放在某個地方,然後請你設計好的加速硬體去處理這些資料1 A3 l5 I/ k# V  o+ t; F
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。1 B2 F6 f8 u' u& P; o6 n, o# w5 q+ r
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。
, p" k5 O% \  d: H  ?9 V  V
$ B7 l/ Y. @- n$ ?+ OCPU + arbiter bus + memory + DMA* ?" N- J4 I$ p9 r  N5 j
" Y; K4 K# X# c
接著我們從作業系統的角度來看:
% }+ o7 W+ v& J9 b5 {% s1 [/ _
, X2 ^" B5 g+ u* g一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。" M- e8 g9 K" W( J8 }! h) ]1 n

& ~" X% p  [; q% a5 [: c& D例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
: \: j+ |( d/ b) R/ ]4 C8 }) a& u4 S/ W
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。( b) S5 O  `  R

0 g8 D1 V/ G8 S  N. {  K所以我們的系統變成了0 B8 V/ {. }; J- M

8 R# X6 A, Q( }+ d0 u6 d% Zmulti-mode CPU + MPU + arbiter bus + memory + DMA
- x0 E, v8 W4 f  ]6 i% y, i1 Y6 Z( \5 Z2 g* l1 z* g  B
因為字數限制,部分貼到回文當中  =)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2008-7-31 13:43:33 | 只看該作者
接著我們看virtual address和physical address的誕生,這邊相當抽象,需要一些想像。5 j$ W0 G& w; ]. N# V* b  r

( l5 ]; y2 f6 ~: V7 t' _+ `0 a隨著時代進步,越來越多user program產生,user mode的program目前雖然已經不會因為隨意的存取記憶體,造成OS掛點,可是還是有可能去改到別人的記憶體,因為每個程式共同擁有並使用同一個記憶體和所謂的記憶體空間。
# G) |3 N$ _3 Z: r) ^3 f: \4 c+ e
例如:程式A放在0~128 KBytes,程式B放在512~768KBytes,程式A寫錯位置到B程式的地方,變成程式B毀損,B程式就掛掉了。, M' v5 l6 Q$ Y% ^2 Z3 u

$ b; U3 G0 F# m! V; p; |3 G0 a上述的記憶體使用情況,不僅給programmer帶來困擾,而且變成記憶體必須被事先決定好誰只能用哪邊?只能使用多大?這樣不但得事先規劃,對於記憶體的使用也不是很高,因此MMU的硬體便被提出來。6 {, E% @+ H/ @9 X5 [
. d' G8 T+ p# E! J. Q
簡單來看,MMU記錄著某個虛擬位置所對應到的實體記憶體的位置。
. G4 [% Y* P% Y) Y4 v' @+ b4 k4 i( D, ]8 ?$ o, H3 L
作業系統利用這個特性,為每一個user program先做了一個假的記憶體,每個程式都以為他有很大很大的記憶體空間,其實當程式呼叫malloc的時候,才會去設置MMU將這個user program的假記憶體空間和真實記憶體做個連結。這邊很難解釋清楚,其實每個程式都有一個假的記憶體空間的紀錄表格,當OS做context switch到某個program的時候,MMU也會跟著切到這個table上,以便用到正確的紀錄表格。
/ e% C7 x5 ~1 Z5 C0 U$ h1 N% \0 e" f' Q4 y' B) g2 \2 P
例如:/ w5 \" e+ V2 q5 l" f

6 P  X! N1 p; `# y6 x. s程式A的表格記錄了他配置0~4K,而這4K對應到真實記憶體的128K~132K的區段。
7 _: \# j% ?- `9 C4 h0 W) c程式B的表格記錄了他配置0~4K,而這4K對應到真實記憶體的132K~136K的區段。
* s" w' X4 `5 I! a% s4 q
+ j8 s; ~) m: P" G; f9 ]1 r雖然兩個程式自己都以為他是用到0~4K,可是其實真實記憶體所配到的位置不同,作業系統在切換的時候,會同步將虛擬記憶體的紀錄表格做切換,以便使用到正確的對應表。以上是一種例子,各種OS可能採取的設計方式不同,但是概念大多是一樣的,我們可以看得出來,對每個程式來說,它可以有擁有許多假的連續記憶體空間,對程式撰寫,還有記憶體使用率來說,很有效果。9 E; O+ s. U8 K) c& @  ]- w' R4 l

+ D; @% g' Z- |1 {$ \5 ~到此,CPU多了MMU,現在大多包含MPU的功能。; t8 `& e  q: }8 z3 |, @
  N- ^5 x# a; Y# K/ S
muti-mode CPU + MMU + arbiter bus + memory + DMA- {4 D. }4 e' [3 |2 v, e5 ?

( e+ S$ ~* B4 b% j因此OS在kernel mode的時候,如果MMU是打開的,這時候還是使用virtual address。, _1 r$ a! C) f# R+ L* X9 U3 P4 V1 d
+ l1 F7 a5 s# k  Y: p" k/ g
要讓mmu正常工作,必須要設定,要讓他知道你對位址的規劃是如何。
$ T9 i9 z" S2 o% g& {2 f
& \0 r$ N( S# Z! d& p例如:RAM被硬體人員安排到0xFF00 0000的位址,可是你希望RAM被當成從0x0開始,你就可以設定MMU將 0xFF00 0000 對應到 0x0,這樣一來你讀取0x0就會自動轉到0xFF00 0000那邊去。
3 E+ b! k* I# d  u$ K5 k9 V/ W3 W5 R' k" R9 O( }1 z0 B
0x0000 0000 --< mapping >-- 0xFF00 0000
0 t. }0 ~. z3 h2 y; n
7 z' N& n  |% ?; |作業系統一開始就會初始化這些位址轉換對應的資訊,把它放在所謂的page table裡面,然後把table位址交給MMU,MMU就會依照table的資訊工作。
; T  y) p8 V: H! ], L3 j  v: K5 q- {/ F( {. A1 i
假如你今天有兩張table,兩張table設定不一樣,MMU只要在這兩張table之間切換,那記憶體對應的方式也會跟著換。: [# z0 P% i2 B: @% {- y
: L& ^4 w/ E5 x; X
這是一個很重要的想法。假如,我每一個process都有自己的 page table,切換process的時候,table也跟著切換,這樣我可以控制每一個process去存取記憶體的方式。假如我是讓所有的process 都共用一個 table,這樣這個table的設定值,就會影響到所有的process。3 s# N8 X" i. P  |

5 k0 {/ s  B3 }4 t' c5 j共用一個table表示每個process用同一個位址去讀寫,透過MMU轉換到的位址是相同的,會讀寫到同一塊。不共用的話,表示processA和processB即使拿同一個位址0x8000 0000去讀寫,可能最後對應到的位址是不同的。, z% ]" O% D6 h  q1 u9 X
& ?/ o& T, o2 r9 X; e( `1 S
但是這樣的差別就是有什麼好處??
# R; b% S( Q: P8 u# I+ T3 ^3 R1 r  N9 Z
因為感覺上複雜化了整個系統,本來我可以很直覺的拿processA傳給我的位址,去讀取它為我準備的資料,現在我可能會因為我使用的 table 不同,就不能在其他process直接使用。感覺很麻煩,要是大家都在同一個 table 工作,不是很簡單嗎?位址空間都是一樣的。
7 t% Y& i0 R0 }' y: Y- b# {! m0 P
why?!5 [$ t0 h2 C- t2 j& u

8 P- O7 y% s7 B. \7 s. B字數又超過啦~   
3#
 樓主| 發表於 2008-7-31 13:46:10 | 只看該作者
一、
- Q4 Y7 W  v  b* E如果大家都在同一個page table上
0 N) @- c) f2 j4 P+ \8 ?因為彼此用的記憶體應對方式是一樣的( I$ _) ~7 O; \* B* `& q
所以processA要了某個區段 0x0~0x1001 I0 M5 c+ j) q% ?& t1 S
這樣processB就不能使用% G3 L* z4 P- p
很可能跑了一段時間之後整個系統的memory fragment就會變多: S; H! R1 w  R) f# M
對記憶體使用率來講不好  ]/ U; ^2 T" C2 Y
很可能要一次找到大塊的不好找
2 p2 G/ I: ?& s0 l/ ?3 Z' s  J雖然virtual address有4G但是process分一分) }, M* [  i# G: X3 p( I
還是可能不太夠8 t" @0 Q3 k: a8 D

/ J1 r  {5 K3 E0 d7 n- T1 R二、
: `9 V( Q, l4 `6 \' B% tprocessB可以看到processA的address space
/ f, R7 R3 y0 S" d0 E- w$ Z表示我可以拿到相對應的資源
2 U9 X- d# G8 a: A0 b% G! v4 x這樣惡意程式很容易就得到一些記憶體上的個人資料
7 ~, n' ?& o$ i1 A3 o3 |  M. l1 L9 W/ L  A
有些地方的說明不太容易,太簡略容易造成誤解,贅述又怕不容易  u+ h0 A! b  ~
理解。沒表達清楚的地方歡迎提出來討論。

評分

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

查看全部評分

4#
發表於 2008-7-31 20:44:39 | 只看該作者
希望大大以後多多發表文章.* f' L7 z2 F, e/ O
透過大大生動的描述.很多複雜的概念就淺顯易懂了.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-21 11:20 AM , Processed in 0.181011 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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