|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
昨晚和舍友星光夜谈到12点多,今天一大早就要睡觉。你要问谈的什么这么来劲,我只能说既不是美女也不是电影,而是Linux下面的虚存管理机制!我们是不是很用功,哈哈哈。今天抽时间来对unix下面的虚存机制总结一下,就当温故而知新吧!
# M6 [5 U# L4 i- M5 X. S/ |; H. H* D0 X6 B" T
大家可能经常听说什么段页式内存管理,虚拟内存,虚地址等,然后没学过操作系统的朋友听着一片晕乎!今天我们就来深扒一下unix系统下的内存管理机制。
/ _. @' B$ u5 H2 r* m: W4 y, C& r% l9 [, X9 r
首先很多朋友会问,为什么要有虚拟存储器呢?比如我单片机写程序的时候就直接用物理内存地址啊,没见得什么不妥的。确实,对应某个单一程序而言,在保证内存空间大小满足的情况下,确实不需要什么虚拟内存机制,直接用就OK了。但是对于一个多进程运行的系统而言,虚拟内存机制实在是必不可少的。我们知道一个系统的进程是与其他进程共享CPU和内存资源的,但是共享内存会形成一些问题。如果没有虚存机制,我们来看一下下面两种情况:4 S7 F8 d1 n( v' B& @& y% Y
8 V* K$ U& \" A- Y1.当多个进程需要的空间大于内存容量,那么它们当中必然会有某些进程无法运行,超过空间的进程就会崩溃了。
$ t$ @9 [4 A) B! P w9 B7 H( p9 ?; I! a% ]5 ]3 w: H: Y' p8 i0 O
2.当A进程不小心写了B进程使用的地址空间时,那么B进程在执行时行为会无法预测,太危险了。
* j! L' Q4 D# R I1 j4 c1 ?+ r, R: E$ }
一直这样做也会使得物理存储器特别容易损坏。
. ^- B. o! E9 ]6 z7 H8 x
2 N8 J* k `: \* \ 为了更好地有效管理存储器并且不出错,现在的主流系统(unix/windows)都提供了虚拟内存管理机制,将逻辑存储地址与实际物理地址区分开来。并且虚存为每个进程都提供一个独立的,同等大小的私有地址空间。
7 i; ~% G% k. H+ a
' o. R; l, q% X- b& K% F" c: p一. 虚拟寻址
. c4 J" R, O1 l2 }% }# v' \2 V4 j0 X1 M, a
- ?/ o1 ~ Q/ W$ O
, ]' p) \ x% \" I- i( G- o图中的MMU是CPU芯片中用于将虚拟地址转换成物理地址的地址翻译器。8 S. i6 V8 u( a# L5 }2 l
. g& _3 o% {- \ r" T首先忽略高级缓存L1,我们只看处理器,MMU,还有物理存储器。
; l! J/ V; B( L( k' c( ~
9 V# u* t* |+ v6 H处理器只管寻址虚拟地址,交给MMU,MMU翻译成物理地址,到物理存储器中取指令或数据。
t( i( S0 U0 y0 j0 V# B
7 `( j$ [: \3 A9 M! L3 v( \早期的PC和现在的数字信号处理器比如DSP,单片机等用的还是直接物理寻址,没有虚存机制。不过目前的计算机系统大都提供虚存机制。2 b$ K4 h O$ [
& B' n( R) ~5 S+ c1 O$ X( r: R/ G8 k
二. 地址空间" e1 l' ^6 B: f) @2 _/ `
. E- G% F& V5 ^. a. W# |如果是虚存寻址,那么虚存空间可以完全和物理存储在逻辑上独立开来,容量也可以不受实际物理存储器的大小限制。那么实际虚存容量究竟有多大呢?以前在本科上课的时候听老师说过是4G,当时就郁闷过,如果一个进程所需空间大于4G怎么办,而且4G也不大啊。。。然后发现老师说的并不准确,确实虚存的大小要CPU地址总线长度有关系,如果是32位的CPU,那么2的32次方是4G。如果是64位的CPU(目前PC基本都是64位的,32位绝种了),那么2的64次方是4G*4G(太大了,天文数字)。。。因为太大了,远远超过目前实际所需,所以CPU生产厂商限制了地址位长。/ H# @" c8 W( j! I
+ ?% k+ |: m! b- {7 T$ b( p9 T" ?' ~
三.虚拟存储器结构/ ]0 r3 S |! L# L" d
5 u) ^$ C4 F# G1 N; U% i概念上讲,虚拟存储器(VM)被组织为一个由存放在磁盘(注意是磁盘!!!)上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址是作为到数组的索引。
! C- p' B$ M0 Z3 l3 N5 N
T; _4 @0 H% y. T虚拟存储器以虚拟页为单位,每个页有P个字节。
) ?4 w& W& i$ z$ z9 G4 H/ o6 Q3 y! h. ], v
物理内存也是以页为单位区别的,每个页也是P个字节,不过是叫物理页。
2 d& D @5 S$ j. S
9 L {/ u% g; s# j/ E* G1 |* K虚拟存储机制是用物理内存做为缓存的,下面我们来看一下:
9 @- v" N t+ o- T, L
: X3 J# o: g$ s8 c9 v% Z9 w9 t. w( D: _" |, Y
' F% K y9 L8 @- p
% ^3 F: @; n( ~9 J: {5 w
# D( J6 p7 O; m4 x5 n* ` |
|