Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

從system bus來看系統

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-7-31 13:36:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有些基礎不夠深厚  遣詞用句也不是很精確" }! l: |8 O9 x* U- Z
以下試圖以自己的體認和觀點  以簡單的辭彙6 E: O% Q' c+ p) ]+ W
去解釋一些process與系統演進的方式5 `5 r! N' L8 y: M
如果有誤或是清楚的地方  歡迎大家討論0 n; G/ Z: h% C2 H$ T& q# N6 R
% G/ B- H/ U* l2 R9 `/ P. @! w
[本文開始]0 u8 |6 F! o" L
在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候
! V9 a# ]  m3 l常常會被一下子多出來的專有名詞搞混
6 @6 ~, h5 d( K3 b" J2 u0 k+ Y; _; G像是DMA, memory, cache, mmu, virtual address, physical address 等等  L2 l+ U- r5 |
尤其大家一開始接觸電腦都是已經發展很久的x86系統
3 b' l; M2 }9 j6 Q$ |即使有單晶片系統的實驗課程% G' I3 R1 u$ l9 p) P! c) f
也很難將單晶片的經驗
- R" Q/ r9 v5 c- Q& X; b運用到x86或是已經較為複雜的CPU系統上
& ?1 T7 R/ u) v. _0 ^! R+ x$ p
. k9 D$ B; ?2 y" P% v因為CPU上頭又開始加入了越來越複雜的作業系統, j1 e+ J5 e6 s+ N# q) F
像是作業系統常提到的kernel mode, user mode
* W: g% r, }* I  q) Z; a1 g常常跟上述的專有名詞physical address or virtural address交互使用
3 Y$ u* Y3 `9 g; y+ L' }例如刻板印象的『作業系統處於kernel mode時,使用physical address』
0 v7 F1 n  y4 M7 `0 Q$ [2 V' E; k經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
. Q  h1 T% d) S, E- \
; f: O- m6 J( P1 f那應該怎麼簡單來看待一個系統?) A- ?) Y1 K1 e/ ^
; \9 j% L5 u7 v- x
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』  e3 v. C7 q4 C" v( h% a
他是用來處理各種『資料』
3 c5 z. W9 D7 Y) B6 r! j
+ _7 _& N! \6 M1 h2 Q& @5 m) I那麼這些資料又放在哪邊?他是如何去存取這些資料?
0 v7 G! o0 G/ W& g! W, e" B  k
2 l" w' @; a! d" w通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory: x: U2 b6 b" a; e7 E: X- n+ p

6 J% b5 n: b. S  R7 ~* ?到目前為止,我們得到一個簡單的系統 CPU + bus + memory
% x% E8 i/ I0 C3 S' Z2 a: Z
. Y' I& P6 ^* }9 X3 v4 M$ }接著,我們用兩個角度去看這個簡單系統的發展
9 n# ^9 Q3 n' a1. 硬體加速7 \  R1 u, V6 z5 F; S
2. 作業系統# p7 J/ `9 w  c# H
' \& E" S0 G  D( r7 P: B1 g
我們先從硬體加速的觀點來看這個系統如何改進:* h1 W1 y& x7 `. |/ O: \, R

, c2 D, F* K- x) h6 l首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
3 P7 i4 z* ~8 g; {$ X放在某個地方,然後請你設計好的加速硬體去處理這些資料4 d6 f  q& g5 {; A7 x! b
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
# h: f$ `: I. Z8 ~這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。  y# Z0 _, U* W! X' c" E. J. q- F

) ~# m( K: V8 j1 |CPU + arbiter bus + memory + DMA% [8 }6 T: d0 i7 w4 N2 n

& V7 Q, ^! C/ ?' |! k' ^! G接著我們從作業系統的角度來看:9 q6 m* W! i7 t- e/ L5 T

7 z8 n& ^7 Q/ t# I8 R8 _: R  N一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。
6 D% W+ k$ N. R" c4 V# A( g1 X, d9 X& g1 z8 S8 @0 m
例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。1 w; k4 ]3 z! D

+ C6 E# t- F. f# Z2 X: Q到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。
3 ~. n7 _, z( i$ P2 s! D" P; z
  }6 d. @7 w4 @. d9 O* ^所以我們的系統變成了
