Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

從system bus來看系統

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-7-31 13:36:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有些基礎不夠深厚  遣詞用句也不是很精確
1 y- Y# J* M6 W: p, Y1 G8 e+ z以下試圖以自己的體認和觀點  以簡單的辭彙; n/ B$ D/ g5 f4 a: X  ?6 }
去解釋一些process與系統演進的方式
  [& D5 @, B7 R) C2 m0 ^如果有誤或是清楚的地方  歡迎大家討論' E+ J  o. [8 o- Y
# c2 Q. l0 C6 `! ?* K( c+ x
[本文開始]* G# M7 Z( [( O! O9 T  m; {
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候$ F% `- d2 n8 M" ?
常常會被一下子多出來的專有名詞搞混
4 r3 X6 n7 S) h1 u% t2 N像是DMA, memory, cache, mmu, virtual address, physical address 等等6 Q6 g6 z9 F+ a& z
尤其大家一開始接觸電腦都是已經發展很久的x86系統
7 K$ s) O  A: b" q- H' q即使有單晶片系統的實驗課程
+ q* q  {5 B# V& ?; E也很難將單晶片的經驗
" [& |6 c- ?" _5 o9 F; T' I運用到x86或是已經較為複雜的CPU系統上$ _+ x; n! V$ B& V) S" i( `$ F) s
2 z5 `- V0 O. X4 E8 q
因為CPU上頭又開始加入了越來越複雜的作業系統
& \2 o4 G2 L3 g像是作業系統常提到的kernel mode, user mode- G  |/ e6 l9 J
常常跟上述的專有名詞physical address or virtural address交互使用
/ r) G6 I& o/ _2 F$ K; S( r例如刻板印象的『作業系統處於kernel mode時,使用physical address』- G/ A5 h# G" ?0 \: j7 m4 I: M
經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
1 ^) M# ^7 j& d% U) M: ^! ~  b+ Y: A! i+ w, |5 U9 s% D
那應該怎麼簡單來看待一個系統?
9 u& Z$ N' P0 i! a, `, e6 i) h8 S
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』& r4 ~" W+ x8 J$ e3 h7 s
他是用來處理各種『資料』
* a0 ?7 w( K# ~+ d% @+ C8 C; ~' X, T3 s' o1 q% F
那麼這些資料又放在哪邊?他是如何去存取這些資料?
* i; B* n+ a- j4 n7 X" o
6 R1 a- k: |8 N$ y+ F- q通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory0 W' B# y* V& ^7 f, `

: K9 o: i+ W+ V! s到目前為止,我們得到一個簡單的系統 CPU + bus + memory
; D! X" v1 a# g) O
" d# l3 H9 P! p) N接著,我們用兩個角度去看這個簡單系統的發展) h" p, N, Y4 j9 A8 q" X* D
1. 硬體加速8 }' `- L9 {) Y! R* m3 r+ s
2. 作業系統
/ c% w# H, q) C% g% m
) a- A4 M) D+ n3 v1 V9 J7 V7 {我們先從硬體加速的觀點來看這個系統如何改進:  x7 n) t( G8 ?9 i3 l3 Y

! m6 ^% z9 Z- l* a  j首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
) Q3 T9 `5 q5 T0 ]- P放在某個地方,然後請你設計好的加速硬體去處理這些資料5 |/ ]: m' M6 ~. n. D9 v& E5 G
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。; P# |. a- }# v/ y8 ^, N  ]
這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。6 v& Q7 @, r- Q" Y) E

5 f) s3 Q( v5 q2 a9 g) {& kCPU + arbiter bus + memory + DMA0 D0 w" w4 K9 U

- Z1 c' A! R, r& }* }接著我們從作業系統的角度來看:
* Y+ v* e* X# _  X' k; N: c( f
. t8 q* z0 U8 P一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。6 N, x1 x5 f. j0 h' K( M. b
9 M* d  J6 w8 a
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。5 z, x+ y; ]$ g4 w, g# t
% V: y! r1 P3 G. U! m
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
* F9 Y* r; j2 c7 I# C% b
" s) `" F& P: M所以我們的系統變成了
. K2 Q+ z" r" Q. [$ s* J& M$ l7 C) v% W
multi-mode CPU + MPU + arbiter bus + memory + DMA
1 v- l% R$ L* f
/ O8 H( q: l6 V) t$ t因為字數限制,部分貼到回文當中  =)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2008-7-31 13:43:33 | 只看該作者
接著我們看virtual address和physical address的誕生,這邊相當抽象,需要一些想像。+ N% d5 N8 k& Z" x' c: f+ N

