Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

從system bus來看系統

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-7-31 13:36:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有些基礎不夠深厚  遣詞用句也不是很精確' o: n' {$ U  @* Y: n( P+ {0 V
以下試圖以自己的體認和觀點  以簡單的辭彙/ i3 a6 ^; V0 V! g& f
去解釋一些process與系統演進的方式+ _) d) ]- c: K9 Z' Y- d
如果有誤或是清楚的地方  歡迎大家討論# X) ^* m7 u0 H7 O; ~) a# W

- ^5 I+ O4 r. T  u& `3 e[本文開始]: m0 K: n: d, F1 U5 V8 g
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
9 N- _' [0 Q# x3 T- \* N. w常常會被一下子多出來的專有名詞搞混
4 U0 O+ l! D. w+ k# ?5 I8 r: w8 O3 a像是DMA, memory, cache, mmu, virtual address, physical address 等等
# }, e( i( V1 i! w6 P( A尤其大家一開始接觸電腦都是已經發展很久的x86系統
; I. [  l% U" B% T7 }即使有單晶片系統的實驗課程
1 J* T# B+ r: b- V6 u( x. a也很難將單晶片的經驗
8 j7 {4 ^  l( D3 ?6 V+ Y/ H1 @運用到x86或是已經較為複雜的CPU系統上1 m7 a# o3 \' D& p2 R- Q5 ?
  R  d+ X5 t8 O" R/ b  [
因為CPU上頭又開始加入了越來越複雜的作業系統
& |9 N/ S0 h, y* O像是作業系統常提到的kernel mode, user mode
8 R& A9 Q9 x" j% }% t& G常常跟上述的專有名詞physical address or virtural address交互使用+ b0 B* z+ `# B- _* \
例如刻板印象的『作業系統處於kernel mode時,使用physical address』
0 i/ g6 v* u* M& \經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問6 Z) D* U2 e+ Z* w# L# b5 I# w

# i9 P! e5 |1 B* L! h, H8 d* O* r那應該怎麼簡單來看待一個系統?7 l  e6 s$ C# s& N5 G9 ^; h
3 `( z5 Y# |( w6 l
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
. g9 t( ?5 {( X3 t他是用來處理各種『資料』
2 `9 [& o+ @/ _. f4 ~% K5 u+ u: ?; J6 b$ Z* a% \! l1 M# ?- R
那麼這些資料又放在哪邊?他是如何去存取這些資料?# p- c6 c$ t1 {7 T! y0 _! d$ X+ o
! m+ w1 r! W0 P+ ]3 m! d
通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory
  l2 H1 w* a& h: Y1 c/ ^) @1 |" Y9 w/ g4 a3 J, B, [
