Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

從system bus來看系統

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-7-31 13:36:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有些基礎不夠深厚  遣詞用句也不是很精確$ ~$ U2 Z. f  C3 ]- F
以下試圖以自己的體認和觀點  以簡單的辭彙# i. X: |7 g& i
去解釋一些process與系統演進的方式
" J6 `! S, o4 Y4 ?9 v/ t) }如果有誤或是清楚的地方  歡迎大家討論
% m+ k5 l5 Y4 X3 ]: J7 A
) Z) Z/ s8 n+ J0 c* C[本文開始]
2 Z0 ]! W) j7 C$ u& [5 P在學校學computer architecture或者做一些簡單的單晶片介面卡實驗課程的時候- B8 s" Y1 a6 u( P% J1 ^& D! T
常常會被一下子多出來的專有名詞搞混
0 r/ E- Z0 g/ {$ Y. d1 i像是DMA, memory, cache, mmu, virtual address, physical address 等等9 B) G! W. N# f5 S  a
尤其大家一開始接觸電腦都是已經發展很久的x86系統
: {. R( ~& ^0 b- ~即使有單晶片系統的實驗課程
3 T4 R, c  @+ g' ]( w4 c  \* v& J也很難將單晶片的經驗2 P, o5 q4 |) Q+ ~9 l! J3 ]0 f
運用到x86或是已經較為複雜的CPU系統上
. A, D; e) Q5 w8 u" W" d8 A
  x3 @' G% x4 d! [$ f. V/ w; e9 R因為CPU上頭又開始加入了越來越複雜的作業系統
$ t" P  q+ H* ?: G* {* M像是作業系統常提到的kernel mode, user mode' C5 F* M( g( L
常常跟上述的專有名詞physical address or virtural address交互使用- K* b9 {" W3 P1 `8 E/ p* z
例如刻板印象的『作業系統處於kernel mode時,使用physical address』& R/ w! ~. l- x- o
經常讓一剛要學習撰寫driver或是OS的軟體人員產生非常多的疑問
" e6 G5 {6 N/ E, v7 g6 @( l) P3 m3 e+ z5 p; U4 k3 Q
那應該怎麼簡單來看待一個系統?- v* L+ S* x$ z- r( g
9 \. H( {( F4 ^0 A
首先,我們回歸到CPU這個字的字義上,我們稱呼它為『處理器』
5 n+ _! V3 K7 s' S( @3 F他是用來處理各種『資料』
7 _( J1 ]* d  c  P: m" M' f; D) x! ?( G( z1 I% ]8 L
那麼這些資料又放在哪邊?他是如何去存取這些資料?+ @. j' e+ b" O% V4 V- n! [

6 k8 E2 _# X1 e5 P7 _通常可以被處理的資料都在memory當中,CPU透過所謂的 bus 去存取memory; J  e0 H/ ]  `0 W. I9 ]2 l. }" I

8 @& X7 O- r( \$ G  G, b到目前為止,我們得到一個簡單的系統 CPU + bus + memory
( h) O4 n. r1 s. A3 ^5 W3 }; ]- k. P
接著,我們用兩個角度去看這個簡單系統的發展
4 b( w3 t5 k& H. X; e1. 硬體加速& E- H; P9 `( Z9 U  ?1 `7 K
2. 作業系統
& U* `- l% m3 A4 Q3 C: ?* ^2 d+ G7 C: Z" F/ W" z
我們先從硬體加速的觀點來看這個系統如何改進:* x9 a! G5 u7 X/ X; z/ S: L+ i$ K

0 q5 _8 y6 h6 M2 L) ^. L4 J首先,硬體加速通常就是把某種特殊格式的資料準備好 (例如電影)
3 Y+ C, S  D7 _3 L" ?* N, R放在某個地方,然後請你設計好的加速硬體去處理這些資料6 p' N( [9 q( k" @4 H
可以看得出來,這些資料勢必會被放在某塊地方,讓硬體可以直接讀取。
! T6 J) z" e9 a/ C' w2 ^4 x這個想法造就了 DMA ,也讓系統也開始複雜化,因為這樣一來,同時之間會有兩個東西去存取記憶體。所以bus的設計上變得複雜,必須處理DMA和CPU同時發出request 的狀況,這邊bus變成需要多了arbiter的功能,以便決定目前誰是master可以存取memory。從另外一個角度來說,她們會互搶資料,也就是你加入越多DMA,CPU那邊的效率有可能更差,因為他要不到資料,必須等待,但另一方面他多出了一些時間可以處理其他資料,而將一些固定特殊的工作交給加速硬體去完成。' Q3 Y- o. S: Q. j. ?" W

$ ]. q; P4 ]8 T1 A; T1 B' W) L, BCPU + arbiter bus + memory + DMA) w. A, o; O) W

8 ?! M: `! X% L4 p, T9 T接著我們從作業系統的角度來看:
' `( A, Z8 S( W0 y! k, x- ?0 u8 _. R
一開始的作業系統沒有分kernel mode和user mode,也沒有出現virtual address,只有一種模式和一種定址方式。可是這樣會因為程式撰寫錯誤,直接改寫到OS所處記憶體位置,變成整個系統都不能工作。9 a( S3 ?. o6 L$ i

- u6 V: K0 m, n  H9 z% X' |例如: OS被載入到 memory 0 的開頭位置,某個程式寫錯資料,把資料也寫到0的位置,這樣原本的OS就被亂改到,萬一程式跑到這邊系統可能就掛掉了。面對這樣的問題,發展了user mode和 kernel mode,並藉由硬體的保護,使得user mode下不能直接存取某塊被保護的memory區塊,這個硬體就是現在的MPU。
2 ~( x, p2 }5 z* a/ z+ w# H7 M/ }- f! F
到目前為止我們可以看出來整個系統更加複雜了,CPU必須多一些模式,以便支持作業系統的kernel mode和user mode,kernel mode可以去改寫MPU設定要保護的memory區段,等到設定好了,切換成user mode,這樣 user program 就可以安心的使用記憶體,也不擔心惡意程式去搞壞OS。2 K6 Z1 b% E/ u# ^

, m9 P4 G* G7 o+ y+ v8 H4 `8 ]5 s所以我們的系統變成了
2 T; a4 N/ E; {: c8 s4 A
: D9 w5 W( o8 s- x: a- K$ gmulti-mode CPU + MPU + arbiter bus + memory + DMA( I/ X9 _- v: D

. n1 }( _* q/ V: P' j. s5 @0 ]2 s因為字數限制,部分貼到回文當中  =)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2008-7-31 13:43:33 | 只看該作者
接著我們看virtual address和physical address的誕生,這邊相當抽象,需要一些想像。+ M  Z6 R4 S9 {' Y) p

9 y, \* r. K5 K6 H7 T: w. |; X隨著時代進步,越來越多user program產生,user mode的program目前雖然已經不會因為隨意的存取記憶體,造成OS掛點,可是還是有可能去改到別人的記憶體,因為每個程式共同擁有並使用同一個記憶體和所謂的記憶體空間。
2 ^6 _# j- N; y$ q* ^; T" O% c; ]
例如:程式A放在0~128 KBytes,程式B放在512~768KBytes,程式A寫錯位置到B程式的地方,變成程式B毀損,B程式就掛掉了。
) P6 u8 Z4 [0 c) S9 F: h8 ]* f: \* a7 G! Q* H' {$ _1 n
上述的記憶體使用情況,不僅給programmer帶來困擾,而且變成記憶體必須被事先決定好誰只能用哪邊?只能使用多大?這樣不但得事先規劃,對於記憶體的使用也不是很高,因此MMU的硬體便被提出來。- l. F$ P5 k; W( [3 A& z' v& Z

! X$ y  J  [4 }7 [簡單來看,MMU記錄著某個虛擬位置所對應到的實體記憶體的位置。2 g5 E  `5 s- \* h
+ b! E0 k& ?, ?5 ~+ b+ w2 g
作業系統利用這個特性,為每一個user program先做了一個假的記憶體,每個程式都以為他有很大很大的記憶體空間,其實當程式呼叫malloc的時候,才會去設置MMU將這個user program的假記憶體空間和真實記憶體做個連結。這邊很難解釋清楚,其實每個程式都有一個假的記憶體空間的紀錄表格,當OS做context switch到某個program的時候,MMU也會跟著切到這個table上,以便用到正確的紀錄表格。& {/ ?6 Q) U+ A, [$ c6 y+ H

' Q% q8 A4 O5 D( h+ Y7 ~7 c例如:" E' H7 N. A7 t: ]8 i# [- N
9 r4 y+ D1 p" {! E- }+ l
程式A的表格記錄了他配置0~4K,而這4K對應到真實記憶體的128K~132K的區段。
& N( D& b2 J) u程式B的表格記錄了他配置0~4K,而這4K對應到真實記憶體的132K~136K的區段。
( u( V3 z1 V+ y; ~# w! W9 V
7 \3 l& ?; U& h% L# K+ P雖然兩個程式自己都以為他是用到0~4K,可是其實真實記憶體所配到的位置不同,作業系統在切換的時候,會同步將虛擬記憶體的紀錄表格做切換,以便使用到正確的對應表。以上是一種例子,各種OS可能採取的設計方式不同,但是概念大多是一樣的,我們可以看得出來,對每個程式來說,它可以有擁有許多假的連續記憶體空間,對程式撰寫,還有記憶體使用率來說,很有效果。0 ?+ l8 g" R& ~8 Z8 |4 M4 g. B& C

( E$ |2 |2 R$ [, O8 Q到此,CPU多了MMU,現在大多包含MPU的功能。" C9 Y3 u* J! [  |# i

. {; \- C, L. b# `% f9 N8 U  smuti-mode CPU + MMU + arbiter bus + memory + DMA0 t* }- l6 `+ I6 x- P5 _
; a2 A9 e, W) [' a9 n
因此OS在kernel mode的時候,如果MMU是打開的,這時候還是使用virtual address。8 h0 {- i: d) _7 G) u6 N

$ U5 G# Q" c* x1 @要讓mmu正常工作,必須要設定,要讓他知道你對位址的規劃是如何。+ D6 ?, ?* V, r# o& u" Q

: h0 u$ Y6 a5 B* M例如:RAM被硬體人員安排到0xFF00 0000的位址,可是你希望RAM被當成從0x0開始,你就可以設定MMU將 0xFF00 0000 對應到 0x0,這樣一來你讀取0x0就會自動轉到0xFF00 0000那邊去。
' I0 q8 |. |* ^& L, D: J6 D: \- }* `9 G% G. x" B# k
0x0000 0000 --< mapping >-- 0xFF00 00002 t- \% A& U1 a, Y

3 l! o( |% x- T作業系統一開始就會初始化這些位址轉換對應的資訊,把它放在所謂的page table裡面,然後把table位址交給MMU,MMU就會依照table的資訊工作。5 a; s2 k; e4 M% ?# m# K
/ Q! k: E) x5 y
假如你今天有兩張table,兩張table設定不一樣,MMU只要在這兩張table之間切換,那記憶體對應的方式也會跟著換。
" _2 X0 s. y; B% e2 e# `/ N
% a7 ^6 ~( e& Y& _2 }這是一個很重要的想法。假如,我每一個process都有自己的 page table,切換process的時候,table也跟著切換,這樣我可以控制每一個process去存取記憶體的方式。假如我是讓所有的process 都共用一個 table,這樣這個table的設定值,就會影響到所有的process。
$ _: A! L6 c9 m: ]  [" v3 T; ]; w* @9 H$ @2 I' U
共用一個table表示每個process用同一個位址去讀寫,透過MMU轉換到的位址是相同的,會讀寫到同一塊。不共用的話,表示processA和processB即使拿同一個位址0x8000 0000去讀寫,可能最後對應到的位址是不同的。
5 r/ P4 u: m, R- F1 ~7 e$ @) U
2 |5 b& T& V5 |% Q% h" u& b但是這樣的差別就是有什麼好處??
# Z- [" _# b* h4 v# S8 b1 A8 G9 Q& Z
因為感覺上複雜化了整個系統,本來我可以很直覺的拿processA傳給我的位址,去讀取它為我準備的資料,現在我可能會因為我使用的 table 不同,就不能在其他process直接使用。感覺很麻煩,要是大家都在同一個 table 工作,不是很簡單嗎?位址空間都是一樣的。
9 `0 T; I/ m; V: Z4 G6 {* k: S. m5 \$ r# |* t" R7 z8 ~: M
why?!
3 z# ~, R' p& Q0 _0 }' e5 ^0 u) t2 X: ^: t! F7 r% i9 \
字數又超過啦~   
3#
 樓主| 發表於 2008-7-31 13:46:10 | 只看該作者
一、; C: o2 T1 R, a9 F% N" _
如果大家都在同一個page table上
& T; w! O0 ^$ b$ ~. A! p' A, y因為彼此用的記憶體應對方式是一樣的( h/ a) f3 O4 Q! d
所以processA要了某個區段 0x0~0x1006 S, g- U( Y1 ?5 M( ?  I* B
這樣processB就不能使用4 o! ]& L# W  q8 T" B& F) x$ E
很可能跑了一段時間之後整個系統的memory fragment就會變多0 @/ M/ H* m( N1 i; q
對記憶體使用率來講不好2 c$ h. i3 ]8 {) K) w, c
很可能要一次找到大塊的不好找  t* H5 M6 z+ a9 ]) n
雖然virtual address有4G但是process分一分' ~# F/ m: d, q4 V0 \& ]: a
還是可能不太夠
0 x* i: Y% C) w' j. I
5 I3 Y5 X6 |) [0 s$ Q二、
* e* ?. v5 {8 D- J7 \) {3 RprocessB可以看到processA的address space1 f! E9 W; C7 C* ?* x/ p4 Z2 T
表示我可以拿到相對應的資源
, C) @6 S* _7 w3 f% k這樣惡意程式很容易就得到一些記憶體上的個人資料+ r- W% |9 k. C: }8 D& R) J
# Y" d5 @/ S+ N$ ]) Q' Y: Q
有些地方的說明不太容易,太簡略容易造成誤解,贅述又怕不容易
; J! Y" t3 `+ {: H: P理解。沒表達清楚的地方歡迎提出來討論。

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-12-29 02:10 AM , Processed in 0.166009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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