& b. ]6 s; l& b. _! ~# e0 ?; e
" @( h0 l, W5 ?+ I9 O6 A7 Amulti-mode CPU + MPU + arbiter bus + memory + DMA
" w+ |- o" w- n! M
+ A) p8 G& S0 z1 C, q6 u% E因為字數限制,部分貼到回文當中  =)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2008-7-31 13:43:33 | 只看該作者
接著我們看virtual address和physical address的誕生,這邊相當抽象,需要一些想像。/ H5 Q+ E# f0 d6 H' i' n1 B  L

: E( G. j) r1 J9 E* I3 ?# A隨著時代進步,越來越多user program產生,user mode的program目前雖然已經不會因為隨意的存取記憶體,造成OS掛點,可是還是有可能去改到別人的記憶體,因為每個程式共同擁有並使用同一個記憶體和所謂的記憶體空間。" o7 N: X) e' X& E7 J

. d& O. z1 W# X1 L9 t& e0 I, V- o例如:程式A放在0~128 KBytes,程式B放在512~768KBytes,程式A寫錯位置到B程式的地方,變成程式B毀損,B程式就掛掉了。
% P: i* r$ P6 i$ n% o: z. {% n1 G, @
上述的記憶體使用情況,不僅給programmer帶來困擾,而且變成記憶體必須被事先決定好誰只能用哪邊?只能使用多大?這樣不但得事先規劃,對於記憶體的使用也不是很高,因此MMU的硬體便被提出來。, z# U0 B9 V; c9 v8 v! D9 s
( s3 h1 a5 `+ J; ?0 B; m
簡單來看,MMU記錄著某個虛擬位置所對應到的實體記憶體的位置。
+ d$ F8 X! t( }# j# \* G7 J
6 P6 Y: o( H+ S. e0 J4 N- W: ]作業系統利用這個特性,為每一個user program先做了一個假的記憶體,每個程式都以為他有很大很大的記憶體空間,其實當程式呼叫malloc的時候,才會去設置MMU將這個user program的假記憶體空間和真實記憶體做個連結。這邊很難解釋清楚,其實每個程式都有一個假的記憶體空間的紀錄表格,當OS做context switch到某個program的時候,MMU也會跟著切到這個table上,以便用到正確的紀錄表格。
2 t! S9 |8 ~4 P7 ?; X2 C9 N. S5 D) r5 _8 R  ?* S
例如:3 r: b- q% {( a- p+ T7 g

9 `  B- h( l- L6 @程式A的表格記錄了他配置0~4K,而這4K對應到真實記憶體的128K~132K的區段。% I% n6 A8 b9 z9 u1 t" ?
程式B的表格記錄了他配置0~4K,而這4K對應到真實記憶體的132K~136K的區段。
; x& _& |- o$ y1 T# v8 |3 g3 c* y+ r! U9 N# x; f0 m
雖然兩個程式自己都以為他是用到0~4K,可是其實真實記憶體所配到的位置不同,作業系統在切換的時候,會同步將虛擬記憶體的紀錄表格做切換,以便使用到正確的對應表。以上是一種例子,各種OS可能採取的設計方式不同,但是概念大多是一樣的,我們可以看得出來,對每個程式來說,它可以有擁有許多假的連續記憶體空間,對程式撰寫,還有記憶體使用率來說,很有效果。( b! {" l- z, ~/ z  o/ ^- V0 x. S
- r3 s& p$ z- G% M# q. V) h1 @
到此,CPU多了MMU,現在大多包含MPU的功能。. d# R' o9 A2 w6 ]& |+ B& _( V  C
7 ?# f  P1 L/ |4 I
muti-mode CPU + MMU + arbiter bus + memory + DMA3 H0 a$ R! |& q/ {- n, i2 C

1 I. j0 Q8 Y. \" C1 S1 S因此OS在kernel mode的時候,如果MMU是打開的,這時候還是使用virtual address。
" \& Q* b" G! d, b. Z8 m
# `5 w( Y+ k  }3 P2 B要讓mmu正常工作,必須要設定,要讓他知道你對位址的規劃是如何。) |; R) [, P( d# T

0 }9 x' i- X. W% M) M例如:RAM被硬體人員安排到0xFF00 0000的位址,可是你希望RAM被當成從0x0開始,你就可以設定MMU將 0xFF00 0000 對應到 0x0,這樣一來你讀取0x0就會自動轉到0xFF00 0000那邊去。
5 S7 l9 I' Z/ Z) [- \) H1 y+ w  U( X7 _1 O! I
0x0000 0000 --< mapping >-- 0xFF00 0000
2 X, h# H& ~: c, ?& z# \" s
$ G( W; R# @( R+ h# [+ j9 O0 C作業系統一開始就會初始化這些位址轉換對應的資訊,把它放在所謂的page table裡面,然後把table位址交給MMU,MMU就會依照table的資訊工作。( d' b3 @, l9 A

. K- c2 W2 i' X: _+ \% H% L假如你今天有兩張table,兩張table設定不一樣,MMU只要在這兩張table之間切換,那記憶體對應的方式也會跟著換。1 E  Q( B- ?& e( |! {. m

  t0 A2 ^+ @! J: ]: V2 S7 m) L7 Y這是一個很重要的想法。假如,我每一個process都有自己的 page table,切換process的時候,table也跟著切換,這樣我可以控制每一個process去存取記憶體的方式。假如我是讓所有的process 都共用一個 table,這樣這個table的設定值,就會影響到所有的process。
. ^  l8 E) ?) a% ~2 A- t6 R- q
. d3 J( `6 c+ s% G2 ^8 K* Y3 [6 j共用一個table表示每個process用同一個位址去讀寫,透過MMU轉換到的位址是相同的,會讀寫到同一塊。不共用的話,表示processA和processB即使拿同一個位址0x8000 0000去讀寫,可能最後對應到的位址是不同的。+ r/ L$ I  n3 V$ |5 V# i

. H1 u! M6 u! u7 ^* y) }2 I% B但是這樣的差別就是有什麼好處??
) f: {% E" X$ x3 S% b) b% C! A1 Z+ D- g0 y
因為感覺上複雜化了整個系統,本來我可以很直覺的拿processA傳給我的位址,去讀取它為我準備的資料,現在我可能會因為我使用的 table 不同,就不能在其他process直接使用。感覺很麻煩,要是大家都在同一個 table 工作,不是很簡單嗎?位址空間都是一樣的。
- u8 m) T( T' o& p/ A
9 k6 n" B8 _4 Z, ?3 T' o7 dwhy?!0 V( F! j8 B7 ^3 g4 o; A
3 U% m! O% \  |$ v. P+ ^
字數又超過啦~   
3#
 樓主| 發表於 2008-7-31 13:46:10 | 只看該作者
一、
6 S$ ]2 m% R! H3 I8 [! `4 b) w  K如果大家都在同一個page table上
9 N9 V  k& g, L9 h& ^, n, }因為彼此用的記憶體應對方式是一樣的
: l0 \3 u+ U1 ~! ?, F' D0 v- R所以processA要了某個區段 0x0~0x100( w5 e  L+ ?( x& J7 G) V
這樣processB就不能使用% ~) U( [2 J9 G3 l, P4 l8 t
很可能跑了一段時間之後整個系統的memory fragment就會變多
0 h+ I$ P& Q: H! P: W$ c對記憶體使用率來講不好
# H( t+ B& B) K很可能要一次找到大塊的不好找
  r" D( {4 w% P& v雖然virtual address有4G但是process分一分5 U+ ^- W7 z% c& r" ]" X3 `( Z
還是可能不太夠
/ d$ E8 A. v2 e" N9 {
( ]; p' l: t2 K  R5 T- Q( R2 v二、
. ?$ A9 o0 F! t& g2 S+ o7 ?5 sprocessB可以看到processA的address space( v- W3 ?( @, a) M
表示我可以拿到相對應的資源& R. ^5 p& ~! V, o9 R0 e& j
這樣惡意程式很容易就得到一些記憶體上的個人資料# ?( _* u8 y4 w/ e5 s$ ~
& S3 X  \& G7 F
有些地方的說明不太容易,太簡略容易造成誤解,贅述又怕不容易/ T1 Q3 i5 w- c. N1 Q1 y( p
理解。沒表達清楚的地方歡迎提出來討論。

評分

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

查看全部評分

4#
發表於 2008-7-31 20:44:39 | 只看該作者
希望大大以後多多發表文章.
" g" h) F5 v! y  I透過大大生動的描述.很多複雜的概念就淺顯易懂了.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-16 08:04 AM , Processed in 0.157009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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