到目前為止,我們得到一個簡單的系統 CPU + bus + memory
; h# q- t  v! r- v+ E9 Z7 t( ?( R3 |' Y" Q$ v5 v- W9 J/ a
接著,我們用兩個角度去看這個簡單系統的發展3 T: Z7 L0 [& R+ F* q: F
1. 硬體加速2 p( ^. x) P. w2 ?/ W* n
2. 作業系統
9 \% k8 T7 s) B% _! ]$ _' m: r: T! u0 ]% \
我們先從硬體加速的觀點來看這個系統如何改進:
; _, y1 a! C6 C4 s# ^7 X! m: X/ m6 ?
首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)" J* @1 a1 C% T+ E
放在某個地方,然後請你設計好的加速硬體去處理這些資料' F) M6 v5 X6 A2 F5 Y
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
9 \( n" x# K; m; K- p) u這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。
* x( e4 m) k, K) I$ c9 p% o; x* L- H" p5 ^0 u0 r% A5 J
CPU + arbiter bus + memory + DMA
: d/ ]! F+ S/ y" H% ^
/ E6 U* c* F% k' |接著我們從作業系統的角度來看:
) u  z4 `* ?* e$ @! I5 e4 F) l/ `5 ?. E! Q# @
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
5 T" ^: {2 K& e* ]1 r0 x4 }' X0 ^. ]0 n* P3 ^. e
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。& b2 P" `: w4 `5 z
0 R' E7 K9 v4 s4 j& }
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
: C& {8 \, u6 B- M7 [
) w  e! r, O. D$ W所以我們的系統變成了
! u* J  j8 k3 g8 y& t7 x; ^  r$ Q1 `: x
multi-mode CPU + MPU + arbiter bus + memory + DMA
6 m0 }5 w+ @8 ?" S3 _6 s+ M3 Z0 o1 u( n/ l" s, e! R
因為字數限制,部分貼到回文當中  =)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2008-7-31 13:43:33 | 只看該作者
接著我們看virtual address和physical address的誕生,這邊相當抽象,需要一些想像。: o# q6 D& N' z& J4 {; `6 o- ?
7 z+ X! T4 G& @# ^7 a( R
隨著時代進步,越來越多user program產生,user mode的program目前雖然已經不會因為隨意的存取記憶體,造成OS掛點,可是還是有可能去改到別人的記憶體,因為每個程式共同擁有並使用同一個記憶體和所謂的記憶體空間。& T  z9 s: I% y- I8 i2 L% ]$ `8 c
+ c5 m) I: z0 i, L
例如:程式A放在0~128 KBytes,程式B放在512~768KBytes,程式A寫錯位置到B程式的地方,變成程式B毀損,B程式就掛掉了。
  _  P( c3 a7 w* f3 j$ _
$ }; K0 Q4 h7 j0 {) i9 [7 k: f上述的記憶體使用情況,不僅給programmer帶來困擾,而且變成記憶體必須被事先決定好誰只能用哪邊?只能使用多大?這樣不但得事先規劃,對於記憶體的使用也不是很高,因此MMU的硬體便被提出來。  x, e# _" |+ T2 x. i

7 |% \" h& W# u0 t簡單來看,MMU記錄著某個虛擬位置所對應到的實體記憶體的位置。5 \) _( y& _9 o& [! Q( A1 J7 O

" v9 S, X: j) y作業系統利用這個特性,為每一個user program先做了一個假的記憶體,每個程式都以為他有很大很大的記憶體空間,其實當程式呼叫malloc的時候,才會去設置MMU將這個user program的假記憶體空間和真實記憶體做個連結。這邊很難解釋清楚,其實每個程式都有一個假的記憶體空間的紀錄表格,當OS做context switch到某個program的時候,MMU也會跟著切到這個table上,以便用到正確的紀錄表格。; I3 `. S& T$ A- f, l" p7 _
! j" P( d5 S8 E7 ]% I0 A4 Q, t
例如:- N( D/ P) @7 a% e
6 v5 _! T' E( _( A
程式A的表格記錄了他配置0~4K,而這4K對應到真實記憶體的128K~132K的區段。: c& a" m; i% T1 x7 ~
程式B的表格記錄了他配置0~4K,而這4K對應到真實記憶體的132K~136K的區段。- m+ N" Q7 b# r  b