+ |2 K2 s: k% }$ Z2 l- }8 W. z7 Y隨著時代進步,越來越多user program產生,user mode的program目前雖然已經不會因為隨意的存取記憶體,造成OS掛點,可是還是有可能去改到別人的記憶體,因為每個程式共同擁有並使用同一個記憶體和所謂的記憶體空間。, O& ?$ o. t$ V- E4 W+ t" s* D% j2 [
3 u8 A% e& J3 _3 h7 U+ z( F
例如:程式A放在0~128 KBytes,程式B放在512~768KBytes,程式A寫錯位置到B程式的地方,變成程式B毀損,B程式就掛掉了。2 X9 E5 }9 b6 G- D  ^* V

7 P% x5 z( p* X& ?5 C) F" R上述的記憶體使用情況,不僅給programmer帶來困擾,而且變成記憶體必須被事先決定好誰只能用哪邊?只能使用多大?這樣不但得事先規劃,對於記憶體的使用也不是很高,因此MMU的硬體便被提出來。5 _: e, b( V, Q$ z4 I, ]: ~& d

4 O7 g$ v$ F9 u- V* c- ?1 z3 l  U8 u簡單來看,MMU記錄著某個虛擬位置所對應到的實體記憶體的位置。4 ]+ z* P# I. r1 q
& X! A1 s& K4 \/ M3 X% O1 s) Q
作業系統利用這個特性,為每一個user program先做了一個假的記憶體,每個程式都以為他有很大很大的記憶體空間,其實當程式呼叫malloc的時候,才會去設置MMU將這個user program的假記憶體空間和真實記憶體做個連結。這邊很難解釋清楚,其實每個程式都有一個假的記憶體空間的紀錄表格,當OS做context switch到某個program的時候,MMU也會跟著切到這個table上,以便用到正確的紀錄表格。
8 L/ O% a" Z2 Y& o6 P$ Q- ^' p2 I! n1 a4 n
例如:
% _( l8 k" b$ Q* B* u& A7 Q/ Y, T" F3 ~& g/ e1 r
程式A的表格記錄了他配置0~4K,而這4K對應到真實記憶體的128K~132K的區段。- Y5 o: S( l# k/ c
程式B的表格記錄了他配置0~4K,而這4K對應到真實記憶體的132K~136K的區段。/ h. J6 @$ _+ P3 r- }# O4 t+ [% t& T
1 X" _& {, p& B# U
雖然兩個程式自己都以為他是用到0~4K,可是其實真實記憶體所配到的位置不同,作業系統在切換的時候,會同步將虛擬記憶體的紀錄表格做切換,以便使用到正確的對應表。以上是一種例子,各種OS可能採取的設計方式不同,但是概念大多是一樣的,我們可以看得出來,對每個程式來說,它可以有擁有許多假的連續記憶體空間,對程式撰寫,還有記憶體使用率來說,很有效果。) U3 |+ u9 m3 s8 E% r; p5 Q

. V  W. i3 o) q# s到此,CPU多了MMU,現在大多包含MPU的功能。# m* i( @( O4 ]0 e2 V: g3 t) r

