找回密码
 注册
关于网站域名变更的通知
查看: 315|回复: 1
打印 上一主题 下一主题

详细介绍一下unix虚拟存储器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-26 14:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
       昨晚和舍友星光夜谈到12点多,今天一大早就要睡觉。你要问谈的什么这么来劲,我只能说既不是美女也不是电影,而是Linux下面的虚存管理机制!我们是不是很用功,哈哈哈。今天抽时间来对unix下面的虚存机制总结一下,就当温故而知新吧!, w' O) _5 c# M4 Y

' `* {2 ^( B& s       大家可能经常听说什么段页式内存管理,虚拟内存,虚地址等,然后没学过操作系统的朋友听着一片晕乎!今天我们就来深扒一下unix系统下的内存管理机制。
+ B" \7 }3 O3 \; J1 ~
: y3 E  _8 d9 T  y3 y  z       首先很多朋友会问,为什么要有虚拟存储器呢?比如我单片机写程序的时候就直接用物理内存地址啊,没见得什么不妥的。确实,对应某个单一程序而言,在保证内存空间大小满足的情况下,确实不需要什么虚拟内存机制,直接用就OK了。但是对于一个多进程运行的系统而言,虚拟内存机制实在是必不可少的。我们知道一个系统的进程是与其他进程共享CPU和内存资源的,但是共享内存会形成一些问题。如果没有虚存机制,我们来看一下下面两种情况:
, s+ J0 ~- O3 b7 Z4 ?, n3 n1 c+ e; j+ H7 P
1.当多个进程需要的空间大于内存容量,那么它们当中必然会有某些进程无法运行,超过空间的进程就会崩溃了。
( T* R( V5 O  _
2 I" I2 X1 f% }6 |7 X2.当A进程不小心写了B进程使用的地址空间时,那么B进程在执行时行为会无法预测,太危险了。! ~& S! q; k  u/ S! `4 w6 s

: B5 s8 X1 V: h0 g# s; u一直这样做也会使得物理存储器特别容易损坏。% ^) C4 J) a$ L6 z% `. y0 o
  r% s6 u$ }' }; c! t* i  L) h
       为了更好地有效管理存储器并且不出错,现在的主流系统(unix/windows)都提供了虚拟内存管理机制,将逻辑存储地址与实际物理地址区分开来。并且虚存为每个进程都提供一个独立的,同等大小的私有地址空间。
( n( N- F% w7 G( X' O, D6 G, k
: ~) e, s5 N8 A! }/ x! S3 R* k& B2 |一. 虚拟寻址
' c8 q' F+ w& |" h% K; }1 w3 p" _# k1 b$ y+ p! k0 ]
, q! V8 R& R( v

$ E( [8 B! p; J3 Z5 {0 @图中的MMU是CPU芯片中用于将虚拟地址转换成物理地址的地址翻译器。
. I4 I3 K1 z, l# w
' {' `2 Z/ r% s2 m1 K# B6 ~; R首先忽略高级缓存L1,我们只看处理器,MMU,还有物理存储器。
: g: t( v( `+ B1 g; f. _; E
' x% T1 ]( ]5 `  u. {5 r: L处理器只管寻址虚拟地址,交给MMU,MMU翻译成物理地址,到物理存储器中取指令或数据。$ B6 J. B) u$ g0 G+ M

) [1 C3 n( [; D& B早期的PC和现在的数字信号处理器比如DSP,单片机等用的还是直接物理寻址,没有虚存机制。不过目前的计算机系统大都提供虚存机制。
0 r9 P& r9 r; W* m  g  T- g0 o9 F6 a  E7 i# H4 t& S9 @2 {9 ~

5 T6 \! b3 k) I# Z二. 地址空间
8 Q) J8 I0 `! o8 I; d5 m. w- Q3 D* h8 v& p# z# }
如果是虚存寻址,那么虚存空间可以完全和物理存储在逻辑上独立开来,容量也可以不受实际物理存储器的大小限制。那么实际虚存容量究竟有多大呢?以前在本科上课的时候听老师说过是4G,当时就郁闷过,如果一个进程所需空间大于4G怎么办,而且4G也不大啊。。。然后发现老师说的并不准确,确实虚存的大小要CPU地址总线长度有关系,如果是32位的CPU,那么2的32次方是4G。如果是64位的CPU(目前PC基本都是64位的,32位绝种了),那么2的64次方是4G*4G(太大了,天文数字)。。。因为太大了,远远超过目前实际所需,所以CPU生产厂商限制了地址位长。; `: m$ D- e5 [6 A. `- ?

) O& z  `: a8 o6 `7 A: }4 i1 w! J% o& }, N$ S% G/ O
三.虚拟存储器结构
3 p% y) k8 ~9 c, P' D7 _" m7 b
概念上讲,虚拟存储器(VM)被组织为一个由存放在磁盘(注意是磁盘!!!)上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址是作为到数组的索引。
9 y; Y  @" n/ Q8 v% o# I: ^, |4 b6 b2 t; V
虚拟存储器以虚拟页为单位,每个页有P个字节。0 H8 {, v, j, j6 E* d1 F

* A# ~' u! ^8 y; }物理内存也是以页为单位区别的,每个页也是P个字节,不过是叫物理页。% G) m$ m! C' Z+ o

; D& }$ x9 S9 x  ?! c虚拟存储机制是用物理内存做为缓存的,下面我们来看一下:" S: p* D* B' f1 p
5 Z- q3 O; Z+ H3 A& C
游客,如果您要查看本帖隐藏内容请回复

* t: m: K; ]3 a9 a
1 c+ `0 c( [2 d, s2 P/ a/ C) ]* Z5 x; f& `

  S; T$ r. L6 F5 ~0 k

该用户从未签到

2#
发表于 2019-9-26 19:00 | 只看该作者
详细介绍一下unix虚拟存储器 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:04 , Processed in 0.187500 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表