" p! r5 A1 g/ |" S  j7 K  Y雖然兩個程式自己都以為他是用到0~4K,可是其實真實記憶體所配到的位置不同,作業系統在切換的時候,會同步將虛擬記憶體的紀錄表格做切換,以便使用到正確的對應表。以上是一種例子,各種OS可能採取的設計方式不同,但是概念大多是一樣的,我們可以看得出來,對每個程式來說,它可以有擁有許多假的連續記憶體空間,對程式撰寫,還有記憶體使用率來說,很有效果。
/ w# R5 s) O) u* K9 `1 H1 D# @. C7 s3 F
到此,CPU多了MMU,現在大多包含MPU的功能。
# f5 Q3 q2 C8 z3 ]/ |% ^2 X: c( V, @1 \) o
muti-mode CPU + MMU + arbiter bus + memory + DMA2 |% s5 p- B  {: R' X% P
( o0 z" @8 [2 `( {& K
因此OS在kernel mode的時候,如果MMU是打開的,這時候還是使用virtual address。4 l- v: s+ R3 Z5 ?4 \

9 W" V% I) ?( @要讓mmu正常工作,必須要設定,要讓他知道你對位址的規劃是如何。- K/ k1 }7 i; ~. e/ T/ E8 \- O

; B. e; ^3 i4 J. m) }2 U例如:RAM被硬體人員安排到0xFF00 0000的位址,可是你希望RAM被當成從0x0開始,你就可以設定MMU將 0xFF00 0000 對應到 0x0,這樣一來你讀取0x0就會自動轉到0xFF00 0000那邊去。
8 H) R' C; x# \3 K1 P
: B) f) K( o* c( m" b9 }0x0000 0000 --< mapping >-- 0xFF00 0000# j$ }, E8 `, e  R/ C
# H1 f" z7 c. w1 |: E
作業系統一開始就會初始化這些位址轉換對應的資訊,把它放在所謂的page table裡面,然後把table位址交給MMU,MMU就會依照table的資訊工作。5 z8 K! J6 I. m! P* w8 l7 X$ Y
, m* U9 O0 y, v! U
假如你今天有兩張table,兩張table設定不一樣,MMU只要在這兩張table之間切換,那記憶體對應的方式也會跟著換。, Q* {+ K) \. E; i

/ N: s2 x! p/ h, L4 C! t7 I$ l這是一個很重要的想法。假如,我每一個process都有自己的 page table,切換process的時候,table也跟著切換,這樣我可以控制每一個process去存取記憶體的方式。假如我是讓所有的process 都共用一個 table,這樣這個table的設定值,就會影響到所有的process。
/ \6 ?1 F* x5 Q( s( p) g3 D
$ v; p8 J6 X% V* X) F共用一個table表示每個process用同一個位址去讀寫,透過MMU轉換到的位址是相同的,會讀寫到同一塊。不共用的話,表示processA和processB即使拿同一個位址0x8000 0000去讀寫,可能最後對應到的位址是不同的。
: w" p& l  k- ?* }# S2 _# Q
: a" s* W6 j% ?3 W8 T但是這樣的差別就是有什麼好處??
# h( n2 @5 H  R+ x0 G% @5 r# S2 H2 y3 W$ A. I# G
因為感覺上複雜化了整個系統,本來我可以很直覺的拿processA傳給我的位址,去讀取它為我準備的資料,現在我可能會因為我使用的 table 不同,就不能在其他process直接使用。感覺很麻煩,要是大家都在同一個 table 工作,不是很簡單嗎?位址空間都是一樣的。
( W! g: b$ L  K3 l6 h! N7 O
$ j( V# n! f- J( awhy?!3 d) _- u: L2 U; x( L, o
5 R0 i: A$ a* `! v& x
字數又超過啦~   
3#
 樓主| 發表於 2008-7-31 13:46:10 | 只看該作者
一、
/ t1 M7 s! b+ H7 a" |6 P9 H$ f/ j如果大家都在同一個page table上7 C% z  {& D# Z: k! a8 x
因為彼此用的記憶體應對方式是一樣的( F9 u; u. @$ E; [3 ^
所以processA要了某個區段 0x0~0x100
9 b1 }( h+ |( ~) Q& S+ S! m這樣processB就不能使用
: S/ f- J2 J+ B" _$ |很可能跑了一段時間之後整個系統的memory fragment就會變多
5 A6 d7 v. o% d+ W/ y對記憶體使用率來講不好- Q$ c5 W1 V, X9 z! i7 p5 `
很可能要一次找到大塊的不好找
/ K* o% }% ?% J# Y! H雖然virtual address有4G但是process分一分
  Y" f5 q  _5 @' [' l還是可能不太夠
* K* C0 Q( i/ w: z9 s; H9 q% l) H) W( o) o
, h  d) t; U: g. Z% [- A; ?, g二、- y# A! n5 W9 G; u: i1 }( u1 R; ~: k
processB可以看到processA的address space' d  I  m; J# K  v0 x- O
表示我可以拿到相對應的資源
2 d1 E+ G) M% B/ f這樣惡意程式很容易就得到一些記憶體上的個人資料. r9 m2 x" O2 j3 Q/ J4 ?

" d" z  S7 `3 w3 S7 n/ G7 W有些地方的說明不太容易,太簡略容易造成誤解,贅述又怕不容易. w  v. W: l+ A
理解。沒表達清楚的地方歡迎提出來討論。

評分

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

查看全部評分

4#
發表於 2008-7-31 20:44:39 | 只看該作者
希望大大以後多多發表文章.
7 _' S3 ], y1 j) K6 S0 R6 e# U透過大大生動的描述.很多複雜的概念就淺顯易懂了.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-21 04:31 PM , Processed in 0.169009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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