, R/ Q! q% v( x7 Hmuti-mode CPU + MMU + arbiter bus + memory + DMA9 G+ x3 J+ N1 ^3 F

; x3 V9 [7 R1 V因此OS在kernel mode的時候,如果MMU是打開的,這時候還是使用virtual address。) n! B: [- ~* V1 x+ r' r! T2 q( o+ J

5 T$ b* v. O7 \; |0 E. @5 E要讓mmu正常工作,必須要設定,要讓他知道你對位址的規劃是如何。0 e4 d/ P6 G; x. P6 I$ I# {7 \. [

, |6 i# F* f0 Z$ R; p例如:RAM被硬體人員安排到0xFF00 0000的位址,可是你希望RAM被當成從0x0開始,你就可以設定MMU將 0xFF00 0000 對應到 0x0,這樣一來你讀取0x0就會自動轉到0xFF00 0000那邊去。
9 H( \7 l" Z& O$ f% \% \" @2 p0 h: Q% E' V- U# }+ c3 u
0x0000 0000 --< mapping >-- 0xFF00 0000/ N+ P4 Q+ F7 J

% K0 B6 J( i& |8 u$ T6 ~: w* y: E作業系統一開始就會初始化這些位址轉換對應的資訊,把它放在所謂的page table裡面,然後把table位址交給MMU,MMU就會依照table的資訊工作。
$ C* `1 K0 l7 \8 w4 d# z
+ S9 M. f' I+ ~: v假如你今天有兩張table,兩張table設定不一樣,MMU只要在這兩張table之間切換,那記憶體對應的方式也會跟著換。! f* T) m6 Y4 l: P, n8 O% p
7 G! W6 K4 Q" ?. C/ J
這是一個很重要的想法。假如,我每一個process都有自己的 page table,切換process的時候,table也跟著切換,這樣我可以控制每一個process去存取記憶體的方式。假如我是讓所有的process 都共用一個 table,這樣這個table的設定值,就會影響到所有的process。+ ^) H" M4 o. Q5 P! f. o& S9 e
& A% D: N* j. u- l% F3 o/ v5 q
共用一個table表示每個process用同一個位址去讀寫,透過MMU轉換到的位址是相同的,會讀寫到同一塊。不共用的話,表示processA和processB即使拿同一個位址0x8000 0000去讀寫,可能最後對應到的位址是不同的。" S( ?, e$ B2 |8 y' J: U, c

" ], U; P: H+ V. O& ?6 v" I+ z1 c1 a但是這樣的差別就是有什麼好處??2 ~! F# x# v7 j; N$ L
1 f1 X6 m9 i# |* b' E
因為感覺上複雜化了整個系統,本來我可以很直覺的拿processA傳給我的位址,去讀取它為我準備的資料,現在我可能會因為我使用的 table 不同,就不能在其他process直接使用。感覺很麻煩,要是大家都在同一個 table 工作,不是很簡單嗎?位址空間都是一樣的。
2 j$ T5 ^" W; h" E& ]- D8 c2 ^" r' F5 u6 l. u" m( X9 f4 R
why?!  V7 @- ?$ Q+ X8 k' I
8 H+ t% f2 i" |$ E9 p7 m
字數又超過啦~   
3#
 樓主| 發表於 2008-7-31 13:46:10 | 只看該作者
一、; ^% R( _4 a; K4 g) _
如果大家都在同一個page table上0 N, k4 c/ u# n0 e0 }" Q
因為彼此用的記憶體應對方式是一樣的
% x( @% m% e+ h  u所以processA要了某個區段 0x0~0x100. ?4 S2 ^2 |  m5 Y$ n
這樣processB就不能使用! @+ e2 {6 f7 V
很可能跑了一段時間之後整個系統的memory fragment就會變多9 x, @! @3 M1 m( u: k
對記憶體使用率來講不好
% _! i# d5 C( L- m很可能要一次找到大塊的不好找
8 ]/ _0 Z6 R3 Z. K# S- C, A雖然virtual address有4G但是process分一分4 r0 _4 I3 {8 k
還是可能不太夠% H6 H3 P4 J! b$ a+ Y
* V, r  h. E8 B! g3 Y/ A
二、  h" t* L: \1 p8 |0 i
processB可以看到processA的address space1 B; B+ I4 v) R6 u9 E, S; W
表示我可以拿到相對應的資源- L( w( C4 p# x, L+ T6 I
這樣惡意程式很容易就得到一些記憶體上的個人資料( a- L, D1 O  o) [8 c# Y
* j) R( m' S/ p( O3 H
有些地方的說明不太容易,太簡略容易造成誤解,贅述又怕不容易. e" y& n5 g! V5 Y
理解。沒表達清楚的地方歡迎提出來討論。

評分

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

查看全部評分

4#
發表於 2008-7-31 20:44:39 | 只看該作者
希望大大以後多多發表文章.. u  A5 Q! r% B' @& d6 C; k3 x3 _
透過大大生動的描述.很多複雜的概念就淺顯易懂了.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-12-29 04:43 PM , Processed in 0.162009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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